第10章 结构与链表.docx

上传人:b****5 文档编号:8520904 上传时间:2023-01-31 格式:DOCX 页数:10 大小:19.17KB
下载 相关 举报
第10章 结构与链表.docx_第1页
第1页 / 共10页
第10章 结构与链表.docx_第2页
第2页 / 共10页
第10章 结构与链表.docx_第3页
第3页 / 共10页
第10章 结构与链表.docx_第4页
第4页 / 共10页
第10章 结构与链表.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

第10章 结构与链表.docx

《第10章 结构与链表.docx》由会员分享,可在线阅读,更多相关《第10章 结构与链表.docx(10页珍藏版)》请在冰豆网上搜索。

第10章 结构与链表.docx

第10章结构与链表

一.选择题

1.C语言结构体类型变量在程序执行期间()

A)所有成员一直驻留在内存中B)只有一个成员驻留在内存中

C)部分成员驻留在内存中D)没有成员驻留在内存中

2.当说明一个结构体变量时系统分配给它的内存是()

A)各成员所需内存量的总和

B)结构中第一个成员所需内存量

C)成员中占内存量最大者所需的容量

D)结构中最后一个成员所需内存量

3.以下对结构体类型变量的定义中,不正确的是()

A)typedefstructaaB)#defineAAstructaa

{intn;AA{intn;

floatm;floatm;

}AA;}td1;

AAtd1;

C)structD)struct

{intn;{intn;

floatm;floatm;

}aa;}td1;

stuctaatd1;

4.设有以下说明语句

structstu

{inta;

floatb;

}stutype;

则下面的叙述不正确的是()

A)struct是结构体类型的关键字

B)structstu是用户定义的结构体类型

C)stutype是用户定义的结构体类型名

D)a和b都是结构体成员名

5.以下选项中不能正确把cl定义成结构体变量的是()

A)typedefstructB)structcolorcl

 {intred;{intred;

  intgreen;intgreen;

  intblue;intblue;

 }COLOR;};

 COLORcl;

C)structcolorD)struct

 {intred;{intred;

  intgreen;intgreen;

  intblue;intblue;

 }cl;}cl;

6.若有如下定义

structdata

{inti;

charch;

doublef;

}b;

则结构变量b占用内存的字节数是()

A)1B)2C)8D)11

7.以下关于共用体的叙述正确的是()

A)一个共用体变量中可同时存放所有成员的数据

B)一个共用体变量中不可同时存放所有成员的数据

C)可直接对共用体变量进行赋值操作

D)共用体不能嵌套定义

8.下列程序的输出结果是()

enumweek{sun=7,mon,tue,wed,thu,fri,sat}day=wed;

main()

{printf(“%d”,day);

}

A)2B)3C)7D)10

9.下面对typedef的叙述中不正确的是()

A)用typedef可以定义各种类型名,但不能用来定义变量

B)用typedef可以增加新类型

C)用typedef只是将已存在的类型用一个新的标识符来代表

D)使用typedef有利于程序的通用和移植

10.以下程序的运行结果是()

#include"stdio.h"

main()

{structdate

{intyear,month,day;

}today;

printf("%d\n",sizeof(structdate));

}

A)6B)8C)10D)12

11.设有以下说明,则下面不正确的叙述是()

uniondata

{inti;

charc;

floatf;

}a;

A.a所占的内存长度等于成员f的长度

B.a的地址和它的各成员地址都是同一地址

C.a可以作为函数参数

D.不能对a赋值,也不可以在定义a时对它初始化

12.已知学生记录描述为

structstudent

{intno;

charname[20];

charsex;

struct

{intyear;

intmonth;

intday;

}birth;

};

structstudents;

设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是()

A)year=1984;month=11;day=11;

B)birth.year=1984;birth.month=11;birth.day=11;

C)s.year=1984;s.month=11;s.day=11;

D)s.birth.year=1984;s.birth.month=11;s.birth.day=11;

