第29练 7.3 结构体变量的引用、初始化与赋值 《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/58480035.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第29练,内容是7.3 结构体变量的引用、初始化与赋值。 《C语言》(第五版)一课一练 第29练 7.3 结构体变量的引用、初始化与赋值 一、单选题 1. 设有定义 struct Stu { int num; char name[20]; float score; } s; 则以下能正确引用s的学号成员的是( ) A. s.num B. s->num C. Stu.num D. struct Stu.num 【答案】A 【解析】引用结构体变量的成员使用点运算符(成员运算符),格式为变量名.成员名。A中s.num正确引用了s的num成员。B中->运算符用于通过指针访问成员,s不是指针。C中Stu是类型名不是变量,不能使用点运算符。D中struct Stu也是类型名,同样不能用于成员访问。 2. 设有定义 struct Point { int x; int y; } p = {10, 20}; 则p.y的值是( ) A. 10 B. 0 C. 不确定 D. 20 【答案】D 【解析】结构体变量初始化时,花括号中的值按顺序依次赋给各成员。p={10,20}表示p.x=10,p.y=20,因此p.y的值为20。A是p.x的值。B是未初始化成员的默认值(但此处y已初始化)。C错误,初始化后值是确定的。 3. 设有定义 struct Point { int x; int y; } p1={1,2}, p2; 执行 p2=p1; p2.x=5; 后,p1.x 的值是( ) A. 5 B. 1 C. 2 D. 0 【答案】B 【解析】p2=p1将p1各成员的值复制到p2中,这是值复制,p2和p1是独立的变量。之后p2.x=5修改的是p2的成员x,不影响p1。因此p1.x仍然是初始值1。结构体变量之间赋值是逐成员复制,修改其中一个不会影响另一个。 4. 设有定义 struct Stu { int num; char name[20]; float score; } s; 以下能正确为s输入数据的是( ) A. scanf("%d%s%f", &s.num, s.name, &s.score); B. scanf("%d%s%f", &s.num, &s.name, &s.score); C. scanf("%d%s%f", s.num, s.name, s.score); D. scanf("%d%s%f", &s, &s.name, &s.score); 【答案】A 【解析】scanf中整型和浮点型成员需要取地址,而name是字符数组,数组名本身就是首元素地址,不需要再加&。A正确:&s.num取整型成员地址,s.name直接用数组名,&s.score取浮点成员地址。B中&s.name写法错误,s.name已经是地址。C中s.num和s.score缺少取地址符&。D中&s取整个结构体变量的地址是错误的。 5. 以下关于结构体变量运算的描述中,正确的是( ) A. 结构体变量之间可以直接进行加减运算 B. 可以使用==运算符比较两个结构体变量是否相等 C. 同类型的结构体变量可以相互赋值 D. 结构体变量可以整体进行输入输出 【答案】C 【解析】同类型结构体变量之间可以整体赋值,将源变量各成员的值复制到目标变量。A错误,结构体变量之间不能直接进行算术运算。B错误,C语言不允许用==直接比较两个结构体变量,需要逐个成员比较。D错误,结构体变量不能整体用printf/scanf输入输出,需要逐个成员处理。 6. 设有以下定义: struct Date { int y, m, d; }; struct Emp { int id; struct Date hire; } e = {1001, {2020, 8, 15}}; 则以下能正确输出入职年份的是( ) A. printf("%d", e.hire->y); B. printf("%d", e.Date.y); C. printf("%d", hire.y); D. printf("%d", e.hire.y); 【答案】D 【解析】嵌套结构体访问内层成员使用多级点运算符,从外到内逐级引用。e.hire访问外层成员hire(struct Date类型),e.hire.y进一步访问hire的成员y。A中hire不是指针,不能用->。B中Date是类型名不是成员名。C中hire需要通过e来访问,不能单独使用。 7. 以下程序片段的输出结果是 struct T { int a; int b; }; struct T f1, f2 = {3, 4}; f1 = f2; f1.a += f2.b; f2.b = f1.a; printf("%d %d", f1.a, f2.b);( ) A. 7 4 B. 3 4 C. 7 7 D. 4 7 【答案】C 【解析】f2={3,4},f1=f2后f1={3,4}。f1.a+=f2.b即f1.a=3+4=7,此时f1={7,4}。f2.b=f1.a=7,此时f2={3,7}。输出f1.a=7和f2.b=7,结果为7 7。 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> struct Score { float chinese; float math; float english; }; main() { struct Score s1 = {80.5, 90.0, 75.5}, s2; s2 = s1; s2.math = 85.0; printf("%.1f %.1f ", s1.math, s2.math); printf("%.1f ", s2.chinese + s2.math + s2.english); } 【答案】90.0 85.0 241.0 【解析】s1={80.5,90.0,75.5},s2=s1后s2={80.5,90.0,75.5}。修改s2.math为85.0,s1.math不受影响仍为90.0。第一行输出s1.math=90.0和s2.math=85.0。第二行输出s2的总分80.5+85.0+75.5=241.0。 三、案例分析题 9. 以下程序的功能是定义一个表示日期的结构体,输入一个日期,计算并输出该日期是当年第几天。请填空。 #include <stdio.h> struct Date { int year, month, day; }; main() { struct Date d; int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int i, sum = 0; printf("请输入年 月 日:"); scanf("%d%d%d", 【1】); for (i = 0; i < d.month - 1; i++) sum += 【2】; sum += d.day; if (d.year % 4 == 0 && d.year % 100 != 0 【3】 d.year % 400 == 0) if (d.month > 2) sum++; printf("第%d天 ", sum); } 【答案】【1】&d.year, &d.month, &d.day 【2】days[i] 【3】|| 【解析】【1】scanf需要各成员的地址,分别为&d.year、&d.month、&d.day。【2】累加d.month之前各月的天数,days[i]是第i+1月的天数。【3】闰年的判断条件:能被4整除不能被100整除,同时能被400整除也属于闰年,两个条件之间用逻辑||连接。 四、综合应用题 10. 编写一个C程序:定义一个表示学生成绩的结构体类型Student,包含学号num(整型)、姓名name(字符数组)、三门课成绩chinese、math、english(均为浮点型)和平均分average(浮点型)。输入一个学生的学号、姓名和三门课成绩,计算平均分并存入average成员,输出该学生的全部信息。 【答案】#include <stdio.h> struct Student { int num; char name[20]; float chinese, math, english, average; }; main() { struct Student s; printf("请输入学号:"); scanf("%d", &s.num); printf("请输入姓名:"); scanf("%s", s.name); printf("请输入语文、数学、英语成绩:"); scanf("%f%f%f", &s.chinese, &s.math, &s.english); s.average = (s.chinese + s.math + s.english) / 3; printf("学号:%d 姓名:%s ", s.num, s.name); printf("语文:%.1f 数学:%.1f 英语:%.1f ", s.chinese, s.math, s.english); printf("平均分:%.1f ", s.average); } 【解析】程序定义Student结构体类型,包含学号、姓名、三门课成绩和平均分成员。通过scanf逐个输入各成员值(注意name是数组不需取地址)。计算三门课的平均值赋给average成员,最后按格式输出全部信息。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第29练,内容是7.3 结构体变量的引用、初始化与赋值。 《C语言》(第五版)一课一练 第29练 7.3 结构体变量的引用、初始化与赋值 一、单选题 1. 设有定义 struct Stu { int num; char name[20]; float score; } s; 则以下能正确引用s的学号成员的是( ) A. s.num B. s->num C. Stu.num D. struct Stu.num 2. 设有定义 struct Point { int x; int y; } p = {10, 20}; 则p.y的值是( ) A. 10 B. 0 C. 不确定 D. 20 3. 设有定义 struct Point { int x; int y; } p1={1,2}, p2; 执行 p2=p1; p2.x=5; 后,p1.x 的值是( ) A. 5 B. 1 C. 2 D. 0 4. 设有定义 struct Stu { int num; char name[20]; float score; } s; 以下能正确为s输入数据的是( ) A. scanf("%d%s%f", &s.num, s.name, &s.score); B. scanf("%d%s%f", &s.num, &s.name, &s.score); C. scanf("%d%s%f", s.num, s.name, s.score); D. scanf("%d%s%f", &s, &s.name, &s.score); 5. 以下关于结构体变量运算的描述中,正确的是( ) A. 结构体变量之间可以直接进行加减运算 B. 可以使用==运算符比较两个结构体变量是否相等 C. 同类型的结构体变量可以相互赋值 D. 结构体变量可以整体进行输入输出 6. 设有以下定义: struct Date { int y, m, d; }; struct Emp { int id; struct Date hire; } e = {1001, {2020, 8, 15}}; 则以下能正确输出入职年份的是( ) A. printf("%d", e.hire->y); B. printf("%d", e.Date.y); C. printf("%d", hire.y); D. printf("%d", e.hire.y); 7. 以下程序片段的输出结果是 struct T { int a; int b; }; struct T f1, f2 = {3, 4}; f1 = f2; f1.a += f2.b; f2.b = f1.a; printf("%d %d", f1.a, f2.b);( ) A. 7 4 B. 3 4 C. 7 7 D. 4 7 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> struct Score { float chinese; float math; float english; }; main() { struct Score s1 = {80.5, 90.0, 75.5}, s2; s2 = s1; s2.math = 85.0; printf("%.1f %.1f ", s1.math, s2.math); printf("%.1f ", s2.chinese + s2.math + s2.english); } 三、案例分析题 9. 以下程序的功能是定义一个表示日期的结构体,输入一个日期,计算并输出该日期是当年第几天。请填空。 #include <stdio.h> struct Date { int year, month, day; }; main() { struct Date d; int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int i, sum = 0; printf("请输入年 月 日:"); scanf("%d%d%d", 【1】); for (i = 0; i < d.month - 1; i++) sum += 【2】; sum += d.day; if (d.year % 4 == 0 && d.year % 100 != 0 【3】 d.year % 400 == 0) if (d.month > 2) sum++; printf("第%d天 ", sum); } 四、综合应用题 10. 编写一个C程序:定义一个表示学生成绩的结构体类型Student,包含学号num(整型)、姓名name(字符数组)、三门课成绩chinese、math、english(均为浮点型)和平均分average(浮点型)。输入一个学生的学号、姓名和三门课成绩,计算平均分并存入average成员,输出该学生的全部信息。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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