C语言程序设计习题集答案.docx
《C语言程序设计习题集答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题集答案.docx(69页珍藏版)》请在冰豆网上搜索。
![C语言程序设计习题集答案.docx](https://file1.bdocx.com/fileroot1/2022-11/25/3f628ddf-1f13-404d-a806-40539ff67c39/3f628ddf-1f13-404d-a806-40539ff67c391.gif)
C语言程序设计习题集答案
《高级语言程序设计》
习题集
(答案可能有错,仅供参考!
)
淮南师范学院
计算机与信息工程系
2013年5月
选择及填空题
1.C语言程序编译过程中产生的文件有(B)。
A.索引文件和文本文件两种B.目标文件和可执行文件
C.二进制文件一种D.ASCII码文件和二进制文件两种
2.C语言源程序的基本单位是(A)。
A.函数B.标识符C.表达式D.语句
3.C程序的运行需要经过编译和连接两步进行。
4.C语言的编译单位是文件。
5.C语言源程序的基本单位是(A)。
A.函数B.标识符C.表达式D.语句
6.以下叙述正确的是(C)。
A)C语言比其他语言高级
B)C语言可以不用编译就能被计算机识别执行
C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D)C语言出现的最晚、具有其他语言的一切优点
7.在一个C语言程序中(B)。
A)main函数必须出现在所有函数之前B)main函数可以在任何地方出现
C)main函数必须出现在所有函数之后D)main函数必须出现在固定位置
8.C++语言中工程文件的扩展名是(B)。
A..cppB..prjC..cD..obj
9.C文件的扩展名是(C)。
(A).cpp(B).prj(C).c(D).txt
1.符合结构化原则的三种基本控制结构是:
选择结构、循环结构和顺序结构。
2.C语言中用于结构化程序设计的三种基本结构是()。
A)顺序结构、选择结构、循环结构B)if、switch、break
C)for、while、do-whileD)if、for、continue
1.若有以下定义,则能使值为3的表达式是(D)。
intk=7,x=12;
A.x%=(k%=5)B.x%=(k-k%5)C.x%=k-k%5D.(x%=k)-(k%=5)
2.以下运算符中,优先级最高的运算符是(D)。
A.=B.!
=C.*(乘号)D.()
3.经过以下语句定义后,表达式z+=x>y?
++x:
++y的值为(C)。
intx=1,y=2,z=3;
A.2B.3C.6D.5
4.下列字符序列中,不可用作C语言标识符的是(B)。
A.b70B.#abC.symbolD.a_1
5.以下不正确的叙述是(D)。
A.在C程序中所用的变量必须先定义后使用
B.程序中,APH和aph是两个不同的变量
C.若a和b类型相同,在执行了赋值语句a=b;后b中的值将放入a中,b中的值不变
D.当输入数值数据时,对于整型变量只能输入整型值;对于实型变量只能输入实型值
6.能正确表示逻辑关系:
"a≥10或a≤0"的C语言表达式是(D)。
A.a>=10ora<=0B.a>=0|a<=10C.a>=10&&a<=0D.a>=10||a<=0
7.C语言的注释定界符是(D)。
A.{}B.[]C.**D./**/
8.以下运算符中,优先级最高的运算符是(D)。
A.=B.!
=C.*(乘号)D.()
9.若希望当A的值为奇数时,表达式的值为"真",A的值为偶数时,表达式的值为"假",则以下不能满足要求的表达式是(C)。
A.A%2==1B.!
(A%2==0)C.!
(A%2)D.A%2
10.设int类型的数据长度为2字节,则该类型数据的取值范围是(D)。
A.0至65536B.0至65535C.-32767至32768D.-32768至32767
11.在C语言中逻辑值“真”是用(B)表示的。
()
A.预定义为真值的宏B.非零值C.正数D.非零整数
12.若定义:
inta=511,*b=&a;,则printf("%d\n",*b);的输出结果为(D)。
A.确定值B.a的地址C.512D.511
13.设在tc2.0中有整型变量x,y,z均为3,表达式(x++)+(y++)+(z++)的值是(D)。
A.6B.7C.8D.9
14.设有语句scanf(“%d,%d”,&m,&n);要使m、n的值依次为2,3,正确的输入是(B)。
A.2⊔3↙B.2,3↙C.2;3D.2↙
15.已知inta=5,b=7,c=3;则逻辑表达式a
A.1B.0C.3D.4
16.以下定义语句中正确的是(C)。
A)chara='A'b='B';B)floata=b=10.0;C)inta=10,*b=&a;D)float*a,b=&a;
17.设a=6,b=4,则表达式b*=a+3的值为(D)。
A)3B)18C)27D)36
18.有如下程序段,其输出结果是(B)。
inta=3;
floatb=15.6,f=1.5;
printf(“%d”,a+(int)b/2+(int)f%3);
A)10B)11C)12D)13
19.已知inta=5,b=7,c=3;则逻辑表达式a
A)1B)=0C)3D)4
20.若x、i、j和k都是int型变量,计算x=(i=4,j=16,k=32)表达式后,x的值为(C)。
(A)4(B)16
(C)32(D)52
21.执行以下语句后,a,b的值分别为(C)。
inta,b,c;a=b=c=1;++a||++b&&++c;
(A)2,2 (B)1,1
(C)2,1 (D)1,2
22.若有定义:
inta=8,b=5,c;执行语句c=a/b+0.4;后c的值为(B)。
(A)1.4(B)1
(C)2.0(D)2
23.设变量a是整形,f是实型,i是双精度型,则表达式10+′a′+i*f值的数据类型为(C)。
A.intB.floatC.doubleD.不确定
24.在C语言中,char型数据在内存中的存储形式是(A)。
A.补码B.反码C.源码D.ASCII码
25.判断char型变量cl是否为小写字母的正确表达式为(D)。
A.’a’<=c1<=’z’B.(c1>=a)&&(c1<=z)
C.(‘a’>=c1)(‘z’<=c1)D.(c1>=’a’)&&(c1<=’z’)
26.以下不能定义为用户标识符的是(C)。
A.MAINB._HJC.208ongD.LINE12
27.设有intx,y;以下语句判断x和y是否相等,正确的说法是该语句(B)。
if(x=y)printf("xisequaltoy.");
A.语法错B.不能判断x和y是否相等
C.编译出错D.能判断x和y是否相等
28.以下各项是错误的整型常量的是(B)。
A.-0xcdfB.018C.0xeD.011
29.已知intx=10,y=20,z=30;以下语句执行后x,y,z的值分别是(C)。
if(x>y)z=x;x=y;y=z;
(A)x=10,y=20,z=30(B)x=20,y=30,z=10
(C)x=20,y=30,z=30(D)x=20,y=30,z=20
30.设x=3,y=-4,z=5,则表达式!
(x>y)+(y!
=z)||(x+y)&&(y=z)的值是`。
31.为表示关系x≥y≥z,正确的C语言逻辑、关系表达式为x>=y&&y>=z。
32.有inta=3,b=4,c=5,x,y;,则以下表达式的值为0
!
(x=a)&&(y=b)&&c
33.在C语言的表达式中,x=x+5用复合运算符可以写成x+=5。
34.已知赋值语句zhang.year=1985;可判断zhang是结构体类型的变量;
35.若a是int型变量,且a的初值为6,则计算表达式“a+=a-=a*a”后a的值为-60
36.当a=3,b=2,c=1时,表达式f=a>b>c的值是0.
37.若x和n均是int型变量,且x的初值为12,n的初值为5,则执行表达式“x%=(n%=2)”后,x的值为0。
38.在C语言中,表示逻辑"真"值用非0值.
39.与if(x==0)等价的表达式写法写法是!
x。
40.若s是int型变量,且s=6,则表达式“s%2+(s+1)%2”的值为1。
41若x是int型变量,则执行表达式“x=(a=4,6*2)”后,x的值为12。
42.表达式pow(2.8,sqrt(double(x)))值的数据类型为double。
1.若有以下程序段(n所赋的是八进制数):
intm=32767,n=0327;
printf("%d,%o\n",m,n);
执行后输出结果是(A)。
A)32767,327B)32767,0327C)32767,777D)32767,0777
2.若有说明语句:
inta,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
A)scanf("%d%d%d",&a,&b,d);B)scanf("%d%d%d",&a,&b,&d);
C)scanf("%d%d%d",a,b,d);D)scanf("%d%d%d",a,b,*d);
3.若变量x、y已定义为int类型且X的值为99,y的值为9,请将输出语句
printf(_”x/y=%d”____,x/y);补充完整,使其输出的计算结果形式为:
x/y=11。
4.在scanf函数中,变量前加&表示变量的地址。
5.以下程序的运行结果是computer,□□com。
□表示空格
main()
{printf("%s,%5.3s","computer","computer");}
6.若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是5.0,4,c=3。
intb,c;floata;
scanf("%f,%d,c=%d",&a,&b,&c);
1.C语言中,while和do…while循环的主要区别是(B)。
A.while的循环控制条件比do…while的循环控制条件严格
B.do…while的循环体至少无条件执行一次
C.do…while允许从外部转到循环体内
D.do…while的循环体不能是复合语句
2.现已定义整型变量inti=1;执行循环语句while(i++<5);后,i的值为(C)。
A)1B)5C)6D)以上三个答案均不正确
3.执行语句:
for(i=1;i<=9;i++)后;变量i的值是(A)。
A.10B.9C.不定 D.11
4.以下描述正确的是(C)。
A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。
B.do-while循环由do开始,用while结束,在while(表达式)后面不能写分号。
C.在do-while循环体中,一定要有能使while后面表达式的值变成零(“假”)的操作。
D.do-while循环中,根据情况可以省略while。
5.对do...while语句错误的描述是(C)。
A.可构成多重循环结构B.循环次数不可能为0
C.循环次数可能为0D.先执行后判断。
6.执行下面的程序段后,k值是36。
k=1;n=263;
do{k*=n%10;n/=10;}while(n);
1.若定义数组并初始化inta[10]={1,2,3,4},以下语句中(D)成立。
。
A.若引用a[10],编译时报错
B.若引用a[10],连接时报错
C.若引用a[10],运行时出错
D.若引用a[10],系统不报错
2.下列选项中正确的语句组是(D)。
A.chars[8];s={"Beijing"};
B.char*s;s={"Beijing"};
C.chars[8];s="Beijing";
D.char*s;s="Beijing";
3.以下对二维数组a的正确说明是(C)。
A.inta[3][]B.floata(3,4)C.doublea[1][4]D.floata(3)(4)
4.C标准库函数中,字符串处理函数的原形在(C)头文件中。
A.stdio.hB.math.hC.string.hD.ctype.h
5.以下一维数组a的正确定义是(D)。
A.inta(10);B.intn=10,a[n];
C.intn;D.#defineN10
scanf(“%d”,&n);inta[N];
inta[n];
6.有数组定义:
chararray[]=”Computer”;则数组array所占的存储空间为(C)。
A.7个字节B.8个字节C.9个字节D.10个字节
7.有数组定义:
chararray[]=”Computer”;则数组array所占的存储空间为(C)。
A)7个字节B)8个字节C)9个字节D)10个字节
8.以下不能正确定义二维数组的选项是(D)。
A)inta[2][2]={{1},{2}};B)inta[][2]={1,2,3,4};
C)inta[2][2]={{1},2,3};D)inta[2][]={{1,2},{3,4}};
9.数组定义为:
inta[4][5];引用“a[1]+3”表示的是(A)。
(A)a数组第2行第4列元素的地址(B)a数组第2行第4列元素的值
(C)a数组第4行的首地址(D)a数组第1行第3个元素的地址
10.判断字符串s1是否大于字符串s2,应当使用的表达式是(D)。
(A)if(s1>s2)(B)if(a==b)
(C)if(strcpy(s2,s1)>0)(D)if(stcmp(s1,s2)>0)
11.字符串"a"在内存中占据的字节个数为(C)。
A.0B.1C.2D.3
12.若二维数组a有m列,则在a[i][j]前面的元素个数为(B)。
A.j*m+iB.i*m+jC.i*m+j-1D.i*m+j+1
13.下面正确的数据声明的是(D)。
A.chara[][5]={“math”,“phy”,“chemi”};
B.intb[3][3]={{1,2,3},4,5,6,7,{8,9}};
C.floatc[sizeof(sin
(1))]={1,‘\’};
D.charch[][10]={“Beijing”,“Nanjing”},
14.以下是正确的字符常量是(B)。
A."c"B.'\\'C.'W1'D."\32a"
15.若二维数组a有m列,则在a[i][j]前面的元素个数为(B)。
Aj*m+iBi*m+jCi*m+j-1Di*m+j+1
16.在C语言中,二维数组元素的内存中的存放顺序是行序优先。
17.下面程序的功能是将字符串a中的下标为奇数的元素由小到大排序,其他元素不变,请填空。
main()
{chara[]="students",t;inti,j;
for(i=1;i<7;i+=2)
for(j=i+2;j<8;j+=2)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
puts(a);
}
1.在C语言中以下正确的说法是(A)。
A.实参和与其对应的形参各占用独立储单元
B.实参和与其对应的形参共占用一个单元
C.只有当实参和与其对应的形参同名共占用存储单元
D.形参是虚拟的,不占用存储单元
2.以下正确的函数形式是(D)。
A.doublefun(intx,inty){z=x+y;returnz;}
B.fun(intx,y){intz;returnz;}
C.fun(x,y){intx,y;doublez;z=x+y;returnz;}
D.doublefun(intx,inty){doublez;z=x+y;returnz;}
3.定义C语言函数时,形参可以是(B)。
A.常量B.变量C.表达式D.宏定义
4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是(B)。
A.float型B.int型C.long型D.double型
5.以下说法中正确的是(C)。
A.C语言程序总是从第一个定义的函数开始执行
B.在C语言程序中,要调用的函数必须在main函数中定义
C.C语言程序总是从main函数开始执行
D.C语言程序中,main函数必须放在程序的开始部分
6.为了提高程序的运行速度,在函数中对于整型或指针可以使用的变量类型是(B)。
A.autoB.registerC.staticD.extern
7.数组名作为实参传递给被调用的函数时,形参获得的是(C)。
A.该数组第一个元素的值B.该数组所有元素的值
C.该数组第一个元素的首地址D.该数组所有元素的首地址
8.以下函数test返回值类型为(A)。
test(intx)
{printf(“%f\n”,(float)x);
}
A)intB)floatC)voidD)不确定或错误
9.若函数中有定义语句:
intk;,则下列说法正确的是(B)。
A.系统将自动给k赋初值0B.这时k中的值不确定
C.系统将自动给k赋初值-1D.这时k中无任何值
10.下面函数
f(doublex)
{printf(“%6d”,x);}的类型为(C)。
A.实型B.void类型C.int类型D.均不正确
11.若使用一维数组名作函数实参,则以下正确的说法是(A)。
A.必须在主调函数中说明此数组的大小
B.实参数组类型与形参数组类型可以不匹配
C.在被调用函数中,要设置形参数组的大小
D.实参数组名与形参数组名必须一致
12.在C语言中,以下说法中正确的是(A)。
A.实参与其对应的形参各占用独立的存储单元
B.实参与其对应的形参占用同一个存储单元
C.只有当实参与形参同名时才占用同一个存储单元
D.实参占用存储单元,但形参是虚拟的,不占用存储单元
13.若用数组名作为函数调用的实参,传递给形参的是(A)。
(A)数组的首地址 (B)数组的第一个元素
(C)数组中全部元素的值(D)数组元素的个数
14.C语言中,简单变量做实参时,它和对应的形参之间的数据传递方式是(B)。
(A)地址传递 (B)单向值传递
(C)由实参传给形参,再由形参传递给实参
(D)同用户指定传递方式
15.下列叙述中错误的是(B)。
A.引用函数说明中指定的形参名,不必与函数定义中对应的形参名相同。
B.不能用extern定义一个外部变量、数组。
C.无论在函数外还是在函数内部引用自定义的函数,都可以不写extern关键字。
D.用extern说明引用一个外部数组时,可以不给出数组大小。
16.以下正确的函数定义形式是(C)。
A.doublefun(intx,inty)B.doublefun(intx;inty)
C.doublefun(intx,inty);D.doublefun(intx,y);
17.若用数组名作为函数调用的实参,传递给形参的是(C)。
(A)数组的第一个元数;(B)数组中全部元素的值;
(C)数组的首地址;(D)数组元素的个数。
18.已知函数定义为:
intstat(int a,float*p)
{……………}
则此函数的两个参数类型分别是整型、指向浮点数的指针类型。
19.在TC中,printf()函数输出表列的求值顺序是从右向左。
20.在C语言中,函数默认是全局的。
(填“全局的”或“局部的”)
1.设有宏定义:
#defineIsDIV(k,n)((k%n==1)?
l:
0)且变量m已正确定义并赋值,则宏调用:
IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是(D)。
A.判断m是否能被5或者7整除
B.判断m是否能被5和7整除
C.判断m被5或者7整除是否余l
D.判断m被5和7整除是否都余1
1.有以下程序
#include
voidf(int*p,int*q);
main()
{intm=1,n=2,*r=&m;
f(r,&n);
printf("%d,%d",m,n);
}
voidf(int*p,int*q)
{p=p+1;
*q=*q+1;}
程序运行后的输出结果是(A)。
A.1,3B.2,3C.1,4D.l,2
2.对于类型相同的指针变量,不能进行(B)运算。
A.-B.+C.=D.>
3.若有inta[10]={1,2,3,4,5,,6,7,8,9,10};*p=a;则值为9的表达式是(B)。
A.*p+9B.*(p+8)C.*p+=9D.p+8
4.变量p为指针变量,若p=&a,下列说法不正确的是(D)。
A.&*p==&aB.*&a==aC.(*p)++==a++D.*(++p)==++a
5.设有语句”inta[]={1,3,5,7,9},*p=&a[0];”则值为7的表达式是(C)。
A.*p+3B.*p+4C.*(p+3)D.*(p+4)
6.已知inta[2][3]={{1,3,5},{2,4,6}};则*(*(a+1)+2)的值是(A)。
A.6B.3C.5D.4
7.已知inta[2][3]={{1,3,5},{2,4,6}};则*(*(a+1)+2)的值是(A)。
A)6B)3C)5D)4
8.已知i