13.变量a所占内存字节数是()

unionU

{charst[4];

inti;

longl;

};

structA

{intc;

unionUu;

}a;

A)4B)5C)6D)8

14.有以下结构体说明和变量的定义,指针p指向变量a,指针q指向变量b。

则不能把结点b连接到结点a之后的语句是()

structnode

{chardata;

structnode*next;

}a,b,*p=&a,*q=&b;

A)a.next=q;B)p.next=&b;

C)p->next=&b;D)(*p).next=q;

15.下列程序的输出结果是()

structabc

{inta,b,c;};

main()

{structabcs[2]={{1,2,3},{4,5,6}};intt;

t=s[0].a+s[1].b;

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

}

A)5B)6C)7D)8

16.设有如下定义:

strucksk

{inta;

floatb;

}data;

int*p;

若要使P指向data中的a域,正确的赋值语句是()

A)p=&a;B)p=data.a;C)p=&data.a;D)*p=data.a;

17.根据下面的定义,能打印出字母M的语句是()

structperson{charname[9];

intage;

};

structpersonclass[10]={"John",17,

"Paul",19,

"Mary",18,

"adam",16

};

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]);

18.有以下程序

#include“stdio.h”

structNODE

{intnum;structNODE*next;};

main()

{structNODE*p,*Q,*R;

p=(structNODE*)malloc(sizeof(structNODE));

q=(structNODE*)malloc(sizeof(structNODE));

r=(structNODE*)malloc(sizeof(structNODE));

p->num=10;q->num=20;r->num=30;

p->next=q;q->next=r;

printf(“%d\n”,p->num+q->next->num);

}

程序运行后的输出结果是()

A)10B)20C)30D)40

19.设有如下定义

structss

{charname[10];

intage;

charsex;

}std[3],*p=std;

下面各输入语句中错误的是()

A)scanf("%d",&(*p).age);B)scanf("%s",&std.name);

C)scanf("%c",&std[0].sex)D)scanf("%c",&(p->sex));

20.有以下程序

main()

{union{unsignedintn;

unsignedcharc;

}u1;

ul.c='A';

printf("%c\n",u1.n);

}

执行后输出结果是()

A)产生语法错B)随机值C)AD)65

21.设有如下说明

typedefstruct

{intn;charc;doublex;}STD;

则以下选项中,能正确定义结构体数组并赋初值的语句是()

A)STDtt[2]={{1,'A',62},{2,'B',75}};

B)STDtt[2]={1,"A",62},{2,"B",75}};

C)structtt[2]={{1,'A'},{2,'B'}};

D)structtt[2]={{1,"A",62.5},{2,"B",75.0}};

22.有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。

structnode

{intdata;

structnode*next;

}*p,*q,*r;

_______________________________

|datanextdatanextdatanext|

|→□□→□□→□□→|

| ↑p↑q↑r|

|_______________________________|

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是()

A)r->next=q;q->next=r->next;p->next=r;

B)q->next=r->next;p->next=r;r->next=q;

C)p->next=r;q->next=r->next;r->next=q;

D)q->next=r->next;r->next=q;p->next=r;

23.有以下程序

structs

{intx,y;}data[2]={10,100,20,200};

main()

{structs*p=data;

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

}

程序运行后的输出结果是()

A)10B)11C)20D)21

24.若以下定义:

structlink

{intdata;

structlink*next;

}a,b,c,*p,*q;

且变量a和b之间已有如下图所示的链表结构:

ab

datanextdatanext

┌──┬──┐┌──┬──┐

│5│-+─→│9│\0│

└──┴──┘└──┴──┘

↑p

c

datanext

┌──┬──┐

│7││

└──┴──┘

↑q

指针p指向变量a,q指向变量c。

则能够把c插入到a和b之间并形成新的链表的语句组是:

()

A)a.next=c;c.next=b;B)p.next=q;q.next=p.next;

