A) 4 B) 5 C) 6 D) 7
【1.82】已知: union { int i; char c; float a; }test;
则sizeof(test)的值是 。 A) 4 B) 5 C) 6 D) 7
【1.83】已知: union u_type { int i; char ch; float a; }temp;
现在执行\的结果是 。 A) 266 B) 256 C) 10 D) 1
【1.84】若有以下程序段: struct dent { int n; int *m; };
int a=1,b=2,c=3;
struct dent s[3] = { {101,&a},{102,&b},{103,&c} }; struct dent *p=s;
则以下表达式中值为2的是 。
A) (p++)->m B) *(p++)->m C) (*p).m D) *(++p)->m
【1.85】若有以下说明语句,则对结构变量pup中sex域的正确引用是 。 struct pupil
{ char name[20]; int sex; }pup,*p; p=&pup;
A) p.pup.sex B) p->pup.sex C) (*p).pup.sex D) (*p).sex
【1.86】以下对结构变量stul中成员age的非法引用是 。 struct student { int age; int num; }stu1,*p; p=&stu1;
11
A) stu1.age B) student.age C) p->age D) (*p).age
【1.87】若有以下定义和语句: union data { int i; char c; float f; }a; int n;
则以下语句正确的是 。A) a=5; B) a={2,'a',1.2}; C) printf(\
【1.88】已知: struct sk { int a; int age; }date,*p;
如果要使指针p指向data中的成员a,正确的赋值语句是____。 A) p = (struct sk *)&data.a; B) p = (struct sk *)data.a; C) p = &data.a; D) *p = data.a;
【1.89】已知 enum week {sun,mon,tue,wed,thu,fri,sat}day;则正确的赋值语句是____。 A) sun=0; C) san=day; D) sun=mon; D) day=sun;
【1.90】已知 enum color {red,yellow=2,blue,white,black}ren;执行下述语句的输出结果是____。 printf(\A) 0 B) 1 C) 3 D) 4
【1.91】已知 enum name{zhao=1,qian,sun,li}man;执行下述程序段后的输出是____。 man=0; switch(man)
{ case 0: printf(\case 1: printf(\case 2: printf(\default: printf(\}
A) People B) Man C) Woman D)Error
【1.92】下述关于枚举类型名的定义中,正确的是____。
A) enem a={ one,two,three }; B) enem a { one=9,two=-1,three };
C) enem a={\
12
【1.93】C语言中标准输入文件stdin是指 。 A) 键盘 B) 显示器 C) 鼠标 D) 硬盘
【1.94】要打开一个已存在的非空文件\用于修改,选择正确的语句____。 A) fp=fopen(\C) fp=fopen(\
【1.95】当顺利执行了文件关闭操作时,fclose函数的返回值是 。 A) -1 B) TRUE C) 0 D) 1
【1.96】fscanf函数的正确调用形式是 。 A) fscanf (文件指针, 格式字符串, 输出列表); B) fscanf (格式字符串, 输出列表, 文件指针); C) fscanf (格式字符串, 文件指针, 输出列表); D) fscanf (文件指针, 格式字符串, 输入列表);
【1.97】使用fgetc函数,则打开文件的方式必须是 。
A) 只写 B) 追加 C) 读或读/写 D) 参考答案B和C都正确
【1.98】已知宏定义 #define N 3
#define Y(n) ((N+1)*n)
执行语句z=2*(N+Y(5+1));后,变量z的值是____。 A) 42 B) 48 C) 52 D) 出错
【1.99】已知宏定义 #define SQ(x) x*x,执行语句printf(\后的输出结果是____。 A) 1 B) 3 C) 9 D) 10
【1.100】已知宏定义如下: #define PR printf #define NL \#define D \#define D1 DNL
若程序中的语句是 PR(D1,a);经预处理后展开为____。 A) printf(%d\\n,a); B) printf(\C) printf(\,a); D) 原语句错误
13
【单项选择题参考答案】 【1.1】答案: A
注释:int是C语言的关键字 【1.2】答案: B 【1.3】答案:A 【1.4】答案:B
注释:include是预处理命令;scanf是函数名;type不是C语言的关键字。 【1.5】答案:D 【1.6】答案:D 【1.7】答案:A 【1.8】答案:A
注释:int型表示整数的范围是-32768~32767。 【1.9】答案:D
注释:整型常量-1在计算机中表示为补码1111 1111 1111 1111,用十六进制显示这个数时,最左边的1不会被解释为符号位,而是与右边其它位共同转换为十六进制数。 【1.10】答案:B
注释:长整型数32768在计算机内的表示是1000 0000 0000 0000,以一般整型进行输出时,此数恰是-32768的补码。 【1.11】答案:C
注释:长整型数65539在计算机内的表示是0001 0000 0000 0000 0011,以一般整型进行输出时,仅将右侧16位二进制数转换为十进制数。 【1.12】答案:A
注释:C语言中,int型的负数是采用补码表示的。 【1.13】答案:D 【1.14】答案:C
注释:变量c是字符型,可用字符常量为它赋值。字符常量必须用单引号括起来,所以B是错误的;在单引号或双引号内的反斜线'\\'用于表示转义字符,A选项在无引号时使用反斜线是错误的;C选项单引号内出现反斜线表示它与后面的数字组成一个转义字符;单引号只允许括起一个字符,D选项在单引号内出现4个字符,是错误的。 【1.15】答案:C 【1.16】答案:D 注释:空字符和空格符是不同的两个字符,空格符的ASCII码值是32,空字符的ASCII值是0。 【1.17】答案:A 【1.18】答案:B 【1.19】答案:A 【1.20】答案:C 【1.21】答案:B
注释:单纯从C语言语法来说,选项B、C都是正确的,但是选项C中第一个运算的两个对象都是整型常数,其结果也是整型数0,最后的运算结果也就是0了。 【1.22】答案:C 【1.23】答案:A
注释:将条件表达式增加一个括号,此式变为a
14
【1.25】答案:B 【1.26】答案:B
注释:当通过一个运算对象即可决定逻辑运算&&的结果时,则对另一个运算对象不做处理。 【1.27】答案:D 【1.28】答案:B
注释:数组元素在内存中按行排列,此数组的前3个元素的值分别是3、2、1,表达式中虽然数组下标的写法似乎每行有3个元素,和定义时的3行2列不一致,但是C语言引用数组元素时是根据数组的首地址和给出的下标进行运算决定元素的地址。题中表达式引用了数组前3个元素。
【1.29】答案: A 【1.30】答案:D 【1.31】答案:B 【1.32】答案:B 【1.33】答案:B 【1.34】答案:A 【1.35】答案:C 【1.36】答案:C 【1.37】答案:C 【1.38】答案:D 【1.39】答案:D 【1.40】答案:C 1.41】答案:D
注释:scanf函数返回值是输入数据的个数,printf函数的返回值是输出的字符个数。 【1.42】答案:D 【1.43】答案:C
注释:在C语言中, 经常用一个变量来作为逻辑表达式,其含义就是:当变量的值不为0时关系成立。
【1.44】答案:D
注释:break语句仅可跳出switch语句,不会跳出while循环,这是一个死循环。 【1.45】答案:A 【1.46】答案:C 【1.47】答案:C 【1.48】答案:D
注释:当除数y为0时,程序发生溢出错误。 【1.49】答案:C 【1.50】答案:A 【1.51】答案:C 【1.52】答案:C
注释:答案C的赋值号左侧是数组s的首地址,是一个常量,赋值号右侧是一个字符串常量,不可能将一个字符串常量赋给一个地址常量。 【1.53】答案:D
注释:D选项缺少字符串结束标志。 【1.54】答案:C
注释:此处函数形参是一个指针变量,接受实参的地址,而不是一个数组。 【1.55】答案:A
15