第51练 第9章 联合体《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
7页
|
29人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第51练,内容涵盖第9章结构体与联合体的9.6 联合体。
《C语言程序设计》(电子工业出版社)一课一练 第51练
第9章 结构体与联合体
9.6 联合体
1、 单项选择题(本题共4小题)
1、已知联合体定义:union Data { int i; char c; float f; } a;,在 32 位系统中,变量 a 所占的内存字节数是( )
A. 1
B. 4
C. 6
D. 7
2、下列关于联合体变量成员访问的操作,合法的是( )
A. union Data {int num;} d; d = 100;
B. union Data {int num; char ch;} d; d.num = 200; printf ("% d", d);
C. union Data {int num; char ch;} d; d.ch = 'A'; printf ("% c", d.ch);
D. union Data {int num;} d; scanf ("% d", d);
3、联合体与结构体的核心区别是( )
A. 定义时使用的关键字不同
B. 联合体不能嵌套,结构体可以嵌套
C. 联合体只能有一个成员,结构体可以有多个成员
D. 联合体成员共享一段内存,结构体成员各自占用独立内存
4、已知union Test { int x; char y; } t;,执行t.x = 100; t.y = 'B';后,下列说法正确的是( )
A. t.x 的值仍然是 100
B. t.x 和 t.y 的值同时有效,分别为 100 和 'B'
C. t.x 的值被覆盖,当前有效的成员是 t.y
D. 编译器会报错,不能连续给联合体成员赋值
2、 判断题(本题共3题)
1、联合体变量所占的内存大小是其所有成员内存大小的总和。( )
2、联合体变量在同一时刻只能有一个成员的值是有效的。( )
3、可以直接将一个联合体变量整体赋值给另一个同类型的联合体变量。( )
3、 填空题(本题共2题)
1、联合体变量的内存分配规则是:所占内存长度等于____的字节数,所有成员共享这段内存空间。
2、C 语言中,访问联合体变量成员的语法格式为____,该格式与结构体成员的访问格式完全一致。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
int main() {
union Share {
int num;
char ch;
} s;
s.num = 200;
s.ch = 'A'; // 'A'的ASCII码为65
printf("%d
", s.num);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第51练,内容涵盖第9章结构体与联合体的9.6 联合体。
《C语言程序设计》(电子工业出版社)一课一练 第51练
第9章 结构体与联合体
9.6 联合体
1、 单项选择题(本题共4小题)
1、已知联合体定义:union Data { int i; char c; float f; } a;,在 32 位系统中,变量 a 所占的内存字节数是( )
A. 1
B. 4
C. 6
D. 7
【答案】B
【解析】联合体的内存大小由其最长成员决定,32 位系统中 float 类型占 4 字节,是三个成员中最长的,因此变量 a 占用 4 字节内存,其他选项不符合联合体内存分配规则。
2、下列关于联合体变量成员访问的操作,合法的是( )
A. union Data {int num;} d; d = 100;
B. union Data {int num; char ch;} d; d.num = 200; printf ("% d", d);
C. union Data {int num; char ch;} d; d.ch = 'A'; printf ("% c", d.ch);
D. union Data {int num;} d; scanf ("% d", d);
【答案】C
【解析】联合体变量不能直接整体赋值或输出,只能访问单个成员;A 直接给变量赋值、B 直接输出变量、Dscanf 未取地址均不合法,只有 C 通过成员名访问并输出字符的操作符合语法规则。
3、联合体与结构体的核心区别是( )
A. 定义时使用的关键字不同
B. 联合体不能嵌套,结构体可以嵌套
C. 联合体只能有一个成员,结构体可以有多个成员
D. 联合体成员共享一段内存,结构体成员各自占用独立内存
【答案】D
【解析】两者的核心差异在于内存分配方式:联合体所有成员共享同一段内存,同一时刻只有一个成员有效;结构体每个成员占用独立的内存空间,所有成员可同时存在,其他选项不是核心区别。
4、已知union Test { int x; char y; } t;,执行t.x = 100; t.y = 'B';后,下列说法正确的是( )
A. t.x 的值仍然是 100
B. t.x 和 t.y 的值同时有效,分别为 100 和 'B'
C. t.x 的值被覆盖,当前有效的成员是 t.y
D. 编译器会报错,不能连续给联合体成员赋值
【答案】C
【解析】联合体成员共享内存,新成员赋值会覆盖原有成员的内存内容,同一时刻只有最后赋值的成员有效,因此赋值 t.y 后,t.x 的值被覆盖,当前有效成员为 t.y,该操作不会报错。
2、 判断题(本题共3题)
1、联合体变量所占的内存大小是其所有成员内存大小的总和。( )
【答案】×
【解析】联合体采用共享内存的存储方式,其内存大小等于最长单个成员的字节数,而非所有成员内存大小的总和,这是区别于结构体的关键特征。
2、联合体变量在同一时刻只能有一个成员的值是有效的。( )
【答案】√
【解析】由于所有成员共享同一段内存,新成员赋值会覆盖原有成员的内存内容,因此同一时刻只有最后被赋值的成员值是有效的。
3、可以直接将一个联合体变量整体赋值给另一个同类型的联合体变量。( )
【答案】√
【解析】根据 C 语言联合体的使用规则,可以直接将一个联合体变量整体赋值给另一个同类型的联合体变量。
3、 填空题(本题共2题)
1、联合体变量的内存分配规则是:所占内存长度等于____的字节数,所有成员共享这段内存空间。
【答案】最长成员
【解析】联合体采用共享内存的存储模式,为了容纳最长的成员数据,其内存大小由长度最大的成员决定。这一规则保证了任何成员都能完整存储在联合体的内存空间中。
2、C 语言中,访问联合体变量成员的语法格式为____,该格式与结构体成员的访问格式完全一致。
【答案】联合体变量名。成员名
【解析】联合体成员不能通过变量名直接访问,必须通过成员运算符 “.” 指定具体成员。这种访问方式明确了要操作的共享内存中的具体数据部分,避免了歧义。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
int main() {
union Share {
int num;
char ch;
} s;
s.num = 200;
s.ch = 'A'; // 'A'的ASCII码为65
printf("%d
", s.num);
return 0;
}
【答案】
程序运行结果:
65
【解析】
联合体变量 s 的成员 num 和 ch 共享同一段内存,执行s.ch = 'A'时,会覆盖 num 的低字节内容。此时 num 的内存内容被替换为字符 'A' 的 ASCII 码值 65,因此输出结果为 65。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$