第27练 7.6 结构体和共用体应用实例 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)

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

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第27练,内容是7.6 结构体和共用体应用实例。 《编程语言基础——C语言》(第5版)一课一练 第27练 7.6 结构体和共用体应用实例 一、单选题 1. 要对结构体数组按某个成员进行排序,最合适的做法是( ) A. 在比较和交换时,以整个结构体变量为单位进行操作 B. 先把要排序的成员抽取到普通数组中排序,再依次回填 C. 不能对结构体数组排序,因为结构体不能比较大小 D. 改变结构体成员的定义顺序来达到排序效果 2. 用结构体数组管理学生成绩,要统计不及格(score<60)的学生人数,正确的做法是( ) A. 直接用 sizeof(结构体数组) / sizeof(不及格) 计算 B. 遍历数组,判断每个元素的score成员是否<60,累加计数 C. 用共用体将所有score转为整数再比较 D. 定义一个新的结构体数组存放不及格学生 3. 以下场景中,适合使用共用体(union)而非结构体(struct)的是( ) A. 存储一个学生的学号、姓名和多门课程成绩 B. 存储图书馆中每本书的书名、作者和ISBN C. 在一个变量中轮流存储不同类型的数据以节省内存 D. 定义包含多个不同成员的实体对象 4. 已执行 typedef struct { int x; int y; } Point; 以下说法正确的是( ) A. Point是一个结构体类型名,定义变量时仍需写 struct Point B. Point是一个变量名,可以直接使用 C. Point是宏名,预处理后展开为结构体定义 D. Point是结构体类型的别名,可以直接用 Point p; 定义变量 5. 已定义 typedef struct { int num; float score; } Student; 函数 void print(Student s) 的功能是打印一个学生的信息。以下调用正确的是( ) A. Student a = {1, 90}; print(a); B. Student a = {1, 90}; print(&a); C. Student a = {1, 90}; print(Student); D. Student a = {1, 90}; print(a.score); 6. 有以下共用体定义和应用:union { int i; char c[4]; } u; 以下说法正确的是( ) A. u.i和u.c分别占用不同的4字节内存空间 B. 可以利用共用体查看int类型在内存中的各字节内容 C. 给u.i赋值后,u.c的值会保持为空 D. 共用体不能包含数组类型的成员 7. 已定义 struct Student { int num; float score; } stu[5]; 以下操作中,语法正确的是( ) A. stu.score = 90; B. if (stu[1] > stu[2]) ... C. stu[0] = stu[1]; D. scanf("%d", stu.num); 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> typedef struct { char name[10]; int score; } Student; main() { Student s[4] = {{"A", 85}, {"B", 72}, {"C", 90}, {"D", 68}}; int i, count = 0; for (i = 0; i < 4; i++) if (s[i].score >= 80) count++; printf("%d", count); } 三、程序填空题 9. 以下程序的功能是:将学生成绩数组按score从高到低排序(选择排序法)。请填空。 #include <stdio.h> typedef struct { int num; float score; } Student; main() { Student s[4] = {{1,78}, {2,92}, {3,65}, {4,88}}, t; int i, j, max; for (i = 0; i < 3; i++) { max = i; for (j = i + 1; j < 4; j++) if (s[j].score > s[max].score) max = j; t = s[i]; s[i] = s[max]; 【1】; } for (i = 0; i < 4; i++) printf("%d:%.0f ", s[i].num, s[i].score); } 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是将输入的整数通过共用体转换为对应的浮点数(按内存位模式直接转换)并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 union Convert L3 { L4 int i; L5 float f; L6 }; L7 main() L8 { L9 union Convert c; L10 printf("请输入一个整数:"); L11 scanf("%d", &c.i); L12 printf("对应的浮点表示:%f ", c.i); L13 } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第27练,内容是7.6 结构体和共用体应用实例。 《编程语言基础——C语言》(第5版)一课一练 第27练 7.6 结构体和共用体应用实例 一、单选题 1. 要对结构体数组按某个成员进行排序,最合适的做法是( ) A. 在比较和交换时,以整个结构体变量为单位进行操作 B. 先把要排序的成员抽取到普通数组中排序,再依次回填 C. 不能对结构体数组排序,因为结构体不能比较大小 D. 改变结构体成员的定义顺序来达到排序效果 【答案】A 【解析】同类型结构体变量之间可以整体赋值,因此排序时可像普通数组一样交换整个结构体变量。比较时则按指定成员的值来判断大小。这种方式代码简洁,利用了结构体整体赋值的特性。 2. 用结构体数组管理学生成绩,要统计不及格(score<60)的学生人数,正确的做法是( ) A. 直接用 sizeof(结构体数组) / sizeof(不及格) 计算 B. 遍历数组,判断每个元素的score成员是否<60,累加计数 C. 用共用体将所有score转为整数再比较 D. 定义一个新的结构体数组存放不及格学生 【答案】B 【解析】统计满足条件的元素个数需要遍历整个结构体数组,通过.运算符访问每个元素的score成员,判断是否小于60,并用计数器累加。这是结构体数组最常见的应用模式。 3. 以下场景中,适合使用共用体(union)而非结构体(struct)的是( ) A. 存储一个学生的学号、姓名和多门课程成绩 B. 存储图书馆中每本书的书名、作者和ISBN C. 在一个变量中轮流存储不同类型的数据以节省内存 D. 定义包含多个不同成员的实体对象 【答案】C 【解析】共用体适用于同一变量在不同时刻存储不同类型数据的场景,其内存大小等于最大成员的大小,可节省空间。结构体则适用于需要同时保存多个相关数据成员的场景。A、B、D都需要同时保存多个成员,应用结构体。 4. 已执行 typedef struct { int x; int y; } Point; 以下说法正确的是( ) A. Point是一个结构体类型名,定义变量时仍需写 struct Point B. Point是一个变量名,可以直接使用 C. Point是宏名,预处理后展开为结构体定义 D. Point是结构体类型的别名,可以直接用 Point p; 定义变量 【答案】D 【解析】typedef为已有结构体类型(包括匿名结构体)定义了一个别名Point。之后可以直接用 Point 变量名 的方式定义变量,无需struct关键字。这简化了代码书写,是C语言中常用的做法。 5. 已定义 typedef struct { int num; float score; } Student; 函数 void print(Student s) 的功能是打印一个学生的信息。以下调用正确的是( ) A. Student a = {1, 90}; print(a); B. Student a = {1, 90}; print(&a); C. Student a = {1, 90}; print(Student); D. Student a = {1, 90}; print(a.score); 【答案】A 【解析】函数print的参数类型是Student(结构体类型),调用时传入同类型的变量a即可,这是结构体变量作为函数参数的值传递。B传的是地址(指针),类型不匹配;C传的是类型名;D传的是成员而非整体。 6. 有以下共用体定义和应用:union { int i; char c[4]; } u; 以下说法正确的是( ) A. u.i和u.c分别占用不同的4字节内存空间 B. 可以利用共用体查看int类型在内存中的各字节内容 C. 给u.i赋值后,u.c的值会保持为空 D. 共用体不能包含数组类型的成员 【答案】B 【解析】共用体中int型成员i(占4字节)和char型数组c[4](占4字节)共享同一段内存。给u.i赋值后,可以通过c[0]~c[3]分别查看i在内存中的每个字节的值,这是共用体的典型应用——用于数据类型的底层字节分析。 7. 已定义 struct Student { int num; float score; } stu[5]; 以下操作中,语法正确的是( ) A. stu.score = 90; B. if (stu[1] > stu[2]) ... C. stu[0] = stu[1]; D. scanf("%d", stu.num); 【答案】C 【解析】同类型的结构体变量(包括数组元素)之间可以直接整体赋值。A错误,必须通过下标指定具体元素;B错误,结构体整体不能直接用>比较大小,需要指定比较哪个成员;D错误,同样缺少下标。 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> typedef struct { char name[10]; int score; } Student; main() { Student s[4] = {{"A", 85}, {"B", 72}, {"C", 90}, {"D", 68}}; int i, count = 0; for (i = 0; i < 4; i++) if (s[i].score >= 80) count++; printf("%d", count); } 【答案】2 【解析】程序统计score>=80的学生人数。遍历结构体数组s:s[0].score=85≥80→count=1;s[1].score=72<80→不变;s[2].score=90≥80→count=2;s[3].score=68<80→不变。最终输出2。 三、程序填空题 9. 以下程序的功能是:将学生成绩数组按score从高到低排序(选择排序法)。请填空。 #include <stdio.h> typedef struct { int num; float score; } Student; main() { Student s[4] = {{1,78}, {2,92}, {3,65}, {4,88}}, t; int i, j, max; for (i = 0; i < 3; i++) { max = i; for (j = i + 1; j < 4; j++) if (s[j].score > s[max].score) max = j; t = s[i]; s[i] = s[max]; 【1】; } for (i = 0; i < 4; i++) printf("%d:%.0f ", s[i].num, s[i].score); } 【答案】【1】s[max] = t 【解析】选择排序中,每趟找到最大值位置后,将当前元素s[i]与最大值元素s[max]交换。已执行t=s[i]; s[i]=s[max]; 还差最后一步s[max]=t来完成交换。利用结构体变量可整体赋值的特性简化代码。 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是将输入的整数通过共用体转换为对应的浮点数(按内存位模式直接转换)并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 union Convert L3 { L4 int i; L5 float f; L6 }; L7 main() L8 { L9 union Convert c; L10 printf("请输入一个整数:"); L11 scanf("%d", &c.i); L12 printf("对应的浮点表示:%f ", c.i); L13 } 【答案】【1】L12: printf("对应的浮点表示:%f ", c.i); → 应改为 printf("对应的浮点表示:%f ", c.f);(要输出浮点表示应读取共用体的float成员c.f,用%f输出int成员c.i会导致格式不匹配) 【解析】共用体中int和float共享内存。L12用%f格式输出int成员c.i,类型不匹配。虽然内存中存储的是同一个位模式,但要按float格式解释输出,应读取共用体的float成员c.f,这样printf的%f格式方能正确解释内存中的数据。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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