当前位置:   article > 正文

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.21 已知函数的原形如下,其中结构体a为已经定义过的结构,且有下列变量定义

struct a *f(int t1,int *t2,strcut a t3,struct a *t4)

struct a p,*p1;int i;

则正确的函数调用语句为

A)&p=f(10,&i,p,p1);

B)p1=f(i++,(int *)p1,p,&p);

C)p=f(i+1,&(i+2),*p,p);

D)f(i+1,&i,p,p);

正确答案: B

11.22 下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非空

struct node{ float x;struct node *next;};

connect(struct node *t1, struct node *t2)

{ if(t1->next==NULL)t1->next=t2;

else connect(______ ,t2); }

要实现此功能则应该添入的选项是

A)t1.next

B)++t1.next

C)t1->next

D)++t1->next

正确答案: C

11.23 阅读如下程序段,则执行后程序的输出结果是

#include main()

{ structa{int x; int y; } num[2]={{20,5},{6,7}};

printf("%d\n",num[0].x/num[0].y*num[1].y);

}

A)0

B)28

C)20

D)5

正确答案: B

11.24 阅读程序段,则执行后的输出结果为

#include "stdio.h"

typedef union{ long x[2];

int y[4];

char z[8];} atx;

typedef struct aa{ long x[2];

int y[4];

char z[8]; } stx;

main()

{ printf("union=%d,struct aa=%d\n",sizeof(atx),sizeof(stx)); }

A)union=8,struct aa=8

B)union=8,struct aa=24

C)union=24,struct aa=8

D)union=24,struct aa=24

正确答案: B

11.25 阅读下列程序段

#include "stdio.h"

typedef struct aa

{ int a;

struct aa *next;

} M;

void set(M *k,int i,int *

B)

{ int j,d=0;

for(j=1;j

{ k[j-1].next=&k[j];

k[j-1].a=b[d++];

}

k[j].a=b[d];

}

main()

{ M k[5],*p;

int d[5]={23,34,45,56,67};

set(k,5,

D);

p=k+1;

printf("%d\n",table);

}

则下面的表达式在table处,能使程序执行后,打印输出数据45的是

A)p->next->a

B)++p->a

C)(*p).a++

D)p++->a

正确答案: A来源:-计算机二级考试

二、填空题(请将每一个空的正确答案写在答题卡相应序号后。)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;i

if(maxfor(i=0;i

if(【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; i

printf("%s M\n ",h[i].num,h[i].s);

printf("\n");

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

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

for(i=0; i

fprintf(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)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/1000945
推荐阅读
相关标签
  

闽ICP备14008679号