国家二级C语言(选择结构、循环结构)机试模拟试卷3
选择题
1.下列选项中,当x为大于1的奇数时,值为0的表达式是( )。(A)
A. x%2==0
B. x/2
C. x%2!=0
D. x%2==1
解析:算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。D选项的值为真,即1。
2.若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是( )。(A)
A. 1
B. 0
C. 2
D. 不知道a的值,不能确定
解析:逻辑或“||”要求只要两边的运算对象有一个非零,结果就为真。虽然不知道a的值,但是若a为1,则左边运算对象为1;若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零。
3.当变量c的值不为2、4.6时,值为“真”的表达式是( )。(D)
A. (c>=2&&c<=6)&&(c%21=1)
B. (c==2)||(c==4)||(c==6)
C. (c>=2&&c<=6)&&!(c%2)
D. (c>=2&&c<=6)||(c!=3)||(c!=5)
解析:逻辑或运算符中只要有一个运算量为真,结果就是真,当c>=2&&c<=6条件不成立时,c的值肯定不是2、3、4、5、6,所以c!=3与c!=5均成立,所以D选项的结果一定为真。
4.有以下程序:
#include<stdio.h>
main( )
{
int a=1,b=2,c=3,d=0;
if(a==1&&b++==2)
if(b!=2||c–!=3)
prinff(\\(B)
A. 1,3,2
B. 1,3,3
C. 1,2,3
D. 3,2,1
解析:else总是和最近的if配对,所以进入第一个if语句中进行条件判断时,因为是逻辑与操作,需要两边运算对象的值均为非零值才为真,所以需要逐个执行判断的结果为1。进入第二个if语句条件判断,因为b!=2条件成立,所以整个条件表达式的值为真,不再执行逻辑或的第二个运算对象(c–!=3)c的值不变,也不再执行第一个else语句。打印a的值1,b的值3,c的值3。
5.下列关于逻辑运算符两侧运算对象的叙述中正确的是( )。(A)
A. 可以是任意合法的表达式
B. 只能是整数0或非0整数
C. 可以是结构体类型的数据
D. 只能是整数0或1
解析:C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A。
6.设有宏定义:#define IsDIV(k,n)((k%n==1)?1:0),且变量m已正确定义并赋值,则宏调用:Is DIV(m,5)&&IsDIV(m,7)为真时所要表达的是( )。(B)
A. 判断m是否能被5和7整除
B. 判断m被5和7整除是否都余1
C. 判断m被5或者7整除是否余1
D. 判断m是否能被5或者7整除
解析:本题考查逻辑运算符的相关概念。逻辑与若要为真,那么两边都要为真,所以需要m能被5和7整除都余1,所以选项B正确。
7.if句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是( )。(D)
A. 必须是逻辑值
B. 必须是整数值
C. 必须是正数
D. 可以是任意合法的数值
解析:if语句中的表达式可以是任意合法的数值,如常量、变量表达式,所以D选项正确。
8.下列条件语句中,输出结果与其他语句不同的是( )。(C)
A. if(a!=0)pfintf(\\
B. if(a==0)pfintf(\\
C. if(a==0)pfintf(\\
D. if(a)pfintf(\\
解析:A、B、D选项的含义均为:a的值如果为0,打印y的值,否则打印x的值。而C选项的含义是:a的值为0时打印x的值,不为0时打印y的值,与其他选项正好相反。
9.有以下程序:
#include<stdio.h>
main( )
{int a=0,b=0,c=0,d=0;
if(a=1)b=1;c=2;
else d=3;
printf(\\(C)
A. 1,1,2,0
B. 0,0,0,3
C. 编译有错
D. 0,1,2,0
解析:本题中if(a=1)h=1;与else d=3;之间多了语句c=2;,所以会出现else语句的位置错误的编译失败提示。
10.设有定义:int a=1,b=2,c=3;以下语句中执行效果与其他3个不同的是( )。
C
解析:因为变量a=1,b=2所以条件a>b不成立,选项A、B和D相当于一条语句,选项A是逗号表达式,选项B和选项D是复合语句,所以都没有执行。选项C中,语句“c=a”不执行,语句“a=b;b=c;”执行。故选项C符合题意。
11.有嵌套的if语句:
if(a<b)
if(a<c)k=a;
else k=c:
else if(b<c=k=b;
else k=c:
以下选项中与上述if语句等价的语句是( )。(B)
A. k=(a<b)?((b<c)?a:b):((b>c)?b:c);
B. k=(a<b)?((a<c)?a:c):((b<c)?b:c);
C. k=(a<b)?a:b;k=(b<c)?b:c;
D. k=(a<b)?a:b;k=(a<e)?a:c;
解析:题目中嵌套语句的含义是当a<b且a<c成立时,将a的值赋给k,如果a<b成立而a<c不成立,则将c的值赋给k。如果a<h不成立而b<c成立,则将b的值赋给k,如果a<b不成立且b<c也不成立,则将c的值赋给k。判断条件表达式,只有B选项可以表示这个含义。
12.有以下程序:
#include<stdio.h>
main( )
{
int x=1,y=2,z=3;
if(x>y)if(y<z)
printf(\\(A)
A. 1
B. 41
C. 2
D. 331
解析:else!总是与离它最近的if配对,所以第一个if语句的判断条件不成立,不再执行第二个if语句和与第二个if语句配对的else语句,而是直接执行打印x++的操作,打印x的值1以后再加1。
13.以下程序段中,与语句k=a>b?(b>c?1:0):0;功能相同的是( )。(B)
A. if((a>b)||(b>c))k=1;
else k=0;
B. if((a>b)&&(b>c))k=1;
else k=0;
C. if(a<=b)k=0;
else if(b<=c)k=1;
D. if(a>b)k=1;
else if(b>c)k=1;<
本文档预览:3600字符,共9945字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载