1、第九章 结构、联合与枚举一、选择题(把正确选项的字母标号填到表格中)题号123456789101112131415答案- 5 -1.下列关于结构的描述正确的是 。A) 结构类型可以是无名的B) 结构中的所有成员必须是同一类型C) 结构类型必须有名字D) 结构不可以嵌套2. 若stu是类型为STU的结构变量,以下能访问其成员major的是 。 A) stu-major B) stu.major C) STU-major D) STU.major3.若ptr是指向结构变量stu的指针,下面可以访问成员name的是 。A) ptr.name B) ptr-name C) ptr.stu.name D
2、) ptr-stu.name4.允许不同的成员共享同一内存空间的类型是 。A) 数组 B) 结构 C) 联合 D) 枚举 5.下面关于结构的说法中错误的是 。A) 结构中成员不可以同名B) 结构中的成员不可以同类型C) 结构至少要有一个成员D) 结构可以嵌套6.下面的说法中错误的是 。A) 联合中成员的类型可以是联合B) 结构中成员的类型不可以是联合C) 结构中成员的类型可以是数组D) 结构中的成员可以是指针7.一个结构体变量占用的内存是 。A)各成员所占内存量的总和B)结构中第一个成员所占内存量C)成员中占内存量最大者所占的容量D)结构中最后一个成员所占内存量8.设有以下说明语句struct
3、 stu int a;float b; stutype;则下面的叙述不正确的是 。A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名9.若有:struct sk int a; float b;data; int *p;若要使p指向data中的a,正确的赋值语句是_。A) p = &a; B) p = data.a; C) p = &data.a; D) *p = data.a;10.以下对定义结构变量td的定义中错误的是_。A) typedef struct aa int n; float m;
4、 AA; AA td;B) struct aa int n;float m;struct aa td; C) struct int n; float m; aa; struct aa td;D) struct int n;float m;td;11.以对结构变量c1定义错误的是_。A) typedef struct int red; int green; int blue; COLOR; COLOR c1;B) struct color c1 int red;int green;int blue;C) struct color int red; int green; int blue; c1;
5、 D) struct int red; int green;int blue;c1;12.若有:struct student int no;char name20,sex;struct int year;int month;int day; birth;struct student s;则能对s中的成员birth正确赋值的是_。A)year=1984;month=11;day=12;B)s.year=1984;s.month=11;s.day=12;C)birth.year=1984;birth.month=11;birth.day=12;D)s.birth.year=1984;s.birth
6、.month=11;s.birth.day=12;13.假设int、float占4字节,double占8字节,char占1字节。若有:struct aa int r1; double r2; float r3;union uuchar u15;int u22;ua; mya;则sizeof(struct aa)的值是_。A)30B)29C)24D)2214.假设int、float占4字节,char占1字节。若有:struct data int i;char ch;float f; b;则b占用内存的字节数是_。A)1B)4C)7D)915.若有:enum flagfalse,trueendfl
7、ag;则以下说法错误的是_。A)enum是枚举类型关键字B)enum flag是枚举类型名C)endflag是枚举类型名D)false的值是0二、判断题(错的填,对的填)题号12345678910答案1. 把一种数据类型定义为另一种数据类型的关键字是type。2. 在声明结构类型的同时可以定义结构变量。3. 可以声明无名结构。4. 结构可以嵌套定义。5. 结构中的成员可以是联合。6. 联合中的成员可以是结构。7. 结构中的成员数据类型可以相同,也可以不同。8. 结构中的成员可以是变量、数组、指针等类型。9. 结构类型变量占用内存大小是由其占用内存最大的成员决定。10. 联合类型变量占用内存大小
8、是由其占用内存最大的成员决定。三、应用题1根据要求,写出声明结构类型的语句。(1)结构的名字为student(2)结构成员包括:元素个数为10的char型数组name; int型变量sno; char型变量sex; 元素个数为4的float型数组scores;(3)同时把声明的该结构类型定义为STU型2分析程序,回答问题。#include “stdio.h”(1) typedef struct node /结构类型声明语句 int n; struct node *next; /struct node型指针NODE;void main(void) /main函数 NODE *p1,*p2,*p3
9、;p1=(NODE *)malloc(sizeof(NODE);p2=(NODE *)malloc(sizeof(NODE);p3=(NODE *)malloc(sizeof(NODE);p1-n=1000; p2-n=2000; p3-n=3000;(2) ; /使p1结点指向p2结点 (3) ; /使p2结点指向p3结点p3-next=NULL;printf(%d,%d,%dn ,p1-n,p1-next-n,p2-next-n);(1)为了调用malloc函数,在第(1)处横线上填写适当命令。(2)根据注释的提示,在(2)、(3)处横线处的语句补充完整。四、编程题1.根据给出的代码和提示
10、,完成函数float allAver(STU ss,int n)的定义,该函数的功能是从给定的n个人的信息表ss中求总平均成绩。#include stdio.h#include string.htypedef struct /定义结构数据类型STU int xh;char name20;int score3;float averScore;STU;float allAver(STU ,int n); /函数原型声明语句int main(void) /main函数定义 STU s4 = 100, Liming, 96,97,97,101, Zhangliang,86,85,75,102, Sus
11、an, 64,45,78,103, Liufeng, 86,97,94; float as; as = allAver(s, 4 ); /函数调用语句 printf(“总平均成绩是:%.1fn”,as) ; return 0;/main函数结束float allAver(STU ss,int n) /函数allAver定义部分 int i; /控制循环,记录人数int j; /控制循环,记录成绩门数float aver; /记录个人平均成绩 float as; /记录所有人总平均成绩/以下代码实现利用aver计算每个人的平均分,结果存到ssi.averScore中for(i=0;in;i+) aver = 0; /求每个人的平均分前必须先清零/以下代码实现求所有人的总平均成绩,结果存储到as中as = 0;return as; /返回总平均分 / allAver函数定义结束