
第十章结构体与共用体 1.说明一个结构体变量时系统分配给它的内存是 A)各成员所需要内存量的总和 B)结构体中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成黄所需内存量 2,C语言结构体类型变量在程序执行期间 A)所有成员一直驻在内存中 B)只有一个成员驻留在内存中 C)部分成员驻图在在内存中 D)没有成员驻留在内存中 3.设有以下说明语句 structstu[intar floatb:]stutyper 则下面的叙述不正确的是 A)stct是结构体类型的关键字 B)structstu是用户定义的结构体类型 C)stutype是用户定义的站构体类型名 D)a和b都是结构体成员名 4,设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【】 structstud(charmum[6]:ints[4]:doubleave:)a,*p: 5,程序中有下面的说明和定复 structabe(intx:chary:) structabesl.82: 则会发生的情况是 A)编译出错 B)程序将顺利编译、连接、执行 C)能顺利通过编译,连接、但不能执行 D)能顺利通过编译、连接出错 6.有如下定义
第十章 结构体与共用体 1.说明一个结构体变量时系统分配给它的内存是 A)各成员所需要内存量的总和 B)结构体中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量 2.C 语言结构体类型变量在程序执行期间 A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在在内存中 D)没有成员驻留在内存中 3.设有以下说明语句 structstu{inta;floatb;}stutype; 则下面的叙述不正确的是 A)struct 是结构体类型的关键字 B)structstu 是用户定义的结构体类型 C)stutype 是用户定义的结构体类型名 D)a 和 b 都是结构体成员名 4.设有以下结构类型说明和变量定义,则变量 a 在内存所占字节数是【】。 structstud{charnum[6];ints[4];doubleave;}a,*p; 5.程序中有下面的说明和定义 structabc{intx;chary;} structabcs1,s2; 则会发生的情况是 A)编译出错 B)程序将顺利编译、连接、执行 C)能顺利通过编译、连接、但不能执行 D)能顺利通过编译、但连接出错 6.有如下定义

structperson icharname[9]intager structpersonclass[10]=(Johu”,17。"Paul”。19,"ary”.18,"Adna°,18li 根据上述定义,能输出字母的语句是 A)prinft(eln”,class[3】.nae)1 B)printf(“cn”,class[3】.nae[I]3 C)prinft("cln',class[2】.ae[I]为 D)printf(“xcn”,class[2].nac[o]): 7.下面程序的输出是 A)0B)1C)3D)6 main ( [structcmplx(intx:inty:]cmum[2]-[1,3.2,7]; printf ("%d\n",cnum[0].y/emum[o].x*cnum[1].x) 8.下列程序的输出结果是 A)5B)6C)7D)8 structabelinta.b.e main ( {structabes[2]=(1,2.3),{4,5,6}i: intt: t=s0j.a+s[1】.b: printf(sdn,t方J 9.有以下程序 structstu [intnum charmame[10]:intager voidfun《structstup) [printf (s'\n",(p).nane): main ( structstustudents[3]=({98o1,"Dang'°,.201,(9602,"yang”,19),9803,2hao°, 181: fun(students+2):】 输出结果是
structperson{charname[9];intage;}; structpersonclass[10]={"Johu",17,"Paul",19,"Mary",18,"Adam",16}; 根据上述定义,能输出字母 M 的语句是 A)prinft("%c\n",class[3].name); B)printf("%c\n",class[3].name[1]); C)prinft("%c\n",class[2].name[1]); D)printf("%c\n",class[2].name[0]); 7.下面程序的输出是 A)0B)1C)3D)6 main() {structcmplx{intx;inty;}cnum[2]={1,3,2,7}; printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);} 8.下列程序的输出结果是 A)5B)6C)7D)8 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);} 9.有以下程序 structstu {intnum;charname[10];intage;}; voidfun(structstu*p) {printf("%s\n",(*p).name);} main() {structstustudents[3]={{9801,"Zhang",20},{9802,"Wang",19},{9803,"Zhao", 18}}; fun(students+2);} 输出结果是