C)p->next=&c;q->next=p->next;D)(*p).next=q;(*q).next=&b;

25.以下程序的输出是()

structst

{intx;int*y;}*p;

intdt[4]={10,20,30,40};

structstaa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};

main()

{p=aa;

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

}

A)10B)11C)51D)60

26.设有以下说明语句

structex

{intx;floaty;charz;}example;

则下面的叙述中不正确的是()

A)struct结构体类型的关键字B)example是结构体类型名

C)x,y,z都是结构体成员名D)structex是结构体类型

27.设有以下说明语句

typedefstruct

{intn;

charch[8];

}PER;

则下面叙述中正确的是()

A)PER是结构体变量名B)PER是结构体类型名

C)typedefstruct是结构体类型D)struct是结构体类型名

28.若有下面的说明和定义:

structtest

{intml;charm2;floatm3;

unionuu{charul[5];intu2[2];}ua;

}myaa;

则sizeof(structtest)的值是()

A)12B)16C)14D)9

29.以下程序的输出结果是()

unionmyun

{struct

{intx,y,z;}u;

intk;

}a;

main()

{a.u.x=4;a.u.y=5;a.u.z=6;

a.k=0;

printf(“%d\n",a.u.x);

}

A)4B)5C)6D)0

30.以下程序的输出结果是()

structHAR

{intx,y;structHAR*p;}h[2];

main()

{h[0].x=1;h[0].y=2;

h[1].x=3;h[1].y=4;

h[0].p=&h[1];h[1].p=h;

printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);

}

A)12B)23C)14D)32

二.填空题

1.已有定义如下:

structnode

{intdata;

structnode*next;

}*p;

以下语句调用malloc函数,使指针p指向一个具有structnode类型的动态存储空间。

请填空。

 p=(structnode*)malloc();

2.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是()。

Structstud

{charnum[6];

ints[4];

doubleave;

}a,*p;

3.以下程序段用于构成一个简单的单向链表,请填空。

structSTRU

{intx,y;

floatrate;

()p;

}a,b;

a.x=0;a.y=0;a.rate=0;a.p=&b;

b.x=0;b.y=0;b.rate=0;b.p=NULL;

4.写出下面程序运行的结果()

structs

{intx,*y;}*p;

intdata[]={10,20,30,40,50};

structs

array[5]={100,&data[0],200,&data[1],300,&data[2],400,&data[3],

500,&data[4]};

main()

{p=array;

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

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

printf("%d\t",++(*p->y));

printf("%d\t",*p->y);

}

5.以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。

structst

{charname[20];doublescore;};

main()

{structstex;

printf("exsize:

%d\n",sizeof());

}

6.下面程序的运行结果是:

()。

typedefunionstudent

{charname[10];

longsno;

charsex;

floatscore[4];

}STU;

main()

{STUa[5];

printf(“%d\n”,sizeof(a));

}

7.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。

structnode

{intinfo;

()link;

}

8.下面程序的运行结果是:

()

unionun{inta;charc;}a;

main()

{a.a=256;a.c=’b’;

printf(“%d”,a.a);

}

9.#include"stdio.h"

#defineM10

structmode

{floatdata;

structmode*next;

}

main()

{structmode*base,*p;

inti,n=0;

floatr=0,a[M];

printf("Pleaseinput10numbers:

\n");

for(i=0;i

{scanf("%f",&a[i]);r+=a[i];}

r/=M;

for(i=0;i

if(a[i]>r)

{n++;a[n]=a[i];}

base=NULL;

for(i=n;i>0;i--)

{p=(structmode*)malloc(sizeof(structmode));

p->data=a[i];

p->next=base;

base=p;

}

printf("average=%6.2f\n",r);

do{printf("%6.2f",p->data);

p=p->next;

}

while(p!

='\0');

}

执行程序时输入:

12.523.609.81088.25.119.26.82.8

执行程序时输出:

()

()

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1