第31练 第7章 结构体和共用体综合 《C语言》 (第五版) 一课一练 (山东省)

2026-06-24
| 2份
| 13页
| 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/58480049.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第31练,内容是第7章 结构体和共用体综合。 《C语言》(第五版)一课一练 第31练 第7章 结构体和共用体综合 一、单选题 1. 以下关于C语言中结构体和共用体的叙述中,正确的是( ) A. 结构体和共用体的成员都共享同一段内存空间 B. 结构体各成员占用各自的内存空间,共用体各成员共享同一段内存空间 C. 结构体和共用体的大小都等于最大成员的大小 D. 结构体变量可以整体输入输出,共用体变量也可以整体输入输出 2. 设有定义 struct Book { int id; float price; } b[2]={{1,25.5},{2,30.0}}; 则b[0].price + b[1].price的值是( ) A. 55.5 B. 25.5 C. 30.0 D. 3 3. 设有定义 union Data { int i; float f; } d; 执行 d.f = 3.14; d.i = 10; printf("%f", d.f); 后,输出结果是( ) A. 3.14 B. 10.0 C. 输出一个不确定的值 D. 0.0 4. 设有以下定义: struct Time { int h, m, s; }; struct Record { int id; struct Time t; } r = {1, {14, 30, 0}}; 则以下能正确输出r的小时的表达式是( ) A. r.Time.h B. r->t.h C. Record.t.h D. r.t.h 5. 设有以下定义: struct S1 { char a; int b; char c; }; struct S2 { int b; char a; char c; }; 假设int占4字节、char占1字节,考虑内存对齐,sizeof(S1)与sizeof(S2)分别是( ) A. 6和6 B. 8和8 C. 12和8 D. 12和12 6. 以下程序片段对结构体数组按成绩降序排序,输出第一个元素的学号是 struct Stu { int num; int score; } s[3]={{101,85},{102,95},{103,78}}, t; int i, j; for(i=0;i<2;i++) for(j=0;j<2-i;j++) if(s[j].score<s[j+1].score) { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } printf("%d", s[0].num);( ) A. 102 B. 101 C. 103 D. 95 7. 以下程序片段的输出结果是 union U { int a; char b; }; struct S { int x; union U y; }; struct S s; s.x = 10; s.y.a = 20; s.y.b = 'A'; printf("%d %d", s.x, s.y.a);( ) A. 10 20 B. 不确定值 20 C. 10 65 D. 10 不确定值 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> struct Stu { int num; char name[20]; float score; }; main() { struct Stu s[3] = {{101, "Wang", 85}, {102, "Li", 92}, {103, "Zhang", 78}}; struct Stu temp; int i, max = 0; float sum = 0; for (i = 0; i < 3; i++) { sum += s[i].score; if (s[i].score > s[max].score) max = i; } printf("最高分:%s %.1f ", s[max].name, s[max].score); printf("平均分:%.1f ", sum / 3); } 三、案例分析题 9. 以下程序的功能是定义一个包含共用体成员的结构体,用于存储人员信息(教师存职称,学生存班级)。请填空。 #include <stdio.h> #include <string.h> struct Person { int num; char name[20]; char type; 【1】 info; }; union Info { char title[20]; int clazz; }; main() { struct Person p; p.num = 1001; strcpy(p.name, "Zhang"); p.type = 'T'; strcpy(【2】, "Professor"); printf("%d %s ", p.num, p.name); if (p.type == 'T') printf("%s ", p.info.【3】); else printf("%d ", p.info.clazz); } 四、综合应用题 10. 编写一个C程序:定义结构体类型Contact表示通讯录联系人,包含姓名name(字符数组)、电话phone(字符数组)和年龄age(整型)。定义包含3个联系人的结构体数组并初始化,实现以下功能:(1)输出所有联系人信息;(2)查找并输出年龄最大的联系人信息。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第31练,内容是第7章 结构体和共用体综合。 《C语言》(第五版)一课一练 第31练 第7章 结构体和共用体综合 一、单选题 1. 以下关于C语言中结构体和共用体的叙述中,正确的是( ) A. 结构体和共用体的成员都共享同一段内存空间 B. 结构体各成员占用各自的内存空间,共用体各成员共享同一段内存空间 C. 结构体和共用体的大小都等于最大成员的大小 D. 结构体变量可以整体输入输出,共用体变量也可以整体输入输出 【答案】B 【解析】结构体各成员各自占用独立的内存空间,结构体大小为各成员大小之和(考虑对齐)。共用体各成员共享同一段内存,大小等于最大成员的大小。A错误,结构体成员不共享内存。C错误,结构体大小不等于最大成员大小。D错误,两者都不能整体输入输出。 2. 设有定义 struct Book { int id; float price; } b[2]={{1,25.5},{2,30.0}}; 则b[0].price + b[1].price的值是( ) A. 55.5 B. 25.5 C. 30.0 D. 3 【答案】A 【解析】b[0]={1,25.5},b[1]={2,30.0}。b[0].price=25.5,b[1].price=30.0,两者相加得55.5。结构体数组通过下标定位元素,再用点运算符访问成员。 3. 设有定义 union Data { int i; float f; } d; 执行 d.f = 3.14; d.i = 10; printf("%f", d.f); 后,输出结果是( ) A. 3.14 B. 10.0 C. 输出一个不确定的值 D. 0.0 【答案】C 【解析】共用体成员共享内存,对d.i赋值10后,之前d.f=3.14写入的内存已被覆盖。此时d.f的内容是不确定的,输出结果无法预期。A错误,3.14已被覆盖。B和D也不正确,因为内存中存储的是整型10的二进制表示,按浮点格式解读不是10.0。 4. 设有以下定义: struct Time { int h, m, s; }; struct Record { int id; struct Time t; } r = {1, {14, 30, 0}}; 则以下能正确输出r的小时的表达式是( ) A. r.Time.h B. r->t.h C. Record.t.h D. r.t.h 【答案】D 【解析】嵌套结构体访问内层成员使用多级点运算符。r.t访问外层成员t(struct Time类型),r.t.h进一步访问t的小时成员。A中Time是类型名不是成员名。B中r不是指针不能用->。C中Record也是类型名,不能用于成员访问。 5. 设有以下定义: struct S1 { char a; int b; char c; }; struct S2 { int b; char a; char c; }; 假设int占4字节、char占1字节,考虑内存对齐,sizeof(S1)与sizeof(S2)分别是( ) A. 6和6 B. 8和8 C. 12和8 D. 12和12 【答案】C 【解析】S1中a占1字节后补3字节对齐到4,b占4字节,c占1字节后补3字节对齐,共12字节。S2中b占4字节,a和c各占1字节共2字节,补2字节对齐到4,共8字节。成员排列顺序影响结构体大小,合理排列可以节省内存。 6. 以下程序片段对结构体数组按成绩降序排序,输出第一个元素的学号是 struct Stu { int num; int score; } s[3]={{101,85},{102,95},{103,78}}, t; int i, j; for(i=0;i<2;i++) for(j=0;j<2-i;j++) if(s[j].score<s[j+1].score) { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } printf("%d", s[0].num);( ) A. 102 B. 101 C. 103 D. 95 【答案】A 【解析】程序使用冒泡排序按score降序排列。初始s[0]={101,85},s[1]={102,95},s[2]={103,78}。第一轮i=0:j=0时85<95交换,数组变为{102,95},{101,85},{103,78};j=1时85>78不交换。第二轮i=1:j=0时95>78不交换。排序后s[0]={102,95},学号为102。 7. 以下程序片段的输出结果是 union U { int a; char b; }; struct S { int x; union U y; }; struct S s; s.x = 10; s.y.a = 20; s.y.b = 'A'; printf("%d %d", s.x, s.y.a);( ) A. 10 20 B. 不确定值 20 C. 10 65 D. 10 不确定值 【答案】D 【解析】s.x=10存储在结构体独立内存中。s.y.a=20写入共用体,但s.y.b='A'(ASCII值65)覆盖了共用体共享内存。此后s.y.a的值已不是20,而是被覆盖后的不确定值。s.x不受影响仍为10。结构体中包含共用体成员时,共用体的存储特性不变。 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> struct Stu { int num; char name[20]; float score; }; main() { struct Stu s[3] = {{101, "Wang", 85}, {102, "Li", 92}, {103, "Zhang", 78}}; struct Stu temp; int i, max = 0; float sum = 0; for (i = 0; i < 3; i++) { sum += s[i].score; if (s[i].score > s[max].score) max = i; } printf("最高分:%s %.1f ", s[max].name, s[max].score); printf("平均分:%.1f ", sum / 3); } 【答案】最高分:Li 92.0 平均分:85.0 【解析】程序遍历结构体数组s,累加成绩sum=85+92+78=255,同时记录最高分下标max=1(Li的92分最高)。第一行输出最高分学生姓名和成绩。第二行输出平均分255/3=85.0。这是结构体数组的典型应用:同时完成查找最大值和求平均值。 三、案例分析题 9. 以下程序的功能是定义一个包含共用体成员的结构体,用于存储人员信息(教师存职称,学生存班级)。请填空。 #include <stdio.h> #include <string.h> struct Person { int num; char name[20]; char type; 【1】 info; }; union Info { char title[20]; int clazz; }; main() { struct Person p; p.num = 1001; strcpy(p.name, "Zhang"); p.type = 'T'; strcpy(【2】, "Professor"); printf("%d %s ", p.num, p.name); if (p.type == 'T') printf("%s ", p.info.【3】); else printf("%d ", p.info.clazz); } 【答案】【1】union Info 【2】p.info.title 【3】title 【解析】【1】结构体中的共用体成员需要声明类型为union Info。【2】给教师职称赋值,通过p.info.title访问共用体的title成员。p.type='T'表示教师,存储职称信息。【3】type为'T'时输出职称,访问p.info.title。共用体作为结构体成员,实现了同一区域存储不同类型信息的功能。 四、综合应用题 10. 编写一个C程序:定义结构体类型Contact表示通讯录联系人,包含姓名name(字符数组)、电话phone(字符数组)和年龄age(整型)。定义包含3个联系人的结构体数组并初始化,实现以下功能:(1)输出所有联系人信息;(2)查找并输出年龄最大的联系人信息。 【答案】#include <stdio.h> #include <string.h> struct Contact { char name[20]; char phone[15]; int age; }; main() { struct Contact c[3] = { {"Zhang", "13800138001", 25}, {"Li", "13900139002", 30}, {"Wang", "13700137003", 28} }; int i, max = 0; printf("所有联系人: "); for (i = 0; i < 3; i++) printf("姓名:%s 电话:%s 年龄:%d ", c[i].name, c[i].phone, c[i].age); for (i = 1; i < 3; i++) if (c[i].age > c[max].age) max = i; printf("年龄最大:%s %s %d岁 ", c[max].name, c[max].phone, c[max].age); } 【解析】程序定义Contact结构体类型,初始化3个联系人的数组。第一个循环输出所有联系人信息。第二个循环查找年龄最大的联系人下标,通过比较c[i].age与c[max].age更新max。最后输出年龄最大的联系人信息。这是结构体数组的典型综合应用。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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