您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 结构体与联合体(习题与参考答案)
1第八章结构体与联合体选择题1、若程序中有以下的说明和定义:structabc{intx;chary;}花括号后少了分号。structabcs1,s2;则会发生的情况是______。A)编译时错B)程序将顺序编译、连接、执行C)能顺序通过编译、连接、但不能执行D)能顺序通过编译、但连接出错2、有以下程序段structst{intx;int*y;}*pt;inta[]={1,2};b[]={3,4};structstc[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A)*pt-yB)pt-xC)++pt-xD)(pt++)-x3、有以下说明和定义语句structstudent{intage;charnum[8];};structstudentstu[3]={{20,200401},{21,200402},{19,200403}};structstudent*p=stu;以下选项中引用结构体变量成员的表达式错误的是______。A)(p++)-numB)p-numC)(*p).numD)stu[3].age4、设有如下枚举类型定义enumlanguage{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。A)4B)7C)102D)1035、以下叙述中错误的是_________。A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedefstructNODE{intnum;structNODE*next;}OLD;以下叙述中正确的是A)以上的说明形式非法B)NODE是一个结构体类型C)OLD是一个结构体类型D)OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。1.typedefstruct{intred;intgreen;intblue;}COLOR;2COLORcl;2.structcolorcl{intred;intgreen;intblue;};3.structcolor{intred;intgreen;intblue;}cl;4.struct{intred;intgreen;intblue;}c1;A)1B)2C)3D)48、设有以下语句typedefstructS{intg;charh;}T;则下面叙述中正确的是______。A)可用S定义结构体变量B)可以用T定义结构体变量C)S是struct类型的变量D)T是structS类型的变量9、设有如下说明typedefstructST{longa;intb;charc[2];}NEW;则下面叙述中正确的是_____。A)以上的说明形式非法B)ST是一个结构体类型C)NEW是一个结构体类型D)NEW是一个结构体变量10、以下对结构体类型变量td的定义中,错误的是______。A)typedefstructaaB)structaa{intn;{intn;floatm;floatm;}AA;};AAtd;structaatd;C)structD)struct{intn;{intn;floatm;floatm;}aa;}td;structaatd;11、根据下面的定义,能打印出字母M的语句是_____。3structperson{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]);12、设有以下语句:structst{intn;structst*next;};staticstructsta[3]={5,&a[1],7,&a[2],9,'\0'},*p;p=&a[0];则表达式的值是6。A)p++-nB)p-n++C)(*p).n++D)++p-n13、下面程序的输出结果为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)60206060702021213114、若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是__________。这里是设了一个结构体指针变量*p。这个结构体中又嵌套了一个指针变量*y。然后再设了一个普通数数组dt[4]。然后下一步是给结构体定义的一个变量数组:de[4],并且分别给结构体内的成员直接赋值:里面分别赋了四次。这里面是给结构体里的x和*y直接赋值。因为是dt[4]所以赋了四次。第一次:x对应50;*y对应的是地址de[0]也就是10.然后这样一次下去。4A)s-next=NULL;p=p-next;p-next=s;B)p=p-next;s-next=p-next;p-next=s;C)p=p-next;s-next=p;p-next=s;D)p=(*p).next;(*s).next=(*p).next;(*p).next=s;15、下面程序的输出是main(){enumteam{my,your=4,his,her=his+10};printf(%d%d%d%d\n,my,your,his,her);}A)0123B)04010C)04515D)1451516、下面程序的输出是main(){structcmplx{intx;inty;}cnum[2]={1,3,2,7};printf(%d\n,cnum[0].y/cnum[0].x*cnum[1].x);}A)0B)1C)3D)617、设有如下定义:structsk{inta;floatb;}data,*p;若有p=&data;,则对data中的a域的正确引用是__________。A)(*p).data.aB)(*p).aC)p-data.aD)p.data.a18、有以下程序:*#includestdio.hunionpw{inti;charch[2];}a;main(){a.ch[0]=13;a.ch[1]=0;printf(%d\n,a.i);}程序的输出结果是。(注意:ch[0]在低字节,ch[1]在高字节。)A)13B)14C)208D)20919、已知字符0的ASCII码为十六进制的30,下面程序的输出是___________。main(){union{unsignedcharc;unsignedinti[4];}z;FNULLEdatanextheadpGs5z.i[0]=0x39;z.i[1]=0x36;printf(%c\n,z.c);}A)6B)9C)0D)320、字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是_____________。#includestdio.hmain(){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填空题1、以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回.请填空:#includestdio.hstructlist{chardata;structlist*next;};structlist*creat(){structlist*h,*p,*q;charch;h=(structlist*)malloc(sizeof(structlist));p=q=h;ch=getchar();while(ch!='?'){p=(structlist*)malloc(sizeof(structlist));p-data=ch;p-next=p;q=p;ch=getchar();}p-next='\0';return(h);}2、有以下说明定义和语句,可用a.day引用结构体成员day,请写出引用结构体成员a.day的其它两种形式(*b).day、b-day。struct{intday;charmouth;intyear;}a,*b;b=&a;3、现有如图所示的存储结构,每个结点含两个域,data是指向字符串的指针域,next是指向结datanextheaddatanextdatanext…6点的指针域。请填空完成此结构的类型定义和说明。structlink{char*data;structlink*next;}*head;4、若有以下说明和定义语句,则变量w在内存中所占的字节数是40。unionaa{floatx,y;charc[6];};structst{unionaav;floatw[5];doubleave;}w;//325、设有以下结构类型说明和变量定义,则变量a在内存所占字节数是32__。Structstud{charnum[6];ints[4];doubleave;}a,*p;6、以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。structst{charname[20];doublescore;};main(){structstex;printf(“exsize:%d\n”,sizeof(_ex_____));}7、以下程序段用于构成一个简单的单向链表,请填空。structSTRU{intx,y;floatrate;_structSTRU_*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;8、若有如下结构体说明:structSTRU{inta,b;charc;doubled:structSTRUp1,p2;};请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型_structSTRU_____t[20];9、若以下定义和语句,则sizeof(a)的值是____12_____,而sizeof(b)的值是__4______struct{intday;charmouth;intyear;}a,*b;b=&a;10、变量root有如图所示有存储结构,其中sp是指向字符串的指针域,next是指向该结构的指针域,data用以存放整型数.请填空,完成此结构的类型说明和变量root的定义spnextdata┌─┬─┬─┐root││││└─┴─┴─┘7structlist{char*sp;_structlist*next______;_intdata______;}root;11、设有以下定义structss{intinfo;structss*link;}x,y,z;且已建立如下图所示链表结构:_______________|||||||||||-|→||-|→||||__|__||__|__||__|__|xyz请写出删除结点y的赋值语句_x.link=z;_____。12、以下程序的运行结果是2002Shangxian#includestring.htypedefstructstudent{charname[10];longsno;floatscore;}STU;main(){STUa={“zha
本文标题:结构体与联合体(习题与参考答案)
链接地址:https://www.777doc.com/doc-2137434 .html