admin 管理员组文章数量: 887021
2024年1月28日发(作者:copy函数用法)
第十章 结构体和杂类
一. 选择题
1. 如下说明语句,则下面叙述不正确的是( C )。
struct stu { int a ; float b ;} stutype;
是结构体类型的关键字 stu是用户定义结构体类型
C. stutype是用户定义的结构体类型名(变量名) D. a和b都是结构体成员名
2. 在16位PC机中,若有定义:struct data { int i ; char ch; double
f; } b ; 则结构变量b占用内存的字节数是( D )。
A.1 B.2 C.8 D.11
3. 设有定义语句:enum t1 {a1, a2 = 7, a3, a4 = 15} time;则枚举常量a2和a3的值分别为 ( D )。
A. 1和2 B. 2和3 C. 7和2 D. 7和8
4. 以下程序的输出结果是( D )。
union myun { struct { int x, y, z; } u; int k; } a;
main( )
{ a.u.x=4; a.u.y=5; a.u.z=6; a.k=0;
printf(" %dn",a.u.x); }
A. 4 B. 5 C. 6 D. 0
5. 当定义一个共用体变量时,系统分配给它的内存是( C )。
A.各成员所需内存量的总和 B.结构中第一个成员所需内存量
C.成员中占内存量最大的容量 D.结构中最后一个成员所需内存量
6. 若有以下程序段:
union data { int i ; char c; float f;} a;
int n;
则以下语句正确的是( C )。
A.a=5; B.a={2,’a’,1.2} (“%d”,a);
D.n=a;
7. 设struct {int a; char b; } Q, *p=&Q;错误的表达式是( d )。
A.Q.a B.(*p).b
C.p->a D.*p.b
9. 以下对C语言中共用体类型数据的叙述正确的是( c )。
A. 可以对共用体变量直接赋值
B.一个共用体变量中可以同时存放其所有成员
C.一个共用体变量中不能同时存放其所有成员
D.共用体类型定义中不能出现结构体类型的成员
10. 下面对typedef的叙述中不正确的是( b )。
A.用typedef可以定义多种类型名,但不能用来定义变量
B.用typedef可以增加新类型
C.用typedef只是将已存在的类型用一个新的标识符来代表
D.使用typedef有利于程序的通用和移植
二. 判断题
1. 共用体类型的变量的字节数等于各成员字节数之和。F
2. 结构体类型的变量的字节数等于各成员字节数之和。t
3. typedef实际上是用来定义新的数据类型。f
三. 填空题
1. 结构体变量成员的引用方式是使用 . 运算符,结构体指针变量成员的引用方式是使用 -> 运算符。
2. 设struct student{ int no;char name[12];float
score[3]; } sl,* p = &sl;
用指针法给sl的成员no赋值1234的语句是____p->no=1234_______________。
3. 运算sizeof是求变量或类型的 占用内存字节个数 ,typedef的功能是 。
4. C语言可以定义枚举类型,其关键字为 enum 。
5. 设union student { int n;char a[100]; } b; 则sizeof(b)的值是_______100____________。
四. 程序分析题
1. #include
main()
{ union { int a; char b[2]; } c;
c.a=65;
puts(c.b); printf("%dn",sizeof(c));
}
A
16或32
2. main()
{ union {
struct { int x,y; } in;
int a,b;
} e;
e.a=1; e.b=2;
.x=e.a*e.b; .y=e.a+e.b;
printf("%d %d",.x,.y);
}
2 4
3.
struct w { char low ; char high ; } ;
union u { struct w byte ; int word ; } uu;
main ( )
{ = 0x1234 ;
printf(“%04xn”, , ); printf(“%02xn”, ,
) ;
printf(“%02xn”, , ); = 0xff ;
printf(“%04xn”, , ) ;
}
1234
12
34
12ff
五. 程序填空
1. 下面的函数是将p所指的结点插入head(形参中)所指的单向链表中。设链表已按学号(num)从小到大顺序排列,要求将p(形参)所指的结点插入后链表保持有序,函数返回插入后的链表的头指针。
结点结构为:
typedef struct node { int num; struct node *next; } NODE;
函数为:
NODE *insert(NODE *head ,NODE * p)
{ NODE *front,*rear;
front=head;
while (front!=NULL && front->num < p->num) {
rear=front; front=front->next ;
}
if (front==NULL ) {
if (head==NULL) head=p; ;
else rear->next=p;
p->next=NULL ;
}
else { if (head==front) head=p; else rear->next=p;
p->next=front ;
}
return head ;
}
2. 下面的函数create是建立单向链表的函数,它返回已建立的链表的头指针。(先输入的结点值在头,后输入的值在尾)
结点结构为:
typedef struct node { int num; struct node *next; } NODE;
函数为:
NODE *create()
{
NODE *head,*tail,*p;
int num;
head=NULL; /* 给表头指针初始化 */
scanf("%d",&num);
while (num!=0) {
p=(NODE *)malloc(sizeof(NODE));
if ( !p ) {
printf("No enugh memory!n");exit(1);
}
p->num=num;
if (head==NULL) head=p;
else tail->next=p ;
tail=p; /* 给表尾指针tail赋值 */
scanf("%d",&num); ;
}
tail->next= NULL ;
return head ;
}
六. 程序编写
1. 有10个学生,每个学生的数据包括学号,姓名,3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课的成绩,平均分数)。
#include
struct student
{
int num;
char name[10];
int score[3];
int sum;
float aver;
};
main()
{
struct student stu[10];
int i,max;//max记录平均成绩最高的同学的下标
float aver;
printf("nn ");
for(i=0;i<10;i++)
{
printf("n 请输入学号:");
scanf("%d",&stu[i].num);
fflush(stdin);//清掉缓冲区的数据,主要是为了清掉刚刚学号输入时最后的换行
printf("n 请输入姓名:");
gets(stu[i].name);
printf("n 请输入三门课的成绩:");
scanf("%d%d%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
stu[i].aver=stu[i].sum/3.;
}
for(i=0,aver=0,max=0;i<10;i++)
{
aver+=stu[i].aver;
if(stu[i].aver>stu[max].aver)
max=i;
}
aver/=10;
printf("n 三门课的总平均成绩为:%f",aver);
printf("n 成绩最高的同学信息:");
printf("n 学号:%d",stu[max].num);
printf("n 姓名:");
puts(stu[max].name);
printf(" 三门课成绩:%d %d %d",stu[max].score[0],stu[max].score[1],stu[max].score[2]);
printf("n 平均成绩:%fn",stu[max].aver);
}
2. 13个人围成一圈,从第1个人开始顺序报号1、2、3。凡报到“3”者退出圈子,找出最后留在圈子中的人原来的序号。
#include
struct node
{
int num;
struct node *next;
};
main()
{
//建立一个不带头结点的循环链表
int i,n,count;
struct node *head,*p,*last;
for(i=1;i<=13;i++)
{
p=malloc(sizeof(struct node));
p->num=i;
if(i==1)
head=p;
else
last->next=p;
last=p;
}
last->next=head;
p=last;
n=13;
count=0;
while(n!=1)
{
count++;
if(count==3)
{
p->next=p->next->next;
count=0;
n--;
}
else
p=p->next;
}
printf("n %dn",p->num);
}
3. 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
版权声明:本文标题:C语言习题 结构体和杂类(答案) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1706387064h505935.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论