国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷12
选择题
1.关于typedef的叙述中错误的是( )。(B)
A. 用typedef可以为各种类型起别名,但不能为变量起别名
B. 可以通过typedef增加新的类型
C. 用typedef定义新的类型名后,原有类型名仍有效
D. 可以用typedef将已存在的类型用一个新的名字来代表
解析:C语言允许用typedef说明一种新类型名或为现有类型起个别名,而不是创建新类型,说明新类型名的语句一般形式为:typedef类型名标识符;在此,“类型名”必须是在此语句之前已有定义的类型标识符。标识符是一个用户定义标识符,用作新的类型名。typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
2.正确的结构体类型说明和变量定义是( )。
A
解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct结构体名后不能加“:”号。但定义完之后要在句末加分号,所以选项B、C有误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为“stmct t1,t2;”。选项A为用户自定义类型,其为正确的定义形式。
3.若typedef int*T;T a[5];则与a的定义相同的是( )。(A)
A. int*a[5];
B. int(*a)[5]
C. int,*a;
D. int a[5];
解析:typedef的主要功能是为存在的类型指定一个新的别名,后面的代码中可以利用该新定义的别名定义变量,题目定义了整型指针类型T,而后利用T定义了整型指针数组a,含有5个元素,选项A中定义了整型指针数组a,选项B定义了一个指向一维数组的指针a,选项C定义指针变量,而选项D为定义整型数组最常用的形式,数组a中可以存放5个数据元素。
4.关于结构体说明和变量定义中,正确的是( )。
A
解析:结构体的定义是正常的C语言语句。选项B中结构体定义中每个成员后面的分号都不能省略,选项C结构体类型定义完毕后的}外没加分号,选项D中定义变量要加上关键字struct。
5.关于typedef的叙述中错误的是( )。(B)
A. 用typedef可以说明一种新的类型名
B. typedef说明的新类型名必须使用大写字母,否则会出编译错误
C. 可以用typedef说明的新类型名来定义变量
D. typedef的作用是用一个新的标识符来代表已存在的类型名
解析:C语言规定typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原来类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示,但也可以是小写。
6.下面结构体的定义语句中,错误的是( )。
B
解析:结构体的定义是正常的C语言语句。在选项B中,由于在定义完结构体后缺少分号所以这是一条不完整的语句,因而是错误的。
7.设有定义:
struct STR{int real,unreal;)
datal={1,8},data2;
则以下赋值语句中错误的是( )。(A)
A. data2=(2,6);
B. data2=data1;
C. data2.real=data 1.real;
D. data2.real=data 1.unreal;
解析:本题主要考查结构体变量的定义与初始化。题目中定义了STR类型的结构体变量data1和data2,并对data1进行了初始化。结构体变量Q的负值比较灵活,可以用一个结构体变量对另一个结构体变量赋值,用一个结构体变量的成员对另一个结构体变量的成员赋值。
8.以下程序的输出结果是( )。
#nclude
#include
typedef struct{char name[9];char sex;int score[2];}STU;
STU fun(STU a)
{STU b={’’Tom’’,’m’,85,90};
int i;
strcpy(A→name,B→name);
A→sex=B→sex;
for(i=O;i<2;i++)A→score[i]=B→score[i];
return a;}
main()
{STU c={’’Lily’’,’f’,95,92},d;
d=fun(c);
printf(’’%s,%c,%d,%d,’’,d→name,d→sex,d→score[0],d→score[1]);
printf(’’%s,%c,%d,%d,’’,c→name,c→sex,c→score[0],c→score[1]);
}(C)
A. Tom,m,85,90,Tom,m,85,90
B. Lily,f,95,92,Lily,f,95,92
C. Tom,m,85,90,Lily,f,95,92
D. Lily,f,95,92,Tom,m,85,90
解析:在C语言的非指针调用函数中,函数实参与形参之间数据的传递是传值,也就是说在用实参调用形参时,是把实参的值拷贝一份给形参,而实参的值并不变化,仍是原来的值。所以对于本题来说,在主函数中调fun(c)后,实参c的值并不会变化,仍是原值。在函数f中把局部变量b的值依次返回给变量d。
9.若typedef struct STR{int g;char h;}T;以下叙述中正确的是( )。(D)
A. T是stmct STR类型的变量
B. STR是struct类型的变量
C. 可用STR定义结构体变量
D. 可用T定义结构体变量
解析:题目中本题考查typedef,T是用typedef定义的struct STR的新名称,因此可用T定义结构体变量,但是T并不是变量,只是struct STR的新名称。
10.设typedef struet STR{char c;int a[4];}TV;则下面叙述中正确的是( )。(D)
A. STR是struct类型的变量
B. 可以用STR定义结构体变量
C. TV是struct STR类型的变量
D. 可以用TV定义结构体变量
解析:C语言允许用typedef说明一种新的类型名,用标识符代替类型名,在此,“类型名”必须是此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用作新的类型名。typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。在本题中用typedef定义STR为TV的一种新的类型名,因而可以用它定义一个结构体变量。
11.有以下程序段:
struet str{int x;int*y;}*pt;
int a[]={1,2},b[]={3,4};
struet str c[2]={10,a,20,b};
pt=c;
以下选项中表达式的值为11的是( )。(C)
A. (pt++)一>x
B. pt一>x
C. ++pt一>x
D. *pt一>y
解析:本题定义了指针pt,pt指向结构体数据c[2]的第一个元素c[0],所以pt->x=10,执行自加运算后为11。
<本文档预览:3600字符,共7037字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载