C语言习题 结构体和杂类(答案)
更新时间:2024-01-01 20:59:01 阅读量: 教育文库 文档下载
- c语言基础题库及详解答案推荐度:
- 相关推荐
第十章 结构体和杂类 一. 选择题
1. 如下说明语句,则下面叙述不正确的是( C )。
struct stu { int a ; float b ;} stutype; A.struct是结构体类型的关键字 B.struct 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(\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} C.printf(“%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
{ union { int a; char b[2]; } c; c.a=65;
puts(c.b); printf(\} A
16或32
2. main() { union {
struct { int x,y; } in;
int a,b; } e;
e.a=1; e.b=2;
e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf(\ } 2 4
3.
struct w { char low ; char high ; } ;
union u { struct w byte ; int word ; } uu; main ( )
{ uu.word = 0x1234 ;
printf(“x\\n”, , uu.word); printf(“x\\n”, , uu.byte.high) ;
printf(“x\\n”, , uu.byte.low); uu.byte.low = 0xff ; printf(“x\\n”, , uu.word) ; } 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(\ while (num!=0) {
p=(NODE *)malloc(sizeof(NODE)); if ( !p ) {
printf(\ }
p->num=num;
if (head==NULL) head=p;
else tail->next=p ; tail=p; /* 给表尾指针tail赋值 */ scanf(\ }
tail->next= NULL ; return head ; }
六. 程序编写
1. 有10个学生,每个学生的数据包括学号,姓名,3门课的成绩,从键
盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课的成绩,平均分数)。 #include
int num;
char name[10]; int score[3]; int sum; float aver; };
main()
{
struct student stu[10];
int i,max;//max记录平均成绩最高的同学的下标 float aver;
printf(\\for(i=0;i<10;i++) {
printf(\请输入学号:\scanf(\
fflush(stdin);//清掉缓冲区的数据,主要是为了清掉刚刚学号输入时最后的换行
printf(\请输入姓名:\gets(stu[i].name); printf(\请输入三门课的成绩:\
scanf(\);
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(\三门课的总平均成绩为:%f\printf(\成绩最高的同学信息:\printf(\学号:%d\printf(\姓名:\puts(stu[max].name); printf(\三门课成绩:%d %d %d\2]);
printf(\平均成绩:%f\\n\ }
2. 13个人围成一圈,从第1个人开始顺序报号1、2、3。凡报到“3”
者退出圈子,找出最后留在圈子中的人原来的序号。 #include
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(\%d\\n\ }
3. 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
正在阅读:
C语言习题 结构体和杂类(答案)01-01
班主任技能大赛情景答辩题(整理)05-19
智能仪器实验一12-05
音乐之声 亚洲最大KTV03-29
网友揭秘快餐中隐藏的肥胖陷阱12-13
民主评议党员登记表个人总结06-17
成长中必读的40个哲理故事07-05
2017安徽定远县盐化工业园招聘公告02-15
中小学生防溺水安全教育材料05-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 习题
- 答案
- 语言
- 结构