构造体与链表习题 附答案 - 一、 选择题 1、在说明一个构造体变量时系统分配给它的存储空间是〔 〕. A〕该构造体中第一个成员所需的存储空间 B〕该构造体中最后一个成员所需的存储空间 C〕该构造体中占用最大存储空间的成员所需的存储空间 D〕该构造体中所有成员所需存储空间的总和 2.设有以下说明语句,那么以下表达不正确的选项是( ) struct stu {int a;float b;}stutype; A. struct 是构造体类型的关键字 B. struct stu 是用户定义的构造体类型 C. stutype 是用户定义的构造体类型名 D. a 和 b 都是构造体成员名 3、以下对构造体变量stu1中成员age的合法引用是〔 〕 #include struct student { int age; int num; }stu1,*p; p=&stu1; A)stu1->age B)student.age C)p->age D) p.age 4、有如下定义: Struct date { int year,month,day; }; Struct worklist { Char name[20]; Char sex; Struct date birthday; }person; 对构造体变量person的出生年份进展赋值时,下面正确的赋值语句是( ) 。
A worklist .birthday.year=1978 B birthday.year=1978 C person.birthday.year=1958 D person.year=1958 5、 以下程序运行的结果是( ) #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 6、对于时间构造体 struct date { int year , month , day ; char week[5]; } 那么执行 printf(“%d\\n”,sizeof(struct date))的输出结果为( A .12 B.17 C.18 D.20 7、设有以下语句: struct st { int n ; char name[10] } ; struct st a[3]={ 5 , “li” , 7 , “wang” , 9 ,”zhao”} , *p ; p= a; 那么以下表达式的值为6的是( ) 。
A. p++ ->n B. p->n++ C. (*p) . n++ D. ++p ->n 8、设有以下语句,那么输出结果是( ) struct List { int data ; struct List *next;}; struct List a[3]={1,&a[1],2,&a[2],3,&a[0]}, * p; p=&a[1] ; printf(\printf(\printf(\} A. 1 3 1 B.3 1 1 C. 1 3 2 D. 2 1 3 9、 假设有以下语句,那么下面表达式的值为1002的是( ) struct student { int age ; int num ; } ; struct student stu[3]={{1001,20} , {1002,19} , {1003,21}} ; ) struct student *p ; p=stu ; A. (p++) -> num B. (p++)->age C. (*p) . num D. (*++p) . age 10、下假设有以下语句,那么下面表达式的值为( ) 。
struct cmplx{int x; int y;} cnumn[2]={1,3,2,7}; cnum[0].y/cnum[0].x*cnum[1].x; A.0 B.1 C.3 D.6 11、假设对员工数组进展排序,下面函数声明最合理的为〔 〕 A.void sort( struct Emplyee ); B.void sort( struct Emplyee *); C.void sort( struct Emplyee [ ]); D.void sort( struct Emplyee *[] ); 12、线性表采用链式存储构造时,要求内存中可用存储单元的地址〔 D 〕 A、必须是连续的 B、局部地址必须是连续的 C、一定是不连续的 D、连续或不连续都可以 13、在一个单链表中,假设在P所指结点之后插入S所指结点,那么执行〔 〕 A、s->next=p;p->next=s; B、s->next=p->next;p->next=s; C、s->next=p->next;p=s; D、p->next=s;s->next=p; 14、在一个单链表中,q是p的前趋结点,假设q和p之间插入结点s,那么执行〔 〕。
[9.7链表 ] A、s-next=p->next;p->next=s; B、p->next=s->next;s->next=p; C、q->next=s;s->next=p;D、p->next=s;s->next=q; 15、设有定义\, your=4, his, her=his+10};\,那么输出是( ) printf(\,%d,%d,%d\\n\,my, your, his, her); A.0,l,2,3 B.0,4,0,10 C.0,4,5,15 D.1,4,5,15 16、以下对枚举类型名的定义中,正确的选项是( ) A.enum a ={one,two,three}; B. enum a{a1, a2,a3}; C.enum a ={’1’,’2’,’3’}; D.enum a {\,\; 二、填空题 1、填空完成以下程序,实如今构造体数组中查找并输出分数最高和最低的同学姓名和成绩 #include Struct Student { char name[8]; int score;} void main { int max,min,i,j , num; Struct Student stud[ ]={\\王兵\钟虎\孙逊\徐军\ for(i=1;i num )&&( _________[1]_________ ) ) { p1=p2 ; p2= p2 ->next ; } if ( num== p2 ->num ) { if ( p2==head ) head=p2 ->next ; else ________[2]___________ ; printf (“delete : % ld\\n” , num ); ________[3]___________ } return (head ); } 三、选作题目 1、建立双向循环链表并实现根本操作。
2、设计函数解决学生链表中名字重复问题,当新增加学生节点时,假设有重名那么在后面加后缀,如王洋A、王洋B 四、考虑题 1.设想网络上的一个发送者和64个接收者,发送者每秒有不超过128条的命令产生,每条命令包含一个512字节的头部mand_head_t和至多4K字节的变长内容mand_head_t的构造如下: typedef struct { int cmd_no; //该命令的命令号,唯一识别一个命令 int version; //产生该命令的程序的版本 int detail_len; //变产内容的实际长度 char *content; //指向变长内容的指针 … } mand_head_t; 发送者根据命令号将这些命令分别发送给接收者去处理,例如:发送者产生c1,c2,c3,c4命令,并设定将c1,c2命令发送到接收者r1和r2,将c2、c3,c4命令发送到r3 接收者执行接收到的命令,并相应修改自己的状态。
如今的问题是:在尽可能多的考虑各种可能的意外情况下〔包括但不限于网络故障、传输错误、程序崩溃、停电…〕,如何设计命令的存储、发送、接收的流程,以保证命令的: 1) 传输中的有序、无漏、无重复性 2) 整个过程中命令和数据的正确性 3) 多个同一类型的接收者〔例如r1与r2〕的状态可以在有限时间内趋于一致 最后,请针对你考虑到的意外情况,说明所采用的防止、解决或恢复方案 2 、 一条1百万节点的单向链表,链表所有节点是按value字段从小到大的顺序链接;下面是一个节点的构造 typedef struct node_t{ int value; /* 节点排序字段 */ int group; /* 组号: 0,1,2,3,4,5,6,7,8,9 */ struct node_t *pnext; /* 下个节点的指针 */ }node_t; node_t head; /*该单向链表的头节点,全局变量 */ 试设计程序:针对各个group(0-->9),根据value字段排序,输出各组top 10的节点。
〔top10是从小到大,取后面的大值top10.〕 要求:尽量减少计算复杂度、遍历次数,不允许大量的辅助内存 1. D 2. C 3. C 4. C 5. D 6. D 7.D 8.A 9.D 10.D 11. D 12.D 13.B 14. C 15. C 16.B 第 8 页 共 8 页。