C语言期末题库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、单项选择题
一)C语言基础
1. 以下叙述中错误的是______。

A、计算机不能直接执行用C语言编写的源程序
B、C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
C、后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件
D、后缀为.obj和.exe的二进制文件都可以直接运行
解析:本题考查的是C语言的特征。

C语言被称为计算机的"高级语言",我们把由高级语言编写的程序称为"源程序",对于计算机本身来说,它并不能直接识别由高级语言编写的程序。

C程序经C编译程序编译后,生成后缀为.obj的二进制文件(称为目标文件)。

最后还要由称为"连接程序"(Link)的软件,把此.obj 文件与C语言提供的各种库函数连接起来生成一个后缀为.exe的可执行文件。

.obj文件是目标文件不可以直接执行,所以选项D错误。

故本题答案选D。

2. 对于一个正常运行的C程序,以下叙述中正确的是。

A、程序的执行总是从main函数开始,在main函数结束
B、程序的执行总是从程序的第一个函数开始,在main函数结束
C、程序的执行总是从main函数开始,在程序的最后一个函数中结束
D、程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束
解析:本题考查的是C语言的函数。

在C语言中,所有的函数定义,包括主函数main在内,都是平行的。

C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。

一个C源程序必须有,也只能有一个主函数main。

故本题答案选A。

3. 按照C语言规定的用户标识符命名规则,不能出现在标识符中的是______。

A、大写字母
B、连接符
C、数字字符
D、下划线
解析:本题考查的是标识符。

C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。

故本题答案B。

4. 下列叙述中正确的是______。

A、每一个C程序文件中都必须要有一个main()函数
B、在C程序中main()函数的位置是固定的
C、C程序中所有函数之间都可以相互调用,与函数所在位置无关
D、在C程序的函数中不能定义另一个函数
解析:本题考查的是函数的定义方法。

每一个C程序由多个C程序文件组成,而每个C程序都必须有一个main()函数,故每一个C程序文件中都必须有一个main()函数的说法是错误的。

在C程序中所有函数都是平行的,即在定义函数时是相互独立的,一个函数并不能从属于另一个函数,即函数不能嵌套定义,函数间可以相互调用,但不能调用main()函数,main()函数的位置也不是固定的。

故本题答案为D。

5. 下列叙述错误的是______。

A、一个C语言程序只能实现一种算法
B、C程序可以由多个程序文件组成
C、C程序可以由一个或多个函数组成
D、一个C函数可以单独作为一个C程序文件存在
解析:本题考查的是C程序的构成。

一个C语言程序可以实现多种算法。

一个C程序可以由一个或多个源程序文件组成,一个源程序文件由一个或多个函数组成,构成C语言程序的基本单位是函数,函数也是C程序中模块化程序设计的基础,C函数可分为标准库函数和用户定义函数两类。

故本题答案为A。

6. 以下不合法的用户标识符是______。

A、j2_KEY
B、Double
C、4d
D、_8_
解析:本题考查的是标识符。

C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。

大写字母和小写字母被认为是两个不同的字符,用户在定义标识符时应做到"
见名知意",且不允许使用关键字作标识符。

故本题答案为C。

7. 以下叙述中错误的是______。

A、C语言源程序经编译后生成后缀为.obj的目标程序
B、C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C、用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D、C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
解析:本题考查的是C语言程序的基本组成。

在C语言中,注释是用于协助读者更好地理解程序,它不会被系统转换成二进制,所以非执行语句是不会被转换成二进制的机器指令。

故本题答案为D。

8. 以下叙述中错误的是______。

A、算法正确的程序最终一定会结束
B、算法正确的程序可以有零个输出
C、算法正确的程序可以有零个输入
D、算法正确的程序对于相同的输入一定有个相同的结果
解析:本题考查的是算法的概念。

算法的目的是为了求解,"解"就是输出。

算法的输出不一定就是计算机的打印输出,一个算法得到的结果就是算法的输出。

