内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《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。遍历结束后输出最高分学生信息和平均成绩。这是结构体数组的典型应用场景。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$