第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。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第51练 第9章 联合体《C语言程序设计》(电子工业出版社)一课一练-第1页
1

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。