没有输出的算法是没有意义的。

故本题答案为B。

9. 以下四个程序中,完全正确的是______。

A、#include <stdio.h>
B、#include<stdio.h>
main(); main()
{ {
/*programming*/ /*/programming/*/
printf("programming!\n"); printf("programming!\n");
} }
C、#include <stdio.h>
D、include<stdio.h>
main() main()
{ {
/*programming*/ /*/*programming*/*/
printf("programming!\n"); printf("programming!\n");
} }
解析:本题考查的是C语言中注释的格式。

C语言中注释用"/*"和"*/"括起来,它可以出现在程序中任何合适的地方。

选项A 中"main();"是一个函数声明语句,下面的大括号及其内容作为一个语句块,应放在程序的大括号中,故选取项A错误;选项B中的注释语句不正确,因为程序在编译时认别到两次"/*"作为注释的开始,但未识别到"*/"作为注释的结束,故选项B错误;选项D的"include"前缺少"#",故选项D错误。

故本题答案为C。

10. 算法具有五个特性,以下选项中不属于算法特性的是______。

A、有穷性
B、简洁性
C、可行性
D、确定性
解析:本题考查的是算法的特性。

有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性是算法的五大特性。

故本题答案为B。

11. 一个算法应该具有"确定性"等5个特性,下面对另外4个特性的描述中错误的是______。

A、有零个或多个输入
B、有零个或多个输出
C、有穷性
D、可行性
解析:本题考查的是算法的特性。

故本题答案为B。

12. 请选出可用做C语言用户标识符的一组标识符______。

① void ② a3_b3 ③ For ④ 2a
define _123 _abc DO
WORD IF case sizeof
A、①
B、②
C、③
D、④
解析:本题的考查点是C语言的标识符。

①中的void是C语言的关键字,不合法;③中的case和C语言的关键字,不合法;④中的2a是数字打头而且sizeof和C语言的关键字重名,不合法。

故本题答案为B。

13.以下叙述中正确的是______。

A、C程序中注释部分可以出现在程序中任意合适的地方
B、花括号"{"和"}"只能作为函数体的定界符
C、构成C程序的基本单位是函数,所有函数名都可以由用户命名
D、分号是C语句之间的分隔符,不是语句的一部分
解析:本题的考查点是C程序设计的初步知识。

选项A,C程序中/*……*/表示注释部分,注释只是给人看的,对编译和运行不起作用,可以加在程序中任何位置,所以选项A是对的;
选项B,函数体是函数的主体,从左花括号开始,到与之匹配的右花括号结束。

选项C,一个C程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名。

选项D,C语句是组成C程序的基本单位,具有独立的程序功能。

所有的C语句都以分号结尾。

故本题答案为A。

14.已定义c为字符型变量,则下列语句中正确的是______。

A、c='97'
B、c="97";
C、c=97;
D、c="a";
解析:本题的考查点是字符型变量。

C语言中,字符型数据和整型数据之间可以通用。

一个字符数据既可以以字符形式输出,也可以以整数形式输出。

所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C正确。

15.以下选项中可作为C语言合法整数的是______。

A、10110B
B、0386
C、0Xffa
D、x2a2
解析:本题的考查点是C语言中的整型常数。

整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。

由此可知选项A错;选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的;选项D,数字前加“0x”表示十六进制数,所以D也不对。

故本题答案为C。

16. 以下选项中不能作为合法常量的是______。

A、1.234e04
B、1.234e0.4
C、1.234e+4
D、1.234e0
解析:本题考查的是常量表示法。

本题选项中的几个常量都属于指数形式的实型常量。

此种类型的常量要求字母e(或E)之前必需有数字,且e后面的指数必须为整数,所以本题中选项B非法。

故本题答案为B。

17.与十进制数200等值的十六进制数为______。

A、A8
B、A4
C、C8
D、C4
解析:本题考查的是进制之间的转换。

