12-1A卷中国石油大学(北京)2012—2013学年第2学期《C语言程序设计》期末考试试卷标准答案考试方式(闭卷考试)班级:姓名:学号:题号一二三四五总分得分(试卷不得拆开,所有答案均写在题后相应位置)12-2一、填空题(每空1分,共10分)1.结构化程序设计的三种基本结构是顺序结构、选择结构和循环结构。2.一个源程序文件的名称为”test.c”,通过编译后,对应的目标文件名称是:test.obj。3.doublex=4.5,y=4.7;inta=5;表达式”x+a%3*(int)(x+y)%2/4”的值是:4.5。4.公式)(32F95C在C语言中对应的表达式为:C=5.0/9*(F-32)。5.数学中的关系表达式”20≤x<30”在C语言中的表示形式是:x=20&&x30。6.有循环语句:for(i=0,j=1;i=j+1;i+=2,j--)printf(“%d\n”,i);循环体中语句执行的次数是:1次。7.设有数组定义:chararray[]=”x\101y\tabc”;则数组array所占的存储空间为8个字节。8.字符’A’的ASCII值为65,若有:intx=’f’;x=’A’+(x-‘a’+1);,则x的值是71。9.若有:charstr1[10]=”xxx”,str2[10]=”yyy”;strcat(str2,str1);则:strlen(str2)=6。二、选择题(每题2分,共20分)下列各题的四个选项中,只有一个选项是正确的,请将正确选项填在下表中。12345678910CABDCBBBAC1.下列数所中合法的浮点型常量是:C。A、E+10B、2E+1.5C、2E-10D、0x2.5E102.以下叙述中正确的是:A。A、局部变量说明为static存储类型,其生存期将得到延长。B、全局变量说明为static存储类型,其作用域将被扩大。C、任何存储类型的变量在未赋初值时,其值都是不确定的。D、形参可以使用的存储类型说明符与局部变量完全相同。3.对于下面的数组声明,正确的是:B。A、intx[][5];B、chart[]={‘a’,’b’,’c’,’\0’};C、intn=5,a[n];D、ints[5]={1,2,3,4,5,6};4.若有以下说明和语句,则在执行for语句后,*(*pt+2)表示的数组元素是:D。12-3intt[3][3],(*pt)[3],k;for(k=0;k3;k++)pt=t+k;A、t[1][2]B、t[2][0]C、t[2][1]D、t[2][2]5.设有说明:union{charc;shorth;longa;}m;则变量m的存储区域是:C。A、1个字节B、2个字节C、4个字节D、7个字节6.打开D盘根目录下user子目录下a.txt文本文件进行读写,正确的函数调用是:B。A、fopen(“d:\user\a.txt”,”rb”);B、fopen(“d:\\user\\a.txt”,”r+”);C、fopen(“d:\user\a.txt”,”r+”);D、fopen(“d:\\user\\a.txt”,”rb”);7.若变量已正确定义,有以下程序段inta=3,b=5,c=7;if(ab)a=b;c=a;if(c!=a)c=b;printf(”%d,%d,%d\n”,a,b,c);其输出结果是:B。A、程序段有语法错B、3,5,3C、3,5,5D、3,5,78.下列程序的输出结果是:B。#includestdio.hmain(){inti,a=0,b=0;for(i=1;i10;i++){if(i%2==0){a++;continue;}b++;}printf(”a=%d,b=%d”,a,b);}A、a=4,b=4B、a=4,b=5C、a=5,b=4D、a=5,b=59.下列程序执行后的输出结果是:A。#includestdio.h12-4voidfunc(int*a,intb[]){b[0]=*a+6;}main(){inta,b[5];a=0;b[0]=3;func(&a,b);printf(”%d\n”,b[0]);}A、6B、7C、8D、910.有以下程序:#includestdio.hintf(intx){inty;if(x==0||x==1)return(3);y=x*x-f(x-2);returny;}main(){intz;z=f(3);printf(”%d\n”,z);}程序的运行结果是:C。A、0B、9C、6D、8三、读程序题(1-4题每题2分,5-8题每题3分,共20分)请把程序的运行结果写在题后的横线上。1.#includestdio.hintmain(){intx=2,y=8;x+=5;y%=3;printf(”x=%2d,y=%2d\n”,x,y);return0;12-5}运行结果:x=7,y=22.#includestdio.hintmain(){inti,t,a[8]={1,2,3,4,5,6,7,8};for(i=0;i4;i++){t=a[i];a[i]=a[7-i];a[7-i]=t;}for(i=0;i8;i++)printf(”%d”,a[i]);return0;}运行结果:876543213.#includestdio.hvoidfun1(intx,inty){x--;y++;}voidfun2(int*x,int*y){(*x)--;(*y)++;}intmain(){intm=2,n=2;fun1(m,n);printf(”%d,%d\n”,m,n);12-6fun2(&m,&n);printf(”%d,%d\n”,m,n);return0;}运行结果:4.#includestdio.hstructstd{inta,b,c;};intmain(){structstds[2]={{1,2,3},{4,5,6}};intt;t=s[0].a+s[1].b;printf(”%d\n”,t);return0;}运行结果:65.#includestdio.hintx=3;intfun1(inta){staticintm=0;m++;returnx+a+m;}intmain(){intm,x=2;m=x+fun1(5);printf(”%d,%d\n”,x,m);m=x+fun1(5);printf(”%d,%d\n”,x,m);return0;2,21,312-7}运行结果:6.#includestdio.h#defineN5intu[N],v[N];intmain(){inti,j,n=0;for(i=2;iN;i++)if(u[i]==0){v[n++]=i;for(j=i*i;jN;j+=i)u[j]=1;}for(i=0;in;i++){printf(”%d”,v[i]);if(i==n-1)putchar(‘\n’);elseputchar(‘,’);}return0;}运行结果:2,37.#includestdio.hintmain(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inti=2,j=3;printf(”%d\n”,*(&a[0][0]+2*i+j-2));return0;2,112,1212-8}运行结果:68.#includestdio.hvoidf(int*q){inti=0;for(;i5;i++)(*q)++;}main(){inta[5]={1,2,3,4,5},i;f(a);for(i=0;i5;i++)printf(”%d”,a[i]);return0;}运行结果:62345四、程序填空(每空2分,共20分)请将正确的语句直接填在横线上。1.有一个3*4矩阵,求其中的最大元素。#includestdio.hintmax_value(intarray[][4]){inti,j,max;max=array[0][0];for(i=0;i3;i++)for(j=0;j4;j++)if(array[i][j]max)max=array[i][j];returnmax;}intmain(){inta[3][4],i,j;12-9for(i=0;i3;i++)for(j=0;j4;j++)scanf(%d,&a[i][j]);printf(”maxvalueis%d\n”,max_value(a));return0;}2.百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹?#includestdio.hintmain(){inthb,hm,hl,n=0;for(hb=0;hb=100;hb+=3)for(hm=0;hm=100-hb;hm+=2){hl=100-hb-hm;if(hb/3+hm/2+2*hl==100){n++;printf(”hb=%d,hm=%d,hl=%d\n”,hb/3,hm/2,2*hl);}}printf(”n=%d\n”,n);return0;}3.用”起泡法”对输入的10个整数按从小到大的次序排序并输出。#includestdio.h#defineN10intmain(){ints[N],i;for(i=0;iN;i++)scanf(”%d”,&s[i]);sort(str);for(i=0;iN;i++)printf(”%d,”,s[i]);printf(”\n”);return0;}12-10sort(ints[N]){inti,j,t;for(j=1;jN;j++)for(i=0;iN-j;i++)if(s[i]s[i+1]){t=s[i];str[i]=str[i+1];str[i+1]=t;}}五、编程题(每题10分,共30分)1.从键盘输入10个学生的成绩,存于整型数组score中,将低于平均分的学生成绩存于数组below中,并在屏幕上显示below数组的内容。#includestdio.hintmain(){intscore[10],below[10];inti,j;intaver;for(i=0;i10;i++)scanf(%d,&score[i]);aver=0;for(i=0;i10;i++)aver=aver+score[i];aver=aver/10;j=0;for(i=0;i10;i++){if(score[i]aver){below[j]=score[i];j++;}}for(i=0;ij;i++)printf(%4d,below[i]);printf(\n);12-11return0;}12-122.从键盘输入一个自然数n,计算并输出3到n之间所有素数的算术平方根之和。#includestdio.h#includemath.hintmain(){inti,j,n,k;floatsum;printf(n=);scanf(%d,&n);sum=0;for(i=3;i=n;i++){for(j=2;j=sqrt(i);j++)if(i%j==0)break;if(jsqrt(i))sum=sum+sqrt(i);}printf(sum=%.5f\n,sum);return0;}12-133.从键盘输入一个字符串,并对该字符串进行以下两种处理,处理结果在主程序中输出。(1)计算字符串中所有数值字符的和。要求:该功能用函数实现,函数的头部为:intadd(charstr[],intn)函数的返回值是所求得的和,形式参数n为字符串的长度。(2)统计字符串中英文字母的个数。要求:该功能用函数实现,函数的头部为:intstat(char*str,intn)函数的返回值是统计结果,形式参数n为字符串的长度。例如:从键盘输入:a*c234M4n3数值字符之和为:16英文字母的个数为:4#includestdio.h#i