A)ZhangB)Zhaoc)WangD)18 10.设有如下定义: structskfintar floatbr data.*p 若有dnt:,则对d血ta中的a域的正确引月是 A)(*p).data.aB)(p)ac)p->data.aD)p.data.a 11,下面程序的输出结果为 structst [intx:int*y:*p: intdt[4]-(10,20,30,40j: structstaa[4]=[50.Adt[0],60.Adt[1].70.Adt[2],80.&dt[3]): main ( [p=aa:printf (%d\n",+tp->x): printf ("sd\n",(+p)->x) rintf("sn”,+(->y): 1 A)10B)50C)51D)60 20306070 20212131 12.为了建立如图所示的存储结构《即每个结点含两个域,data是数据域,t是指 向结点的指计域,》请琉空。 datanext structlink(chardata:【】]node: 3。有以下结构体说明和变量的定义,且如下图所示指针P指向变量a。指针q指向变 量b。则不能把结点b连接到结点a之后的语句是 A)a.next=q:B)p.next=kb: C)p->next=kb:D)(*p)next=q: structnodeichardata structnodesnext Fa.b.*p=ka.b datanextdatanext
A)ZhangB)ZhaoC)WangD)18 10.设有如下定义: structsk{inta;floatb;}data,*p; 若有 p=&data;,则对 data 中的 a 域的正确引用是 A)(*p).data.aB)(*p).aC)p->data.aD)p.data.a 11.下面程序的输出结果为 structst{intx;int*y;}*p; intdt[4]={10,20,30,40}; structstaa[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)10B)50C)51D)60 20606070 20212131 12.为了建立如图所示的存储结构(即每个结点含两个域,data 是数据域,next 是指 向结点的指针域,)请填空。 datanext structlink{chardata;【】}node; 13.有以下结构体说明和变量的定义,且如下图所示指针 p 指向变量 a,指针 q 指向变 量 b。则不能把结点 b 连接到结点 a 之后的语句是 A)a.next=q;B)p.next=&b; C)p->next=&b;D)(*p).next=q; structnode{chardata;structnode*next;}a,b,*p=&a,*q=&b; datanextdatanext ┌──┬──┐┌──┬──┐

a15|Ib1910l Ipta 14.当说明一个共用体变量时系统分配给它的内#是 A)各成员所需要内存量的总和 B)共用体中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)共用体中最后一个成员所香内存量 15.以下对C语言中共用体类型数据的叙述正确的是 A)可以对共用体变量名直接赋值 B)一个共用体变量中可以同时存故其所有成员 C)一个共用体变量中不可以同时存放其所有成员 D)共用体类型定义中不能出现结构体类型的成员 16,C语言共用体类型变量在程序运行期间 A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在在内存中 D)没有成员驻面在内存中 17.字符0矿的ASCI1码的十进制数为48,且数组的第0个元煮在低位,则以下程序的 输出结果是 年include《stdio.h) main ( [union [inti[2]:longk:charc[4]:Ir.*s&r: s->1[0j=0x39:s->1[1]=-0x38: printf (scin",s->e[0]) A)39B)9℃)380)8 18.若有以下说明和定义语句,则变量w在内存中所占的字节数是【】 unionaa(floatx,y:charc[6]) structst (unionaav:floatb[5]:doubleave:w: 9.设有以下定义:
a│5││b│9│0│ └──┴──┘└──┴──┘ ↑p↑q 14.当说明一个共用体变量时系统分配给它的内存是 A)各成员所需要内存量的总和 B)共用体中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)共用体中最后一个成员所需内存量 15.以下对 C 语言中共用体类型数据的叙述正确的是 A)可以对共用体变量名直接赋值 B)一个共用体变量中可以同时存放其所有成员 C)一个共用体变量中不可以同时存放其所有成员 D)共用体类型定义中不能出现结构体类型的成员 16.C 语言共用体类型变量在程序运行期间 A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在在内存中 D)没有成员驻留在内存中 17.字符'0'的 ASCII 码的十进制数为 48,且数组的第 0 个元素在低位,则以下程序的 输出结果是 #include〈stdio.h〉 main() {union{inti[2];longk;charc[4];}r,*s=&r; s->i[0]=0x39;s->i[1]=0x38; printf("%c\n",s->c[0])} A)39B)9C)38D)8 18.若有以下说明和定义语句,则变量 w 在内存中所占的字节数是【】。 unionaa{floatx,y;charc[6];}; structst{unionaav;floatb[5];doubleave;}w; 19.设有以下定义:

