一、 选择题
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
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
int max,min,i,j , num;
Struct Student stud[ ]={\李平\王兵\钟虎\孙逊\徐军\ for(i=1;i if(stud[i].score } } 2、下面程序实现的功能是在已定义的的考生链表中删除指定考生号的结点。请按照程序功能填空。 Struct student *delete ( head , num ) ; Struct student *head ; Long num ; { struct student *p1 , *p2; if ( head==NULL ) { printf (“\\nlist NULL ! \\n”) ; goto end ; } p2=head ; while ((num != p2 -> 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]___________ } else printf ( “%ld not found ! \\n “ , num ) ; end : return (head ); } 三、选作题目 1、建立双向循环链表并实现基本操作。 2、设计函数解决学生链表中名字重复问题,当新增加学生节点时,若有重名则在后面加后缀,如王洋A、王洋B。 四、思考题 1.设想网络上的一个发送者和64个接收者,发送者每秒有不超过128条的命令产生,每条命令包含一个512字节的头部command_head_t和至多4K字节的变长内容。command_head_t的结构如下: typedef struct { int cmd_no; //该命令的命令号,唯一识别一个命令 int version; //产生该命令的程序的版本 int detail_len; //变产内容的实际长度 char *content; //指向变长内容的指针 … } command_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