第43练 单元9 共用体类型《C语言程序设计》(高教版第2版)一课一练
|
2份
|
11页
|
24人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元9的第43练,内容涵盖单元9“学生信息管理系统”的数据存储的9.2.5 共用体类型。
《C语言程序设计》(高教版第2版)一课一练 第43练
单元9 “学生信息管理系统”的数据存储
9.2.5 共用体类型
1、 单项选择题(本题共5小题)
1、已知共用体定义如下:
union Score {
int a;
double b;
char c;
};
union Score s;
系统为共用体变量s分配的存储空间至少( )
A. 1 字节
B. 4 字节
C. 8 字节
D. 13 字节
2、下列关于结构体与共用体的区别描述,正确的是( )
A. 结构体和共用体的成员都共享同一段存储空间
B. 结构体成员可以同时存储数据,共用体同一时间只能存储一个成员的数据
C. 共用体变量可以在声明时初始化所有成员,结构体不行
D. 结构体和共用体的内存分配规则完全一致
3、下列共用体变量初始化语句中,合法的是( )
A. union Score s = {90, 95.5, 'A'};
B. union Score s = {.b=88.0};
C. union Score s; s.a=80; s.b=85.0; s.c='B';
D. union Score s = {'A', 90};
4、执行以下代码后,printf输出的score.a值为( )
union Score {
int a;
double b;
char c;
};
union Score score;
score.c='A';
score.a=1;
score.b=2.0;
printf("%d", score.a);
A. 65
B. 1
C. 0
D. 2
5、下列关于共用体变量整体赋值的描述,正确的是( )
A. 不同类型的共用体变量可以直接整体赋值
B. 同类型的共用体变量之间可以直接整体赋值
C. 共用体变量和结构体变量可以互相整体赋值
D. 共用体变量不能进行整体赋值
2、 判断题(本题共4题)
1、共用体的所有数据成员可以同时存储不同的数据,和结构体的存储方式一致。( )
2、系统为共用体变量分配内存时,会按照占用字节数最小的成员来分配存储空间。( )
3、共用体变量在声明时,不能像结构体一样初始化所有成员,只能存储一个成员的数据。( )
4、同类型的共用体变量之间可以直接进行整体赋值,赋值后目标变量的内容与源变量完全一致。( )
3、 程序填空题(本题共1题)
1、题目描述:以下程序用于通过共用体存储学生的三种成绩类型(整型分数、浮点型分数、字符等级),根据用户选择的类型完成成绩存储,并通过同类型共用体整体赋值实现数据复制,需补充缺失代码;
#include <stdio.h>
// (1) 补充共用体定义,包含整型score_int、浮点型score_double、字符型grade
____
int main() {
union StuScore s;
int type;
printf("请选择成绩类型:1-整型分数 2-浮点型分数 3-字符等级
");
scanf("%d", &type);
// 根据类型为共用体成员赋值
switch(type) {
case 1:
printf("请输入整型分数:");
// (2) 补充对整型成员的赋值语句
scanf("%d", ____);
break;
case 2:
printf("请输入浮点型分数:");
// (3) 补充对浮点型成员的赋值语句
scanf("%lf", ____);
break;
case 3:
printf("请输入字符等级:");
// (4) 补充对字符型成员的赋值语句
scanf(" %c", ____);
break;
default:
printf("输入类型错误!
");
return 1;
}
// 输出存储的成绩
printf("你输入的成绩是:");
switch(type) {
case 1: printf("%d
", s.score_int); break;
case 2: printf("%.2lf
", s.score_double); break;
case 3: printf("%c
", s.grade); break;
}
// 同类型共用体变量整体赋值
union StuScore s2;
// (5) 补充整体赋值语句
____;
printf("复制后的成绩:");
switch(type) {
case 1: printf("%d
", s2.score_int); break;
case 2: printf("%.2lf
", s2.score_double); break;
case 3: printf("%c
", s2.grade); break;
}
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元9的第43练,内容涵盖单元9“学生信息管理系统”的数据存储的9.2.5 共用体类型。
《C语言程序设计》(高教版第2版)一课一练 第43练
单元9 “学生信息管理系统”的数据存储
9.2.5 共用体类型
1、 单项选择题(本题共5小题)
1、已知共用体定义如下:
union Score {
int a;
double b;
char c;
};
union Score s;
系统为共用体变量s分配的存储空间至少( )
A. 1 字节
B. 4 字节
C. 8 字节
D. 13 字节
【答案】C
【解析】系统为共用体变量分配内存时,以占用存储空间最大的成员为基准,该共用体中double类型成员b需要 8 字节,因此至少分配 8 字节。
2、下列关于结构体与共用体的区别描述,正确的是( )
A. 结构体和共用体的成员都共享同一段存储空间
B. 结构体成员可以同时存储数据,共用体同一时间只能存储一个成员的数据
C. 共用体变量可以在声明时初始化所有成员,结构体不行
D. 结构体和共用体的内存分配规则完全一致
【答案】B
【解析】结构体每个成员有独立存储空间,可同时存储数据;共用体所有成员共享一段空间,同一时间只能存储一个成员的数据。A、C、D 描述均错误,其中共用体不能初始化所有成员,结构体和共用体内存分配规则差异明显。
3、下列共用体变量初始化语句中,合法的是( )
A. union Score s = {90, 95.5, 'A'};
B. union Score s = {.b=88.0};
C. union Score s; s.a=80; s.b=85.0; s.c='B';
D. union Score s = {'A', 90};
【答案】B
【解析】共用体同一时刻只能存放一个成员的值,定义时只能初始化一个数据;选项 A、D 初始化多个数据,语法不合法;选项 C 是定义后连续赋值,不属于初始化语句;选项 B 采用指定成员初始化,是合法的共用体初始化语法。
4、执行以下代码后,printf输出的score.a值为( )
union Score {
int a;
double b;
char c;
};
union Score score;
score.c='A';
score.a=1;
score.b=2.0;
printf("%d", score.a);
A. 65
B. 1
C. 0
D. 2
【答案】C
【解析】共用体成员共享存储空间,最后赋值的成员b会覆盖之前的内容。double类型的 2.0 存入后,整型成员a读取的是该 8 字节空间的前 4 字节,对应数值为 0。
5、下列关于共用体变量整体赋值的描述,正确的是( )
A. 不同类型的共用体变量可以直接整体赋值
B. 同类型的共用体变量之间可以直接整体赋值
C. 共用体变量和结构体变量可以互相整体赋值
D. 共用体变量不能进行整体赋值
【答案】B
【解析】只有类型完全相同的共用体变量之间才能进行整体赋值,A、C 错误;D 描述与知识点冲突,共用体支持同类型变量整体赋值。
2、 判断题(本题共4题)
1、共用体的所有数据成员可以同时存储不同的数据,和结构体的存储方式一致。( )
【答案】×
【解析】共用体所有成员共享一段存储空间,同一时间段内只能存储一个成员的数据,而结构体每个成员有独立存储空间,可同时存储数据。
2、系统为共用体变量分配内存时,会按照占用字节数最小的成员来分配存储空间。( )
【答案】×
【解析】系统为共用体分配内存的规则是:以占用存储空间最大的成员所需字节数为基准,确保能容纳最大成员的数据。
3、共用体变量在声明时,不能像结构体一样初始化所有成员,只能存储一个成员的数据。( )
【答案】√
【解析】共用体的存储空间是共享的,无法同时存储多个成员的数据,因此声明时不能初始化多个成员,只能为一个成员赋值(或不初始化)。
4、同类型的共用体变量之间可以直接进行整体赋值,赋值后目标变量的内容与源变量完全一致。( )
【答案】√
【解析】同类型共用体变量整体赋值是合法的,赋值后目标变量的存储空间内容与源变量完全相同,符合共用体的语法规则。
3、 程序填空题(本题共1题)
1、题目描述:以下程序用于通过共用体存储学生的三种成绩类型(整型分数、浮点型分数、字符等级),根据用户选择的类型完成成绩存储,并通过同类型共用体整体赋值实现数据复制,需补充缺失代码;
2、程序代码填空:
#include <stdio.h>
// (1) 补充共用体定义,包含整型score_int、浮点型score_double、字符型grade
____
int main() {
union StuScore s;
int type;
printf("请选择成绩类型:1-整型分数 2-浮点型分数 3-字符等级
");
scanf("%d", &type);
// 根据类型为共用体成员赋值
switch(type) {
case 1:
printf("请输入整型分数:");
// (2) 补充对整型成员的赋值语句
scanf("%d", ____);
break;
case 2:
printf("请输入浮点型分数:");
// (3) 补充对浮点型成员的赋值语句
scanf("%lf", ____);
break;
case 3:
printf("请输入字符等级:");
// (4) 补充对字符型成员的赋值语句
scanf(" %c", ____);
break;
default:
printf("输入类型错误!
");
return 1;
}
// 输出存储的成绩
printf("你输入的成绩是:");
switch(type) {
case 1: printf("%d
", s.score_int); break;
case 2: printf("%.2lf
", s.score_double); break;
case 3: printf("%c
", s.grade); break;
}
// 同类型共用体变量整体赋值
union StuScore s2;
// (5) 补充整体赋值语句
____;
printf("复制后的成绩:");
switch(type) {
case 1: printf("%d
", s2.score_int); break;
case 2: printf("%.2lf
", s2.score_double); break;
case 3: printf("%c
", s2.grade); break;
}
return 0;
}
【答案】
(1)union StuScore { int score_int; double score_double; char grade; };
(2)&s.score_int
(3)&s.score_double
(4)&s.grade
(5)s2 = s
【解析】
(1)根据程序功能,定义包含三种成绩类型的共用体,符合共用体定义语法,成员覆盖题目要求的数据类型。
(2)scanf需要传入变量地址,s.score_int是共用体的整型成员,取其地址才能完成赋值操作。
(3)s.score_double是双精度浮点型成员,取地址传入scanf,配合%lf格式符实现浮点型数据赋值。
(4)s.grade是字符型成员,取地址传入scanf,前面加空格是为了跳过输入时的换行符,避免读取无效字符。
(5)同类型共用体变量可以直接整体赋值,将s的存储空间内容复制给s2,实现数据的快速复制,符合共用体整体赋值的规则。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$