第一题
1.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为( )语句。
A:for
B:while
C:do
D:if
答案及解析 D
如果每个case块后面都跟着break,这就说明了,执行到每一个case之后,都会退出switch语句,就相当于只要条件成立就结束,这跟if是类似的。
第二题
2. C 语言中的文件包含是不可以嵌套的
A:true
B:false
答案及解析 B
比如我们头文件的包含,在多文件写代码的时候,我们通常会用到头文件包含,比如我们会建立.h文件,命名为test.h,之后里面会用到stdio.h,stdilb.h,string.h等,这个时候在我们的.c文件中直接用#include "test.h"一个,就可以把stdio.h,stdilb.h,string.h都调用到了;
第三题(难点)
5.已知数组D的定义是int D[4][8];现在需要把这个数组作为实参传递给一个函数进行处理。下列可以作为对应的形参变量说明的是()【多选】
A:int D[4][ ]
B:int *s[8]
C:int(*s)[8]
D:int D[ ][8]
答案及解析 CD
A D:我们知道定义二维数组的时候,可以省略行,但是不可以省略列,所以传参也一样,故A错误,D正确;
B C:这里面我们要知道指针数组和数组指针的区别
先看B:B选项中int *s[8],因为我们的[]优先级是比*高的,所以会优先结合形成数组,然后每个数组元素类型是int*,所以这个数组有8个元素,元素类型都是int*的,是指针数组
再看C:int (*s)[8]首先我们是一个指针,指向的是int[8]这个一维数组,所以我们传实参的时候是数组名D,二维数组的数组名代表的是第一行的地址,所以我们用这个int (*s)[8]是可以接收的,那我们如何使用呢?
在一维数组的时候,int *a,*a等价于a[]
所以二维数组也一样,int (*s)[8] 可以等价于 int s[][8]
第四题
4. 字符串“BeiJing”存储在计算机中,需要的字节数是( )
A:7
B:14
C:8
D:16
答案及解析 C
一个英文字母占一个字节,题中一共八个,所以是8字节
第五题
5. 若已定义: int a[9] ,*p = a; 并在以后的语句中未改变 p 的值,不能表示 a[1] 地址的是()
A:++p
B:a+1
C:p+1
D:a++
答案及解析 D
这里考察的是前置++和后置++的区别
前置++,int a = 1; int b = ++a; 这个时候b = 2,a = 2;
后置++:int a = 1; int b = a+=; 这个时候b = 1,a = 2;
所以后置++返回的是++之前的值;