#include "alloc.h" typedefunionlongi:intk[5]:chare:)DATE: structdate lintcat:DATEcow:doubledogr )toor DATEnax: 则下列语句的执行结果是 printf(sd°,sizeof(structdate)+sizeof(r): A)25B)30C)18D)8 20.己知字符0的ASCII码为十六进制的30,下面程序的输出是 A)6B)9C)0D)3 min ( union funsignedchare:unsiznedinti[4].Fz zi[0j=039:zi[1]=0x36: printf ("sc\n",z.c): 21,变量a所占内存字节数是 A)4B)5C)6D)8 通1ond [charst[]:inti:lomgl:] structAfinte:unionlu:a: 22.以下对枚举类型名的定文中正确的是 A)enuna=fone,two,threel B)enums (one-9,two-1,three): C)enuma=(”one”。"two^。“three门 D)enums ["one","to”.“three': 23.设有如下枚举类型定义: emumlanguage (Basic=3.Assenbly.Ada=100.COBDL.Fortran) 枚举量Fortran的值为 A)4B)7C)1020)103 24.下面程序的输出是 A)01238)04010C)04515D》14515
#include“alloc.h” typedefunion{longi;intk[5];charc;}DATE; structdate {intcat;DATEcow;doubledog;}too; DATEmax; 则下列语句的执行结果是 printf("%d",sizeof(structdate)+sizeof(max)); A)25B)30C)18D)8 20.已知字符 0 的 ASCII 码为十六进制的 30,下面程序的输出是 A)6B)9C)0D)3 main() {union{unsignedcharc;unsignedinti[4];}z; z.i[0]=0x39;z.i[1]=0x36; printf("%c\n",z.c);} 21.变量 a 所占内存字节数是 A)4B)5C)6D)8 unionU {charst[4];inti;longl;}; structA{intc;unionUu;}a; 22.以下对枚举类型名的定义中正确的是 A)enuma={one,two,three}; B)enuma{one=9,two=-1,three}; C)enuma={"one","two","three"}; D)enuma{"one","two","three"}; 23.设有如下枚举类型定义: enumlanguage{Basic=3,Assembly,Ada=100,COBOL,Fortran}; 枚举量 Fortran 的值为 A)4B)7C)102D)103 24.下面程序的输出是 A)0123B)04010C)04515D)14515

min ( [enunteam(ay,yourm4,his,hermhist10): printf(sd八n",y,your,his,her)h】 25。以下选项中,能定义s为合法的结构体变量的是 A)typedefstructabcB)struct doublea:(doublear charb[10]:charb[10]: ]s:s: C)struetABCD)typedefABC [doublea:(doublea: charb[10]:charb[10]: JABCs:]ABCs: 6.下面对的氨运中不正确的是 A)用typedef可以定义各种类型名,但不能用来定义变量 B)用typedef可以增加新类型 C)用typedef只是将己存在的类型用一个新的标识符来代表 D)使用ty0df有利于程序的通用和移植 27。下面程序的输出是 A)32B)16C)80)24 typedefumion{longx [2]:inty[4]:charx[8]:)MYTYPE: MYTYPEthem: ain()) (printf ("sd\n".sizeof (thea)): 8.以下各选项企图说明一种新的类型名,其中正确的是 A)typedefvlint: B)typedefv2-int: C)typedefvlintv3: D)typedefv4:int: 29,以下程序的输出结果是 structHAR [intx.y:structHAR*p:]h[2]: main()
main() {enumteam{my,your=4,his,her=his+10}; printf("%d%d%d%d\n",my,your,his,her);} 25.以下选项中,能定义 s 为合法的结构体变量的是 A)typedefstructabcB)struct {doublea;{doublea; charb[10];charb[10]; }s;}s; C)structABCD)typedefABC {doublea;{doublea; charb[10];charb[10]; }ABCs;}ABCs; 26.下面对的叙述中不正确的是 A)用 typedef 可以定义各种类型名,但不能用来定义变量 B)用 typedef 可以增加新类型 C)用 typedef 只是将已存在的类型用一个新的标识符来代表 D)使用 typedef 有利于程序的通用和移植 27.下面程序的输出是 A)32B)16C)8D)24 typedefunion{longx[2];inty[4];charz[8];}MYTYPE; MYTYPEthem; main() {printf("%d\n",sizeof(them));} 28.以下各选项企图说明一种新的类型名,其中正确的是 A)typedefv1int; B)typedefv2=int; C)typedefv1intv3; D)typedefv4:int; 29.以下程序的输出结果是 structHAR {intx,y;structHAR*p;}h[2]; main()

