C语言专科第一学期期末考试复习题.docx
- 文档编号:17810178
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:17
- 大小:24.56KB
C语言专科第一学期期末考试复习题.docx
《C语言专科第一学期期末考试复习题.docx》由会员分享,可在线阅读,更多相关《C语言专科第一学期期末考试复习题.docx(17页珍藏版)》请在冰点文库上搜索。
C语言专科第一学期期末考试复习题
1。
以下叙述正确的是()。
A)在C程序中,main函数必须位于程序的最前面
B)C程序的每行中只能写一条语句
C)C语言本身没有输入输出语句
D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误
答案C解析:
1、main函数在程序中的位置是任意的
2、C程序的书写要求比较宽松,一行可以写多条语句,也可以一条语句分多行写;
3、C语言本身不带输入输出语句
4、注释中的内容在程序的运行过程中是透明的,对系统是不可见的。
相关知识点:
1、任何一个C程序必须有一个mian函数,而且只能有一个
2、程序总是从main函数开始执行,而且是最后回到main函数结束。
3、函数是组成程序的基本单位。
2.以下有4组用户标识符,其中合法的一组是()。
A)For-subCase B)4dDOSize
C)f2_G3IFabc D)WORDvoiddefine
答案C解析:
标识符(变量名)命名规则:
1、不能与关键字相同。
2、只能从字母、数字、下划线三者里面选择结合。
3、数字不能在第一位。
3、以下选项中合法的字符常量是()。
A)“B” B)‘\010’ C)68 D)D
答案B解析:
1、字符常量必须是用单引号括起来2、转义字符需要注意(第一种’\t’,’\n’,’\r’之类,第二种’\0’开头,后面是1到3位8进制数,比如’\01’,’\025’,’\0123’,注意,因为是8进制,所以不能出现7以后的数字,比如’\039’就错了。
第三种是以’\0x’开头,后面一位到2位十六进制数字,比如’\0xa2’,’\0x5’都是对的,它们在内存中存放的时候存放的是它们对应的ASCII值,比如’\025’等价于八进制的(25)=2*8+5=21(10进制的))
4、设变量a是整型,f是实型,i是双精度型,则表达式10+a+i*f值的数据类型为()。
A)int B)float C)double D)不确定
答案C解析:
不同类型数据的运算表达式的最后数据类型的原则是:
1、如果其中有变量是双精度(double)的,结果必然为double
2、如果没有double类型,但是有2个或者2个以上float类型,结果也为double
3、如果没有double而且只有一个float,其他是int或者char或无符号整型之类,结果都为float.(也就是只要没有double,而且只有一个float,结果为float)
3、在没有double和float的情况下,结果一般为int
5、.以下程序的输出结果是
main()
{
charc=‘z';
printf(“%c”,c-25);
}
A)a B)Z C)z-25 D)y
答案A解析:
字符在内存当中存放的是它们的ASCII码(0到255之间的数据),所以在该范围内,字符变量和整型数据之间可以进行相应的运算。
小写字母在内存中存放从97开始,
大写字母从65开始。
6、设有int x=11;则表达式(x++*1/3)的值是()。
A)3 B)4 C)11 D)12
答案:
A解析:
++在变量之后,先使用后自加,所以11*1/3结果为3
7、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是()。
A)7 B)8 C)6 D)2
答案:
B解析:
逗号表达式的结果为最后表达式的值。
需要注意的是:
逗号表达式的运行原理,无论如何,从左到右按顺序执行一遍,无论是赋值还是其他运算,但是++在变量之后,先用后加。
区分在printf中的参数求值
8、以下程序的输出结果是()。
#include
main()
{
inta=010,b=10;
printf(“%d,%d\n”,a++,--b);
}
A)10,10 B)8,10 C)10,9 D)8,9
答案:
D解析:
给整型数据赋值有三种形式,八进制(以0开头),十进制,十六进制(以0x开头)
9、以下程序的输出结果是()。
main()
{intk=17;
printf("%d,%o,%x\n",k,k,k);
}
A)17,021,0x11 B)17,17,17
B)17,0x11,021 D)17,21,11
答案A解析:
%d,%o,%x分别表示十进制,八进制,十六进制
10、若变量已正确说明为float类型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是():
A)10<回车> B)10.0,22.0,33.0<回车>
22<回车>
33<回车>
C)10.0<回车> D)1022<回车>
22.033.0<回车>33<回车>
答案B解析:
数据从键盘上接收,数据隔开默认的三种方式1>空格2>回车键3>tab键,而且三者可以混合着用。
11、若有条件表达式(exp)?
a++:
b--,则以下表达式中能完全等价于表达式(exp)的是()。
A)(exp==0) B)(exp!
=0) C)(exp==1) D)(exp!
=1)
答案B解析:
条件表达式:
表达式1?
表达式2:
表达式3,当表达1为真的时候,整个条件表达式就取表达式2的值,否则取表达式3的值。
令注意:
任何非零的结果都为真,所以判断一个条件是否成立,只关心它是否不等于0,至于具体是值多少都无所谓。
12、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是()。
if(a
if(c else if(a if(b elsex=3; elsex=6; elsex=7; A)1 B)2 C)3 D)6 答案B: 解析: else的配对原则,else总是与离它最近的而且没有配对的if来配对, 一般先把第一个else配对好,然后逐个配对。 13、已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是()。 if(x>y) z=x;x=y;y=z; A)x=10,y=20,z=30 B)x=20,y=30,z=30 C)x=20,y=30,z=10 D)x=20,y=30,z=20 答案B: 解析: if语言控制的范围只有一条语句,后面两条是按程序的流程顺序执行,即无论if是否成立都必须得执行。 14、29.有如下程序 main() {intx=1,a=0,b=0; switch(x) { case0: b++; case1: a++; case2: a++;b++; } printf(“a=%d,b=%d\n”,a,b); } 该程序的输出结果是()。 A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 D)a=2,b=2 答案A: 解析: switch的多分支选择规则是根据小括号里面表达式的结果与CASE后面的值相等来决定运行的入口,然后一直往下运行,直到碰到break结束,或者一直到整个switch语句的结束。 15、以下程序的输出结果是()。 main() { inta=-1,b=4,k; k=(++a<0)&&! (b--<=0); printf(“%d%d%d\n”,k,a,b); } A)104 B)103 C)003 D)004 答案D: 解析: 这题考察了++以及&&的短路效应 ++在前,所以先运算后使用,所以++a<0为假,对于&&而言,必须二者为真结果方为真,所以如果已经知道前面一个表达式的结果为假,后面的已经没有判断的必要,计算机对后面的根本不执行,这称之为短路效应。 16、若变量a、i已正确定义,且i已正确赋值,合法的语句是()。 A)a==1 B)++i; C)a=a++=5; D)a=int(i); 答案B: 解析: A掉了分号,C中: 对于复合语句,左边智能出现变量加运算符号(+、-、*、/、%)。 D中强制类型转换要求目标类型加小括号。 17、下面程序段的运行结果是()。 intn=0; while(n++<=2); printf(“%d”,n); A)2 B)3 C)4 D)有语法错 答案: C解析: n++<2,这条语句实际上有两步,先判断n<=2,然后进行n++;当n<=2不成立的时候决定的是循环体不做了,但是n++必须做,可以理解为表达式2有2条指令,而且必须都执行,指令一决定了循环体是否还做,指令二无条件执行。 18、若有如下语句 intx=3; do{printf(“%3d”,x-=2);}while(! (--x)); 则上面程序段()。 A)输出的是1 B)输出的是1和-2 C)输出的是3和0 D)是死循环 答案B: 解析: do{}while循环是先执行后判断的循环,所以第一次输出的是x=x-2=1,然后进行—变为0,对0进行取反为真,所以循环再次执行,x=0-2=-2,即输出-2,然后再次—得到-3,因为-3是非零的数据,所以取反就为0,即do{}while循环的判断条件为假,不再执行。 注意: 无论是while还是do…while,只要判断的表达式结果为零,循环就不执行。 由于任何非零的数据都当做为真,所以我们一般只关注表达式的结果是为0还是不为0. 比如: while (1);这就是一个无限循环,因为里面是个不变化的常量,当然给其他的非零值也是一样的,比如while(-1);while(6);同理,if后面表达式的判断也是这样。 19、下面程序的运行结果是()。 #include main() {inta=1,b=10; do {b-=a;a++;} while(b--<0); printf(“a=%d,b=%d\n”,a,b); } A)a=3,b=11 B)a=2,b=8 C)a=1,b=-1 D)a=4,b=9 答案: C解析: 很显然,循环结束的话必须是b--<0;所以b为0的时候表达式不成立,再进行--,所以b的值就为-1 20、设有程序段 intk=10; while(k=0)k=k-1; 则下面描述中正确的是()。 A)while循环执行10次 B)循环是无限循环 C)循环体语句一次也不执行 D)循环体语句执行一次 答案: C解析: while的条件表达式为k=0,这是一个赋值表达式,它的结果等于所赋变量的值,所以该题表达式的结果为0,循环一次也不执行。 (赋值表达式所产生的结果等于所赋变量的值) 注意: 如果里面是k等于其他非零的数据,比如写成k=2,那么该表达式的结果就是一个非零的常量,也就是一个无限循环了。 21、语句while(! E);中的表达式! E等价于()。 A)E==0 B)E! =1 C)E! =0 D)E==1 答案: A解析: 想要表达式为真,即表达式的值不为0,即! E! =0E==0 22、t为int类型,进人下面的循环之前,t的值为0,则以下叙述中正确的是()。 while(t=l) {……} A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 答案: B解析: 赋值表达式的值等于所赋变量的值。 如果换成t=-1呢? 结果仍然是B,在判断中,任何非0的结果都当做为真,而真我们用1表示 24、假定所有变量均已正确说明,下列程序段运行后x的值是()。 a=b=c=0;x=35; if(! a)x--; elseif(b);if(c)x=3; elsex=4; A)34 B)4 C)35 D)3 答案: B 25、以下程序的输出结果是()。 main() {inta,b; for(a=1,b=1;a<=100;a++) {if(b>=20)break; if(b%3==1) {b+=3; continue; } b-=5; } printf(“%d\n”,a); } A)7 B)8 C)9 D)10 答案: B解析: break能够结束所在的那层循环,continue提前结束本次循环,接近进入下次循环的判断。 首先的清楚for循环能控制的范围—即循环体。 26、以下程序的输出结果是()。 main() {inti,j,x=0; for(i=0;i<2;i++) {x++; for(j=0;j<=3;j++) {if(j%2)continue; x++; } x++; } printf(“x=%d\n”,x); } 答案: B 27、运行以下程序后,如果从键盘上输入6514<回车>,则输出结果是()。 main() {intm,n; scanf(“%d%d”,&m,&n); while(m! =n) {while(m>n)m-=n; while(n>m)n-=m; } printf(“m=%d\n”,m); } A)m=3 B)m=2 C)m=1 D)m=0 答案: C 28、设有数组定义: chararray[]="China";则数组array所占的空间为()。 A)4个字节 B)5个字节 C)6个字节 D)7个字节 答案: C 29、假定int类型变量占用两个字节,若有定义: intx[10]={0,2,4};则数组x在内存中所占字节数是()。 A)3 B)6 C)10 D)20 答案: D 30、执行下列程序时输入: 123<空格>456<空格>789<回车>,输出结果是()。 main() {chars[100]; intc,i; scanf("%c",&c); scanf("%d",&i); scanf("%s",s); printf("%c,%d,%s\n",c,i,s); } A)123,456,789 B)1,456,789 C)1,23,456,789 D)1,23,456 答案: D 31、以下程序的输出结果是()。 main() {charw[][10]={"ABCD","EFGH","IJKL","MNOP"},k; for(k=1;k<3;k++)printf("%s\n",w[k]); } A)ABCD B)ABCD C)EFG D)EFGH FGHEFGJKIJKL KLIJO M 答案: D 32、函数调用strcat(strcpy(str1,str2),str3)的功能是()。 A)将串str1复制到串str2中后再连接到串str3之后 B)将串str1连接到串str2之后再复制到串str3之后 C)将串str2复制到串str1中后再将串str3连接到串str1之后 D)将串str2连接到串str1之后再将串str1复制到串str3之后 答案: C 33.有以下定义: charx[]=“abcdefg”; chary[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’}; 则正确的叙述为()。 A)数组x和数组y等价 B)数组x和数组y的长度相同 C)数组x的长度大于数组y的长度 D)数组x的长度小余数组y的长度 答案: C 34、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。 A)地址传递 B)单向值传递 C)由实参传给形参,再由形参传回实参 D)传递方式由用户指定 答案: B 35、以下函数值的类型是()。 fun(floatx) {floaty; y=3*x-4; returny; } A)int B)不确定 C)void D)float 答案: A 36、以下程序的输出结果是()。 inta,b; voidfun() {a=100;b=200;} main() {inta=5,b=7; fun(); printf("%d%d\n",a,b); } A)100200 B)57 C)200100 D)75 答案: B 37、设有以下函数: f(inta) {intb=0; staticintc=3; b++;c++; return(a+b+c); } 如果在下面的程序中调用该函数,则输出结果是()。 main() {inta=2,i; for(i=0;i<3;i++)printf("%d\n",f(a)); } A)7 B)7 C)7 D)7 89107 911 答案: A 38、有如下函数调用语句: func(rec1,rec2+rec3,(rec4,rec5)); 在该函数调用语句中,含有的实参个数是()。 A)3 B)4 C)5 D)有语法错 答案: A 39、在C语言中,变量的隐含存储类别是()。 A)auto B)static C)extern D)无存储类别 答案: A 40.在下列的函数调用中,不正确的是()。 A)max(a,b); B)max(3,a+b); C)max(3,5); D)intmax(a,b); 答案: D 41、在下列叙述中,错误的一条是()。 A)主函数main中定义的变量在整个文件或程序中有效 B)不同函数中,可以使用相同名字的变量 C)函数中的形式参数是局部变量 D)在一个函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效 答案: A 42、在下列叙述中,错误的一条是()。 A)scanf函数可以用来输入任何类型的多个数据 B)数组名作函数参数时,也采用“值传递”方式 C)如果形参发生改变,不会改变主调函数的实参值 D)函数的实参与形参的类型应一致 答案: B 43、下列程序执行后输出的结果是()。 intd=1; fun(intp) {intd=5; d+=p++; printf(“%d”,d); } main() {inta=3; fun(a); d+=a++; printf(“%d\n”,d); } A)84 B)96 C)94 D)85 答案: A 44、宏定义#definePI3.1415926的作用是: 指定用标识符PI来代替一个()。 A)单精度数 B)字符串 C)双精度数 D)整数 答案: B 45、以下程序的输出结果是()。 #definef(x)x*x main() {inta=6,b=2,c; c=f(a)/f(b); printf("%d\n",c); } A)9 B)6 C)36 D)18 答案: C 46、以下程序的输出结果是()。 #defineSQR(X)X*X main() {inta=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf("%d\n",a); } A)16 B)2 C)9 D)1 答案B解析: 先代入右边2+1*2+1/2+1*2+1=2+2+0+2+1=7 47、以下程序的输出结果是()。 main() {chara[10]={'1','2','3','4','5','6','7','8','9',0},*p; inti; i=8; p=a+i; printf("%s\n",p-3); } A)6 B)6789 C)‘6’ D)789 答案: B 48、若有以下定义和语句: doubler=99,*p=&r; *p=r; 则以下正确的叙述是()。 A)以上两处的*p含义相同,都说明给指针变量p赋值 B)在"doubler=99,*p=&r;"中,把r的地址赋给了p所指的存储单元 C)语句"*p=r;"把变量r的值赋给指针变量p D)语句"*p=r;"取变量r的值放回r中 答案: D 49、若已定义: inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 其中0≤i≤9,则对a数组元素不正确的引用是()。 A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i)) 答案: D 50、已知指针p的指向如下图所示,则执行语句*--p;后*p的值是()。 a[0]a[1]a[2]a[3]a[4] 10 20 30 40 50 A)30 B)20 C)19 D)29 答案: B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 专科 一学期 期末考试 复习题
![提示](https://static.bingdoc.com/images/bang_tan.gif)