1、国家二级 C语言机试( C语言基础知识)模拟试卷 11及答案与解析 一、选择题 1 若变量均已正确定义并赋值,以下合法的 C语言赋值语句是 ( A) x=n 2 5; ( B) x+n=i; ( C) x=5=4+1: ( D) x=y=5; 2 若有定义语句: int a=3, b=2, c=1;以下选项中错误的赋值表达式是 ( A) a=b=c+1; ( B) a=(b=4)=3; ( C) a=(b=4)+c; ( D) a=1+(b=c=4); 3 表达式 a+=a=a=9的值是 ( A) 9 ( B) 0 ( C) 18 ( D) 9 4 若有以下程序 #include stdio
2、h main()int a= 11, b=10; a =b = 4: printf(“ d d n“, a, b); 则程序的输出结果是 ( A) -1-2 ( B) 5-2 ( C) 4-3 ( D) 5-3 5 以下叙述中正确的是 ( A)在赋值表达式中,赋值号的右边可以是变量,也可以是任意表达式 ( B) a是实型变量, a=10在 C语言中是允许的,因此可以说:实型变量中可以存放整型数 ( C)若有 int a=4, b=9;执行了 a=b后, a的值已由原值改变为 b的值, b的值变为 0 ( D)若有 int a=4, b=9;执行了 a=b; b=a;之后, a的值为 9, b的
3、值为 4 6 有以下程序,程序运行后的输出结果是 #include stdio h main()int a=3; printf(“ d n“, (a+=a =a*a); ( A) 9 ( B) 0 ( C) 3 ( D) -12 7 若有定义和语句: ( A) 3, 5 ( B) 3, 5, ( C) 3, 5 ( D) 3, 5, 4 8 有以下程序,程序运行后的输 出结果是 main() int m=12, n=34; printf(“ d d”, m+, +n); printf(“ d d n”, n+, +m); ) ( A) 12353514 ( B) 12353513 ( C) 1
4、2343514 ( D) 12343513 9 在 16位编译系统上,若有定义 “int a=10, 20, 30, *p=a; ”,当执行 “p+; ”后,下列说法错误的是 ( A) P向高地址移了一个字节 ( B) P向高地址移了一个存储单元 ( C) P向高地址移了两个字节 ( D) P与 a+1等价 10 设有定义: int x=2;以下表达式中,值不为 6的是 ( A) 2*x, x+=2 ( B) x+, 2*x ( C) x*=(1+x) ( D) x*=x+1 11 有以下程序,程序运行后的输出结果是 #include main()int x, y, z; x=y=1; z=x
5、+, y+, +y; printf(“ d, d, d n“, x, y, z); ( A) 2, 3, 1 ( B) 2, 3, 2 ( C) 2, 3, 3 ( D) 2, 2, 1 12 若变量 x、 y已 正确定义并赋值,以下符合 C语言语法的表达式是 ( A) +x, y=x- ( B) x+1=y ( C) x=x+10=x+y ( D) double(x) 10 13 设有定义: int k=0;以下选项的四个表达式中与其他三个表达式的值不相同的是 ( A) k+ ( B) k+=1 ( C) +k ( D) k+1 14 若有以下程序,则程序的输出结果是 #include st
6、dio h main()int a=0, b=0, c=0; c=(a =+a), (a+=b, b+=4); printf(“ d, d, d n“, a, b, c); ( A) 0, 4, 4 ( B) 1, 4, 1 ( C) 0, 4, 0 ( D) 1, 4, 4 15 若有以下程序 #include stdio h main()int a=0, b=0, c=0 c=(a+=+b, b+=4); printf(“ d, d, d n“,a, b, c); 则程序的输出结果是 ( A) 1, 5, 1 ( B) 1, 4, 4 ( C) 1, 5, 5 ( D) 1, 4, 1 1
7、6 有以下程序,程序的输出结果是 main()int sum, pad, pAd; sum=pad=5; pAd=+sum, pAd+, +pad; printf(“ d n“, pad); ( A) 5 ( B) 7 ( C) 8 ( D) 6 17 若有定义 “int x, y; ”并已正确给变量赋值,则以下选项中与表达式 “(xy)?(x+): (y+)”中的条件表达式 (x y)等价的是 ( A) (x y 0) ( B) (x y 0) ( C) (x y 0xy 0) ( D) (x y=0) 18 以下选项中,当 x为大于 1的奇数时,值为 0的表达式是 ( A) x 2 ( B
8、) x 2!=0 ( C) x 2=0 ( D) x 2=1 19 以下叙述中正确的是 ( A)关系运算符两边的运算对象可以是 C语言中任意合法的表达式 ( B)在 C语言中,逻辑真值和假值分别对应 1和 0 ( C)对于浮点变量 x和 y,表达式: x=y是非法的,会出编译错误 ( D)分支结构是根据算术表达式的结果来判断流程走向的 20 以下叙述中正确的是 ( A) a表示一个字符常量 ( B) 0表示字符 0 ( C)表达式: a b的结果是 “假 ” ( D) “是非法的 21 以下关于逻辑运算符两侧运算对象的叙述中正确的是 ( A)只能是整数 0或非 0整数 ( B)可以是结构体类型
9、的数据 ( C)可以是任意合法的表达式 ( D)只能是整数 0或 1 22 若 a是数值类型,则逻辑表达式 (a=1)(a!=1)的值是 ( A) 0 ( B) 2 ( C) 1 ( D)不知道 a的值,不能确定 23 当变量 c的值不为 2、 4、 6时,值也为 “真 ”的表达式是 ( A) (c=2)(c=4)(c=6) ( B) (c =2&c =6)&!(c 2) ( C) (c =2&c =6) (c 2!=1) ( D) (c =2&c=6)(c!=3)(c!=5) 24 表示关系式 xyz的 C语言表达式的是 ( A) (x =y)(y =z) ( B) (x =y =z) (
10、C) (x =y)&(y =z) ( D) (x =y)!(y =z) 25 若变量已正确定义,以下选项中非法的表达式是 ( A) a!=4b ( B) a 4 ( C) a=1 2*(x=y=20, x*3) ( D) A+32 26 有 以下程序,程序运行后的输出结果是 main()int x=35, B; char z=B; B=(x)&(z b); printf(“ d n“, B); ( A) 0 ( B) 35 ( C) 1 ( D) 66 27 与数学表达式 xyz对应的 C语言表达式是 ( A) (x =y =z) ( B) (x =y)&(y =z) ( C) (x =y)!
11、(y =z) ( D) (x =y)(y =x) 28 以下叙述中正确的是 ( A)对于逻辑表达式: a+&b+,设 a的值为 0,则求解表达式的值后, b的值会发生改变 ( B)对于逻辑表达式: a+b+,设 a的值为 1,则求解表达式的值后, b的值会发生改变 ( C)关系运算符的结果有三种: 0, 1, 1 ( D) else不是一条独立的语句,它只是 if语句的一部分 29 以下叙述中正确的是 ( A)由 &构成的逻辑表达式与由 构成的逻辑表达式都有 “短路 ”现象 ( B) C语言的关系表达式: 0 x ( C)逻辑 “非 ”(即运算符 !)的运算级别是最低的 ( D)逻辑 “或 ”
12、(即运算符 )的运算级别比算术运算要高 30 下列关系表达式中,结果为 “假 ”的是 ( A) (3 4)=1 ( B) (3+4) 6 ( C) (3!=4) 2 ( D) 3 =4 国家二级 C语言机试( C语言基础知识)模拟试卷 11答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 选项 D)的含义是把关系表达式 y=5的值赋给变量 x。所以这是一条正确的赋值语句。因为赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量。因为求余运算符 “ ”两侧的运算对象都应当是整型数据。 【知识模块】 C语言基础知识 2 【正确 答案】 B 【试题解析】 本题主要考查赋值表达式,对
13、于赋值表达式来说,赋值号 “=”的左边一定为变量名,右边为一个 C语言合法的表达式。 【知识模块】 C语言基础知识 3 【正确答案】 B 【试题解析】 第一步 a=9,然后计算 a-a的值,并将此值赋给 a,因此此时a=0,最后计算 a+a,并将此值赋给 a,因此最终结果为 0。 【知识模块】 C语言基础知识 4 【正确答案】 B 【试题解析】 对于语句 “a =b, = 4; ”相当于 “a=a (b=b 4); ”a初值为11, b的初值为 10,则运算以后 10 4值为 2, 11 2值为 5。 【知识模块】 C语言基础知识 5 【正确答案】 A 【试题解析】 选项 B)中 a=10,在
14、赋值时会把 10自动转换为 double类型然后赋值,实型变量中不可能存放整型。而选项 C)中执行 a=b后, b的值不变还是 9,选项 D)中执行 “a=b; b=a; ”后, a的值为 9, b的值也为 9。 【知识模块】 C语言基础知识 6 【正确答案 】 D 【试题解析】 对于表达式 “a+=a=a*a”相当于 “a=a (a*a)”,然后汁算 “a=a+a”, a的初值为 3,则表达式的值为 12。 【知识模块】 C语言基础知识 7 【正确答案】 C 【试题解析】 在格式控制字符串中插入其他字符,则在输入的时候应该据实加入到输入流中,不能随意加入空格等,否则无法得到正确的输入结果。
15、【知识模块】 C语言基础知识 8 【正确答案】 A 【试题解析】 本题主要考查自加运算符,自加运算符 +在变量前表示先增加然后再使用, +在变量 后表示先使用然再增加。本题中,第一个 printf语句 m+表示先输出 m的值,然后 m增加 1,因此首先输出的是 12,然后 m的值变成 13,+n表示 n首先增加 1变成 35然后输出,因此输出的是 35;在第二个 printf语句中, n+是先输出 n的值然后增加,即输出 35, n的值变为 36, +m表示先增加m的值再输出, m的值由 13变成 14,故最后输出的是 14。 【知识模块】 C语言基础知识 9 【正确答案】 B 【试题解析】
16、本题考查数组和数组指针。 a是一个整型数组, p指针指向 a数组,即 p指向 a数组的首元 素的地址,因此 p+之后, p往高地址移动,指向首元素后面一个元素的地址。 【知识模块】 C语言基础知识 10 【正确答案】 A 【试题解析】 本题考查逗号表达式。逗号表达式的求解过程是:先求解表达式1,再求解表达式 2,整个逗号表达式的值是表达式 2的值,因此,选项 A)中值为4;选项 B)中,值为 6。选项 C)中 x*=x+1等价于 x=x*(x+1),所以等于 6;选项 D)与选项 C)等价,结果也为 6。 【知识模块】 C语言基础知识 11 【正确答案】 A 【试题解析】 在程序中,整型变量
17、x、 y的初值都为 1,赋值语句 “z=x+, y+,+y”右边的 “x+, y+, +y”是一个逗号表达式,所以逗号表达式的值为 +y的值。执行逗号表达式 “x+, y+, +y”后, x的值为 2, y的值为 3, z取逗号表达式的值,为 1。 【知识模块】 C语言基础知识 12 【正确答案】 A 【试题解析】 用逗号将表达式连接起来的式子称为逗号表达式。其表达式的一般形式为:表达式 1,表达式 2, ,表达式 n。最后一个表达式的值就是此逗号表达式的值。所以选项 A)为 C语言中的逗号表达式。赋值表达式的左 侧只能是变量,不能是常量或表达式。强制类型转换表达式的形式为: (类型名 )(表
18、达式 ),其中 (类型名 )称为强制类型转换运算符,数据类型两边的圆括号不能省略。 【知识模块】 C语言基础知识 13 【正确答案】 A 【试题解析】 因为题中有语句 “int k=0; ”,所以选项 B)、 C)、 D)都是对 k的值加 1,选项 A)的语句 k+表示先利用 k的值进行运算,然后 k值才加 1。 【知识模块】 C语言基础知识 14 【正确答案】 C 【试题解析】 表达式 c=(a=+a), (a+=b, b+=4)相当于逗号表达式,首先计算c=(a =+a),其中 (a =+a)等价 a=a (+a),得到 a的值 0, c的值为 0,在计算 (a+=b, b+=4)时, a
19、和 b的初值为 0,计算以后, a为 0, b为 4。 【知识模块】 C语言基础知识 15 【正确答案】 C 【试题解析】 对于语句 “c=(a+=+b, b+=4); ”首先计算 “a=a+(+b)”, a, b初值为 0,则计算以后 a为 1, b为 1,然后计算 b+=4,得到 b的值为 5,此时表达式b+=4的值为整个逗号表达式的值,因此 c的值为 5。 【知识模块】 C语言基础知识 16 【正确答案】 D 【试题解析】 有逗号表达式构成的语句 “pAd=+sum, pAd+, +pad; ”主要从左到由连续运算,因此 pad的值为 6。注意 Dad和 pAd的是不同的变量。 【知识模
20、块】 C语言基础知识 17 【正确答案】 D 【试题解析】 条件表达式的形式如下:表达式 1?表达式 2:表达式 3。其含义为当 “表达式 1”的值为非零时,求出 “表达式 2”的值,此时 “表达式 2”的值就是整个条件表达式的值:当 “表达式 1”的值为零时,则求 “表达式 3”的值,这时 “表达式3”的值就是整个表达式的值。本题条件表达式的执行顺序是先求解表达式 “x-y”的值,若其值为非 0(可以是证数,也可以是负数 ),则再求表达式 “x+”的值,其值就是条什表达式的值:若表达式 “x-y”的值为 0,则再求表达式 “y+”的值,其值就是条什表达式的值。 【知识模块】 C语言基础知识
21、18 【正确答案】 C 【试题解析】 由于 x为大于 1的奇数,因此 x 2取余的值为 1,和 0不相等。 【知识模块】 C语言基础知识 19 【正确答案】 A 【试题解析】 C语言中没有逻辑类型,用作 零表永逻辑真。 0表示逻辑假,选项B)错误,无法判断两个浮点变量是否相等,但是 x=y 不会出现编译错误,选项 C)错误,分支结构根据表达式的值,不一定为算术表达式,选项 D)错误。 【知识模块】 C语言基础知识 20 【正确答案】 C 【试题解析】 字符常量可以参加关系运算,按照其存储的 ASCII码值进行比较, a b不成立,值为假。而 0表示 NULL, ASCII码值为 0。 【知识模
22、块】 C语言基础知识 21 【正确答案】 C 【试题解析】 逻辑运算符两侧的运算对象可以是 任意合法的表达式。逻辑表达式的运算结果或者为 1(“真 ”),或者为 0(“假 ”)。 【知识模块】 C语言基础知识 22 【正确答案】 C 【试题解析】 在逻辑表达式中, ab,只有在 a跟 b都为 0时,表达式的结果才为 0。在题中所给的表达式中 a要么等于 1,要么不等于 1,肯定会有一方的值不为真,表达式值为 1。 【知识模块】 C语言基础知识 23 【正确答案】 D 【试题解析】 逻辑或运算中,只要有一项为真,表达式的值就为真,故选项 D)中 c的值不为 2、 4、 6时,那么表达式 (c =
23、2&c =6)以及 (c!=3)、 (c!=5)必有一个成立,表达式的值也为真。 【知识模块】 C语言基础知识 24 【正确答案】 C 【试题解析】 表示三个变量的关系,要利用逻辑表达式,用逻辑与连接。 【知识模块】 C语言基础知识 25 【正确答案】 C 【试题解析】 赋值表达式左边应为变量,选项 C)中左边为字符常量,因此非法,其余表达式均为合法的表达式。 【知识模块】 C语言基础知识 26 【正确答案】 C 【试题解析】 表达式 (x)&(z b), x为 35非零,考虑表达式 z b,成立,则 B的值为 1。 【知识模块】 C语言基础知识 27 【正确答案】 B 【试题解析】 若要表示
24、 x大于等于 y,同时 y大于等于 z,需要用逻辑与表达式连接。 【知识模块】 C语言基础知识 28 【正确答案】 D 【试题解析】 else不能单独使用,和 if匹配使用,要注意逻辑与运算和逻辑或运算出现的短路现象,关系运算结果仅有 0和 1。 【知识模块】 C语言基础知识 29 【正确答案】 A 【试题解析】 逻辑表达式的运算比较复杂,有短路现象 ,也就是首先计算 “逻辑与 ”或者 “逻辑或 ”运算的第一个运算量的值,根据表达式的值决定是否进行第二个量的值的计算。 “逻辑与 ”和 “逻辑或 ”运算低于关系运算和算术运算。但是 “逻辑非 ”运算却高于算术运算。 【知识模块】 C语言基础知识 30 【正确答案】 C 【试题解析】 关系表达式和逻辑表达式的结果为非零或者 0,其中 0表示假,而非零表示真,由于 3!=4的结果为 1,而 1 2的结果为假。 【知识模块】 C语言基础知识