二级C语言-运算符与表达式 (总分:60.00,做题时间:90分钟) 一、{{B}}选择题{{/B}}(总题数:38,分数:38.00) 1.设变量已正确定义并赋值,以下合法的C语言赋值语句是______。
A.x=y==5
B.x=n%2.5
C.x+n=i
D.x=5=4+1
(分数:1.00) A. √ B. C. D. 解析:[解析] 赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项C和D错误。“%”运算符两侧都应当是整型数据,选项B错误。 2.在x值处于-2~2、4~8时值为“真”,否则为“假”的表达式是______。
A.(2>x>-2)||(4>x>8)
B.!(((x<-2)||(x>2))&&((x<=4)||(x>8)))
C.(x<2)&&(x>=-2)&&(x>4)&&(x<8)
D.(x>-2)&&(x>4)||(x<8)&&(x<2)
(分数:1.00) A. B. √ C. D. 解析:[解析] 本题是考查关系运算和逻辑运算的混合运算。要给出此题的正确答案,首先需要了解数学上的区间在C语言中的表示方法,如x在[a, b]区间,其含义是x既大于等于a又小于等于b,相应的C语言表达式是x>=a&&x<=b。本例中给出了两个区间,一个数只要属于其中一个区间即可,这是“逻辑或”的关系。在选项A中,区间的描述不正确。选项B把“!”去掉,剩下的表达式描述的是原题中给定的两个区间之外的部分,加上“!”否定正好是题中的两个区间的部分,是正确的。选项C是恒假的,因为它的含义是x同时处于两个不同的区间内。选项D所表达的也不是题中的区间。 3.sizeof(double)是______。
A.一种函数调用
B.一个整型表达式
C.一个双精度表达式
D.一个不合法的表达式
(分数:1.00) A. B. √ C. D. 解析:[解析] sizeof是一个C语言关键字,有着特定的功能。在C语言中,一个函数的调用格式是:函数名(参数列表)。虽然“sizeof(double)”与函数调用有着相同的格式,但sizeof是一个C语言关键字,因此,它不是一个函数调用。sizeof在C语言中是表示求一个变量或数据类型所占用的内存字节数的运算符,所以“sizeof(double)”表示求双精度浮点型数据占用内存的字节数。显然,该表达式返回的是一个整数,而不是一个双精度数。 4.对于条件表达式(M)? (a++):(a--),其中的表达式M等价于______。
A.M==0
B.M==1
C.M!=0
D.M!=1
(分数:1.00) A. B. C. √ D. 解析:[解析] 因为条件表达式e1?e2:e3的含义是e1为真时,其值等于表达式e2的值,否则为表达式e3的值。“为真”就是“不等于假”,因此M等价于M!=0。 5.设变量已正确定义并赋值,以下正确的表达式是______。
A.x=y*5=x+z
B.int(15.8%5)
C.x=y+z+5, ++y
D.x=25%5.0
(分数:1.00) A. B. C. √ D. 解析:[解析] 求余运算符“%”两边的运算对象必须是整型数据,而选项B和D中“%”两边的运算对象有浮点整型数据,所以选项B和D是错误的表达式。在选项A中赋值表达式两边出现相同的变量x,也是错误的。选项C是一个逗号表达式,所以正确的答案为C。 6.设变量已正确定义为整型,则表达式n=i=2,i=n+1,i+n的值为______。
A.2
B.3
C.4
D.5
(分数:1.00) A. B. C. D. √ 解析:[解析] 本题考查的是C语言逗号表达式相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔的各表达式的值,整个逗号表达式的值等于其中的最后一个表达式的值。本题中,首先i和n被赋值为2,i再加上n和1为3,最后i+n等于2+3=5。本题答案为D。 7.若已定义x和y为double类型,则表达式“x=1, y=x+3/2”的值是______。
A.1
B.2
C.2.0
D.2.5
(分数:1.00) A. B. C. √ D. 解析:[解析] 本题中的表达式为逗号表达式,此表达式的结果为y=x+3/2的值。y=x+3/2的运算次序为:先进行3/2运算,两个运算数均为整型量,结果也为整型量,等于1,此结果将与double类型数进行相加,要转换为1.00...00。最后将x的值1转换成double型,与1.00...00相加。 8.设变量已正确定义并赋值,以下正确的表达式是______。
A.x=y*5=x+z
B.int(15.8%5)
C.x=y+z+5, ++y
D.x=25%5.0
(分数:1.00) A. B. C. √ D. 解析:[解析] 求余运算符“%”两边的运算对象必须是整型,而选项B、D中“%”两边的运算对象有浮点整型数据,所以选项B、D是错误的表达式。在选项A中赋值表达式的两边出现相同的变量“x”,也是错误的。选项C是一个逗号表达式,所以正确的答案为C。 9.现有定义int a;double b;float c;char k;,则表达式a/b+c-k的值的类型为______。
A.int
B.double
C.float
D.char
(分数:1.00) A. B. √ C. D. 解析:[解析] 双目运算中两边运算量类型转换规则。 运算数1 运算数2 转换结果类型
短整型 整型 字符型 有符号整型 整型 长整型 长整型 整型 无符号整型 浮点型 短整型->长整型 整型->长整型 字符型->整型 有符号整型->无符号整型 整型->浮点型
在a/b的时候,a、b的类型不一致,根据类型转换规则,要把整型转换成double类型,之后的加、减类似。转换规则char,short→int→unsigned→long→double→float。 10.设有定义:int k=0;,以下选项的4个表达式中与其他3个表达式的值不相同的是______。
A.k++
B.k+=1
C.++k
D.k+1
(分数:1.00) A. B. C. D. √ 解析:[解析] 选项A、B、C都使k的值增加1,D选项不改变k的值。本题答案为D。 11.以下关于单目运算符++、--的叙述中正确的是______。
A.它们的运算对象可以是任何变量和常量
B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D.它们的运算对象可以是char型变量、int型变量和float型变量
(分数:1.00) A. B. C. D. √ 解析:[解析] “++”和“--”运算符都是单目运算符,其运算对象可以是整型变量,也可以是实型变量,但不能是常量或表达式。当运算对象是字符型时,系统自动将其转换成该字符所对应的ASCII码值。 12.以下选项中,与k=n++完全等价的表达式是______。
A.k=n, n=n+1
B.n=n+1, k=n
C.k=++n
D.k+=n+1 (分数:1.00) A. √ B. C. D. 解析:[解析] 题中的表达式是先让n参与赋值运算,然后再对本身进行自加,所以选A。 13.以下非法的赋值语句是______。
A.n=(i=2, ++i)
B.j++
C.++(i+1)
D.x=j>0
(分数:1.00) A. B. C. √ D. 解析:[解析] 自加或自减运算的操作数不能是表达式。 14.以下程序的输出结果为______。 #include <stdio.h> main() { int i=4, a; a=i++; printf("a=% d, i=% d", a, i); }
A.a=4, i=4
B.a=5, i=4
C.a=4, i=5
D.a=5, i=5
(分数:1.00) A. B. C. √ D. 解析:[解析] 本题考查的是自增运算符及赋值运算符的综合使用问题。自增运算符是一元运算符,其优先级比赋值运算符高,要先计算。把表达式i++的值赋予a,由于i++的结果为当前i的值(当前i的值为4),所以i++的值为4,得到a的值为4。同时,计算了i++后,i由4变为5。 15.若变量已正确定义并赋值,以下符合C语言语法的表达式是______。
A.a:=b+1
B.a=b=c+2
C.int18.5%3
D.a=a+7=c+b