第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,实现数据的快速复制,符合共用体整体赋值的规则。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第43练 单元9 共用体类型《C语言程序设计》(高教版第2版)一课一练-第1页
1
第43练 单元9 共用体类型《C语言程序设计》(高教版第2版)一课一练-第2页
2

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