第一题
1. 在如下结构定义中,不正确的是( )。
A:
struct student { int no; char name[10]; float score; };
B:
struct stud[20] { int no; char name[10]; float score; };
C:
struct student { int no; char name[10]; float score; }stud[20];
D:
struct { int no; char name[10]; float score; }stud[20];
答案及解析 B
本题考查的是结构体的定义可以在哪里定义。
A:正确,A是声明,没有定义,我们可以在别的地方定义
B:错误,不可以把数组作为结构体名
C:正确,在结构体右括号末尾定义结构体对象,只不过是定义的结构体数组
D:正确,这种没有声明结构体的名的结构体是匿名结构体
第二题
2. 在 32 位平台上,这个联合的大小是()字节
union test { int x; char y; float z; };
A:7
B:2
C:1
D:4
答案及解析 D
union联合体是共用一个存储空间的,但是至少是最大的成员所需要的空间,int 是 4字节,char 是 1字节,float 是 4字节,所以最大成员就是4字节,这个联合体就是4字节。
第三题
3. 下面程序执行的结果为()
int main( ) { char ch1,ch2; ch1 ='D'+'8'-'3'; ch2 ='9'-'1'; printf("%c %d\n",ch1,ch2); return 0; }
A:I '8'
B:I 8
C:G '8'
D:其他几项都不对
答案及解析 B
本题是考查大家对ASCII值的了解,但这里其实用不到ASCII,我们可以推断'8' - '3'的转换成ASCII值的变化量是相同的,所以'8' - '3' = 8 - 3 = 5,‘D’ + 5 = ‘I’。同理ch2 = 8;答案就是B
第四题
4. DIV (x+5,y-5)引用,替换展开后是( )
#define DIV(a, b) a / b
A:x+5/y-5
B:(x+5/y-5)
C:(x+5)/(y-5)
D:(x+5)/(y-5);
答案及解析 A
这里考查的是宏替换的问题,记住是替换,不要添加多余的括号,所以平行替换就是A
第五题
5. 有下面一段代码,执行会出现什么问题?
#define NUM 5 char str[NUM-1]; str[sizeof(str)]='\0';
A:没有问题
B:数组越界
C:赋值错误
D:忘记加地址运算符&
答案及解析 B
str[NUM-1] 替换成 str[4],是一个字符串,有4个元素,sizeof(str)计算的是整个数组的大小,因为sizeof+数组名是代表整个数组,所以总大小为4,
原式=str[4] ,但是下标访问数组的范围是0~3,没有下标为4的元素,是越界访问。