用十--十六进制转换法,除16,由下而上取余法。

故本题答案为C。

18. 若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表
示该代数式的C语言表达式是______。

A、sqrt(abs(n^x+e^x))
B、sqrt(fabs(pow(n,x)+pow(x,e)))
C、sqrt(fabs(pow(n,x)+exp(x)))
D、sqrt(fabs(pow(x,n)+exp(x)))
解析:本题考查的是基本函数应用。

exp(x)函数功能是返回以自然数e为底,函数参数x为幂的指数值e x;pow(n,x)函数功能是返回n的x次幂值n x;fabs()函数功能是返回函数参数的绝对值;sqrt()用于返回函数参数的平方根。

选项A中 n^x不是有效的C语言表达式,所以错误;选项B中pow(x,e)的功能是求x e的值,显然也不正确;选项D中的pow(x,n)存在和选项B相同的问题。

选项C正确。

故本题答案选C。

19. 以下合法的字符型常量是______。

A、'\x13'
B、'\081'
C、'65'
D、"\n"
解析:本题考查的是字符常量。

字符常量只能包含一个字符,因此选项C错误。

字符常量只能用单引号
括起来,不能用双引号括起来,因此选项D错误。

转义字符常量是以一个反斜线开头后跟一个特定的字符,用来代表某个特定的ASCII字符,反斜线后直接跟数字表示八进制(八进制不用0开头),所以选项B错误。

反斜线后用小写字母x开头来表示十六进制数。

故本题答案选A。

20.设有定义:float a=2,b=4,h=3;,以下C语言表达式中与代数式1/2(a+b)h计算结果不相符的是______。

A、(a+b)*h/2
B、(1/2)*(a+b)*h
C、(a+b)*h*1/2
D、h/2*(a+b)
解析:两个整数相除结果为整数,如5/3的结果为1,舍去小数部分。

如果参加运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行运算。

根据运算符优先级,先计算括号内的,故选项B中(1/2)=0,整个表达式的值为0。

故本题答案为B。

21. 以下不能正确计算代数式
)
2
1
(
sin
3
1
2
值的C语言表达式是______。

A、1/3*sin(1/2)*sin(1/2)
B、sin(0.5)*sin(0.5)/3
C、pow(sin(0.5),2)/3
D、1/3.0*pow(sin(1.0/2),2)
解析:本题考查的是C语言表达式。

如果算术运算符"/"中参与运算的变量都是整型变量,则"/"表示整除运算,所以"1/3"的值应为0,故本题答案为A。

22. 以下程序的功能是:给r输入数据后计算半径为r的圆面积s,程序在编译时出错。

main()
/* Beginning */
{int r; float s;scanf("%d",&r);
s=*∏*r*r; printf("s=%f\n",s);}
出错的原因是______。

A、注释语句书写位置错误
B、存放圆半径的变量r不应该定义为整型
C、输出语句中格式描述符非法
D、计算圆面积的赋值语句中使用了非法变量
解析:本题考查的是C程序的编写。

本题并未对变量"∏"作任何定义,所以编译时会出现非法字符的错误信息。

故本题答案为D。

23. 有以下程序
main()
{int x, y, z;
x=y=1;z=x++,y++,++y;
printf("%d,%d,%d\n",x, y, z); }
程序运行后的输出结果是______。

A、2,3,3
B、2,3,2
C、2,3,1
D、2,2,1
解析:本题考查的是C语言的运算规则。

x++:表示在使用x之后,使x的值加1;y++:表示在使用y之后,使y的值加1;++y:表示在使用y之前,使y的值加1。

此题中执行z=x++,是将x的值先赋给z,所以z=1,接下来x自行加1,其结果为2;执行y++后,y=2,执行++y后,y=3。

故本题答案为C。

24. 以下选项中,值为1的表达式是______。

A、1-'0'
B、1-'\0'
C、'1'-0
D、'\0'-'0'
解析:本题考查的是C表达式的基本运算。

'0'代表ASCII码为48的字符,'\0' 代表ASCII码为0的字符,'1'代表ASCII码为49的字符,所以只有选项B的表达式的值为1。

故本题答案选B。

25. 有以下程序
main()
{char a1='M',a2='m';
printf("%c\n",(a1,a2));}
以下叙述中正确的是______。

A、程序输出大写字母M
B、程序输出小写字母m
C、格式说明符不足,编译出错
D、程序运行时产生出错信息
解析:本题考查的是逗号表达式。

在逗号表达式(表达式1,表达式2)中,其运算方法是先求表达式1的值,然后求表达式2的值,整个逗号表达式的值是表达式2的值。

故本题输出的是a2的值m。

故本题答案为B。

26. 有以下程序
main()
{ int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);}
程序运行后的输出结果是______。

