c语言程序设计期末试题A(含答案)一、单项选择题(选择一个最佳答案,每题2分,共20分)1.一个C程序的执行是从()。A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束2.下列选项中,不能用作标识符的是()。A)_1234_B)_1_2C)int_2_D)2_int_3.以下定义语句中正确的是()。A)chara='A'b='B';B)floata=b=10.0;C)inta=10,*b=&a;D)float*a,b=&a;4.设有以下定义:#defined2inta=0;doubleb=1.25;charc=’A’;则下面语句中错误的是()。A)a++;B)b++C)c++;D)d++;5.以下4个选项中,不能作为一条C语句的是()。A){;}B)a=0,b=0,c=0;C)if(a0);D)if(b==0)m=1;n=2;6.有以下定义语句doublea,b;intw;longc;若各变量已正确赋值,则下列选项中正确的表达式是()。A)a=a+b=b++B)w%(int)a+b)C)(c+w)%(int)aD)w=a==b;7.设有定义:intn=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是()。A)p=1;B)*q=2;C)q=p;D)*p=5;8.设有定义:inta,*pa=&a;以下scanf语句中能正确为变量a读入数据的是()。A)scanf(“%d”,pa);B)scanf(“%d”,a);C)scanf(“%d”,&pa);D)scanf(“%d”,*pa);9.若有说明:char*language[]={”FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则表达式*language[1]*language[2]比较的是()。A)字符B和字符PB)字符串FORTRAN和字符串BASICC)字符F和字符BD)字符串BASIC和字符串PASCAL10.执行语句for(i=1;i++4;);后变量i的值是()。A)3B)4C)5D)不定一、填空题(每空2分,共18分)1.若有定义:inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值为。2.有程序段:inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];则b中的值是。3.函数swap(intx,inty)实现对x和y值的交换。则执行语句{inta[2]={1,2};swap(a[0],a[1]);}后,a[0]=,a[1]=。4.设有以下宏定义:#definef(z)z*z,执行赋值语句k=f(4+4)/f(2+2);(k为int型变量)后,k的值是。5.书写语句求a,b两个数的最大值max。?:;6.若x为int型变量,则执行x=7;x+=x-=x+x;语句后,x的值是。二、读程序写结果(每题6分,共24分)1.有以下程序intf(inta){intb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);}voidmain(){inta=2,i;for(i=0;i3;i++)printf(“%2d”,f(a));}执行后输出的结果是。2.有以下程序voidf(inty,int*x){y=y+*x;*x=*x+y;}voidmain(){intx=2,y=4;f(y,&x);printf(“x=%d,y=%d\n”,x,y);}执行后输出的结果是。3.有以下程序#defineLETTER1#includestdio.hvoidmain(){charstr[20]=CLanguage,c;inti=0;while((c=str[i])!='\0'){i++;#ifdefLETTERif(c='a'&&c'z')c=c+1;elseif(c=='z')c=c-25;#elseif(c='B'&&c='Z')c=c-1;elseif(c=='A')c=c+25;#endifprintf(%c,c);}}执行后输出的结果是。4.有以下程序voidfun(int*a,inti,intj){intt;if(ij){t=a[i];a[i]=a[j];a[j]=t;i++;j--;for(i=0;i4;i++)printf(%2d,a[i]);fun(a,i,j);}}voidmain(){intx[]={2,6,1,8},i;fun(x,0,3);for(i=0;i4;i++)printf(%2d,x[i]);printf(\n);}执行后输出的结果是。四、程序填空(每空1分,共8分)下面程序的功能是:计算从命令行中输入的第2个参数开始的所有参数中是回文字符串的参数个数。(顺读和倒读都一样的字符串称为“回文”,如“level”就是回文)请填空。#includestdio.h【1】intsumhw(char**p,intn);charjughw(char*str);voidmain(intargc,char*argv[]){ints;if(argc2)printf(请输入有效参数);else{s=sumhw(【2】,argc-1);printf(共有%d个回文串\n,s);}}intsumhw(char**p,intn){charflag;inti,sum=0;for(i=0;in;i++){flag=jughw(【3】);if(【4】)sum++;}returnsum;}charjughw(char*str){char*p1,*p2;intn;n=strlen(str);p1=str;p2=【5】;while(【6】){if(*p1!=*p2)break;else{p1++;【7】;}}if(【8】)return('N');elsereturn('Y');}五、编程题(30分)1.用指针和数组两种方法实现如下功能:将一个字符串按逆序存放。(18分)要求(1)主函数中完成输入和输出字符串。(2)逆序存放功能用子函数完成。2.一个整型数组有10个元素,编写程序删除所有值为n的元素。(12分)要求(1)主函数完成n的输入,数组元素输入以及删除后数组元素的输出。(2)删除功能用子函数完成。C语言模拟试卷一参考答案一、单项选择题(选择一个最佳答案,每题2分,共20分)1、A2、D3、C4、B5、D6、C7、D8、A9、A10、C二、填空题(每空2分,共18分)1、2.5000002、93、124、285、(ab)max=amax=b6、-14三、读程序写结果(每题6分,共24分)1、7892、x=8,y=43、CLbohvbhf4、86128612四、程序填空(每空1分,共8分)【1】#includestring.h【2】argv+1【3】*(p+i)【4】flag==’Y’【5】str+n-1【6】p1p2【7】p2--【8】p1p2五、编程题(共30分)1.(1)数组法(9分)#includestring.h#includestdio.h#defineN20voidinv(charstr[],intn);voidmain(){charstr[N];gets(str);inv(str,strlen(str));puts(str);}voidinv(charstr[],intn){inti,j,temp;for(i=0,j=n-1;i=j;i++,j--){temp=str[i];str[i]=str[j];str[j]=temp;}}(2)指针法(9分)#includestring.h#includestdio.h#defineN20voidinv(char*str,intn);voidmain(){charstr[N];gets(str);inv(str,strlen(str));puts(str);}voidinv(char*str,intn){char*i,*j,temp;for(i=str,j=str+n-1;i=j;i++,j--){temp=*i;*i=*j;*j=temp;}}2.(12分)#includestdio.hintm;voiddel_element(intnum[],intn);voidmain(){intnum[10];inti,n;m=10;for(i=0;i10;i++)scanf(%d,&num[i]);printf(pleaseinputn\n);scanf(%d,&n);del_element(num,n);for(i=0;im;i++)printf(%d,num[i]);}voiddel_element(intnum[],intn){inti,j;for(i=0;im;i++)if(num[i]==n){for(j=i+1;jm;j++)num[j-1]=num[j];m--;i--;}}