第9章 结构体与共用体
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。)
11.1 C语言结构体类型变量在程序运行期间
A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元 B)所有的成员一直驻留在内存中 C)只有最开始的成员驻留在内存中 D)部分成员驻留在内存中 考生答案: 正确答案: B
11.2 下列各数据类型不属于构造类型的是 A)枚举型 B)共用型 C)结构型 D)数组型 考生答案: 正确答案: A
11.3 当说明一个结构体变量时系统分配给它的内存是
A)各成员所需内存量的总和 B)结构中第一个成员所需内存量
C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量 考生答案: 正确答案: A 11.4 设有以下说明语句 typedef struct { int n;
char ch[8]; } PER;
则下面叙述中正确的是
A)PER 是结构体变量名 B)PER是结构体类型名
C)typedef struct 是结构体类型 D)struct 是结构体类型名 考生答案: 正确答案: B
11.5 已知有如下定义:struct a{char x; double y;}data,*t;,若有t=&data,则对data中的成员的正确引用是 A)(*t).data.x B)(*t).x C)t->data.x D)t.data.x 考生答案: 正确答案: B
11.6 以下程序的运行结果是 #include \main() { struct date
{ int year,month,day; } today;
printf(\\n\(struct date)); }
A)6 B)8 C)10 D)12 考生答案: 正确答案: A 11.7 设有如下定义: struck sk { int a; float b;
} data; int *p;
若要使P指向data中的a域,正确的赋值语句是 A)p=&a; B)p=data.a; C)p=&data.a; D)*p=data.a; 考生答案: 正确答案: C
11.8 以下对结构体类型变量的定义中,不正确的是 A)typedef struct aa { int n; float m; } AA; AA tdl;
B)#define AA struct aa AA { int n; float m; } tdl; C)struct { int n; float m; } aa;
struct aa tdl; D)struct { int n; float m; } tdl;
考生答案: 正确答案: C
11.9 若有下面的说明和定义 struct test
{ int ml; char m2; float m3;
union uu { char ul[5]; int u2[2];} ua; } myaa;
则sizeof(struct test )的值是 A)12 B)16 C)14 D)9 考生答案: 正确答案: A 11.10 以下程序的输出是 struct st
{ int x; int *y;} *p;
int dt[4]={ 10,20,30,40 };
struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]}; main() { p=aa;
printf(\\n\(p->x)); }
A)10 B)11 C)51 D)60 考生答案: 正确答案: C 11.11 有以下程序: #include
char ch[2]; }a;
main()
{ a.ch[0]=13; a.ch[1]=0;
printf(\\n\); }
程序的输出结果是
A)13 B)14 C)208 D)209 考生答案: 正确答案: A
11.12 已知学生记录描述为: struct student { int no;
char name[20],sex; struct
{ int year,month,day; } birth; };
struct student s;
设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是 A)year=1984;month=11;day=12; B)s.year=1984;s.month=11;s.day=12;
C)birth.year=1984;birth.month=11;birth.day=12; D)s.birth.year=1984;s.birth.month=11;s.birth.day=12; 考生答案: 正确答案: D 11.13 有如下定义
struct person{char name[9];int age;};
struct person class[10]={\根据上述定义,能输出字母M的语句是 A)printf(\\n\[3].name); B)printf(\\n\[3].name[1]); C)printf(\\n\[2].name[1]); D)printf(\\n\[2].name[0]); 考生答案: 正确答案: B
11.14 下列程序的输出结果是
struct abc
{ int a, b, c, s; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t; t=s[0].a+s[1].b; printf(\\n\); }
A)5 B)6 C)7 D)8 考生答案: 正确答案: B
11.15 若有下面的说明和定义,则sizeof(struct aa)的值是 struct aa
{ int r1; double r2; float r3;
union uu{char u1[5];long u2[2];}ua; } mya;
A)30 B)29 C)24 D)22 考生答案: 正确答案: D
11.16 有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是 struct node { char data;
struct node *next; } a,b,*p=&a,*q=&b;
A)a.next=q; B)p.next=&b; C)p->next=&b; D)(*p).next=q; 考生答案: 正确答案: B
11.17 下面程序的输出结果是 struct st { int x; int *y; } *p;
int dt[4]={10,20,30,40};
struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; main() { p=aa;
printf(\\n\); printf(\\n\(++p)->x); printf(\\n\(*p->y)); }
A)10 B)50 C)51 D)60 20 60 60 70 20 21 21 31
考生答案: 正确答案: C
11.18 以下程序的输出结果是 union myun { struct
{ int x, y, z; } u;
int k; } a;
main()
{ a.u.x=4; a.u.y=5; a.u.z=6; a.k=0;
printf(\\n\); }
A)4 B)5 C)6 D)0 考生答案: 正确答案: D 11.19 有以下程序 struct STU
{ char num[10]; float score[3]; };
main()
{ struct STU s[3]={{\ int i; float sum=0; for(i=0;i<3;i++)
sum=sum+p->score[i]; printf(\\n\); }
程序运行后的输出结果是
A)260.00 B)270.00 C)280.00 D)285.00 考生答案: 正确答案: B 11.20 有以下程序 #include
{ int num; struct NODE *next; }; main()
{ struct NODE *p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE)); q=(struct NODE*)malloc(sizeof(struct NODE)); r=(struct NODE*)malloc(sizeof(struct NODE)); p->num=10; q->num=20; r->num=30; p->next=q;q->next=r;
printf(\\n \); }
程序运行后的输出结果是 A)10 B)20 C)30 D)40 考生答案: 正确答案: D
11.21 已知函数的原形如下,其中结构体a为已经定义过的结构,且有下列变量定义 struct a *f(int t1,int *t2,strcut a t3,struct a *t4)
struct a p,*p1;int i;
则正确的函数调用语句为