《2022年C语言复习题有答案 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言复习题有答案 .pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 一、填空题(每小题2 分,共 16 分)1在 C语言中,输入操作是由库函数scanf 完成的,输出函数是由库函数printf 完成的。2.执行下列语句后,a 的值是 -264 int a 12;a+=a-=a*a;3C 语言中的每条基本语句以;作为结束符,每条复合语句以作为结束符。4.下面的程序段中循环体的执行次数是3。a=10;b=0;dob+=2;a-=2+b;while(a=0);5.假定 a为一个整型数组名,则元素a4的字节地址为 a+16 。6.已知 int a23=3,2,1;则表达式“a00/a01/a02”的值是1。7.调用函数有返回值时,应在函数的返回值类型之前增加关键字
2、 return 。如果一个函数无返回值,定义它时函数类型应是void。8.设 int a1,b2c3,d;执行 d!(a十 b十 c)后,d 的结果是 0 9.若用数组名作为函数调用时的实参,则实际上传递给形参的是数组首元素的地址。10.设 x 为 int 型变量,请写出一个关系表达式(x%3=0)&(x%7=0),用以判断x 同时为 3 和 7 的倍数时,关系表达式的值为真。11.表达式(int)(double)(5/2)+2.5)的值是4 12.若变量 x、y 已定义为 int类型且 x 的值为 99,y 的值为 9,请将输出语句printf(x/y=%d ,x/y);补充完整,使其输出的
3、计算结果形式为:x/y=11 13.数组与函数参数联系密切,当用数组元素作函数参数时,这时属于值传递;当数组名作参数时,这时属于地址 传递,对形参的改变可影响到实参。14.算术表达式5x+8xy/8-xy 对应的 C 表达式为 _5*x+8*x*y/8-x*y_15.逗号表达式(x=4*5,x*5),x+25 的值为 _45_16int i=1,j=2;则表达式+i+j 的值为 _4_ 17.用关系表达式或逻辑表达式表示条件:年份Year 能被 4 整除,但不能被100 整除或者能被400 整除 _(year%4=0&year%100!=0)|year%400=0_ 18一个 c 程序有且仅有
4、一个main()函数。19C程序的基本单位是函数。20C语言中的标识符只能由三种字符组成,它们是字母,数字和下划线。21 若有定义:int b=7;float a=2.5,c=4.7;则下面表达式的值为 5 500000 。a+(int)(b/3*(int)(a+c)/2)%4 22 若有定义:int a=2,b=3;float x=3.5,y=2.5;则下面表达式的值为3.500000。(float)(a+b)/2+(int)x%(int)y 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 20 页 -2 23设 int a1,b 2,c,d,e;执行 c(一 a 十十)十(十
5、十 b)d(b 一一)+(十十 a)一 a;e(a(十十 b)一(b(一一 a);后,变量a、b、c、d、e 的结果分别是【2】【3】【2】【3】【0】24假设变量x,为整形变量,则执行下面语句后x 的直为 -14 .x=7;x+=x-=x+x;25以下程序的执行结果是 c=k 。#include main()char c=A+10;printf(c=%cn,c);二、选择题(每题2分,共 30 分)(1)若 x,y 均定义为int型,z 定义为 double 型,以下不合法的scanf 函数调用语句是(D).A)scanf(“%d%d1x,%1e”,&x,&y,&z);B)scanf(“%2
6、d*%d%1f”,&x,&y,&z);C)scanf(“%x%*d%o”,&x,&Y);D)scanf(“%x%o%6.2f”,&x,&y,&z);(2)以下关于C 语言的叙述中正确的是(B)A)C 语言中的注释不可以夹在变量名或关键字的中间B)C 语言中的变量可以在使用之前的任何位置进行定义C)在 C 语言算术表达式的书写中,运算符两侧的运算数类型必须一致D)C 语言的数值常量中夹带空格不影响常量值的正确表示(3)以下 C 语言用户标识符中,不合法的是(D)A)_1 B)AaBc C)a_b D)a-b(4)若有定义:double a=22;int i=0,k=18;,则不符合C 语言规定的
7、赋值语句是(C)A)a=a+,i+;B)i=(a+k)=(i+k);C)i=a%11;D)i!a;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 20 页 -3(5)有以下程序 include main()char a,b,c,d;scanf(“%c%c”,&a,&b);c=getchar();d=getchar();printf(“%c%c%c%cn”,a,b,c,d);当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)(C)12 34 则输出结果是A)1234 B)12 C)12 3 D)12 34(6)若 a是数值类型,则逻辑表达式(a=1)
8、|(a!=1)的值是(A)A)1 B)0 C)2 D)不知道a的值,不能确定(7)以下选项中与if(a=1)a=b;else a+;语句功能不同的switch 语句是(B)A)switch(a)case:a=b;break;default:a+;B)switch(a=1)case 0:a=b;break;case 1:a+;C)switch(a)default:a+;break;case 1:a=b;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 20 页 -4 D)switch(a=1)case 1:a=b;break;case 0:a+;(8)有如下嵌套的if 语句if(ab
9、)if(ac)k=a;else k=c;else if(bc)k=b;else k=c;以下选项中与上述if 语句等价的语句是(C)A)k(ab)?a:b;k(bc)?b:c;B)k(ab)?(bc)?a:b):(bc)?b:c);C)k(ab)?(a c)?a:c):(bc)?b:c);D)k(ab)?a:b;k=(a c)?a:c;(9)有以下程序 includestdio.hmain()in i,j,m=1;for(i=1;i 3;i+)for(j=3;j O;j-)if(i*j)3)break;m=i*j;printf(m=%d n,m);程序运行后的输出结果是(A)A)m=6 B)m
10、=2 C)m=4 D)m=5 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 20 页 -5(10)一个 c 程序的执行是从(A ).A main()函数开始,直到main()函数结束B第一个函数开始,直到最后一个函数结束C.第一个语句开始,直到最后一个语句结束Dmain()函数开始,直到最后一个函数结束(11)有以下程序,其中k 的初值为八进制数#include main()int k011;printf(%dn,k+);程序运行后的输出结果是(D)A)12 B)11 C)10 D)9(12)一个 C语言程序是由(B)。A)一个主程序和若干子程序组成B)函数组成C)若干过程组成
11、D)若干子程序组成(13)以下关于return 语句的叙述中正确的是(B)A)一个自定义函数中必须有一条return 语句B)一个自定义函数中可以根据不同情况设置多条return 语句C)定义成void 类型的函数中可以有带返回值的return 语句D)没有 return 语句的自定义函数在执行结束时不能返回到调用处(14)下列选项中,能正确定义数组的语句是D A)int num0.2008;B)int num;C)int N=2008;int numN;D)#define N 2008 int numN;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 20 页 -6(15)设
12、char ch;以下正确的赋值语句是(B).A ch123;Bch xff;Cch 08;D ch”;(16)若有代数式3ae/bc,则不正确的C语言表达式是(C)A)a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3(17)设有定义double a10,*s=a;,以下能够代表数组元素a3 的是 B A)(*s)3 B)*(s+3)C)*s3 D)*s+3(18)以下正确的叙述是(D).A)在 C程序中,每行中只能写一条语句B)若 a 是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数C)在 C程序中,无论是正数还是实数,都能被准确无误
13、的表示D)在 C程序中,%是只能用于正数运算的运算符(19)】在 C语言中,要求运算数必须是整形的运算符是(D).A)/B)+C)!=D)%(20)设 int n3;则 n 十十的结果是(B ),n 的结果是(C )。A)2 B)3 C)4 D)5(21)设有定义:int x=2;,以下表达式中,值不为6 的是(D)A)x*=x+1 B)x+,2*x C)x*=(1+x)D)2*x,x+=2(22)若有以下定义int x10,*pt=x;则对 x 数组元素的正确应用是(B)A)*&x10 B)*(x+3)C)*(pt+10)D)pt+3(23)设有说明:char w;int x;float y
14、;double z;则表达式 w*x+z-y 值的数据类型为(D)。A)float B)char C)itn D)double.(24)已有定义int x;float y;且执行 scanf(“%3d%3f”,&x,&y);语句时从第一列开始输入数据12345678,则 x 的值为(B),y 的值为(B)。(注:表示空格)【1】A)12345 B)123 C)45 D)345【2】A)无定植 B)45.000000 C)678.000000 D)123.000000 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 20 页 -7(25)已有如定义和输入语句,若要求a1,a2,c1
15、,c2的值分别为10,20,A 和 B,当从第一列开始输入数据时,正确的数据输入方式是(D)。(注:表示回车)int a1,a2;char c1,c2;scanf(“%d%d”,&a1,&a2);scanf(“%c%c”,&c1,%c2);A)1020AB B)10 20 AB C)10 20 AB D)1020AB(26)根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为(A).main()char ch1,ch2,ch3;输入语句printf(“%c%c%c”,&ch1,&ch2,&ch3);输入形式:A B C 输出形式:A B scanf(“%c%c%c”,&ch1,
16、&ch2,&ch3);scanf(“%c,%c,%c”,&ch1,&ch2,&ch3);scabf(“%c%c%c”,&ch1,&ch2.&ch3);scanf(“%c%c”,&ch1,&ch2,&ch3);(27)设 X,Y 均为 FLOAT变量,则以下不合法的赋值语句是(B)A)+x;B)y=(x%2)/10;C)x*=y+8;D)x=y=10;(28)】有如下程序,对应正确的数据输入是()。#include main()float a,b;scanf(%f%f,&a,&b);printf(a=%f,b=%fn,a,b);A.2.04 5.56 B.2.01,5.67 C.A=2.04,B
17、=5.67 D.2.045.67 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 20 页 -8(29)巳知字母A的 ASCII 码是 65,以下程序的执行结果是()。#include main()char c1=A,C2=Y;printf(%d,%dn,c1,c2);A.A,Y B.65,65 C.65,90 D.65,89(30)以下程序的执行结果是().#include int i=010,j=10;printf(%d,%dn,+i,j-);A.11,10 B.9,10 C.010,9 D.10,9(31)为了避免嵌套的if-else语句的二义性,c 语言规定else 总是
18、与(C )组成配对关系。A)缩排位置相同的if B)在其之前末配对的if C)在其之前未配对的最近的if D)同一行上的if(32)当 a=1,b=3,c=5,d=4时,执行完下面一段程序后x 的值是(B).if(ab)if(cd)x=1;else if(ac)if(bd)x=2;else x=3;else x=6;else x=7;A)1 B)2 C)3 D)6(33)以下程序的执行结果是()。#include main()名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 20 页 -9 int sum,pad;sum=pad=5;pad=sum+;pad+;+pad;print
19、f(%dn,pad);A.7 B.6 C.5 D.4(34)若运行时给变量X输入 12,以下程序运行结果是(A).main()int x,y;scanf(“%d”,&x);y=x12?x+10:x-12;Printf(“%dn”,y);A)0 B)22 C)12 D)10(35)以下程序的运行结果是(D).main()int k=4,a=3,b=2,c=1;printf(“n%dn”,ka?k:cb?c:a);A)4 B)3 C)2 D)1(36)若 w,x,y,z,m均为 int型变量,则执行下面语句后的m值是(A).w=1;x=2;y=3;z=4;m=(wx)?w:x;m=(my)?m:y
20、;m=(mz)?m:z;A)1 B)2 C)3 D)4(37)对于 for(表达式 1;表达式 3)可理解为(A)A)for(表达式 1;1;表达式3)B)for(表达式 1:1;表达式3)C)for(表达式 1;表达式 1;表达式 3)D)for(表达式 1;表达式 3;表达式3)名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 20 页 -10(38)C语言中 while 和 do-while循环的主要区别是(A).A)do-while的循环体至少无条件执行一次B)while的循环控制条件比的循环控制条件严格C)do-while允许从外部转到循环体内D)do-while的循环体
21、不能是复合语句(39)以下程序的输出结果是(C )。#include main()int num=0;while(num=2)num+;pringtf(%dn,num);A.1 B.1 C.1 D.1 2 2 2 3 3 4(40)在 C语言中,引用数组元素时,其数组下标的数据类型允许是(C)A)整型常量 B)整型表达式 C)整型常量或整型表达式 D)任何类型的表达式(41)以下对一维整形数组a 的正确说明是(D)。A)int a(10);B)int n=10,an;C)int n;D)#define SIZE 10 scanf(“%d”,&n);int aSIZE;int an;(42)若有
22、说明:int a10;则对 a 数组元素的正确引用是(D)。A)a10 B)a3.5 C)a(5)D)a10-10 (43)以下对二维整形数组a 进行正确初始化的语句是(B)。A)int a2=1,01,5,2,3;B)int a3=1,2,3,4,5,6;C)int a23=1,2,3,4,5,6;D)int a3=1,0,1,1,1;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 20 页 -11(44)以下正确的说法是(A).A)如果在一个函数中的复合语句中定义了一个变量,则该变量只在该复合语句中有效B)在该函数中有效C)在本程序范围内均有效D)非法变量(45)以下不正确
23、的说法为(D).A)在不同的函数中可以使用相同名字的变量B)形式参数是局部变量C)在函数内定义的变量只在本函数范围内有效D)在函数内的复合语句中定义的变量在本函数范围内有效(46)以下程序的正确运行结果是(A).include main()int k=4,m=1,p;p=func(k,m);printf(“%d,”,p);p=func(k,m);printf(“%dn”,p);func(int a,int b)static int m=0,i=2;i+=m+1;m i a+b;return(m);A)8,17 B)8,16 C)8,20 D)8,8(47)变量的指针,其含义是指该变量的(B)。
24、A)值 B)地址 C)名 D)一个标志(48)若有说明:int*p,m=5,n;以下正确的程序段是(D)。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 20 页 -12 A)p=&n;B)p=&n;scanf(“%d”,&p);scanf(“%d”,*p);C)scanf(“%d”,&n);D)p=&n;*p=n;*p=m(49)选择出合法的if语句(设 int x,a,b,c;)(A).A)if(ab)x 十十;B)if(a b)x 十+;C)if(a b)x 十十;D)if(a b)x 十十;(50)逻辑运算符两侧运算对象的数据类型(D).A)能是 0 或 1 B)只能是
25、 0 或非 0 正数 C)只能是整型或字符型数据 D)可以是任何类型的数据三、读、填程序(每题5 分,共 30 分)1.有以下程序#include main()char c1,c2;scanf(“&c”,&c1);while(c190)scanf(“&c”,&c1);c2=c1+32;printf(“&c,&cn”,c1,c2);程序运行输入65 回车后,能否输出结果、结束运行(请回答能或不能)能2.下列程序运行后的输出结果是【*名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 20 页 -13 *】。#include main()int i,j,k;for(i=1;i=4;i+
26、)for(j=1;j=20-3*i;j+)printf();for(k=1;k0;i-)for(j=1;j=20-3*i;j+)printf();for(K=1;k=2*i-1;k+)printf(%3s,*);printf(n);3.以下程序可求出所有的水仙花数。(提示:所谓水仙花数是指一个三位正整数,其各位数字之和的立方之和等于该正整数。例如:407=444+000+77 7。故 407 是一个水仙花数。)请填空。main()int x,y,z,a8,m,i=0;printf(“The special numbers are(in the arrange of 1000):n”);for(
27、m=100;m1000;m+)x=m/100;y=m/10-x*10 ;z=m%10;if(x*100+y*10+z=x*x*x+y*y*y+z*z*z)ai=m;i+;名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 20 页 -14 for(x=0;xi;x+)printf(“%6d”,ax)4.请将以下程序中的函数声明语句补充完整#include int max(int a,int b);main()int x,y,(*p)();p=max;printf(“&d n”,&x,&y);Int max(int a,int b)return(ab/a:b);5以下程序的输出结果为
28、【123.456000,123.457,123.4560,8765.456700,8765.457,8765.4567,8765.4567】.#include main()float a=123.456;double b=8765.4567;printf(“(1)%fn”a);printf(“(2)%14.3fn”,a);printf(“(3)%6.4fn”,b);printf(“(4)%1fn”,b);printf(“(5)%14.3fn”,b);printf(“(6)%8.4fn”,b);printf(“(7)%.4fn”,b);6.以下函数按每行8个输出数组中的数据void fun(in
29、t*w,int n)int i;for(i=0;in;i+)_ if(i%8=0)printf(“n”);_ printf(“%d”,w);printf(“n”);名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 20 页 -15 7.用数组方法处理Fibonacci数列问题,要求按每行5 个输出数组中的20 个数据,完成填空。#include void main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(“n”);printf(%12d,fi);printf(n);
30、8.下面程序的功能是用do_while语句求 1 至 100 之间满足“用3 除余 2;用 5 除余 3;用 7 除余 2”的数,且一行只打印五个数,请填空#include main()int I=1,j=0;doif(i%3=2&i%5=3&i%7=2 )printf(“%4d”,I);j=j+1;if(j%5=0)printf(“n”)i=i+1;while(i1000);9.有以下程序#include main()int i,j,a3=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)for(j=i;j3;j+)printf(“%d%,aij);printf(n);程序运行
31、后的输出结果是123569 。名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 20 页 -16 10.以下程序的运行结果是输出如下图形。请填空。*#include void a(int i)int j,k;for(j=0;j=7-i;j+)printf(“);for(k=0;k 2*i+1 ;k+)printf(“*”);printf(“n”);main()int i;for(i=0;i=0;i-)a(i);11.下面程序的功能是【计算斐波拉契级数第7 项的值】,运行结果是【k=13】。long fib(int g)switch(g)case 0:return0;case 1:
32、case 2:return1;return(fib(g-1)+fib(g-2);main()long k;k=fib(7);printf(“k=%dn”,k);名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 20 页 -17 12.以下程序的功能是:将值为三位正整数的变量x 中的数值按照个位、十位、百位的顺序拆分并输出。请填空。#include main()int x=256;printf(%d-%d-%dn,x%100%10 ,x/10%10,x/100);13统计字符个数#include void main()char c;int letters=0,space=0,dig
33、it=0,other=0;printf(请输入一行字符:n);while(c=getchar()!=n)if(c=a&c=A&c=0&c=9)digit+;else other+;printf(字母数:%dn 空格数:%dn 数字数:%dn 其它字符数:%dn,letters,space,digit,other);四、编程题(共24 分)1.编写一个C 程序,输出如下的图形。*名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 20 页 -18 解:#include void main()char diamond79=,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*;i
34、nt i,j;for(i=0;i7;i+)for(j=0;j9;j+)printf(%c,diamondij);printf(n);2.求 Fibonacci 数列前 40 个数。解:#include void main()long int f1,f2;int i;f1=1;f2=2;for(i=1;i=20;i+)printf(%12ld%12ld,f1,f2);if(i%2=0)printf(n);f1=f1+f2;f2=f2+f1;3.用选择法对10 个整数按由大到小顺序排序(用指针方法处理)。解:#include void main()void sort(int*x,int n);in
35、t*p,i,a10;p=a;名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 20 页 -19 for(i=0;i10;i+)scanf(%d,p+);p=a;sort(p,10);for(p=a,i=0;i10;i+)printf(%d,*p);p+;printf(n);void sort(int*x,int n)int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;j*(x+k)k=j;if(k!=i)t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;4.用递归法求n!。解:#include void main()long fac(
36、int n)int n;long y;printf(input an integer number:)scanf(%d,&n);y=fac(n);printf(%d!=%ldn,n,y);名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 20 页 -20 long fac(int n)long f;if(n0)printf(n0,data error!)else if(n=0,n=1)f=1;else f=fac(n-1)*n;return(f);5.McCathy 函数定义如下,用递归方法编程计算xM的值。100)11(10010 xxMMxxxM解:#include void main()int M(int x);int x;int y;printf(请输入 x 的值?);scanf(%d,&x);y=M(x);printf(%d,y);int M(int x)if(x100)y=x-10;else y=M(M(x+11);名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 20 页 -