A、6,1
B、2,1
C、6,0
D、2,0
解析:本题考查的是算术运算符。

如果算术运算符"/"中参与运算的变量都是整型变量,则"/"表示整除运算,"%"表示求余。

本题中"a=d/10%9;"的值为25/10%9=2;"b=a&&(-1);"为2&&(-1)=1(注意:-1表示真,只有0才表示假),所以a,b的值分别为2,1。

故本题答案为B。

27. 若整型变量a、b、c、d中的值依次为:1、4、3、2
则条件表达式a<b?a:c<d?c:d的值是______。

A、1
B、2
C、3
D、4
解析:本题考查的是条件表达式。

本题先求的是a<b的值,根据a=1,b=4,故a<b的值为真,所以整个表达式"a<b?a:c<d?c:d"的值为a的值1。

故本题的答案为A。

28. 若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是______。

A、abs(x-y)<10
B、x-y>-10&&x-y<10
C、!(x-y)<-10||!(y-x)>10
D、(x-y)*(x-y)<100
解析:本题考查的是表达式。

选项A中,abs()本身就是求绝对值的函数,所以是正确的;选项B是把|x-y|<10表示成了数学表达式中的-10<(x-y)<10,然后再用c语言规则表示出来的;选项D相当于把|x-y|<10两边同时平方,是正确的;而选项C中!(x-y)<-10相当于(x-y)>=-10,!(y-x)>10相当于(x-y)>=-10。

故选项C相当于(x-y)>=-10,所以错误。

故本题答案为C。

29.有以下程序
main()
{ char a='a',b;
printf("%c,",++a);printf("%c\n",b=a++);}
程序运行后的输出结果是______。

A、b,b
B、b,c
C、a,b
D、a,c
解析:本题考查的是++运算符。

本题中printf("%c,",++a)先将a加,再执行此条语句,输出b,而
printf("%c\n",b=a++)是先输出刚才a的值(刚才的a++表示a=a+1,所以是b),然后再加1。

所以答案为A。

30.以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是______。

A、if((a>b)&&(b>c))k=1;
B、if((a>b)||(b>c))k=1;
else k=0; else k=0;
C、if(a<=b) k=0;
D、if(a>b) k=1;
else if(b<=c) k=1; else if(b>c) k=1;
else k=0;
解析:本题考查的是条件表达式。

本题是先比较a,b,如果a>b成立则执行(b>c?1:0),如果b>c成立则结果为1,其它情况则为0。

即只有a>b与b>c同时成立时k值才能为1。

故本题答案为A。

31. 以下叙述中错误的是______。

A、C语句必须以分号结束
B、复合语句在语法上被看作一条语句
C、空语句出现在任何位置都不会影响程序运行
D、赋值表达式末尾加分号就构成赋值语句
解析:本题考查的是C语句。

"空语句出现在任何位置都不会影响程序运行"这句话是错误的,例如在for 循环中,循环条件语句为空时,则不判断循环条件,循环将无终止地进行下去,导致了此循环为死循环。

