级试题参考答案.docx
- 文档编号:3641465
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:13
- 大小:18.16KB
级试题参考答案.docx
《级试题参考答案.docx》由会员分享,可在线阅读,更多相关《级试题参考答案.docx(13页珍藏版)》请在冰豆网上搜索。
级试题参考答案
2005级信息学院《C语言程序设计》考试试题
一、判断下列语句或程序的对错。
(“╳”表示错,“√”表示对)(10分)
1floats=0,s1.1=0;(╳)
2#defineM=100(╳)
inta[M];
3char*p[]=”\”ctest\””;(╳)
4if((a=b)>0)t=a;(√)
5charstr1[20]==”china”,str2[20];(╳)
str2=str1;
6inti,*p=&i;(√)
7floata[100],*p;(√)
p=a+1;
8printf(“%d\n”,(30,50,80));(√)
9intx,y;(√)
y=20,x=y+’a’;
10int(*p)[20],a[20];(√)
p=(int(*)[20])a;
二、计算下列表达式的值(10分)
设unsignedinta=7,b=17,c=5,d=3;
floatx=2.5,y=4.7;
(1)x+a%3*(int)(x+y)%2/4(2.5)
(2)!
(a<=b)||(b (3)(a^b)+(c<<1|d)(33) (4)a=1,b=2,(a>b)? ++a: ++b(3) (5)a/2.0*b-c/3+d(61.5) 三、程序改错,用标记指出错误,并在旁边将错误的地方进行修正(10分) (1)求某班30个学生英语成绩的平局分 #include floatcalculate(float*p,intn);/*添加函数声明*/ main() { floata[30],aver; intm; for(m=0;m<30;m++) scanf(“%d”,a+m); aver=calculate(a,30); printf(“aver=%f\n”,aver); } floatcalculate(float*p,intn)/*添加函数的数据类型*/ { charx; inttemp;/*inttemp=0需要设置初始值为0; for(x=0;x<=n;x++)/*for(x=0;x temp+=p[x]; returntemp/n; } (2)找N个字符串中最大字符串 #include #defineN5 char*process(char*p[][80],intn);添加函数声明 main() { charstring[N][80],*p; chari; for(i=0;i scanf(“%s”,&string[i]);/*scanf(“%s”,string[i]);除掉取地址符*/ p=process(string,N); printf(Maxstring: =%s\n”,p); } char*process(char*p[][80],intn)/*去掉*号,或改为charp[][]*/ { inti; char*pmax; for(i=1;i if(p[i] pmax=p[i]; returnpmax; } 四程序填空(10分) (1)利用公式sinx 设x=0.4时sinx的值 #include main() { floatx,sn,un; inti,j; x=0.4; un=_________________________; sn=__________________________; i=1; while(un=1e-5) { un=_________________________; sn=__________________________; i++; } printf(“x=%f,sinx=%f\n”,x,sn); } (2)以下itoa(inta,char*)是一个将整数转换为对应的数字串的函数,reverse(char*)是一个将字符串翻转函数,被itoa调用,main()函数是用来测试itoa函数的.(书中例题: p197) #include #defineLENGTH6 voidreverse(char*); voiditoa(int,char*); voidmain() { intn; chars[LENGTH]; printf(“inputainteger: \n”); scanf(“%d”,&n); itoa(n,s); printf(“string: %s”,s); } voiditoa(intn,char*p) { inti,sign; if((sign=n)<0) n=-n; i=0; do { _p[i++]=n%10+’0’; }while((n/=10)>0); if(sign<0) p[i++]=‘-‘; p[i]=‘\0’; reverse(p); } voidreverse(char*) { inti,j,k; for(i=0,j=strlen(p)-1;i { k=p[i]; p[i]=p[j]; p[j]=k; } } 五,写出结果 (1) #include voidmain() { inti,j,p,s; s=0; for(i=1;i<=4;i++) { p=1; for(j=1;j<=i;j++) p=p*j; s=s+p; } printf(s="%d\n",s); } S=33 (2) #include voidmian() { inti,j,a[5][5]; for(i=0;i<5;i++) { a[i][i]=1; a[i][0]=1; } for(i=2;i<5;i++) for(j=1;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<5;i++) { for(j=0;j<=i;j++) printf("%4d",a[i][j]); printf("\n"); } } (打印杨辉三角) 1 11 121 1331 14641 (3) #include intd=1; voidfunc(); voidmain(); { func(); func(); func(); } voidfunc() { staticinta; registerintb=0; intc=0; printf("a=%4d\tb=%4d\tc=%4d\td=%4d\n",a++,b++,c++,d++); } a=0b=0c=0d=1 a=1b=0c=0d=2 a=2b=0c=0d=3 (4) #include structStudent { charNo[10]; charname[20]; charsex; intage; }; voidmain() { structStudentstu[3]={{"10101","LILin",'M',18},{"10102","Zhangfan",'M',19},{"10104","Wangmin",'M',20}}; structStudent*p; intm; for(p=stu+1,m=0;m<2;m++) printf(“%8s: %12s: %d\n”,p->No+3,p->name,p->age); } 02: zhangfan: 19 02: zhangfan: 19 (5) #include #include voidmain() { char*name[]={“capital”,”index”,”large”,”small”}; inta,b,n=4; char*temp; for(a=0;a for(b=a+1;b { if(strcmp(name[a],name[b])<0) { temp=name[a]; name[a]=name[b]; name[b]=temp; } } for(a=2;a printf(“%s\n”,name[a]+a); } dex ital 六编写程序(35分) 1)(9分)售货价格随购货数量而异,买10个以上(含10,下同)为90折,买20个以上为85折,买30个以上为80折,买50个以上为6折,设商品的价格为65元,要求输入购买商品的个数后,打印出总货款。 #include #definePRICE65 main() { intnumber; doublepayment; printf("pleaseenterthenumber: "); scanf("%d",&number); if(number<=10) payment=PRICE*number*1.0; elseif(number<=20) payment=PRICE*number*0.90; elseif(number<=30) payment=PRICE*number*0.85; elseif(number<=50) payment=PRICE*number*0.80; else payment=PRICE*number*0.60; printf("购买产品数: %d总货款: %lf\n",number,payment); } 2)(9分)编写一个函数,求x=a1/2,其中求平方根的迭代公式为 xn+1=1/2(xn+a/xn),要求前后两次求出的差的绝对值小于10-6,编写的函数完成求平方根运算。 主函数完成整数a的输入,调用所编函数,输出所求平方根; 注意: 不得使用全局变量,注意程序结构 #include #include floatRoot(floata) { floatx1=1.0,x2; while (1) { x2=1.0/2*(x1+a/x1); if(fabs(x2-x1)<1e-6) break; x1=x2; } returnx2; } main() { floata,x; printf("inputa: "); scanf("%f",&a); x=Root(a); printf("sqrt(%f)=%f\n\n",a,x); } 3)(9分)缩写一个函数,统计字符串中子串出现的次数,如在字符串“10101000101”中出现子串“101”的个数为2;主函数完成字符串和子串的输入,调用所编函数得到子串出现的次数,并输出出现的次数。 注意: 不得使用全局变量,注意程序结构 #include #include intmystrstr(char*s1,char*s2) { char*last; char*current; intnumber=0; intlen; len=strlen(s2); last=s1; if(*s2! ='\0') { last=current=strstr(s1,s2); while(current! =NULL) { last=current; current=strstr(last+len,s2); number++; } } returnnumber; } main() { chars1[80],s2[80]; intnum; printf("pleaseinputs1: "); gets(s1); printf("pleaseinputs2: "); gets(s2); num=mystrstr(s1,s2); printf("%shave%s: %dtimes\n",s1,s2,num); } 4)输入10个字符串,然后排序输出。 排序的原则由键盘输入的数来决定,为0,将输入的字符串按整数值大小从小到大排序,否则按字典顺序排序。 要求: 输入、输出、排序分别用函数实现,主函数只是调用这些函数。 不得使用全局变量,注意程序结构。 (参见书中p198~201)这里的答案与书中有点不同,希望大家能够掌握多种方法 #include #include #defineNUM10 voidInput(charp[][80],intn); voidSort(charp[][80],intn); voidOutput(charp[][80],intn); voidmain() { charstr[NUM][80]; Input(str,NUM); Sort(str,NUM); Output(str,NUM); } voidInput(charp[][80],intn) { inti; for(i=0;i { gets(p[i]); } } voidSort(charp[][80],intn) { inti,j; chartemp[80]; for(i=0;i for(j=i+1;j if(strcmp(p[i],p[j])>0) { strcpy(temp,p[i]); strcpy(p[i],p[j]); strcpy(p[j],temp); } } voidOutput(charp[][80],intn) { inti; for(i=0;i puts(p[i]); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试题 参考答案
![提示](https://static.bdocx.com/images/bang_tan.gif)