第一题
1. 在C语言中,非法的八进制是( )
A:018
B:016
C:017
D:0257
答案及解析 A
八进制是0~7的数字,所以A错误
第二题
2. fun((exp1,exp2),(exp3,exp4,exp5))有几个实参?
A:2
B:5
C:1
D:3
答案及解析 A
这是对fun函数的一次调用,而(exp1, exp2)这是一个逗号表达式,结果是最后一个表达式exp2的值,相同(exp3, exp4, exp5)也是一个逗号表达式,结果是exp5的值,所以该函数的实参有2个。
第三题
3. 下列的常量定义中,错误的定义是( )【多选】
A:const M=10;
B:const int M=20;
C:const char ch;
D:const bool mark=true;
答案及解析 A C
const修饰的变量,必须初始化,而且必须有数据类型
第四题
4. 阅读以下程序,当输入数据的形式为12a345b789↙,正确的输出结果为()
#include <stdio.h> int main() { char c1,c2; int a1,a2; c1 = getchar(); scanf("%2d",&a1); c2 = getchar(); scanf("%3d",&a2); printf ("%d,%d,%c,%c\n",a1,a2,c1,c2); }
A:2,345,1,a
B:12,345,a,b
C:2a,45b,1,3
D:2,789,1,a
答案及解析 A
首先我们输入的字符,会先到缓冲区上,之后getchar会拿走一个字符;
其次scanf这里的%2d的意思是,取两个整型的数字,如果有无效的,就不取;
下面是官方解释:
通过调用getchar函数将输入的第一个字符赋给c1,所以c1的值是字符’1’,接下来调用scanf函数将输入的两位数赋给整型变量a1,但此时输入的两位是2a,a是无效的数字,所以只将2赋给变量a1,字符’a’通过后续的getchar函数将其赋给变量c2,再接下来调用scanf函数将输入的三位数赋给整型变量a2,则a2的值为345。所以正确答案是A。
第五题
5. 下面哪个语句无法通过编译?
A:if (x>y);
B:if (x=y) && (x!=0) x+= y;
C:if (x!=y) scanf("%d",&x); else scanf("%d",&y);
D:if (x<y) {x++; y++;}
答案及解析 B
B很明显的错误,if的条件语句写错了,应该这样写if((x = y) && (x != 0)) x += y;