第39练 单元9 结构体类型的声明、结构体变量的定义与成员访问《C语言程序设计》(高教版第2版)一课一练

| 2份
| 9页
| 39人阅读
| 0人下载

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(高教版第2版)一课一练的单元9的第39练,内容涵盖单元9“学生信息管理系统”的数据存储的9.2.1 结构体类型的声明、结构体变量的定义与成员访问。 《C语言程序设计》(高教版第2版)一课一练 第39练 单元9 “学生信息管理系统”的数据存储 9.2.1 结构体类型的声明、结构体变量的定义与成员访问 1、 单项选择题(本题共5小题) 1、下列结构体类型定义的语法正确的是( ) A. struct Student {int num; char name [20];} B. struct Student int num; char name [20]; C. struct {int num; char name [20];} Student; D. struct Student {int num, char name [20];} 【答案】C 【解析】结构体类型定义需用 struct 关键字,成员列表需放在大括号内,每个成员声明需用分号结束,且结构体定义整体需以分号收尾;选项 A 结构体定义末尾缺少分号,语法错误;选项 B 缺少大括号包裹成员列表,不符合结构体定义格式;选项 C 是无名结构体定义,同时直接定义结构体变量 Student,语法完全正确;选项 D 结构体内部成员之间误用逗号分隔,int 和 char 成员声明需用分号分隔,语法错误。 2、下列定义结构体变量的方式错误的是( ) A. // 先定义类型再定义变量 struct Student {int num; char name [20];}; struct Student stu1; B. // 定义类型同时定义变量 struct Student {int num; char name [20];} stu1; C. // 不指定类型名直接定义变量 struct {int num; char name [20];} stu1; struct Student stu2; D. // 嵌套结构体变量定义 struct Date {int year;}; struct Student {struct Date birthday;} stu1; 【答案】C 【解析】选项 C 中不指定结构体类型名直接定义变量后,无法再用struct Student定义其他变量,因为该结构体没有类型名,属于匿名结构体,只能在定义时创建变量。 3、已知struct Date {int year; int month; int day;}; struct Student {char name[20]; struct Date birthday;}; struct Student stu;,下列引用 stu 生日月份的正确写法是( ) A. stu.month B. stu.birthday.month C. struct Date.month D. birthday.month 【答案】B 【解析】嵌套结构体的成员需通过成员访问运算符.逐层访问,先访问外层结构体变量的嵌套成员birthday,再访问该成员的month属性;选项 A 直接访问外层变量的 month 成员,属于语法错误。 4、关于结构体变量初始化,下列写法正确的是( ) A. struct Student {int num; char name [20];}; struct Student stu = {2024001, "张三"}; B. struct Student {int num; char name [20];}; struct Student stu = {"张三", 2024001}; C. struct Date {int year; int month;}; struct Student {struct Date birthday;}; struct Student stu = {2005, 6}; D. struct Student {int num; char name [20];}; struct Student stu = {num:2024001, name:"张三"}; 【答案】A 【解析】结构体初始化需按成员定义的顺序赋值;选项 B 顺序颠倒,选项 C 嵌套结构体未用大括号包裹,选项 D 是 C99 的指定初始化写法,中职 / 高职阶段暂不要求,且题目未说明支持 C99 标准。 5、下列关于结构体类型和结构体变量的说法正确的是( ) A. 结构体类型和结构体变量都占用内存空间 B. 可以直接对结构体类型进行赋值操作 C. 结构体变量占用内存空间,结构体类型仅作为模型不占用空间 D. 结构体类型的成员不能是其他结构体类型 【答案】C 【解析】结构体类型是自定义的复合数据类型,仅描述数据结构,不分配内存;只有定义结构体变量时,系统才会按照类型模型分配内存;结构体成员可以是已定义的其他结构体类型(嵌套结构体)。 2、 判断题(本题共4题) 1、结构体类型定义完成后,系统会立即为其分配内存空间。( ) 【答案】× 【解析】结构体类型是描述数据结构的 “模型”,仅定义规则,不存储数据,只有定义结构体变量时,系统才会根据模型分配对应的内存空间。 2、结构体成员名可以和程序中的普通变量名相同,两者互不干扰。( ) 【答案】√ 【解析】结构体成员属于结构体变量的内部域,和普通变量是不同的内存对象,即使名称相同,也不会互相影响。 3、定义嵌套结构体时,必须先定义被嵌套的结构体类型,再定义外层结构体类型。( ) 【答案】√ 【解析】外层结构体需要识别被嵌套的类型,若先定义外层结构体,编译器无法识别未定义的嵌套类型,会出现编译错误。 4、结构体变量初始化时,必须为所有成员赋初值,否则程序会报错。( ) 【答案】× 【解析】结构体变量可以部分初始化,未赋值的成员会被默认初始化:全局变量初始化为 0,局部变量初始化为随机垃圾值,程序不会报错。 3、 程序填空题(本题共1题) 1、题目描述:以下程序用于定义学生结构体,存储学生的基本信息、生日和两门课程成绩,计算并输出学生的总分,请补充缺失代码; #include <stdio.h> // 定义日期结构体类型,用于存储生日 struct Date { int year; int month; int day; }; // 定义学生结构体类型 struct Student { int num; // 学号 char name[20]; // 姓名 (1)____; // 嵌套日期结构体成员,命名为birthday float score[2]; // 两门课程成绩 }; int main() { // 初始化结构体变量stu struct Student stu = { 2024001, "李小明", (2)____, // 初始化生日为2005年6月15日 {89.5, 92.0} }; float total = 0.0; // 计算两门课程的总分 for(int i=0; i<2; i++) { total += (3)____; } // 输出学生信息和总分 printf("学号:%d ", stu.num); printf("姓名:%s ", stu.name); printf("生日:%d年%d月%d日 ", (4)____, stu.birthday.month, stu.birthday.day); printf("总分:%.1f ", total); return 0; } 【答案】 (1):struct Date birthday (2):{2005, 6, 15} (3):stu.score [i] (4):stu.birthday.year 【解析】(1) 需要定义嵌套的日期结构体成员,类型为已定义的struct Date,成员名为birthday,符合嵌套结构体的定义规则; (2) 嵌套结构体初始化需用大括号包裹成员值,按year、month、day的顺序赋值,保证与struct Date的成员顺序一致; (3) 通过结构体变量stu和成员访问运算符访问成绩数组的第 i 个元素,将每门课程成绩累加到总分变量中; (4) 访问嵌套结构体中的year成员,按照格式要求输出学生的生日年份,完成嵌套成员的逐层访问。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(高教版第2版)一课一练的单元9的第39练,内容涵盖单元9“学生信息管理系统”的数据存储的9.2.1 结构体类型的声明、结构体变量的定义与成员访问。 《C语言程序设计》(高教版第2版)一课一练 第39练 单元9 “学生信息管理系统”的数据存储 9.2.1 结构体类型的声明、结构体变量的定义与成员访问 1、 单项选择题(本题共5小题) 1、下列结构体类型定义的语法正确的是( ) A. struct Student {int num; char name [20];} B. struct Student int num; char name [20]; C. struct {int num; char name [20];} Student; D. struct Student {int num, char name [20];} 2、下列定义结构体变量的方式错误的是( ) A. // 先定义类型再定义变量 struct Student {int num; char name [20];}; struct Student stu1; B. // 定义类型同时定义变量 struct Student {int num; char name [20];} stu1; C. // 不指定类型名直接定义变量 struct {int num; char name [20];} stu1; struct Student stu2; D. // 嵌套结构体变量定义 struct Date {int year;}; struct Student {struct Date birthday;} stu1; 3、已知struct Date {int year; int month; int day;}; struct Student {char name[20]; struct Date birthday;}; struct Student stu;,下列引用 stu 生日月份的正确写法是( ) A. stu.month B. stu.birthday.month C. struct Date.month D. birthday.month 4、关于结构体变量初始化,下列写法正确的是( ) A. struct Student {int num; char name [20];}; struct Student stu = {2024001, "张三"}; B. struct Student {int num; char name [20];}; struct Student stu = {"张三", 2024001}; C. struct Date {int year; int month;}; struct Student {struct Date birthday;}; struct Student stu = {2005, 6}; D. struct Student {int num; char name [20];}; struct Student stu = {num:2024001, name:"张三"}; 5、下列关于结构体类型和结构体变量的说法正确的是( ) A. 结构体类型和结构体变量都占用内存空间 B. 可以直接对结构体类型进行赋值操作 C. 结构体变量占用内存空间,结构体类型仅作为模型不占用空间 D. 结构体类型的成员不能是其他结构体类型 2、 判断题(本题共4题) 1、结构体类型定义完成后,系统会立即为其分配内存空间。( ) 2、结构体成员名可以和程序中的普通变量名相同,两者互不干扰。( ) 3、定义嵌套结构体时,必须先定义被嵌套的结构体类型,再定义外层结构体类型。( ) 4、结构体变量初始化时,必须为所有成员赋初值,否则程序会报错。( ) 3、 程序填空题(本题共1题) 1、题目描述:以下程序用于定义学生结构体,存储学生的基本信息、生日和两门课程成绩,计算并输出学生的总分,请补充缺失代码; #include <stdio.h> // 定义日期结构体类型,用于存储生日 struct Date { int year; int month; int day; }; // 定义学生结构体类型 struct Student { int num; // 学号 char name[20]; // 姓名 (1)____; // 嵌套日期结构体成员,命名为birthday float score[2]; // 两门课程成绩 }; int main() { // 初始化结构体变量stu struct Student stu = { 2024001, "李小明", (2)____, // 初始化生日为2005年6月15日 {89.5, 92.0} }; float total = 0.0; // 计算两门课程的总分 for(int i=0; i<2; i++) { total += (3)____; } // 输出学生信息和总分 printf("学号:%d ", stu.num); printf("姓名:%s ", stu.name); printf("生日:%d年%d月%d日 ", (4)____, stu.birthday.month, stu.birthday.day); printf("总分:%.1f ", total); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第39练 单元9 结构体类型的声明、结构体变量的定义与成员访问《C语言程序设计》(高教版第2版)一课一练-第1页
1
第39练 单元9 结构体类型的声明、结构体变量的定义与成员访问《C语言程序设计》(高教版第2版)一课一练-第2页
2

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