1、国家二级 C语言机试(选择题)模拟试卷 61及答案与解析 一、选择题 1 以下选项中,当 x为大于 1的奇数时,值为 0的表达式是 ( )。 ( A) x 2=0 ( B) x 2 ( C) x 2!=0 ( D) x 2=1 2 以下叙述中正确的是 ( )。 ( A)在 C语言中,逻辑真值和假值分别对应 1和 0 ( B)关系运算符两边的运算对象可以是 C语言中任意合法的表达式 ( C)对于浮点变量 x和 y,表达式: x=y是非法的,会出编译错误 ( D)分支结构是根据算术表达式的结果来判断流程走向的 3 若变量已正确定义,以下选项中非法的表达式是 ( )。 ( A) a!=4 b ( B
2、) a=1 2*(x=y=20, x*3) ( C) a 4 ( D) A+32 4 与数学表达式 xyz对应的 C语言表达式是 ( )。 ( A) (x=y) (y=x) ( B) (x =y =z) ( C) (x =y)!(y =z) ( D) (x =y)&(y =z) 5 若 a是数值类型,则逻辑表达式 (a=1) (a!=1)的值是 ( )。 ( A) 1 ( B) 0 ( C) 2 ( D)不知道 a的值,不能确定 6 当变量 c的值不为 2、 4、 6时,值也为 “真 ”的表达式是 ( )。 ( A) (c =2&c=2&c =6)&!(c 2) ( D) (c =2&c =6
3、) (c! =3) (c! =5) 7 有以下程序: include main() int a=1, b=2, c=3, d=0; if(a: =1&b+=2) if(b!=2 c- - !=3) printf(“ d, d, d n“, a, b, c; else printf(“ d, d, d n“, a, b, c; else prinff(“ d, d, d n“, a, b, c; 程序运行后的输出结果是 ( )。 ( A) 1, 3, 2 ( B) 1, 3, 3 ( C) 1, 2, 3 ( D) 3, 2, 1 8 若有以下程序: #include main( ) int a
4、=1, b=2, c=3, d: 4; if(a=2) (b=1)c=2; if(c=3) &(d=-1)a=5; printf(“ d, d, d, d n“, a, b, c, d; 则程序的输出结果是 ( )。 ( A) 1, 2, 3, 4 ( B) 2, 1, 2, -1 ( C) 5, 1, 2, -1 ( D) 2, 2, 2, 4 9 若有以下程序: #include main() int a=1, b=2, c=3, d=4; if(a=2)&(b=1) c=2; if(C=3) (d=-1) a=5; printf(“ d, d, d, d n“, a, b, c, d;
5、则程序的输出结果是 ( )。 ( A) 2, 2, 2, 4 ( B) 2, 1, 2, -1 ( C) 5, 1, 2, -1 ( D) 1, 2, 3, 4 10 以下关于逻辑运算符两侧运算对象的叙述中正确的是 ( )。 ( A)可以是任意合法的表达式 ( B)只能是整数 0或非 0整数 ( C)可以是结构体类型的数据 ( D)只能是整数 0或 1 11 设有宏定义: #define IsDIV(k, n) (k n=1)?1: 0) 且变量 m已正确定义并赋值,则宏调用: IsDIV(m, 5)&IsDIV(m, 7) 为真时所要表达的是 ( )。 ( A)判断 m是否能被 5和 7整除
6、 ( B)判断 m被 5和 7整除是否都余 1 ( C)判断 m被 5或者 7整除是否余 1 ( D)判断 m是否能被 5或者 7整除 12 表示关系式 xyZ的 C语言表达式的是 ( )。 ( A) (x =y)&(y =x) ( B) (x =y) (y =x) ( C) (x =y=0) Y=sqrt(x); if(x main( ) int a=1, b=2, c=3, d=4, r=0; if(a!=1); else r=1; if(b=2) r+=2; ese; if(c!=3) r+=3; else; if(d=4) r+=4; printf(“ d n“, r); 则程序的输出
7、结果是 ( )。 ( A) 10 ( B) 7 ( C) 6 ( D) 3 17 若有以下程序: #include main( ) int a: 1, b=2, c=3, d=4, r=0; if(a!=1); ese r=1; if(b=2) -+=2; if(c!=3); r+: 3; if(d=4) r+=4; printf(“ d n“, r); 则程序的输出结果是 ( )。 ( A) 3 ( B) 7 ( C) 6 ( D) 10 18 以下叙述中正确的是 ( )。 ( A)对于逻辑表达式: a+ b+,设 a的值为 1,则求解表达式的值后, b的值会发生改变 ( B)对于逻辑表达式
8、: a+&b+,设 a的值为 0,则求解表达式的值后, b的值会发生改变 ( C) case不是一条独立的语句,它只是 if语句的一部分 ( D)关系运算符的结果有三种: 0, 1, -1 19 有以下程序: #include main( ) int x=1, y=0, a=0, b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; ca,se 2: a+; b+; break; case 3: a+; b+; printf(“a= d, b= d n“, a, b); 程序的运行 结果是 ( )。 ( A
9、) a=2, b=2 ( B) a=2, b=1 ( C) a=1, b=1 ( D) a=1, b=0 20 有以下程序段: #include int i, n; for(i=0; i 8; i+) n=rand() 5; switch(n) case 1: case 3: printf(” d n”, n); break; case 2: case 4: printf(“ d n“, n); continue; case 0: exit(0); printf(“ d n“, n); 以下关于程序段执行情况的叙述,正确的是 ( )。 ( A) for循环语句固定执行 8次 ( B)当产生的随
10、机数 n为 4时结束循环操作 ( C)当产生的随机数 n为 1和 2时不做任何操作 ( D)当产生的随机数 n为 0时结束程序运行 21 若有定义: float x=1 5; int a=1, b=3, c=2;则正确的 switch语句是 ( )。 ( A) switch(a+b) case 1: printf(“* n“); case 2+1: printf(“* n“); ( B) switch(int)x); case 1: printf(“* n“); case 2: printf(“* n“); ( C) switch(x) case 1 0: prinff(“* n“); cas
11、e 2 0: printf(“* n“); ( D) switch(a+b) case 1: printf(“* n“); case c: prinff(“* n“); 22 有以下程序: #include min( ) int a=2, 3, 5, 4, i; for(i=0; i 4; i+) switch(i 2) case 0: switch(ai 2) case 0: ai+; break; case 1: ai-; break; case 1: ai=0; for(i=0; i 4; i+)printf(“ d“, ai); printf(“ n“); 程序运行后的输出结果是 (
12、)。 ( A) 0 3 0 4 ( B) 2 0 5 0 ( C) 3 3 4 4 ( D) 3 0 4 0 23 下列叙述中正确的是 ( )。 ( A)在 switch语句中,不一定使用 break语句 ( B)在 switch语句中必须使用 default ( C) break语句必须与 switch语句中的 case配对使用 ( D) break语句只能用于 switch语句 国家二级 C语言机试(选择题)模拟试卷 61答案 与解析 一、选择题 1 【正确答案】 A 【试题解析】 算术运算符的优先级高于关系运算符的优先级,所以当 x为大于 l的奇数时, A选项的值为假,即 0。 B选项的
13、值为不定值,但绝对不是 0。 C选项的值为真,即 1。 D选项的值为真,即 1。 2 【正确答案】 B 【试题解析】 A选项中,在 C语言中,逻辑真值对应非 0; C选项中,表达式:x=y是合法的; D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此 B选项正确。 3 【正确答案】 B 【试题解析】 A选项中 a即表 示 a为字符常量,再给 a赋值 1 2*(x=y=20,x*3),是不正确的。因此 B选项正确。 4 【正确答案】 D 【试题解析】 本题考查关系表达式和逻辑表达式。 y大于等于 x同时 y小于等于z,因此 x=y和 y=z是逻辑与的关系。因此 D选项正
14、确。 5 【正确答案】 A 【试题解析】 逻辑或 “ ”要求只要两边的运算对象有一个非零,结果就为真,虽然不知道 a的值,但是若 a为 1,则左边运算对象为 1,若 a的值不是 1,则右边运算对象的值为 1,所以总能保证一边非零,所以结果为真,即 1。 6 【正 确答案】 D 【试题解析】 逻辑或运算符中只要有一个运算量为真结果就是真,当 c =2&c =6条件不成立时 c的值肯定不是 2、 3、 4、 5、 6,所以 c!=3,与 c!=5均成立。所以 D选项的结果一定为真。 7 【正确答案】 B 【试题解析】 在 if语句中, else总是和最近的 if配对,所以进入第一个 if语句中条件
15、判断时,因为是逻辑与操作需要两边运算对象的值均为非零值,才为真,所以需要逐个执行判断的结果为 1,进入第二个 if语句条件判断,因为 b!=2条件成立所以整个条件表达式的值为真,所以不再执行逻 辑或的第二个运算对象 (c-!=3)c的值不变,也不再执行第一个 else语句。打印 a的值 1, b的值 3, c的值 3。 8 【正确答案】 D 【试题解析】 第一个 if语句的判断条件是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断。执行第一个 if判断条件时 a的值为 2,整个表达式的值为真, b的值不变, c的值为 2。判断第二个 if条
16、件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式 c=3,不成立,不再判断第二个运算对象,所以不执行 d=一 1操作 和a=5操作。所以结果为选项 D。 9 【正确答案】 C 【试题解析】 第一个 if语句的判断条件是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个 if判断条件,均为赋值表达式,第一个运算对象 a=2非零,判断第二个表达式 b=1也非零,所以条件成立执行 c=2的赋值操作。执行第二个 if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中c=3运算对象为假,所以需要判断第二个运算对象 d=一 l,结果为非零,所以条件成立,执行 a=5,的操作
17、,所以 a值为 5, b值为 1, c值为 2, d值为 -1。 10 【正确答案】 A 【试题解析】 C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择 A。 11 【正确答案】 B 【试题解析】 本题考查逻辑运算符的相关概念。逻辑与若要为真,那么两边都要为真,需要 m能被 5和 7整除,且都余 1,所以选项 B正确。 12 【正确答案】 A 【试题解析】 本题考察关系表达式和逻辑表达式, y大于等于 x同时 y小于等于z,因此 x =y和 y =z是逻辑与的关系。因此 A选项正确。 13 【正确答案】 D 【试题解 析】 if语句中的表达式可以是任意
18、合法的数值,如常量,变量表达式。所以 D选项正确。 14 【正确答案】 C 【试题解析】 公式的要求是无论 x大于等于 0还是小于 0, y的值都为 x绝对值的开方。选项 C中如果 x值小于 0,则 y=sqrt(x)就要出错。本题重点考察的知识点是: sqrt()函数。 sqrt()函数的作用是开方计算,要求输人的参数 x必须大于等于0。选项 C一开始调用了 sqrt(x)而没有判断 x的正负,所以是错误的。 15 【正确答案】 C 【试题解析】 A、 B、 D选项的含义均为 a的值如果为 0时打印 y的值,否则打印 x的值。但是 C选项的含义是: a的值为 0时打印 x的值,不为 0时打印
19、 y的值,与其他选项正好相反。 16 【正确答案】 B 【试题解析】 else总是和与之最近的 if配对,执行第一个 if,判断条件不成立,执行 else r=1;语句。再执行第二个 if语句中的判断条件,成立,左移执行r+=2, r的值为 3,再执行第三个 if的判断条件,不成立,执行第 7行 else后面的空语句 “; ”。再执行第四个 if的判断条件 d=4成立,执行 r+=4, r的值为 7。然后打印输出。 17 【正确答案】 D 【试题解析】 第一个 if语句 a!=1条件为假,所以执行 else后的语句 r=l。第二个if语句 b=2条件成立,执行 r+=2, r的值变为 3,第三
20、个 if语句 c!=3条件为假,所以不做任何操作。执行下面的 r+=3操作, r的值变为 6。判断第四个 if条件,d=4条件成立,执行 r+=4操作,结果为 10。 18 【正确答案】 C 【试题解析】 B选项和 A选项中, &、都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。而且 &、的优先级比 +高,所以题中 只需判断 a的值即可知道符号表达式的真假; D选项中,关系运算符的结果有 “真 ”和 “假 ”两种。因此 C选项正确。 19 【正确答案】 B 【试题解析】 case常量表达式只是起语句标号作用,并不是在该处进行条件判断。在执行 swit
21、ch语句时,根据 switch的表达式,找到与之匹配的 case语句,就从此 case子句执行下去,不在进行判断,直到碰到 break或函数结束为止。所以执行内层 switch(y)时只执行了 a+,此时 a的值为 1。然后执行外层 case 2语句的a+; b+; a为 2, b为 1。所以结果为 B。 20 【正确答案】 D 【试题解析】 cltse常量表达式只是起语句标号作用,并不是在该处进行条件判断。在执行 switch语句时,根据 switch的表达式,找到与之匹配的 case语句,就从此 case子句执行下去,不再进行判断,直到碰到 break或函数结束为止。简单的说 break是
22、结束整个循环体,而 continue是结束单次循环。 B选项中当产生的随机数 n为 4时要执行打印操作。 C选项中当产生的随机数为 1和 2时分别执行case3与 cased后面语句的内容。由于存在 break语句所以 for循环不是固定 执行 8次,执行次数与产生的随机数 n有关系。 21 【正确答案】 A 【试题解析】 B选项中 switch(int)x);语句不应该有最后的分号。switch(exprl),中的 exprl不能用浮点类型或 long类型,也不能为 个字符串,所以 C错误。 case后面常量表达式的类型必须与 switch后面表达式的类型一致,所以 D错误。 22 【正确答
23、案】 D 【试题解析】 第一次循环 i为 0, i 2为 0,执行 switch(a0 2)中的 case 0语句, a0+, a0的值变成 3;第二次 循环 i的值为 1。 i 2为 1,执行 ease l:ai=0;所以 a1的值变成 0;第三次循环 i的值为 2, i 2为 0,执行switch(a2 2)中的 case 1语句, a2一一, a2的值变成 4;第四次循环 i的值为3, i 2为 l,执行 case l: ai=0;所以 a3的值变成 0。 23 【正确答案】 A 【试题解析】 defauh语句在 switch语句中可以省略,所以 B错误; switch语句中并非每个 case后都需要使用 break语句,所以 C错误; break语句还可以用于for等循 环结构中,所以 D错误。