《C复习题及答案.docx》由会员分享,可在线阅读,更多相关《C复习题及答案.docx(27页珍藏版)》请在三一办公上搜索。
1、C复习题及答案1 .以下选项中合法的变量名是(A)。A._am7B.4gp3C.scanfD.B.HJack2 .若有说明语句intij;则计算表达式i=(j=3,j+J=5J+5)后i的值为(D)。A.3B.4C.5D.103 .关于if后一对圆括号中的表达式,以下叙述中正确的是(C)。A.只能用逻辑表达式B.只能用关系表达式C.可用任意表达式D.可用逻辑表达式也可用关系表达式4 .设有定义语句:charcl=3zc2=3;,则以下表达式中值为O的是(A)oA.c1c2B.cl&c2C.clc2D.c25 .调用函数时,基本类型变量作函数实参,它与对应的形参(八)oA,各自占用独立的存储单元
2、8 .共占用一个存储单元C.同名时才能共用存储空间D.不占用存储单元6.若有如下结构体类型的定义和语句:Dstructstudentcharname10;charsex;intage;stdz*ps;ps=&std;则下面对结构体成员的引用错误的是()。A.std.sexB.ps-ageC.(*ps).ageD.student.sex7 .以下关于文件包含的叙述中正确的是(B)。A.用#吊(:110命令所包含的文件其后缀只能是h8 .根据需要的鼠1皿6命令行可以出现在源程序任意行的起始位置C.对有错误的被包含文件进行修改后,包含它的源文件不必重新编译D.用#吊加加命令行所包含的头文件可以是目标
3、文件9 .若要打开A盘上user子目录下名为data.txt的文本文件,进行读写,下面符合此要求的函数调用是(C)。A.fopen(A:userdata.txtrb)B.fopen(A:userdata.txt,r)C.fopen(A:userdata.txt,r+)D.fopen(A:userdata.txt,w)10 以下叙述不正确的是(CQ)。A.C程序的main函数可以没有参数。BC程序的main函数可以有参数。C.C程序的main函数若有参数时,第一个参数的值最少是IoD.C程序的main函数若有参数时,第一个参数的值一定要大于等于0。11 .以下关于数组的叙述中不正确的是(D)。A
4、.数组的名称其实是数组在内存中的首地址。12 数组元素是按顺序存放在内存中。C.当数组名作为参数被传递给某个函数时,原数组中的元素的值可能被修改。D.一个数组可以存储多种不同类型的变量。1 .C语言规定:函数返回值的类型是由_DARetUrn语句中的表达式类型规定的B调用该函数时的主调函数类型所决定的C调用该函数时系统临时决定的D在定义该函数时所指定的函数类型所决定的2 .在宏定义#1冶已PI3.1415926中,用宏名Pl代替一个_D_A常量B单精度数C双精度数D字符串3 .若以下对fun函数的调用是正确的:=fun(fun(azbzc),(a+bza+c)za+b+c);则fun函数的形参
5、个数为-A。Ax3B、4U5D、64 .C语言用C表示逻辑真值。A.TrueB.t或yC.非零整型值D.整型值O5 .为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总与B配对。A.缩排位置相同的ifB.其之前最近的ifC.其之后最近的ifD.同一行上的if6 .凡是函数中未指定存储类别的局部变量,其隐含的存储类别是_AoA.autoB.staticC.externD.register7 .若用数组名作为函数调用的实参,传递给形参的是AA.数组的首地址B.数组第一个元素的值C.数组中全部元素的值D.数组元素的个数8 .设有定义:chars81;inti=0;以下不能
6、将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是(C)。A.gets(s);9 .while(si+=getchar()!=,n,);si=,0;C.scanf(,%snzs);D.doscanf(,%csi)jwhile(si+!=,n);si=,0,;10 .以下说法正确的是AA.实参和与其对应的形参各自占用独立的存储单元B.实参和与其对应的形参共同占用一个存储单元C.只有当实参和与其对应的形参同名时才共同占用存储单元D.形参是虚拟的,不占用存储单元11 .在位运算中,操作数每左移一位,其结果相当于AA.操作数乘2B.操作数除2C.操作数乘10D.操作数除101 .定义了
7、一维int型数组a10后,下面错误的引用是_BA. a0=l;B. a10=2;C. a0=5*2;D. al=a2*a0;2 .若有定义:int10,*p=x;,贝(J*(p+5)表示_B-A.数组元素x5的地址B,数组元素x5的值C.数组元素x6的地址D.数组元素x6的值3 .以下关于switch语句和break语句的描述正确的是-DA.在switch语句中必须使用break语句B.break语句只能用于SWitCh语句体中C.break语句只能用于循环语句中D.在switch语句中可以使用break语句4.若程序中定义了以下函数doublemyadd(doubleazdoubleb)re
8、turn(ab);并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是AA.doublemyadd(doubleazb);B. doublemyadd(doublezdouble);C. doublemyadd(doublebzdoublea);D. doublemyadd(doublex,doubley);5 .一个c程序的执行是从AoA.本程序的main函数开始,到main函数结束B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C.本程序的main函数开始,到本程序文件的最后一个函数结束D.本程序文件的第一个函数开始,到本程序main函数结束6 .
9、凡是函数中未指定存储类别的局部变量,其隐含的存储类别是AA.autoB.staticC.externD.register7 .对于下面语句描述不正确的是_B-structStudentfunsignedlongid;charname30;charcalss30;Stul;A.structStudent为用户自定义类型B.Student为用户自定义类型C.name为结构体成员变量D.Stul为结构体变量名称8 .若有定义int(*pt)3;,则下列说法正确的是_D。A.定义了基类型为int的三个指针变量B.定义了基类型为int的具有三个元素的指针数组ptC.定义了一个名为*pt、具有三个元素的整
10、型数组D.定义了一个名为pt的指针变量,它指向含有三个整数元素的一维数组9 .下面的描述错误的是CA.函数可以有多个形式参数B.函数可以没有返回值C.函数内可以嵌套定义函数D.函数可以被其他函数调用10 .有以下定义和语句Dstructworkersintnum;charname20;charc;structintday;intmonth;intyear;s;wz*pw;PW=&w;能给w中year成员赋1980的语句是A.*pw.year=198O;B.w.year=1980;C.pw-year=1980;D.w.s.yar=1980;二、阅读程序代码写结果(每题4分,共32分)1、main
11、()*%intx=0zy=2zz=3;switch()case0:switch(y=2)case1:printf(*);case2:printf(%n);break;casel:switch(z)case1:printf($);break;case2:printf(#);break;default:printf(Mn);2、voidSWaP(int*pzint*q)a=10,b=20int*t;t=p;p=q;q=t;mai()inta=10zb=20;SWaP(&a,&b);printf(wa=%dzb=%dn,r,azb);)3、main()5,4,6inta,b,c,d,ij,k;a=1
12、0;b=c=d=5;i=j=k=O;for(;ab;+b)i+;while(a+c)j+;dok+;while(ad+);Printfe,%d,%d,%c,ij,k);)4xintfunl(intajntb)4intc;a+=a;b+=b;c=fun2(azb);returnc*c;intfu2(intazintb)intc;c=a*b%3;returnc;main()intx=llzy=19;printf(,%dn,zfunl(xzy);)5、defineHl523#defineH2Hl+3main()intk;k=H2*H2H2;printf(,%d,);)6.fun(int*sjntnl
13、jntn2)4321098765inti,j,t;i=nl;j=2;while(ij)j)t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;i+;j-;)main()inta10=L2,3,4,5,6,7,8,9,0,i9p=a;fun(pz0z3);fun(pA9);for(i=0;i10;i+)printf(%dzai);7.intfun(inta)5intb=O;staticintc=3;a=c+zb+;returna;main()inta=2zizk;for(i=0;i);printf(%dl(+p)-x);printf(%d,z+(*p-y);)11 以下程序的输出结果
14、是(2)#includemain()inta=2zb=-lzc=2;if(ab)b)if(b0)fun(x2);printf(%d,x);)main()fun(3);printf(nn);)13 以下程序的运行结果是(90z90z110,)#includemain()intj,a=1030,5070,90l110l130x150,*p=a+5;for(j=3;j;j-)switch(j)case1:case2:Printf(%dj,*p+);break;case3:Printf(%dj,*(-p);14 以下程序的输出结果是(1,2,3,4,5,6,7,8,9,10,)includevoidf
15、un(intajntb)intt;t=a;a=b;b=t;)main()intc10=lz2,3A57z8z9z10J;for(i=0;i10;i+=2)fun(cixci+1);for(i=0;i10;i+)printf(n%dz,zci);printf(,n);)15 以下程序的输出结果是(321,6,7,8,)#includevoidfun(intaJntn)inti,t;for(i=Ojit=ai;ai=an-l-i;an-l-i=t;)main()intk10=l,234,5,6,7,8,9,10,i;fun(k,5);for(i=2;i8;i+)printf(,%dlxki);pr
16、intf(,n);)16 以下程序的运行结果是(2,8)#includevoidswap(int*ajnt*b)int*t;t=a;a=b;b=t;)mai()inti=2j=8/p=&iz*q=&j;swap(pzq);printf(%d,%dn,*pz*q);)17 以下程序的运行结果是(1,3)#includevoidf(int*pzint*q);main()intm=n=2r=m;f(r,&n);Printf(%d,%d,m,n);)voidf(int*pzint*q)p=p+l;*q=*q+l;18 以下程序的运行结果是(10,28,)#includeintb=2;intfun(in
17、t*k)b=*k+b;return(b);main()inta10=lz2,3A5l6z7z8,i;for(i=2;i4;i+)b=fun(ai)+b;printf(%d,n,b);)printf(,n);)19 以下程序的输出结果是(IoOLZhangDa,1098.0)*include#includestructAinta;charb10;doublec;voidf(structAt);voidmain()structAa=1001znZhangDa,z1098.0;f(a);Printf(%d,%s,%6.1%r,a.a,a.b,ac);)voidf(structAt)t.a=1002;
18、strcpy(t.bzChangRong)jtc=1202.0;20 以下程序的运行结果是(10,14)#includevoidmain()inta=lzb=2;for(;a8;a+)b+=a;a+=2;printf(%dz%dnzazb);)21 以下程序的输出结果是(a=1.500000)#includevoidsub(floatxzfloat*yzfloat*z)*y=*y-l.O;*z=*z+x;)voidmain()floata=2.5zb=9.0z*paz*pb;pa=&a;pb=&b;sub(b-alpazpb);printf(a=%nla);)22 以下程序的输出结果是(357
19、45)#includevoidfun(int*s)staticintj=0;dosj=sj+l;while(+j2);voidmain()intk,a10=ll2,3A5;for(k=l;k3;k+)fun(a);for(k=0;k5;k+)printf(,%d,ak);)23 以下程序的运行结果是(4321)#includevoidmain()voidsub(int*szint*y);inta=l,2,3,4j,x=0;for(i=0;i4;i+)sub(az8ix);printf(%d,zx);printf(n);)voidsub(int*szint*y)staticintt=3;*y=s
20、t;t-;)24 以下程序的运行结果是(ar=9ar=9ar=ll)include#definePR(ar)printf(ar=%dzar)voidmain()intjza=L3,5,7,9,ll,13,15,*p=a+5;for(j=3;j;j-)switch(j)case1:case2:PR(*p+);break;case3:PR(*(-p);)25 以下程序的运行结果是(10,28,)#includeintb=2;intfun(int*k)b=*k+b;return(b);main()inta10=lf2,3A5z6z7z8j;for(i=2;imax)1 .以下程序实现字符串的连接运算
21、#includestdio.hmain()charsl128ztl128,*catstr(char*szchar*t);gets(sl);gets(tl);puts();char*catstr(char*slchar*t)char*h=s;while(*s)s+;while(*t!=r0,);*s=,0,;;)2 .函数deccom()实现两个复数的相减,并返回相减的结果,在主函数中输出。typedefstructintreal;intimag;COMPLEX;COMPLEXs;s.real=xl.real-2.real;s.imag=xl.imag-2.imag;returns;main()
22、COMPLEXa=3,5rb=2,l,c;c=deccom(azb);printf(c=%d+%di);)3 .求4*5矩阵中的最大元素及其行列位置,矩阵元素值从键盘输入。voidmai()inta45JJ; ;for(i=0;i4;i+)for(j=0;j5;j+) ;max=a00;c=0;r=0;for(i=0;i4;i+)for(j=0j5j+) ;max=aij;c=i;r=j;pntf(max=%dzc=%dlr=%dn,mazczr);)x+2*x+4*y=90或2*y+4*x=90max=a00;maxRow=i;maxColum=j;bji=aij;filel.dat,rch
23、!=EOFfputc(ch,fp2);1.鸡和兔共有30只,而鸡和兔的脚共有90只,求鸡、兔各有多少只?for(x=l;x=29;)y=30-x;if()Printf(%d,%dn,x,y);)2,求一个四行三列的矩阵其中数值最大的元素及其位置;然后完成矩阵转置,并输出。*includestdio.h#defineM4defineN3main()intijzmax=0,maxRowzmaColum;staticintaMN=31f20z3A5l61r7,8,19z10lll,12;staticintrowM=0r0z0,0fcolumN=0z0,0,bNM;for(i=0;i=M-l;i+)f
24、or(j=0;jmax)max=aij;printf(max:%drow:%dcolum:%dnmaxzmaxRowzmaColum);for(i=0;im;i+)/m;i+)for(j=0;jn;j+)nj+)for(i=0;in;i+)bdsfid=,531np=nx/n;i+)for(j=0;jm;j+)mj+)printf(%8dzbij);printf(n);)3 .编程实现将文本文件filel.dat中的内容复制到文本文件file2.dat中去,同时将小写字母转换成大写字母。includestdio.hvoidmai()FILE*fpll*fp2;charch;fpl=fopen(
25、);fp2=fopen(,filel.dat,z,wm);ch=fgetc(fpl);while()if(ch=,a&ch=,z,)ch=ch-32;ch=fgetc(fpl);fclose(fpl);fclose(fp2);)tk=18&age=25aage+;i=18;i=25;j=SIZE-l;(7)ai=aj;aj=tj-;4 .下面程序是用来从键盘输入十个整数,然后求出其中的最小值。#includevoidlookup(int*tjnt*ajntn)intk;*a=t0;for(k=l;kn;k+)bdsfid=,559p=nx/n;k+)if()*a=tk;)voidmain()i
26、nttable10;intk,min,*p=&min;for(k=0;k10;k+)scanf(,%d,tablek);lookup(r10);Printf(min=%dn,min);)5 .输入30个人的年龄,统计18z19z2025岁各有多少人main()intiznzageza30=0;for(i=0;i30;i+)scanf(,%d,age);if();)printf(ageumben);for(ji+)printf(,%5d%6dnJzai);)6 .以下程序将数组中的数据按逆序存放includedefineSIZE12main()intaSIZEJJzt;for(i=0;ii=0;
27、while(ij)j)t=ai;i+;for(i=0jprintf(n);)四、根据代码功能找出程序中的一处错误,并改正(每错3分,共6分)1.错误行号:5修改为:if(c=0&c二9)2、错误行号:5修改为:sum=0;1 .输入一行字符,分别统计出其中数字和小写字母的个数。2 voidmain()3 charc;4 intm=0zn=0;5 while(c=getchar()!=n,)5if(0,=c=,9,)6 n+;7if(c=a)8 m+;9 Printf(digit:%d,letter:%cT,n,m);10 )2.以下程序读入一个数字a,求sum=a+aa+aaa+aaaa+aa
28、aaao1 main()2 inti=OJza;3 longintsumzt;4 scanf(d”,&a);5 sum=l;6 doi+;t=0;7 for(j=0;ji;j+)ij+)8 t=t*10+a;9 sum=sum+t;10 while(i5);11 printf(/sum=%ld,/,sum);12 )1 .错误行:for(p=0;p=a+9;p+)改正:for(p=a;p=a+9;p+)2 .错误行:printf(n%dn,sizeof(stu);改正:printf(%dn,sizeof(structstu);1 .利用指针实现对数组元素的逐一打印输出。#includevoid
29、main()staticinta10=ll2,3A5,6,7,8,9,10;int*p;for(p=0;p=,A,&*s=,Z)a=a+l;s+;)main()chars100;intupper=0;printf(nPaseastring:,);gets(s);fun(s,&upper);printf(upper=%dlower=%dnzupper,lower);)2 .有一个3*4的矩阵,编程求出其中值最大的那个元素的值,以及其所在的行号和列号。voidmain()intijzrow=0zcolum=0zmax;inta34=l,3,5,7,976,2,20,10,5,ll;max=a;fo
30、r(i=0;i=2;i+)for(j=0;jmax)ma=aij;row=i;colum=j;printf(,max=%dzrow=%dzcolum=%dnzmaxzrowzcolum);五、编写程序(第一题8分,第二、三题各10分,共28分)1.编写一判断素数的函数,若是素数则函数返回1,否则返回Oo1.include,stdio.h#include,math.hintprime(intn)inti;for(i=2;i=sqrt(n);i+)if(n%i=O)return0;return1;)2、编写一函数voidrevstr(char*s)z该函数能将s所指向字符串中的内容逆置;再编写主函
31、数,实现字符串的输入与逆置输出。2.#includestdio.hn#includestring.hrtvoidrevstr(char*s)inti,j;charc;i=O;j=strlen(s)-l;while(ij)j)c=*(s+i);*(s+i)=*(s+j);*(s+j)=c;i+;j-;)voidmain()intn;charstr80;gets(str);revstr(str);puts(str);)2题函数voidrevstr(char*s)也可以写成如下:voidrevstr(char*s)intij;charc;i=OJ=strlen(s)-l;while(ic=*(s+i
32、);*(s+i)=*(s+l-i-l);*(s+l-i-l)=c;i+;)3、编写一程序,能用起泡法实现10个整数的从小到大排序。3.#include#defineN10intmain()intij,t;intaN=9,8,3,7,5,2,6,l,3,4;(11Kfor(i=0;in;i+)J+)scanf(%dai);)for(j=0;jn-l;j+)11-lj+)for(i=0;in-j-l;i+)bdsfid=,732p=,wx/n-j-l;i+)if(aiai+l)t=ai;ai=ail;ai+l=t;)printf(,naftersort:);for(i=0;i=N-l;i+)pri
33、ntf(,%3d,zai);printf(,nn);)1,键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。include#defineN81main()charstringN;inti,num=0rword=0;charc;printf(n请输入单词(单词之间用空格分隔开):n);gets(string);for(i=0;(c=stringi)!=0J+)if(c=,)word=0;elseif(word=0)word=l;num+;Printf(n共有d个单词。nrnum);)2 .编写判断素数的函数,然后在主函数中调用该函数求100到200之间的所有素数。include#in
34、cludeintisPrime(intn)inti;for(i=2;i=sqrt(n);i+)if(n%i=0)return0;return1;)intmain()inti;for(i=100;iday;iFlag=pDate-year%4=0&pDate-year%100!=0pDate-year%400=0;for(i=l;imonth;i+)iTotalDays+=iMonthDaysiFlagi;returniTotalDays;4 .写一个函数,实现两个字符串的比较。函数原形为intstrcmp(char*plrchar*p2)o#includevoidmain()intstrcmp
35、(char*plzchar*p2);intm;charsl20,s220,*pl,*p2;Printf(”请输入两个字符串:nn);scanf(%s,sl);scanf(,%szs2);pl=sl;p2=s2;m=strcmp(plzp2);if(m0)printf(sls2n);elseif(m=O)printf(,sl=s2n);elseprintf(sls2n);bdsfid=819p=nx/s2n);intstrcmp(char*plzchar*p2)(for(;*pl=*p2;pl+,p2+)if(!*pl)returnO;return*pl-*p2;)5 .编写函数intfun(i
36、ntIimJntaaMAX),求出小于或等于Iim的所有素数放在aa数组中,该函数返回所求素数的个数。由主函数调用此函数,并输出素数个数。includedefineMAX50intfun(intIimJntaaMAX)intk=Ozij;for(i=lim;il;i)(for(j=2;ji;j+)bdsfid=,837np=x/i;j+)if(i%j=O)break;elsecontinue;if(j=i)(aak=i;k+;)returnk;)voidmai()(intbMAXJimzJ;scanf(,%dzlim);n=fun(limzb);printf(n素数的个数为:%dnn);)6 .有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,