故本题答案为C。

32. #include <stdio.h>
main()
{ char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar(); c6=getchar();
putchar(c1); putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第1列开始)
123<回车>
45678<回车>
则输出结果是______。

A、1267
B、1256
C、1278
D、1245
解析:本题考查的是字符输入输出函数的应用。

getchar()函数只能接收一个字符,即使输入多个字符后再按回车还是只能将第一个字符读入。

scanf()和printf()是按格式输入输出的函数,当输入123<回车>,scanf()分别读入字符"1"、"2"、"3"、"<回车>";接下来输入45678<回车>,则getchar()读入字符"4"赋值给c5,字符"5" 赋值给c6,故本题答案为D。

33. 若以下选项中的变量已正确定义,则正确的赋值语句是______。

A、x1=26.8%3;
B、1+2=x2;
C、x3=0x12;
D、x4=1+2=3;
解析:正确的赋值语句中的左值不能为常量或表达式,右值不能为变量或表达式。

选项A中右值为表达式,明显是错误的;选项B中,左值为表达式,明显是不对的。

选项D中,表达式
x4=1+2=3,是先执行赋值表达式1+2=3,这本身就是错误的,1+2不是变量,不能赋值。

故本题答案为C。

34. 有以下程序
main()
{ int m,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是______。

A、m=123n=456p=789
B、m=123 n=456 p=789
C、m=123,n=456,p=789
D、123 456 789
解析:本题考查的是格式输入函数。

如果在"格式控制"字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。

根据本题的数据输入形式说明在输入数据时,必须输入"m="、"n="、"p="字符,且中间不能含有空格。

故本题答案为A。

35.有以下程序
main()
{ char a,b,c,d;
scanf("%c,%c,%d,%d",&a,&b,&c,&d);
printf("%c,%c,%c,%c\n",a,b,c,d);}
若运行时从键盘上输入:6,5,65,66↙。

则输出结果是______。

A、6,5,A,B
B、6,5,65,66
C、6,5,6,5
D、6,5,6,6
解析:本题考查的是格式字符的输入和输出。

将字符常量6和5所对应的内存的ASCII码翻译成字符常量为6和5输出,将内存中的整型数65和66对应的字符常量即A和B输出。

所以此题答案为A。

36. 以下程序的输出结果是______。

main()
{int k=17;
printf("%d,%o,%x\n",k,k,k);}
A、17,021,0x11
B、17,17,17
C、17,0x11,021
D、17,21,11
解析:本题的考查点是不同格式的数据输出。

printf函数对不同类型的数据用不同的格式字符,"%d"是以十进制形式输出整数(正数不输出符号);"%o"以八进制无符号形式输出整数(不包括前导符0);"%x"以十六进制无符号形式输出整数(不包括前导符0x)。

本题答案为D。

37.有定义语句:int x,y;若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是______。

A、11 12↙
B、11,12↙
C、11, 12↙
D、11,↙12↙
解析:本题的考查点是格式输入函数。

如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。

所以输入的两个数字之间的逗号是不可少的。

故本题答案为A。

38.设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是______。

A、x=x*100+0.5/100.0;
B、x=(x*100+0.5)/100.0
C、x=(int)(x*100+0.5)/100.0;
D、x=(x/100+0.5)/100.0;
解析:本题的考查点是实型数据。

对于此类题目,我们可用排除法,题目要求保留到小数点后两位,选项A、B、D都不合题面要求。

选项C中,x=(int)(x*100+0.5)/100.0中,x为float型,所以小数点后有6
位小数,x*100后有4位,x*100+0.5仍为4位,且在这里已经将第三位四舍五入了,取整后再除以100.0,结果中小数点后为2位。

故本题答案为C。

39.有以下程序
main()
{ int a=666,b=888;
printf("%d\n",a,b);}
程序运行后的输出结果是______。

A、错误信息
B、666
C、888
D、666,888
解析:本题考查的是输出格式。

printf()函数中,当格式转换说明符个数少于输出项个数时,多余的输出项不予输出。

所以本题答案为B。

40.有以下程序
main()
{ int x=102,y=012;
printf("%2d,%2d\n",x,y);}
执行后输出结果是______。

A、10,01
B、02,12
C、102,10
D、02,10
解析:y=012表示将八进制数12赋给变量y。

d格式符,用来输出十进制整数。

%md,m为指定的输出字段的宽度。

如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。

本题是将八进制数12也输出为十进制数,八进制数12转换为十进制数为10,所以输出结果为102,10。

故本题答案为C。

二)选择结构程序设计
1. 设变量x和y均已正确定义并赋值。

