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