(2009年秋选择题第25题)
A.y=x/(10*(n-1))B.y=x%(10*(n-1))
C.y=x%(long)pow(10,n-1)D.y=x%(10?
(n-1))
【解析】本类型的题目,拿一个具体的数,放到四个选项中去计算,就能得到正确答案。
假设x为1234,代入A中,为1234/(10*3),肯定不是234,代入B中,为1234%(10*3)也不对,代入C中为1234%(long)103,结果为234,正确,选C。
而D中的“?
”在C语言中是指位运算中的“异或”运算,不是求指数。
【答案】C
3.若有声明“floaty=3.14619;intx;”,则计算表达式“x=y*100+0.5,y=x/100.0”后y的值是___________。
(2009年春填空题第3题)
【解析】x=y*100+0.5=3.14619*100+0.5=315,因为x为int,截取整数部分赋给x。
然后计算y=x/100.0=315/100=3.15,y是浮点数。
【答案】3.15
4.若有声明“inta=32767,b;”,则在TurboC2.0系统中执行语句“printf("%d",b=++a);”后输出结果是_________。
(2006年秋填空题第3题)
【解析】本题有4个知识点:
一是printf语句,输出%d格式,二是赋值运算及赋值表达式的值,三是++运算,四是int型数据的表示范围及整数在内存的存储情况。
b=++a是将a的值加1后赋给b,a、b是int型,处于-32768~32767范围内,32767+1=后为若是long型,满足32767+1等于32768。
【答案】-32768
5.已知有声明“inta=3,b=4;”,下列表达式中合法的是______。
(2010年春选择题第25题)
?
A.a+b=7?
?
?
?
B.a=|b|?
?
?
?
C.a=b=0?
?
D.(a++)++
【解析】本题考查的是赋值运算符和“++”运算符的左值要求。
左值必须是变量,不能是常量和表达式。
选项A左边是表达式,不允许,选项D括号中的a++也是表达式,不能进行++运算。
选项B是一个代数式,必须转换成C语言合法的表达式,表示成a=abs(b)。
选项C正确,将0赋给b,再赋给a,a和b的值不再是初始化的值,而变成0了。
【答案】C
6.已知有声明“intn;floatx,y;”,则执行语句“y=n=x=3.89;”后,y的值为?
________。
(2010年春选择题第28题)
【解析】本题考查的是不同类型间的赋值。
赋值运算符右结合。
先将3.89赋给x,表达式的值也为3.89,再将3.89赋给n,n是int,自动截取整数部分,将3赋给n。
最后将3赋给y,y是float,将整数3转换成实数3.0后赋给y,y值为3.0。
【答案】B
7.以下程序运行时输出到屏幕的结果是?
___________?
。
(2010年春阅读程序第7题)
#include
voidmain()?
?
?
?
?
?
{inta=1,b=2;?
?
?
?
?
?
?
?
a+=b;
?
?
?
?
b=a-b;
?
?
?
?
a-=b;
?
?
?
?
printf("%d,%d\n",a,b);
?
?
}
【解析】本题的考点是复合赋值运算符,程序功能是不用临时变量,实现两个变量的值的交换。
计算过程如下:
a=a+b=1+2=3,b=a-b=3-2=1,a=a-b=3-1=2。
最后结果是a为2,b为1。
变量的值在程序运行过程中可能在不断的变化,每次计算都要用最新得到的值。
【答案】2,1
8.若有声明“intx=2,y=1,z=0;”,则下列关系表达式中有语法错误的是_______。
(2008年春选择题第25题)
A.x>y=2B.z>y>xC.x>y==1D.x==(x=0,y=1,z=2)
【解析】赋值表达式的运算数有左值要求,赋值号左边必须是变量,不能是表达式,A错。
B没有语法错误,z>y成立结果为1,不成立为0,再将1或0与x比较,判断其是否成立。
C先判断x>y是否成立,得到0或1再与1比较是否相等,最后的结果要么是0要么是1。
D先做括号中的逗号表达式,依次进行赋值,最后一个表达式的值2是整个逗号表达式的值,将其与x的值进行是否相等的比较。
【答案】A
9.已知有声明“inta=12,b=15,c;”,则执行表达式“c=(a||(b-=a))”后,变量b和c的值分别为____________。
(2010年春选择题第29题)
?
A.3,1?
?
?
?
B.15,12?
?
?
?
C.15,1D.3,12
【解析】本题的考点是逻辑表达式的短路特性。
a值为12,非零即为真,逻辑表达式的结果只能用1或者0表示,若为真则结果为1。
只要有一个为真,逻辑或“||”的结果就为1,b-=a不用计算了,b的值不变,仍为15。
而括号中逻辑表达式的值为1,1赋给c,故c的值为1。
【答案】C
10.已知有声明“inta=3,b=4,c=5;”,以下表达式中值为0的是________。
(2009年秋选择题第24题)
A.a&&bB.a<=bC.a||b&&cD.!
(!
c||1)
【解析】a&&b中a和b都是非0,A的结果为1。
B中a<=b成立,结果为1。
C中&&优先级高于||,先做&&,b和c的值非0,b&&c的结果为1,因为是||运算,最后的结果肯定是1。
D中c非0,!
c为0,与1逻辑或为1,将括号中的1再逻辑非,结果为0。
【答案】D
11.C语言中有!
、&&、||三个逻辑运算符,其中优先级高于算术运算符的是________。
(2009年秋填空题第1题)
【解析】逻辑非“!
”是单目运算符,优先级为2级,高于3级的“*/%”和4级的“+”和“-”。
“&&”的优先级为11级,“||”的优先级为12,低于算术运算符。
【答案】!
12.以下表示数学式“a
(2007年春选择题24题)
A.a
(a>=b)&&!
(b>=c)D.!
(a>=b||b>=c)
【解析】最好的答案是B,但C、D与B的功能相同。
C中!
(a>=b)就是a
放到外面,“&&”就变成了“||”。
选项A先判断a
【答案】A
1x>0
13.以下选项中,不能表示函数sign(x)=0x=0功能的表达式是________。
-1x<0
(2009年春选择题第23题)
A.s=(x>0)?
1:
(x<0)?
-1:
0B.s=x<0?
-1:
(x>0?
1:
0)
C.s=x<=0?
-1:
(x==0?
0:
1)D.s=x>0?
1:
x==0?
0:
-1
【解析】本题考点是嵌套的条件表达式。
仔细分析它们的逻辑关系,选项C的功能是当x<=0时值为-1,否则即x>0再判断x=0是否成立决定值为0还是1,不合题意。
【答案】C
14.若有声明“inta=5,b=2;”,则表达式“b+=(float)(a+b)/2”运算后b的值为________。
(2007年秋填空题第1题)
【解析】b+=(float)(a+b)/2相当于b=b+((float)(a+b)/2)。
先执行a+b得7,转换成实数7.0除以2,得3.5,然后将原来的b=2加3.5得5.5,b是int,截取整数部分5赋给b。
【答案】5
15.设指针变量占2个字节的内存空间,若有声明“char*p="123";intc;”,则执行语句“c=sizeof(p);”后,c的值为_____。
(2010年春选择题第24题)
?
A.1?
?
?
?
B.2?
?
?
?
C.3D.4
【解析】题目告诉我们指针变量占2个字节,而sizeof的功能就是计算变量在内存中所占的字节数,c的值为指针变量p在内存中占用的字节数,为2。
【答案】B
16.若有声明“intr=2;”,则执行语句“printf("%d",sizeof(2*3.14*r));”时输出________。
(2009年秋填空题第2题)
【解析】本题输出表达式2*3.14*r的结果在内存中占用的字节数。
2*3.14*r的结果为实常量,其中有一个实常量3.14,C中实常量默认为double型。
根据类型转换规则,其他类型的数据也要转换成double型,最后结果为double型,在内存占8个字节。
一般情况,只要表达式中有一个数据为double型,最后的结果就是double型。
【答案】8
17.数学式
所对应的c语言表达式为pow(x,________)。
(2010年春填空题第1题)
【解析】pow(x,y)是求x的y次方的函数。
就是x的三分之一次方。
此处注意的是1/3=0,要将其中一个转换为浮点数。
【答案】1.0/3或者1/3.0或者(double)1/3
18.数学表达式
所对应的C语言表达式为________。
(2009年秋填空题第3题)
【解析】求平方根的函数为sqrt,求绝对值的函数为abs或fabs,abs求整数的绝对值,fabs求实数的绝对值。
“≠”用“!
=”表示。
4a要用4*a表示,*表示乘号,不能缺省。
分母一定要加括号,若不加括号得用除“/”不是用乘“*”。
加括号的表示方式看起来更直观。
【答案】sqrt(fabs(x)!
=4*a/(b*c)或sqrt(fabs(x)!
=4*a/b/c
3.2.1实现顺序结构的语句
1.以下关于C语言语句的叙述中正确的是_________。
(2006年秋选择题第27题)
A.所有语句都包含关键字
B.所有语句都包含表达式
C.所有语句都可以出现在源程序中的任何位置
D.除复合语句外的其他所有语句都以分号结束
【解析】关键字只有32个,大多数用来进行变量类型说明以及实现条件选择和循环结构的控制语句。
很多语句中没有关键字的,如赋值语句。
表达式也不一定在所有的语句中出现的,如函数调用语句。
语句是程序的执行部分,放在函数内部,而且在说明部分之后。
C语言中复合语句中的各条语句都必须有分号“;”,但在“}”外没有分号。
【答案】D
2.已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的是________。
(2009年秋选择题第23题)
A.printf("%d",32768);B.printf("%ld",32768);
C.printf("%f",32768);D.printf("%c",32768);
【解析】本题考点是输出格式。
%d格式输出int型整数,范围为-32768~32767,%f格式输出浮点数,%c格式输出字符。
%ld格式输出长整型整数,范围为-21亿~21亿。
【答案】B
3.以下语句中有语法错误的是____________。
(2009年春选择题第24题)
A.printf("%d",0e);B.printf("%f",0e2);
C.printf("%d",0x2);D.printf("%s","0x2");
【解析】本题考点为输出格式及常量表示。
A中的%d表示输出int型整数,0开头为八进制数,只能为0~7共8个数字,不能为e。
B是%f格式,输出实数,0e2是指数形式,即为0*102。
C输出int型整数,0x是十六进制形式,D用%s格式输出字符串常量"0x2"。
【答案】A
4.已知有声明和语句“inta;scanf("a=%d",&a);”,欲从键盘上输入数据使a中的值为3,则正确的输入应是_______?
?
?
?
。
(2010年春填空题第5题)
【解析】“a=”是原样字符,要照输。
“%d”的位置输入对应的变量a的值3。
就是将键盘输入的值3存入变量a的地址单元,这样a的值就为3。
【答案】a=3
5.若有声明“longa,b;”且变量a和b都需要通过键盘输入获得初值,则下列语句中正确的是________。
(2007年秋选择题第23题)
A.scanf("%ld%ld,&a,&b");B.scanf("%d%d",a,b);
C.scanf("%d%d",&a,&b);D.scanf("%ld%ld",&a,&b);
【解析】a和b是long型,输入时要用“%ld”格式。
对于变量,scanf函数的地址表中必须有取地址运算符“&”,而且只在格式控制串上有双引号,地址表列上不应有双引号。
满足这些要求的只有选项D。
【答案】D
6.若有声明“inti;floatx;chara[50];”,为使i得到值1,x得到值3.1416,a得到值yz,当执行语句“scanf("%3d%f%2s",&i,&x,a);”时,正确的输入形式是_________。
(2006年秋选择题第23题)
A.1,3.1416,yzB.13.1416yzC.0013.1416yzD.i=001,x=3.1416,a=yz
【解析】第一个输入格式“%3d”对应变量i,要输入3位,而i值为1,只占1位,补足3位,输入时在前面加00,输完“001”后用空格或回车或TAB键分隔。
第二个输入格式“%f”,对应的数为实数3.1416,输完加分隔符。
第三个输入格式“%2s”,是2个字符的字符串,a为数组名,本身就已表示地址了,前面无“&”。
选项C满足要求。
A用逗号分隔,逗号不是有效的分隔符,只有当格式控制串中有原样字符逗号时才需输入逗号,而且i不足3位。
B在输入数据时没有分隔符,D在输入时有“i=”等字符,不需要。
【答案】C
7.已知有声明“chars[80];”,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是________。
(2009年秋选择题第28题)
A.scanf("%s",s);B.scanf("%s",s[0]);C.s=gets();D.s=getchar();
【解析】A中的scanf函数中的s是数组名,本身就表示地址了,不用再加“&”。
B中的s[0]表示一个元素,不是地址,C中应该将s放入括号中作为gets函数的参数,D中的getchar函数一次只能输入一个字符。
scanf函数不能输入空格。
【答案】A
8.若有声明“chars[l0]="remind";”,执行“puts(s+2);”后的输出结果是___________。
(2007年秋填空题第2题)
【解析】puts函数的功能是输出一个字符串。
s表示数组的起始地址,s+2表示数组元素的第2个元素的地址,所以从s[2]元素开始输出,结果为mind。
【答案】mind
3.2.2实现选择结构的语句
1.已知有声明“intx,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y取值-1”,则以下程序段中错误的是________。
(2009年秋选择题第26题)
A.if(x>=0)y=1;elsey=-1;B.y=x>=0?
1:
-1;
C.switch()D.switch(x-abs(x))
{casex>=0:
y=1;break;{case0:
y=1;break;
default:
y=-1;default:
y=-1;
}}
【解析】本题考点为if语句和switch语句。
选项A用if语句表示,正确。
选项B用条件表达式表示,x大于等于0成立将1赋值给y,否则