c语言在编译时对结构类型,2012年计算机等级二级C语言章节习题及答案(11)

第11章 结构体与共用体

一、选择题(在下列各题的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 "stdio.h"

main()

{ struct date

{ int year,month,day; } today;

printf("%d\n",sizeof(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("%d\n",++(p->x));

}

A)10

B)11

C)51

D)60

正确答案: C教育联展网

11.11 有以下程序:

#include

union pw

{ int i;

char ch[2];

}a;

main()

{ a.ch[0]=13;

a.ch[1]=0;

printf("%d\n",a.i);

}

程序的输出结果是

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]={"John",17,"paul",19,"Mary",18,"Adam",16,};

根据上述定义,能输出字母M的语句是

A)printf("%c\n",class[3].name);

B)printf("%c\n",class[3].name[1]);

C)printf("%c\n",class[2].name[1]);

D)printf("%c\n",class[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("%d\n",t);

}

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("%d\n",++p->x);

printf("%d\n",(++p)->x);

printf("%d\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("%d\n",a.u.x);

}

A)4

B)5

C)6

D)0

正确答案: D

11.19 有以下程序

struct STU

{ char num[10]; float score[3];

};

main()

{ struct STU s[3]={{"20021",90,95,85}, {"20022",95,80,75},{ "20023",100,95,90},},*p=s;

int i; float sum=0;

for(i=0;i<3;i++)

sum=sum+p->score[i];

printf("%6.2f\n",sum);

}

程序运行后的输出结果是

A)260.00

B)270.00

C)280.00

D)285.00

正确答案: B

11.20 有以下程序

#include

struct NODE

{ 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("%d\n ",p->num+q->next->num);

}

程序运行后的输出结果是

A)10

B)20

C)30

D)40

正确答案: D

11.11 有以下程序:

#include

union pw

{ int i;

char ch[2];

}a;

main()

{ a.ch[0]=13;

a.ch[1]=0;

printf("%d\n",a.i);

}

程序的输出结果是

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]={"John",17,"paul",19,"Mary",18,"Adam",16,};

根据上述定义,能输出字母M的语句是

A)printf("%c\n",class[3].name);

B)printf("%c\n",class[3].name[1]);

C)printf("%c\n",class[2].name[1]);

D)printf("%c\n",class[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("%d\n",t);

}

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("%d\n",++p->x);

printf("%d\n",(++p)->x);

printf("%d\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("%d\n",a.u.x);

}

A)4

B)5

C)6

D)0

正确答案: D

11.19 有以下程序

struct STU

{ char num[10]; float score[3];

};

main()

{ struct STU s[3]={{"20021",90,95,85}, {"20022",95,80,75},{ "20023",100,95,90},},*p=s;

int i; float sum=0;

for(i=0;i<3;i++)

sum=sum+p->score[i];

printf("%6.2f\n",sum);

}

程序运行后的输出结果是

A)260.00

B)270.00

C)280.00

D)285.00

正确答案: B

11.20 有以下程序

#include

struct NODE

{ 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("%d\n ",p->num+q->next->num);

}

程序运行后的输出结果是

A)10

B)20

C)30

D)40

正确答案: D教育联展网

二、填空题(请将每一个空的正确答案写在答题卡相应序号后。)11.26 以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。

struct node

{ int info;

【1】link;

};

正确答案: struct node *

11.27 设有以下结构体类型:

struct st

{ char name[8];

int num;

float s[4];

}student[50];

并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整:

fwrite(student,【2】,1,fp);

正确答案: sizeof(struct st)*50

11.28 使用结构体处理数据的场合是【3】 。

正确答案: 把不同类型的数据作为整体处理。

11.29 以下程序的功能是:处理由学号和成绩组成的学生记录,N名学生的数据已在主函数中放入结构体数组s中,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数高的学生可能不只一个,函数返回分数最高学生的人数。请填空。

#include

#define N 16

typedef struct

{ char num[10];

int s ;

} STREC;

int fun (STREC *a, STREC *

B)

{ int i,j=0,max=a[0].s;

for(i=0;iif(maxfor(i=0;iif(【4】) b[j++]=a[i];

return j;

}

main ()

{ STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},

{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},

{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},

{"GA016",72} };

STREC h[N];

int i, n;FILE *out;

n=fun(s,h);

printf("The %d highest score :\n",n);

for (i=0; iprintf("%s M\n ",h[i].num,h[i].s);

printf("\n");

out=fopen("out15.dat", "w");

fprintf(out, "%d\n",n);

for(i=0; ifprintf(out, "M\n ",h[i].s);

fclose(out);

}

正确答案: max==a[i].s

11.30 若有以下说明和定义语句,则变量w在内存中所占的字节数是 【5】 。

union aa {float x; float y; char c[6]; };

struct st{ union aa v; float w[5]; double ave; } w;

正确答案: 34

11.31 阅读下列程序,则程序的输出结果为【6】。

#include "stdio.h"

struct ty

{ int data;

char c;

};

main()

{ struct ty a={30,′x′};

fun(a);

printf("%d%c",a.data,a.

C);

}

fun(struct ty

B)

{ b.data=20;

b.c=′y′;

}

正确答案: 30x

11.32 现有如下定义:struct aa{int a;float b;char c;}*p;现需用malloc函数动态的申请一个struct aa类型大小的空间(由p指向),则定义的语句为: 【7】 。

正确答案: p=(struct aa *) malloc (sizeof(struct aa));

11.33 阅读下列程序,则程序实现的功能是 【8】 。

#include "stdio.h"

struct node

{ char data;

struct node *next;

} *head;

fun(struct node *q)

{ if(head == NULL)

{ q->next=NULL;

head=q;

}

else

{ q->next=head;

head=q;

}

}

main()

{ char ch;

struct node *p;

head = NULL;

while((ch=getchar())!=′\n′)

{ p=(struct node *)malloc(sizeof(struct node));

p->data=ch;

fun(p);

}

p=head;

while(p!=NULL)

{ printf("%c",p->data);

p=p->next;

}

}

正确答案: 从键盘输入一行字符串,调用函数建立反序的链表,然后输出整个链表

11.34 以下函数set用来建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾。单向链表的头指针作为函数值返回,请填空。

struct node{char data; struct node *next; };

struct node *set()

{ struct node *t1,*t2,*t3;

char ch;

t1=(struct node*)malloc(sizeof(struct node));

t3=t2=t1;

ch=getchar();

while(ch!=′\n′)

{ t2= 【9】 malloc(sizeof(struct node));

t2->data=ch;

t3->next=t2;

t3=t2;

ch=getchar();

}

t3->next=′\0′ ;

【10】

}

正确答案: (struct node *) 正确答案: return(t1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值