国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷12
选择题
1.以下叙述中错误的是(B)
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类型名标识符;在此“类型名”必须是在此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用作新的类型名。聊edef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原来的类型名依然有效,这样可以增加程序的可读性。
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.若有定义typedefint*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.有以下程序段
Typedef struct NODE
{int hum;struct NODE*next;
}OLD;
以下叙述中正确的是(C)
A. 以上的说明形式非法
B. NODE是一个结构体类型
C. OLD是一个结构型类型
D. OLD是一个结构变量
解析:本题考查结构体和typedf类型定义。本题的声明代码相当于两部分,首先定义struct NODE,然后是一typedef定义OLD类型,因此OLD是结构体类型。选项C正确,其他选项错误。
11.下面结构体的定义语句中,错误的是
B
解析:在选项B中,由于在定义完结构体后缺少分号“;”,所以这是一条不完整的语句,因而是错误的。
12.有以下程序
#include
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的值不会发生变化。
13.有以下程序
struct S {int a,b;)data[2]={10,100,20,200};
main(){
struct S p=data[1];printf(\\(C)
A. 11
B. 20
C.
本文档预览:3600字符,共9606字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载