国家二级C语言(结构体、共用体、位运算及文件操作)机试模拟试卷10
选择题
1.以下叙述中错误的是(A)
A. 可以用typedef将已存在的类型用一个新的名字来代表
B. 可以通过typedef增加新的类型
C. 用typedef定义新的类型名后,原有类型名仍有效
D. 用typedef可以为各种类型起别名,但不能为变量起别名
解析:C语言允许用typedef说明一种新类型名,说明新类型名的语句一般形式为:typedef 类型名 标识符;在此,“类型名”必须是在此语句之前已有定义的类型标识符。“标误符”是一个用户定义标识符,用作新的类型名。typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
2.以下关于typedef的叙述错误的是(C)
A. typedef只是将已存在的类型用一个新的名字来代表
B. 用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
C. 用typedef可以增加新类型
D. 用typedef为类型说明一个新名,通常可以增加程序的可读性
解析:C语言允许用typedef说明一种新的类型名,其一般形式为:typedef 类型名 标识符;在此“类型名”必须是在此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用作新的类型名。Typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原来的类型名依然有效,这样可以增加程序的可读性。
3.以下结构体类型说明和变量定义中正确的是
A
解析:定义结构体类型的一般形式为:struct 结构体名 {成员列表};struct 结构体名后不能加“;”号,所以选项B、C错误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为struct t1,t2;选项A为用户自定义类型,其为正确的定义形式。
4.以下叙述中错误的是(B)
A. 可以用typedef将已存在的类型用一个新的名字来代表
B. 可以通过typedef增加新的类型
C. 用typedef定义新的类型名后,原有类型名仍有效
D. 用typedef可以为各种类型起别名,但不能为变量起别名
解析:C语言允许用typedef说明一种新类型名。
typedef 类型名 标识符;
其中“类型名”必须是在此语句之前已定义的类型标识符;“标识符”是一个用户定义标识符,用作新的类型名;typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
5.若有定义 typedef int* T; T a[10]; 则a的定义与下面哪个语句等价(A)
A. int *a[10];
B. int (*a)[10];
C. int *a;
D. int a[10];
解析:typedef的主要功能是为存在的类型命名,后面的代码中可以利用该新定义的类型名定义变量,题目中定义了整型指针类型T,而后利用T定义了整型指针数组a,含有10个元素,选项A中定义了整型指针数组a,选项B定义了一个指向一维数组的指针a,选项C定义指针变量,,而选项D为定义整型数组最常用的形式,数组a中可以存放10个数据元素。
6.若有定义 typedef char T[10]; T *a; 上述定义中a的类型与下面选项中完全相同的是(D)
A. char (*a)[10];
B. char *a;
C. char a[10];
D. char *a[10];
解析:题目中利用typedef定义了字符数组类型T,而后定义了该类型的指针a,因此a为指针数组。
7.以下结构体说明和变量定义中,正确的是
A
解析:选项B中结构体定义中每个成员后面的分号都不能省略,double m后没分号,因此错误。选项C结构体类型定义完毕后,}外没加分号。选项D中定义变量要加上关键字struct。
8.以下叙述中正确的是(C)
A. 使用typedef说明新类型名时,其格式是: typedef 新类型名 原类型名;
B. 使用typedef 说明新类型名时,后面不能加分号
C. 在程序中,允许用typedef来说明一种新的类型名
D. 在使用typedef改变原类型的名称后,只能使用新的类型名
解析:C语言允许用typedef说明一种新类型名。定义形式如下:
typedef 类型名 标识符;
其中“类型名”必须是在此语句之前已定义的类型标识符;“标识符”是一个用户定义标识符,用作新的类型名;typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
9.以下叙述中错误的是(B)
A. typedef的作用是用一个新的标识符来代表已存在的类型名
B. typedef说明的新类型名必须使用大写字母,否则会出编译错误
C. 可以用typedef说明的新类型名来定义变量
D. 用typedef可以说明一种新的类型名
解析:typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原来类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示。
10.下面结构体的定义语句中,错误的是
B
解析:在选项B中,由于在定义完结构体后缺少分号“;”,所以这是一条不完整的语句,因而是错误的。
11.有以下程序
#include <stdio.h>
typedef struct { int b, p; } A;
void f(A c) /* 注意:c是结构变量名 */ {
int j;
c.b += 1; c.p+=2; }
main() {
i; A a={1,2};
f(a);
printf(\\(B)
A. 2,4
B. 1,2
C. 1,4
D. 2,3
解析:在C语言中,数据只能从实参单向传递给形参,称为“按值”传递。也就是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。所以本题中在main()函数f(a)语句中结构体实参a作为值,传递给函数f(A c)中的形参c;这种值传递的方式不会对实参a产生任何影响,所以结构体实参a的值不会发生变化。
12.有以下程序
struct S { int a, b; } data[2]={10,100,20,200};
main() {
struct S p=data[1]; printf(\\(C)
A. 11
B. 20
C. 21
D. 10
解析:在题目中定义了结构体S类型的数组变量data,并对其赋初值。在程序中定义了指向结构体S类型的变量p,并把数组data的第二个元素data[1]的值赋给它,所以此时成员变量p.a的值等于20,在输出时分别加1,所以输入结果为选项A。
13.设有定义:
struct complex { int real,unreal;}
data1={1,8},data2;
则以下赋值语句中错误的是(A)
A. data2=(2,6);
B. data2=
本文档预览:3600字符,共9238字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载