第40练 单元9 结构体数组的定义、初始化与排序《C语言程序设计》(高教版第2版)一课一练

| 2份
| 7页
| 23人阅读
| 0人下载

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(高教版第2版)一课一练的单元9的第40练,内容涵盖单元9“学生信息管理系统”的数据存储的9.2.2 结构体数组的定义、初始化与排序。 《C语言程序设计》(高教版第2版)一课一练 第40练 单元9 “学生信息管理系统”的数据存储 9.2.2 结构体数组的定义、初始化与排序 1、 单项选择题(本题共5小题) 1、下列关于结构体数组的描述,正确的是( ) A. 结构体数组的元素可以是不同结构体类型的变量 B. 结构体数组在内存中占用不连续的存储空间 C. 结构体数组必须在定义时完成初始化 D. 结构体数组的每个元素都可以独立访问和赋值 2、下列定义结构体数组的语法,错误的是( ) A. struct Student stu[5]; B. struct Student{int num;}stu[3]; C. struct{int num;}stu[2]; D. struct stu[4] Student; 3、已知struct Score{float math; float english;}; struct Stu{int id; struct Score sc;}s[2];,访问第一个学生的数学成绩,正确写法是( ) A. s.sc.math B. s [0].sc.math C. s [1].math D. sc.s [0].math 4、关于结构体数组初始化,下列写法正确的是( ) A. struct Stu{int num;}s[2]={101,"张三",102,"李四"}; B. struct Stu{int num; char name[10];}s[2]={{101,"张三"},{102,"李四"}}; C. struct Stu s[2]={101,102}; D. struct Stu s[2]={{101},{102,"李四","王五"}}; 5、下列选项中,不能作为结构体成员的是( ) A. 普通变量 B. 数组 C. 已定义的结构体 D. 未定义的结构体 2、 判断题(本题共4题) 1、结构体数组定义完成后,系统会为整个数组分配连续的内存空间。( ) 2、匿名结构体(无类型名)可以用来定义结构体数组。( ) 3、对结构体数组元素赋值时,可以不按照成员定义的顺序进行赋值。( ) 4、结构体数组的长度可以在程序运行过程中随意修改。( ) 3、 程序填空题(本题共1题) 1、题目描述:以下程序用于存储并输出 2 名学生的基本信息(学号、姓名、性别、生日),请补充缺失的代码部分; #include<stdio.h> // (1) 定义日期结构体类型,包含月、日、年三个成员 ____ { int month; int day; int year; }; // (2) 定义学生结构体类型,包含学号、姓名、性别、生日成员 struct Student { int num; char name[20]; char sex; ____; // (2) }; int main() { // (3) 初始化结构体数组,存储2名学生的信息 struct Student stu[2] = { {2024001, "李小明", 'M', {10, 5, 2005}}, ____ // (3) }; // (4) 循环遍历结构体数组,输出每位学生信息 for(int i=0; ____; i++) { // (4) printf("学生%d信息: ", i+1); printf("学号:%d ", stu[i].num); printf("姓名:%s ", stu[i].name); printf("性别:%c ", stu[i].sex); printf("生日:%d年%d月%d日 ", stu[i].birthday.year, stu[i].birthday.month, stu[i].birthday.day); } return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(高教版第2版)一课一练的单元9的第40练,内容涵盖单元9“学生信息管理系统”的数据存储的9.2.2 结构体数组的定义、初始化与排序。 《C语言程序设计》(高教版第2版)一课一练 第40练 单元9 “学生信息管理系统”的数据存储 9.2.2 结构体数组的定义、初始化与排序 1、 单项选择题(本题共5小题) 1、下列关于结构体数组的描述,正确的是( ) A. 结构体数组的元素可以是不同结构体类型的变量 B. 结构体数组在内存中占用不连续的存储空间 C. 结构体数组必须在定义时完成初始化 D. 结构体数组的每个元素都可以独立访问和赋值 【答案】D 【解析】结构体数组的元素必须是同一结构体类型,内存连续,可定义后单独赋值,因此 A、B、C 错误;每个数组元素都是独立的结构体变量,可独立操作,D 正确。 2、下列定义结构体数组的语法,错误的是( ) A. struct Student stu[5]; B. struct Student{int num;}stu[3]; C. struct{int num;}stu[2]; D. struct stu[4] Student; 【答案】D 【解析】结构体数组定义格式为:struct 类型名 数组名[长度];,D 选项语法顺序完全错误,其余均为合法写法。 3、已知struct Score{float math; float english;}; struct Stu{int id; struct Score sc;}s[2];,访问第一个学生的数学成绩,正确写法是( ) A. s.sc.math B. s [0].sc.math C. s [1].math D. sc.s [0].math 【答案】B 【解析】结构体数组 + 嵌套结构体需逐层访问:先取数组元素s[0],再访问嵌套成员sc,最后访问math。 4、关于结构体数组初始化,下列写法正确的是( ) A. struct Stu{int num;}s[2]={101,"张三",102,"李四"}; B. struct Stu{int num; char name[10];}s[2]={{101,"张三"},{102,"李四"}}; C. struct Stu s[2]={101,102}; D. struct Stu s[2]={{101},{102,"李四","王五"}}; 【答案】B 【解析】结构体数组初始化,每个元素必须用大括号包裹,成员赋值顺序与定义一致,A 缺少元素大括号,C、D 格式错误。 5、下列选项中,不能作为结构体成员的是( ) A. 普通变量 B. 数组 C. 已定义的结构体 D. 未定义的结构体 【答案】D 【解析】结构体成员可以是基本类型、数组、已定义的嵌套结构体;未定义的结构体类型无法识别,不能作为成员。 2、 判断题(本题共4题) 1、结构体数组定义完成后,系统会为整个数组分配连续的内存空间。( ) 【答案】√ 【解析】结构体数组属于数组范畴,所有元素在内存中连续存放,系统一次性分配总大小的空间。 2、匿名结构体(无类型名)可以用来定义结构体数组。( ) 【答案】√ 【解析】匿名结构体可在定义类型的同时直接定义数组,仅能使用一次,符合语法规则。 3、对结构体数组元素赋值时,可以不按照成员定义的顺序进行赋值。( ) 【答案】× 【解析】C 语言标准初始化必须按照成员定义顺序赋值,指定初始化属于 C99 标准,中职阶段不使用。 4、结构体数组的长度可以在程序运行过程中随意修改。( ) 【答案】× 【解析】普通结构体数组为静态数组,定义时长度固定,运行期间无法修改长度。 3、 程序填空题(本题共1题) 1、题目描述:以下程序用于存储并输出 2 名学生的基本信息(学号、姓名、性别、生日),请补充缺失的代码部分; #include<stdio.h> // (1) 定义日期结构体类型,包含月、日、年三个成员 ____ { int month; int day; int year; }; // (2) 定义学生结构体类型,包含学号、姓名、性别、生日成员 struct Student { int num; char name[20]; char sex; ____; // (2) }; int main() { // (3) 初始化结构体数组,存储2名学生的信息 struct Student stu[2] = { {2024001, "李小明", 'M', {10, 5, 2005}}, ____ // (3) }; // (4) 循环遍历结构体数组,输出每位学生信息 for(int i=0; ____; i++) { // (4) printf("学生%d信息: ", i+1); printf("学号:%d ", stu[i].num); printf("姓名:%s ", stu[i].name); printf("性别:%c ", stu[i].sex); printf("生日:%d年%d月%d日 ", stu[i].birthday.year, stu[i].birthday.month, stu[i].birthday.day); } return 0; } 【答案】 (1) struct Date; (2) struct Date birthday; (3) {2024002, "张小红", 'F', {3, 12, 2006}}; (4) i<2; 【解析】 (1) 此处需要定义日期结构体类型,根据结构体定义规则,需以 struct 开头后跟结构体名 Date,因此填写struct Date; (2) 学生结构体需要包含一个日期类型的成员 birthday,该成员类型为已定义的struct Date,因此填写struct Date birthday; (3) 结构体数组需初始化第二个学生的信息,需与第一个元素格式一致,填写符合结构体成员类型的学生信息即可; (4) 循环需遍历数组中的 2 个元素,循环条件应为 i 小于数组长度 2,避免数组越界访问,因此填写i<2。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第40练 单元9 结构体数组的定义、初始化与排序《C语言程序设计》(高教版第2版)一课一练-第1页
1

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