以下if语句中,在编译时将产生错误信息的是______。

A、if(x++);
B、if(x>y && y!=0);
C、if(x>0) x--
D、if(y<0) {;}
else y++; else x++;
解析:本题考查的是if语句。

if后表达式两侧的圆括号不可少,最后是一条语句或是用花括号括起来的一组语句。

选项A和B是在表达式后跟了一条空语句,选项D是在表达式后跟了一组空语句,选项C中x--是表达式而不是语句,所以在编译时会出现错误信息。

故本题答案选C。

2. 有以下程序
main()
{ int i;
for(i=1;i<=40;i++)
{ if(i++%5==0)
if(++i%8==0) printf ("%d",i);}
printf("\n"); }
执行后的输出结果是______。

A、5
B、24
C、32
D、40
解析:本题考查的是if语句的应用。

在满足for 语句条件下,第一个if语句的条件是指i先对5取余后,再自行加1;第二个if语句的条件是指:i=i+1后,再对8取余。

故本题答案选C。

3. 在嵌套使用if语句时,C语言规定else总是______。

A、和之前与其具有相同缩进位置的if配对
B、和之前与其最近的if配对
C、和之前与其最近的且不带else的if配对
D、和之前的第一个if配对
解析:本题考查的是if语句的使用规则。

在嵌套使用if语句时,C语言规定else总是和之前与其最近的且不带else的if配对。

故本题答案为C。

4. 有以下程序
main()
{ int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k); }
程序运行后的输出结果是______。

A、1 2 3
B、2 3 4
C、2 2 3
D、2 3 3
解析:本题考查的是条件判断语句。

本题中执行"i++==1&&(++j==3||k++==3)"时,先执行i++==1,由于i++是先运算,后自加,所以表达式"i++==1"的值为真,其值为1,然后执行括号中的表达式,由于++j
是先自加,后运算,所以表达式"++j==3" 的值为真,根据短路原理,右边的表达式"k++==3"不再进行运算,直接得出括中表达的值为1,相与后整个表达式的值也为1,输出i,j,k时,由于未执行过k,所以它们的值分别为2,3,3。

故本题的答案为D。

5.有以下程序:
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{case 0:printf("%d",i);
case 2:printf("%d",i);
default:printf("%d",i);}}
程序运行后的输出结果是______。

A、022111
B、021021
C、000122
D、012
解析:此题考点是switch语句。

switch语句执行完一个case后面的语句后,流程控制转移到下一个case 继续执行。

“case 常量表达式”只是起语句标号作用,并不是在该处进行条件判断。

在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。

如果想在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。

可以用一个break语句来达到此目的。

本题中没有使用break终止switch语句的执行。

在此题中当i=0时,执行第一个case语句,因为它后面没有break,所以一直到执行完default语句结束,再执行下一循环。

故本题答案为C。

6. 下列条件语句中,功能与其他语句不同的是______。

A、if(a) printf("%d\n",x); else printf("%d\n",y);
B、if(a==0) printf("%d\n",y); else printf("%d\n",x);
C、if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D、if(a==0) printf("%d\n",x); else printf("%d\n",y);
解析:此题考的是if语句中逻辑表达式值的判断。

