第26练 7.4 结构体数组 + 7.5 共用体 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)

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

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第26练,内容是7.4 结构体数组 + 7.5 共用体。 《编程语言基础——C语言》(第5版)一课一练 第26练 7.4 结构体数组 + 7.5 共用体 一、单选题 1. 关于结构体数组,下列说法正确的是( ) A. 结构体数组的每个元素都是一个结构体变量 B. 结构体数组的所有元素共享同一块内存 C. 结构体数组的元素只能是整型数据 D. 结构体数组不能像普通数组一样用下标访问 【答案】A 【解析】结构体数组是由多个结构体变量组成的数组,每个元素都是完整的结构体变量,拥有独立的成员。可以通过下标访问每个元素,再用.运算符访问该元素的成员。 2. 已定义 struct Student { int num; char name[20]; }; 要定义一个包含50个元素的Student类型数组,正确的是( ) A. Student stu[50]; B. struct Student stu[50]; C. struct stu[50]; D. Student struct[50]; 【答案】B 【解析】定义结构体数组的格式为:struct 结构体名 数组名[元素个数]; A缺少struct关键字,C缺少结构体名,D语法顺序错误。如果使用了typedef定义别名则可以直接用别名。 3. 已定义 struct Point { int x; int y; } p[3] = {{1,2}, {3,4}, {5,6}}; 则表达式 p[1].x + p[2].y 的值是( ) A. 6 B. 8 C. 9 D. 11 【答案】C 【解析】结构体数组p的初始化:p[0]={1,2},p[1]={3,4},p[2]={5,6}。p[1].x=3,p[2].y=6,相加得9。访问格式为数组名[下标].成员名。 4. 关于共用体(union),下列说法正确的是( ) A. 共用体的所有成员可以同时被使用 B. 共用体占用的内存等于所有成员内存之和 C. 共用体变量定义后,所有成员的值同时有效 D. 共用体的各个成员共享同一段内存空间 【答案】D 【解析】共用体(union)的关键特征是所有成员共享同一段内存空间,共用体变量的大小等于其最大成员的大小。各成员共享内存,最后写入的成员值会覆盖先前写入的值。 5. 定义了 union Data { int i; char c; double d; }; 在常见的编译环境中,该共用体类型占用的字节数是( ) A. 8(double的大小) B. 4+1+8=13(所有成员大小之和) C. 4(int的大小) D. 1(char的大小) 【答案】A 【解析】共用体的大小等于其最大成员的大小。int占4字节,char占1字节,double占8字节,因此union Data的大小为8字节。A选项中的double占8字节,是最大成员。 6. 已定义 struct Student { int num; float score; } stu[3] = {{1,85}, {2,92}, {3,78}}; 要输出score最大的学生的学号,以下循环思路正确的是( ) A. 直接输出stu[1].score,因为它是中间值 B. 遍历数组,用一个变量记录当前最大score的下标,遍历结束后输出该下标对应的num C. 用冒泡排序对score排序后,输出stu[0].num D. 计算所有score的平均值,输出最接近平均值的num 【答案】B 【解析】在结构体数组中查找满足某种条件(如最大值)的元素,需要遍历数组逐个比较。用一个变量max_index记录当前最大值所在下标,每发现一个更大的score就更新max_index,遍历结束后stu[max_index].num即为所求。 7. 有以下程序段:union U { int a; char b; } u; u.a = 65; u.b = 'B'; printf("%d", u.a); 输出结果正确的是( ) A. 65 B. 0 C. 66 D. 编译错误 【答案】C 【解析】共用体成员共享内存,u.a=65后内存中存储65。然后u.b='B'(ASCII码66)写入同一段内存,覆盖了原来的值。此时从int型成员u.a读取的是被覆盖后的值66,即字符'B'的ASCII码。 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> struct Student { int num; float score; }; main() { struct Student s[3] = {{101, 75}, {102, 88}, {103, 66}}; int i, max_i = 0; for (i = 1; i < 3; i++) if (s[i].score > s[max_i].score) max_i = i; printf("%d,%.0f", s[max_i].num, s[max_i].score); } 【答案】102,88 【解析】程序遍历结构体数组s[3],查找score最高的学生。初始max_i=0(s[0].score=75)。i=1时s[1].score=88>75,max_i更新为1。i=2时s[2].score=66<88,max_i不变。最终输出s[1]即学号102,分数88。 三、程序填空题 9. 以下程序的功能是:输入3个学生的学号和成绩,计算并输出平均分。请填空。 #include <stdio.h> struct Student { int num; float score; }; main() { struct Student stu[3]; int i; float sum = 0; for (i = 0; i < 3; i++) { printf("请输入第%d个学生的学号和成绩:", i + 1); scanf("%d%f", &stu[i].num, &stu[i].score); sum = sum + 【1】; } printf("平均分:%.1f ", sum / 3); } 【答案】【1】stu[i].score 【解析】累加每个学生的成绩到sum变量。通过循环变量i遍历结构体数组stu,用stu[i].score访问第i个学生的score成员。循环结束后sum/3即为平均分。 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是使用共用体存储数据并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 union Data L3 { L4 int i; L5 float f; L6 }; L7 main() L8 { L9 union Data d; L10 d.f = 3.14; L11 printf("整数:%d,浮点数:%.2f ", d.i, d.f); L12 } 【答案】【1】L11: printf("整数:%d,浮点数:%.2f ", d.i, d.f); → 应改为 printf("浮点数:%.2f ", d.f);(共用体各成员共享内存,d.f=3.14后d.i的值不确定,不能同时输出两个成员) 【解析】共用体所有成员共享同一内存空间。向d.f写入浮点数3.14后,内存中以浮点格式存储3.14的二进制表示。此时读取d.i会以整型格式解释同一段内存的位模式,得到的值不是有意义的整数。正确的做法是每次操作使用一个成员,避免同时读取多个。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第26练,内容是7.4 结构体数组 + 7.5 共用体。 《编程语言基础——C语言》(第5版)一课一练 第26练 7.4 结构体数组 + 7.5 共用体 一、单选题 1. 关于结构体数组,下列说法正确的是( ) A. 结构体数组的每个元素都是一个结构体变量 B. 结构体数组的所有元素共享同一块内存 C. 结构体数组的元素只能是整型数据 D. 结构体数组不能像普通数组一样用下标访问 2. 已定义 struct Student { int num; char name[20]; }; 要定义一个包含50个元素的Student类型数组,正确的是( ) A. Student stu[50]; B. struct Student stu[50]; C. struct stu[50]; D. Student struct[50]; 3. 已定义 struct Point { int x; int y; } p[3] = {{1,2}, {3,4}, {5,6}}; 则表达式 p[1].x + p[2].y 的值是( ) A. 6 B. 8 C. 9 D. 11 4. 关于共用体(union),下列说法正确的是( ) A. 共用体的所有成员可以同时被使用 B. 共用体占用的内存等于所有成员内存之和 C. 共用体变量定义后,所有成员的值同时有效 D. 共用体的各个成员共享同一段内存空间 5. 定义了 union Data { int i; char c; double d; }; 在常见的编译环境中,该共用体类型占用的字节数是( ) A. 8(double的大小) B. 4+1+8=13(所有成员大小之和) C. 4(int的大小) D. 1(char的大小) 6. 已定义 struct Student { int num; float score; } stu[3] = {{1,85}, {2,92}, {3,78}}; 要输出score最大的学生的学号,以下循环思路正确的是( ) A. 直接输出stu[1].score,因为它是中间值 B. 遍历数组,用一个变量记录当前最大score的下标,遍历结束后输出该下标对应的num C. 用冒泡排序对score排序后,输出stu[0].num D. 计算所有score的平均值,输出最接近平均值的num 7. 有以下程序段:union U { int a; char b; } u; u.a = 65; u.b = 'B'; printf("%d", u.a); 输出结果正确的是( ) A. 65 B. 0 C. 66 D. 编译错误 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> struct Student { int num; float score; }; main() { struct Student s[3] = {{101, 75}, {102, 88}, {103, 66}}; int i, max_i = 0; for (i = 1; i < 3; i++) if (s[i].score > s[max_i].score) max_i = i; printf("%d,%.0f", s[max_i].num, s[max_i].score); } 三、程序填空题 9. 以下程序的功能是:输入3个学生的学号和成绩,计算并输出平均分。请填空。 #include <stdio.h> struct Student { int num; float score; }; main() { struct Student stu[3]; int i; float sum = 0; for (i = 0; i < 3; i++) { printf("请输入第%d个学生的学号和成绩:", i + 1); scanf("%d%f", &stu[i].num, &stu[i].score); sum = sum + 【1】; } printf("平均分:%.1f ", sum / 3); } 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是使用共用体存储数据并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 union Data L3 { L4 int i; L5 float f; L6 }; L7 main() L8 { L9 union Data d; L10 d.f = 3.14; L11 printf("整数:%d,浮点数:%.2f ", d.i, d.f); L12 } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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