h[0.-1:h[o].y-2: b[1].x=3:hf1.=4: h[o].p-Wh[1]: b[1.p-h: printf(“s”,h[0l,p->%,h[1】.p)->y): 1 A012 )23 C014 D)32 30,若有下面的说明和定义: structtest [intml :charn2:floatm3: unionuufcharul[5]:intu2[2]:]ua: Imyaa: 则sizeof(structtest)的值是 A012 B段16 C014 )9 31.若以下定义: structlink [intdata: strucklinkenext: la.b.c.*p.q: 且变量。和b之间己有如下图所示的链表结构: 山 datanextdatanext 151十—19101 fp datanext 1711
{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)12 B)23 C)14 D)32 30.若有下面的说明和定义: structtest {intml;charm2;floatm3; unionuu{charul[5];intu2[2];}ua; }myaa; 则 sizeof(structtest)的值是 A)12 B)16 C)14 D)9 31.若以下定义: structlink {intdata; strucklink*next; }a,b,c,*p,*q; 且变量 a 和 b 之间已有如下图所示的链表结构: ab datanextdatanext ┌──┬──┐┌──┬──┐ │5│┼──→│9│\0│ └──┴──┘└──┴──┘ ↑p c datanext ┌──┬──┐ │7││

1a 蛋针p指向变量,q指向变量c。则能够把e插入到a和b之间并形成新的链表的语句 组是: A)a.next=c:c.next=b:B)p.next=q:q.next=p.next: C)p->next=kc:q->next=p->next D)(*p),next=q:(*q).next=b: 32.设有以下说明语句 typedefstruct [intn: charch[8]: PER: 则下面叙述中正确的是 A》PER是结构体变量名 )E课是结构体类型名 C)typedefstruct是结构体类型D)struct是结构体类型名 3热,有以下程序 structSTU charnum[10]:floatscore[3]:H: nain( {structstus[3]=(【“20021”,90,95.85,“20022",95.80,75). 【“20023°,100,95,90],*ps: inti:floatsun0: for(i=0:iscore[1】: printf(“s6.2fn”,sa): 程序运行后的输出结果是 A0260.00 B0270.00 C0280.00 D)285.00 34设有如下定义: strucksk [inta:
└──┴──┘ ↑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; 32.设有以下说明语句 typedefstruct {intn; charch[8]; }PER; 则下面叙述中正确的是 A)PER 是结构体变量名 B)PER 是结构体类型名 C)typedefstruct 是结构体类型 D)struct 是结构体类型名 33.有以下程序 structSTU {charnum[10];floatscore[3];}; main() {structstus[3]={{“20021”,90,95,85},{“20022”,95,80,75}, {“20023”,100,95,90}},*p=s; inti;floatsum=0; for(i=0;iscore[i]; printf(“%6.2f\n”,sum); } 程序运行后的输出结果是 A)260.00 B)270.00 C)280.00 D)285.00 34.设有如下定义: strucksk {inta;

floath: ]data; m和: 若要使P指向d血ta中的a域,正确的碱值语句是 A)p=ka: B)p=data.a:C)p-Adata.a; D)p-由ta.a: 5,有以下程序 年include(stdlib.h> structNOOE [intnum:structNODE*next main( {structNODEp,q,◆R: p=(structNODE*)malloc(sixeof (structNODE)): q=(struetNODE*)malloc(sixeof (struetNDE)): r(structNODE)malloc(sixeof(structMDE)): p->uP10:q->u=20:r->nu30: r>next三gq-)next=r: printf("sd\n",p->mumtq->mext->nu) 1 程序运行后的输出结果是 A010 B助20 C030 D)40 36,若有以下说明和定文 typedefint+INTEGER: INTEGERp,*q: 以下叙述正确的是 A》P是int型变量 B)p是基类型为int的折叶变量 COq是基类型为nt的指针变量 D)程序中可用INTEG球代替it类型名 37.下面程序的运行结果是:: typedefunionstudent
floatb; }data; int*p; 若要使 P 指向 data 中的 a 域,正确的赋值语句是 A)p=&a; B)p=data.a; C)p=&data.a; D)*p=data.a; 35.有以下程序 #include 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)10 B)20 C)30 D)40 36.若有以下说明和定义 typedefint*INTEGER; INTEGERp,*q; 以下叙述正确的是 A)P 是 int 型变量 B)p 是基类型为 int 的指针变量 C)q 是基类型为 int 的指针变量 D)程序中可用 INTEGER 代替 int 类型名 37.下面程序的运行结果是:。 typedefunionstudent

[charnane[10]: longsno: charsex: floatscore[4]: lSTU: main( [STUa[5]: printf("sdin",sizeor (a)): 1
{charname[10]; longsno; charsex; floatscore[4]; }STU; main() {STUa[5]; printf(“%d\n”,sizeof(a)); }