结构体与公用体-习题十及参考答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

习题十一、单选题1、下面的四个运算符中,优先级最低的是()。A)()B).C)-D)++2、已知:struct{inti;charc;floata;}test;则sizeof(test)的值是()。A)4B)5C)6D)73、选择出错误的函数定义()。A)structtreefuna(s)B)int*funb(s)C)structtree*func(s)D)int*fund(s)Structtrees[];chars[];char**s;char*s[10][];{…{…{…{…}}}}4、以下对C语言中联合类型数据的正确叙述是()。A)一旦定义了一个联合变量后,即可引用该变量或该变量中的任意成员B)一个联合变量中可以同时存放其所有成员C)一个联合变量中不能同时存放其所有成员D)联合类型数据可以出现在结构类体型定义中,但结构体类型数据不能出现在联合类型定义中5、已知函数原型为:structtree*f(intx1,intx2,structtreex3,structtree*x4)其中tree为已定义过的结构,且有下列变量定义:structtreept,*p;inti;请选择正确的的函数调用语句()。A)&pt=f(10,&i,pt,p);B)p=f(i++,(int*)p,pt,&pt);C)p=f(i+1,&(i+2),*p,p);D)f(i+1,&i,p,p);6、当说明一个结构变量时系统分配给它的内存是()。A)各成员所需内存量的总和B)结构中第一个成员所需内存量C)成员中占内存量最大者所需内存量D)结构中最后一个成员所需内存量7、C语言结构类型变量在程序执行期间()。A)所有成员一直驻留在内存中B)只有一个成员驻留在内存中C)部分成员驻留在内存中D)没有成员驻留在内存中8、已知:structsk{inta;floatb;}data,*p;若有p=&data,则对data中的成员a的正确引用是()。A)(*p).data.aB)(*p).aC)p-data.aD)p.data.a9、若有以下定义和语句:structstudent{intnum,age;};structstudentstu[3]={{1001,20},{1001,19},{1003,21}};structstudent*p=stu;则以下错误的引用是()。A)(p++)-numB)p++C)(*p).numD)p=&stu.age10、以下对C语言中联合类型数据的叙述正确的是()。A)可以对联合变量直接赋值B)使用联合变量的目的是节省内存C)对一个联合变量,可以同时引用联合中的不同成员D)联合类型定义中不能出现结构类型成员11、已知函数定义的形式如下:structdata*f(void){……}则函数f()。A)没有参数,返回值是一个结构B)有一个参数void,返回值是一个结构C)没有参数,返回值是一个结构指针D)有一个参数void,返回值是一个结构指针12、在对typedef的叙述中错误的是()。用typedef可以定义各种类型名,但不能用来定义变量A)用typedef可以增加新类型B)用typedef只能是将已存在的类型用一个新的标识符来代替C)使用typedef有利于程序的通用和移植13、设有以下语句:structst{intn;structst*next;};staticstructsta[3]={5,&a[1],7,&a[2],9,NULL},*p;p=&a[0];则以下表达式的值为6的是()。A)p++-nB)p-n++C)(*p).n++D)++p-n14、若已建立下面的链表结构,指针p、q分别指向图中所是结点,则不能将q所值的结点插入到链表末尾的一组语句是()。A)q-next=NULL;p=p-next;p-next=q;B)p=p-next;q-next=p-next;p-next=q;C)p=p-next;q-next=p;p-next=q;D)p=(*p).next;(*q).next=(*p).next;(*p).next=q;二、填空题1、已知:union{intx;struct{charc1,c2;}b;}a;执行语句a.x=0x1234之后,a.b.c1的值为(用16进制表示)______,a.b.c2的值为(用16进制表示)________。(3412)2、用typedef定义整型一维数组:typedefintARRAY[10];b^acpq则对整型数组a[10],b[10],c[10]可定义为_________。(ARRAYa,b,c;)3、已知:struct{inyx,y;}s[2]={{1,2},{3,4}},*p=s;则:表达式++p-x的值为________。表达式(++p)-x的值________。(13)4、已知:struct{intx;char*y;}tab[2]={{1,ab},{2,cd}},*p=tab;则:表达式*p-y的结果为________。表达式*(++p)-y的结果为________。(ac)5、已知:struct{intday;charmonth;intyear;}a,*b;b=&a;可用a.day引用结构中的成员day,请写出通过指针变量b引用成员a.day的其它两种形式,它们是__________和__________。((*b).day=?b-day=?)6、分析下列程序执行结果。#include“stdio.h”main(){staticstructs1{charc[4],*s;s1={“abc”,”def”};staticstructs2{char*cp;structs1ss1;}s2={“ghi”,{“jkl”,”mno”}};printf(“%c%c\n”,s1.c[0],*s1.s);/*outputab*/printf(“%s%s\n”,s1.c,s1.s);/*outputabcdef*/printf(“%s%s\n”,s2.cp,s2.ss1.s);/*outputghimno*/printf(“%s%s\n”,++s2.cp,++s2.ss1.s);/*outputhino*/}7、以下程序的功能是:读入一行字符(如:a,...,y,z),按输入时的逆序建立一个链式的结点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。#includestdio.h#definegetnode(type)_________malloc(sizeof(type))((structnode*))main(){structnode{charinfo;structnode*link;}*top,*p;charc;top=NULL;while((c=getchar())______________)(!='\n'){p=getnode(structnode);p-info=c;p-link=top;top=p;}zyA^while(top){_________________;(p=top)top=top-link;putchar(p-info);free(p);}}8、下面的函数将指针p2所指向的线性链表链接到p1所指向的的链表的末端。假定p1所指向的链表非空。#defineNULL0structlink{floata;structlink*next;};concatenate(p1,p2)structlist*p1,*p2;{if(p1-next==NULL)p1-next=p2;elseconcatenate(___________,p2);(p-next)}9、以下函数create用来建立一个带头结点的单项链表。新产生的结点总是插入再链表的末尾。单向链表的头指针作为函数的返回值。#includestdio.hstructlist{chardata;structlist*list;};structlist*cteate(){structlist*h,*p,*q;charch;h=___________malloc(sizeof(structlist));(structlist*)p=q=h;ch=getchar();while(ch!='\n'){p=____________malloc(sizeof(structlist));(structlist*)p-date=ch;q-next=p;q=p;ch=getchar();}p-next='\0';______________;(rerturnh)}三、编程题1、成绩排序。按学生的序号输入学生的成绩,按照分数由低到高的顺序输出学生的名次、该名次的分数、相同名次的人数和学号;同名次的学号输出再同一行中,一行最多输出10个学号。#includestdio.hstructstudent{intn;intmk;}main(){inti,j,k,count=0,no;structstudentstu[100],*s[100],*p;printf(\nPleasseentermark(ifmark0isend)\n);for(i=0;i100;i++){printf(No.%4d==',i+1);scanf(%d,&stu[i].mk);s[i]=&stu[i];stu[i].n=i+1;if(stu[i].mk=0)break;for(j=0;jI;j++)for(k=j+1;k=I;k++)if(s[j]-mks[k]-mk){p=s[j];s[j]=s[k];s[k]=p;}}for(no=1,count=1,j=0;jI;j++){if(s[j]-mks[k+1]-mk){printf(\nNo.%3d==%4d%4d:,no,s[j]-mk,count);for(k=j-count+1;k=j;k++){ptintf(%3d,s[k]-n);if((k-(j-count))%10==0&&k!=j)printf(\n);}count=1;no++;}elsecount++;}}2、现在有教师(姓名、单位、住址、职称)和学生(姓名、班级、住址、入学成绩)的信息。请在输入10名教师和学生的信息后,按姓名进行排序,最后按排序后的顺序进行输出,对于教师要输出姓名、单位、住址和职称,对学生要输出姓名、班级、住址和入学成绩。请编程实现。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功