第30练 7.4-7.6 结构体数组、共用体、结构体和共用体应用实例 《C语言》 (第五版) 一课一练 (山东省)

2026-06-24
| 2份
| 11页
| 2人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 作业-同步练
知识点 C语言概述
使用场景 同步教学
学年 2026-2027
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 108 KB
发布时间 2026-06-24
更新时间 2026-06-24
作者 xkw_068401954
品牌系列 上好课·一课一练
审核时间 2026-06-24
下载链接 https://m.zxxk.com/soft/58480037.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第30练,内容是7.4-7.6 结构体数组、共用体、结构体和共用体应用实例。 《C语言》(第五版)一课一练 第30练 7.4-7.6 结构体数组、共用体、结构体和共用体应用实例 一、单选题 1. 设有结构体类型struct Stu { int num; char name[20]; float score; }; 以下能正确定义并初始化结构体数组的是( ) A. struct Stu s[3] = [101,"Wang",85, 102,"Li",90, 103,"Zhang",78]; B. struct Stu s(3) = {{101,"Wang",85},{102,"Li",90},{103,"Zhang",78}}; C. Stu s[3] = {{101,"Wang",85},{102,"Li",90},{103,"Zhang",78}}; D. struct Stu s[3] = {{101,"Wang",85},{102,"Li",90},{103,"Zhang",78}}; 2. 设有定义 struct Stu { int num; float score; } s[3]={{101,85},{102,90},{103,78}}; 则以下能正确输出第二个学生成绩的是( ) A. printf("%f", s[2].score); B. printf("%f", s[1].score); C. printf("%f", s[1]->score); D. printf("%f", s.score[1]); 3. 以下关于共用体(union)的叙述中,正确的是( ) A. 共用体的所有成员共享同一段内存空间 B. 共用体的各成员分别占用独立的内存空间 C. 共用体变量可以同时存储所有成员的值 D. 共用体变量的内存大小等于所有成员大小之和 4. 设有定义 union Data { int i; char c; float f; } d; 执行 d.i=65; d.c='B'; 后,以下叙述正确的是( ) A. d.i和d.c都能正确保存各自的值 B. d.f的值也同时被确定 C. d.i的值不再是65,因为d.c的赋值覆盖了共享内存 D. 共用体变量d可以同时使用i、c、f三个成员 5. 以下程序片段的输出结果是 struct Stu { int num; float score; } s[3]={{101,80},{102,90},{103,70}}; int i, k=0; for(i=1;i<3;i++) if(s[i].score > s[k].score) k=i; printf("%d", s[k].num);( ) A. 101 B. 103 C. 90 D. 102 6. 设有以下定义: struct S { int a; char b; float c; }; union U { int a; char b; float c; }; 假设int占4字节、char占1字节、float占4字节,则sizeof(struct S)与sizeof(union U)分别是( ) A. 9和4 B. 12和9 C. 12和4 D. 9和9 7. 以下程序片段的输出结果是 union Data { int i; char c[4]; }; union Data d; d.i = 0x41424344; printf("%c", d.c[0]); (假设系统为小端字节序,int占4字节)( ) A. D B. A C. B D. C 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> struct Stu { int num; float score; }; main() { struct Stu s[3] = {{101, 80}, {102, 95}, {103, 88}}; int i; float sum = 0; for (i = 0; i < 3; i++) sum += s[i].score; printf("%.1f ", sum / 3); } 三、案例分析题 9. 以下程序的功能是使用共用体判断系统是大端序还是小端序。请填空。 #include <stdio.h> 【1】 Check { int i; char c; }; main() { 【2】 ch; ch.i = 1; if (ch.【3】 == 1) printf("小端序 "); else printf("大端序 "); 四、综合应用题 10. 编写一个C程序:定义结构体类型Student,包含学号num(整型)、姓名name(字符数组)和成绩score(浮点型)。定义一个包含5个元素的结构体数组并初始化,输出成绩最高的学生信息,以及所有学生的平均成绩。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第30练,内容是7.4-7.6 结构体数组、共用体、结构体和共用体应用实例。 《C语言》(第五版)一课一练 第30练 7.4-7.6 结构体数组、共用体、结构体和共用体应用实例 一、单选题 1. 设有结构体类型struct Stu { int num; char name[20]; float score; }; 以下能正确定义并初始化结构体数组的是( ) A. struct Stu s[3] = [101,"Wang",85, 102,"Li",90, 103,"Zhang",78]; B. struct Stu s(3) = {{101,"Wang",85},{102,"Li",90},{103,"Zhang",78}}; C. Stu s[3] = {{101,"Wang",85},{102,"Li",90},{103,"Zhang",78}}; D. struct Stu s[3] = {{101,"Wang",85},{102,"Li",90},{103,"Zhang",78}}; 【答案】D 【解析】结构体数组的初始化使用嵌套花括号,每个元素的花括号内包含该结构体各成员的初值。D格式完全正确。A使用方括号而非花括号,语法错误。B中数组定义应使用方括号s[3]而非圆括号s(3)。C缺少struct关键字。 2. 设有定义 struct Stu { int num; float score; } s[3]={{101,85},{102,90},{103,78}}; 则以下能正确输出第二个学生成绩的是( ) A. printf("%f", s[2].score); B. printf("%f", s[1].score); C. printf("%f", s[1]->score); D. printf("%f", s.score[1]); 【答案】B 【解析】数组下标从0开始,s[0]是第一个学生{101,85},s[1]是第二个学生{102,90}。访问s[1]的score成员使用s[1].score。A中s[2]是第三个学生。C中->用于指针访问,s[1]不是指针。D中s.score[1]写法错误,应先数组下标再成员名。 3. 以下关于共用体(union)的叙述中,正确的是( ) A. 共用体的所有成员共享同一段内存空间 B. 共用体的各成员分别占用独立的内存空间 C. 共用体变量可以同时存储所有成员的值 D. 共用体变量的内存大小等于所有成员大小之和 【答案】A 【解析】共用体(union)的核心特征是所有成员共享同一段内存空间,同一时刻能保存一个成员的值。B描述的是结构体的特征。C错误,因为成员共享内存,赋值一个成员会覆盖其他成员的值。D错误,共用体大小等于最大成员的大小,不是所有成员大小之和。 4. 设有定义 union Data { int i; char c; float f; } d; 执行 d.i=65; d.c='B'; 后,以下叙述正确的是( ) A. d.i和d.c都能正确保存各自的值 B. d.f的值也同时被确定 C. d.i的值不再是65,因为d.c的赋值覆盖了共享内存 D. 共用体变量d可以同时使用i、c、f三个成员 【答案】C 【解析】共用体成员共享内存,对d.c赋值'B'会覆盖之前d.i=65写入的共享内存区域,因此d.i的值已不是原来的65。A错误,共用体同一时刻能保存一个成员的有效值。B错误,d.f未被赋值,其内容是不确定的。D错误,共用体不能同时使用多个成员。 5. 以下程序片段的输出结果是 struct Stu { int num; float score; } s[3]={{101,80},{102,90},{103,70}}; int i, k=0; for(i=1;i<3;i++) if(s[i].score > s[k].score) k=i; printf("%d", s[k].num);( ) A. 101 B. 103 C. 90 D. 102 【答案】D 【解析】程序在结构体数组中查找成绩最高的学生。初始k=0(s[0].score=80)。i=1时s[1].score=90>80,k=1。i=2时s[2].score=70<90,k不变仍为1。最终k=1,s[1].num=102。这是求数组最大值的经典方法。 6. 设有以下定义: struct S { int a; char b; float c; }; union U { int a; char b; float c; }; 假设int占4字节、char占1字节、float占4字节,则sizeof(struct S)与sizeof(union U)分别是( ) A. 9和4 B. 12和9 C. 12和4 D. 9和9 【答案】C 【解析】结构体大小是各成员大小之和(考虑内存对齐),int 4字节+char 1字节+对齐补3字节+float 4字节=12字节。共用体大小等于最大成员的大小,int 4、char 1、float 4中最大为4,所以sizeof(union U)=4。结构体成员各自占空间,共用体成员共享空间。 7. 以下程序片段的输出结果是 union Data { int i; char c[4]; }; union Data d; d.i = 0x41424344; printf("%c", d.c[0]); (假设系统为小端字节序,int占4字节)( ) A. D B. A C. B D. C 【答案】A 【解析】小端字节序下,低字节存放在低地址。0x41424344在内存中从低地址到高地址依次存放0x44、0x43、0x42、0x41。d.c[0]对应最低地址的字节0x44,对应ASCII字符'D'。这说明共用体成员共享内存,可以以不同类型解读同一段数据。 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> struct Stu { int num; float score; }; main() { struct Stu s[3] = {{101, 80}, {102, 95}, {103, 88}}; int i; float sum = 0; for (i = 0; i < 3; i++) sum += s[i].score; printf("%.1f ", sum / 3); } 【答案】87.7 【解析】程序遍历结构体数组s,累加三个学生的成绩:80+95+88=263。然后计算平均分263/3=87.666...,用%.1f保留一位小数输出为87.7。结构体数组通过下标访问每个元素,再用点运算符访问成员。 三、案例分析题 9. 以下程序的功能是使用共用体判断系统是大端序还是小端序。请填空。 #include <stdio.h> 【1】 Check { int i; char c; }; main() { 【2】 ch; ch.i = 1; if (ch.【3】 == 1) printf("小端序 "); else printf("大端序 "); 【答案】【1】union 【2】union Check 【3】c 【解析】【1】使用共用体需用union关键字。【2】定义共用体变量ch,需写完整类型名union Check。【3】ch.i=1将整型成员设为1,在小端序系统中最低字节为1,ch.c访问的就是最低字节,若为1则是小端序。共用体成员共享内存,通过char成员读取int的最低字节即可判断字节序。 四、综合应用题 10. 编写一个C程序:定义结构体类型Student,包含学号num(整型)、姓名name(字符数组)和成绩score(浮点型)。定义一个包含5个元素的结构体数组并初始化,输出成绩最高的学生信息,以及所有学生的平均成绩。 【答案】#include <stdio.h> struct Student { int num; char name[20]; float score; }; main() { struct Student s[5] = { {101, "Wang", 85}, {102, "Li", 92}, {103, "Zhang", 78}, {104, "Liu", 88}, {105, "Chen", 95} }; int i, k = 0; float sum = 0; for (i = 0; i < 5; i++) { sum += s[i].score; if (s[i].score > s[k].score) k = i; } printf("最高分:学号%d 姓名%s 成绩%.1f ", s[k].num, s[k].name, s[k].score); printf("平均成绩:%.1f ", sum / 5); } 【解析】程序定义Student结构体类型,初始化5个学生的结构体数组。遍历数组时累加成绩求和,同时记录成绩最高的下标k。遍历结束后输出最高分学生信息和平均成绩。这是结构体数组的典型应用场景。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第30练 7.4-7.6 结构体数组、共用体、结构体和共用体应用实例 《C语言》 (第五版) 一课一练 (山东省)
1
第30练 7.4-7.6 结构体数组、共用体、结构体和共用体应用实例 《C语言》 (第五版) 一课一练 (山东省)
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。