一、 选择题
1、在说明一个结构体变量时系统分配给它的存储空间是( ). 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<string.h>
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 .ar=1978 B ar=1978
C ar=1958 D ar=1958
#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("%d\n",--p->data);
printf("%d\n",p->next->data);
printf("%d\n",p--->data);
}非煤矿山六大系统
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
t5003
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、设有定义"enum term { my, your=4, his, her=his+10};",则输出是( )孕妇餐厅
printf("%d,%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 {"one","two","three" };
二、填空题
1、填空完成以下程序,实现在结构体数组中查并输出分数最高和最低的同学姓名和成绩。
#include<stdio.h>
Struct Student {
char name[8];
int score;}
void main()
{
int max,min,i,j , num;
Struct Student stud[ ]={"李平",92,"王兵",72,"钟虎",83,"孙逊",60,"徐军",88};
for(i=1;i<num;i++)
{
if( )
max=i;
else
if(stud[i].score<stud[min].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)的状态可以在有限时间内趋于一致
最后,请针对你考虑到的意外情况,说明所采用的避免、解决或恢复方案。