第一题
1、执行下面程序,正确的输出是( )
1. intint x=5,y=7; void swap() { int z; z=x; x=y; y=z; } int main() { int x=3,y=8; swap(); printf("%d,%d\n",x, y); return 0; }
A: 5,7
B: 7,5
C: 3,8
D: 8,3
答案及解析 C
当全局变量名和局部变量名一样的时候,优先局部变量
第二题
2、以下不正确的定义语句是( )
A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};
B: char c2[] = {'\x10', '\xa', '\8'};
C: char c1[] = {'1','2','3','4','5'};
D: int y[5+3]={0, 1, 3, 5, 7, 9};
答案及解析 B
B:我们要知道 \ 直接加我们的数字,表示的是八进制数字,格式\ddd,数字可以是1到3
个,并且八进制只有0-7,所以题中是8,错了;
而 \ 加 x 再加数字是表示十六进制的;
第三题(易错)
3、 test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】
#define INT_PTR int* typedef int* int_ptr; INT_PTR a, b; int_ptr c, d;
A: a
B: b
C: c
D: d
答案及解析 ACD
因为#define是宏定义,仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的:int *a, b;这里的int *是a的类型,b的类型是int,故此次b只是int类型。而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。
其实我个人认为这个题考的不好,因为没啥用
我推荐大家一个连续定义变量的习惯,防止弄错,我们要一起定义指针和整型这么定义:
这样定义就很明显谁是指针,谁是整型了
推荐写法,也就是我们的*紧跟着变量 int a, *b; int *c, d 不推荐写法 int* a, b; 这里我们以为都是指针,但是只有a是,b是int类型 所以这种很容易误导,超级不推荐!!!!1
第四题
4、 若给定条件表达式 (M)?(a++):(a--) ,则其中表达式 M ( )
A: 和(M == 0)等价
B: 和(M == 1)等价
C: 和(M != 0)等价
D: 和(M != 1)等价
答案及解析 C
这是条件表达式,条件成立执行问号后面的表达式,不成立执行冒号后面的;
所以这里明显是M为真执行a++,为假执行a--;
而0为假,非0为真,所以应该和M != 0 等价
第五题(重点)
5、有如下定义语句,则正确的输入语句是【多选】( )
int b; char c[10];
A: scanf("%d%s",&b,&c);
B: scanf("%d%s",&b,c);
C: scanf("%d%s",b,c);
D: scanf("%d%s",b,&c);
答案及解析 AB
&c和c两个地址值是一样的,程序的效果相同;然后输入也要把b的地址传过去