if(a)表示a值为真(即不等于0都为真)的话,就输出x的值,否则输出y的值;if(a==0)表示如果a与0等值,即a不为真,就输出y的值,否则输出x的值,此与选项A等价;再看选项C,a不等于0,即为真,输出x,否则输出y,与前两个都同意;而选项D恰好与前几项的意思相反,它是a为0时,输出x,为真时输出y。

故本题答案为D。

7.有以下程序
main()
{ char k; int i;
for(i=1;i<3;i++)
{ scanf("%c",&k);
switch(k)
{ case '0': printf("another\n");
case '1': printf("number\n");}
}}
程序运行时,从键盘输入:01↙,程序执行后的输出结果是______。

A、another
B、another
C、another
D、number
number number number number
another number
解析:此题考点是switch语句。

本题中没有使用break终止switch语句的执行,本题当k为0时,执行完case '0'后将继续执行case '1'。

故本题答案为C。

8.以下4个选项,不能看作一条语句的是______。

A、{;}
B、a=0,b=0,c=0;
C、if(a>0);
D、if(b==0)m=1;n=2;
解析:if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。

选项D中没有将两个操作语句括起来,不能看作一条语句。

故本题答案为D。

9.以下程序的输出结果是______。

main()
{ int a=-1,b=1, k;
if((++a<0)&&!(b--<=0))
printf("%d %d\n",a,b);
else
printf("%d %d\n",b,a);
}
A、-1 1
B、0 1
C、1 0
D、0 0
解析:本题的考查点是if条件的判断。

++a是先运算后使用,b--是先使用后运算。

执行++a后,a值为0,不满足条件,所以a为0,b仍为1,接下去执行else语句,输出1 0。

故本题答案为C。

10. 有以下程序
main()
{ int c;
while((c=getchar() )!='\n') {
switch(c-'2') {
case 0: case 1: putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break; } }
}
A、668977
B、668966
C、66778777
D、6688766
解析:本题的考查点是switch()语句。

getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据表达式c-'2'的值进行分支选择;putchar()是在屏幕上打印一个字符,最后的结果应当为 668977。

故本题答案为A。

11.有定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是______。

A、if (c<a) x=1;
B、if (a<3) x=3;
else if (b<a) x=2; else if (a<2) x=2;
else x=3; else x=1;
C、if (a<3) x=3;
D、if (a<b) x=b;
if (a<2) x=2; if (b<c) x=c;
if (a<1) x=1; if (c<a) x=a;
解析:本题的考查点是if语句。

选项A,因为前面两个条件都不满足,所以执行最后一种操作,x=3;选项B,a<3成立,执行第一种操作,x=3;选项C,a<3成立,执行第一种操作,x=3;a<2成立,执行第二种操作,此时x=2;a<1不成立,最后的不执行,所以执行此段程序后x=2;选项ф,a<b成立,执行x=b,此时x=2;b<c成立,执行x=c,此时x=3;c<a不成立,不执行x=a,所以执行此段程序后x=3。

故本题答案为C。

12.以下关于逻辑运算符两侧运算对象的叙述中正确的是______
A、只能是整数0或1
B、只能是整数0或非0整数
C、可以是结构体类型的数据
D、可以是任意合法的表达式
解析:本题考查的是C语言运算符的基本应用。

逻辑运算符两侧的运算对象不但可以是0和1,也可以是任意基本类型或指针类型的数据,还可以是任意合法表达式。

故本题答案为D。

13. 若x是int型变量,且有下面的程序片段
for(x=3;x<6;x++) printf((x%2)?("**%d"):("##%d\n"),x);
上面程序片段的输出结果是______。

① **3 ② ##3 ③ ##3 ④ **3##4
##4 **4 **4##5 **5
**5 ##5
A、①
B、②
C、③
D、④
解析:本题的考查点是条件运算符。

本题答案为D。

14.有以下计算公式。

相关文档
最新文档