第41练 单元9 结构体指针与运算符、链表的节点结构《C语言程序设计》(高教版第2版)一课一练
|
2份
|
9页
|
29人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元9的第41练,内容涵盖单元9“学生信息管理系统”的数据存储9.2.3、9.2.4 结构体指针与->运算符、链表的节点结构。
《C语言程序设计》(高教版第2版)一课一练 第41练
单元9 “学生信息管理系统”的数据存储
9.2.3结构体指针与->运算符、链表的节点结构
1、 单项选择题(本题共5小题)
1、下列赋值语句正确的是( )
struct Student {
char name[20];
int age;
};
struct Student stu, *p;
A. p = stu;
B. p = &stu.age;
C. p = &stu;
D. *p = stu;
【答案】C
【解析】结构体指针变量 p 需要存放结构体变量的地址,&stu 是 stu 的地址,符合赋值要求;A 选项错误,stu 是结构体变量,不是地址,不能直接赋值给指针 p;B 选项错误,&stu.age 是成员 age 的地址,类型是 int,和 p 的 struct Student * 类型不匹配;D 选项错误,*p 是指针指向的结构体变量,此时 p 未初始化,属于野指针,不能直接赋值。
2、若有结构体指针定义 struct Student *p;,访问结构体成员 age 的正确写法是( )
A. p.age
B. p->age
C. (*p)->age
D. &p.age
【答案】B
【解析】结构体指针访问成员必须使用 **->运算符 **;A 是结构体变量访问方式;C 语法错误;D 是取地址操作,不能访问成员。
3、若有结构体数组定义:struct Student class[5];,则下列关于结构体指针指向数组元素的写法正确的是( )
A. struct Student *p = class [0];
B. struct Student *p = &class;
C. struct Student *p = class;
D. struct Student p = &class [5];
【答案】C
【解析】结构体数组名 class 代表数组第一个元素的地址,类型为 struct Student *,可以直接赋值给同类型的结构体指针 p;A 错误,class[0] 是结构体变量,不是地址;B 错误,&class 是整个数组的地址,类型为 struct Student(*)[5],与指针类型不匹配;D 错误,class[5] 下标越界,且类型不匹配。
4、使用结构体指针访问结构体成员时,不能使用的运算符是( )
A. .
B. ->
C. * 结合.
D. &
【答案】D
【解析】访问结构体成员可以用:指针 -> 成员,或者 (* 指针). 成员,也可以直接用结构体变量。成员;& 是取地址运算符,不能用来访问成员。
5、下列关于结构体指针的使用场景,错误的是( )
A. 用结构体指针遍历结构体数组
B. 用结构体指针作为函数参数传递结构体数据
C. 用结构体指针指向不同类型的结构体变量
D. 用结构体指针实现结构体数组的排序
【答案】C
【解析】结构体指针的类型必须和指向的结构体变量类型一致,不能指向不同类型的结构体;A、B、D 都是结构体指针的常见合理使用场景。
2、 判断题(本题共4题)
1、结构体指针变量可以存放任意结构体变量的地址,无论结构体类型是否相同。( )
【答案】×
【解析】结构体指针变量的类型必须与其指向的结构体变量类型完全一致,否则会出现类型不匹配的错误,无法正确访问结构体成员。
2、结构体指针是结构体变量的起始地址,等同于结构体变量第一个成员的地址。( )
【答案】√
【解析】结构体在内存中是连续存放的,结构体变量的起始地址就是其第一个成员的地址,因此结构体指针的值与第一个成员的地址相同。
3、若 p 是指向结构体变量 stu 的指针,则p->age和(*p).age的含义完全相同,都是访问 stu 的 age 成员。( )
【答案】√
【解析】->是结构体指针访问成员的专用运算符,(*p).age是先通过*p获取指针指向的结构体变量,再用.访问成员,两种写法功能等价。
4、结构体数组的数组名是一个指向整个数组的指针,不能直接赋值给指向单个结构体元素的指针变量。( )
【答案】×
【解析】结构体数组名代表数组第一个元素的地址,类型是指向单个结构体元素的指针,可以直接赋值给同类型的结构体指针变量,例如struct Student *p = class;是合法的。
3、 程序填空题(本题共1题)
1、题目描述:以下程序用于存储班级 5 个学生的姓名和年龄信息,使用结构体指针实现按年龄升序排序并打印学生信息,需补充缺失代码;
#include <stdio.h>
#include <string.h>
// (1) 补充结构体定义
____
int main() {
struct Student class[5] = {{"张三", 18}, {"李四", 20}, {"王五", 19}, {"赵六", 17}, {"孙七", 21}};
struct Student *p = class, *temp;
int i, j;
// 按年龄升序排序
for (i = 0; i < 4; i++) {
for (j = i + 1; j < 5; j++) {
// (2) 补充结构体指针访问年龄成员的判断条件
if (____ > ____) {
// (3) 补充结构体变量交换的代码
____ = class[i];
class[i] = class[j];
class[j] = ____;
}
}
}
// 打印排序后的学生信息
printf("排序后的班级学生信息:
");
for (; p < class + 5; ____) {
// (4) 补充使用结构体指针打印成员的语句
printf("姓名:%s,年龄:%d
", ____, ____);
}
return 0;
}
【答案】
(1) struct Student { char name[20]; int age; };
(2) (class+i)->age 、 (class+j)->age(或class[i].age、class[j].age,或p[i].age、p[j].age)
(3) *temp 、 *temp
(4) p++ 、 p->name 、 p->age
【解析】
(1) 此处需要定义存储学生信息的结构体,包含姓名(字符数组)和年龄(整型)两个成员,符合题目中存储学生信息的需求。
(2) 排序的判断条件是比较两个学生的年龄,使用结构体指针访问数组元素的 age 成员,(class+i)是指向第 i 个元素的指针,通过->age访问年龄;也可以直接用数组下标访问成员,两种方式均合法。
(3) temp 是结构体指针,不能直接存放结构体数据,必须使用 ***temp解引用 ** 后才能存储结构体内容;先将class[i]存入*temp,再交换class[i]和class[j],最后把*temp的值赋给class[j],完成两个学生信息的交换。
(4) 循环遍历结构体数组时,p 初始指向第一个元素,每次循环后p++使其指向下一个元素;打印时通过p->name和p->age分别访问指针指向的学生的姓名和年龄成员。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元9的第41练,内容涵盖单元9“学生信息管理系统”的数据存储9.2.3、9.2.4 结构体指针与->运算符、链表的节点结构。
《C语言程序设计》(高教版第2版)一课一练 第41练
单元9 “学生信息管理系统”的数据存储
9.2.3结构体指针与->运算符、链表的节点结构
1、 单项选择题(本题共5小题)
1、下列赋值语句正确的是( )
struct Student {
char name[20];
int age;
};
struct Student stu, *p;
A. p = stu;
B. p = &stu.age;
C. p = &stu;
D. *p = stu;
2、若有结构体指针定义 struct Student *p;,访问结构体成员 age 的正确写法是( )
A. p.age
B. p->age
C. (*p)->age
D. &p.age
3、若有结构体数组定义:struct Student class[5];,则下列关于结构体指针指向数组元素的写法正确的是( )
A. struct Student *p = class [0];
B. struct Student *p = &class;
C. struct Student *p = class;
D. struct Student p = &class [5];
4、使用结构体指针访问结构体成员时,不能使用的运算符是( )
A. .
B. ->
C. * 结合.
D. &
5、下列关于结构体指针的使用场景,错误的是( )
A. 用结构体指针遍历结构体数组
B. 用结构体指针作为函数参数传递结构体数据
C. 用结构体指针指向不同类型的结构体变量
D. 用结构体指针实现结构体数组的排序
2、 判断题(本题共4题)
1、结构体指针变量可以存放任意结构体变量的地址,无论结构体类型是否相同。( )
2、结构体指针是结构体变量的起始地址,等同于结构体变量第一个成员的地址。( )
3、若 p 是指向结构体变量 stu 的指针,则p->age和(*p).age的含义完全相同,都是访问 stu 的 age 成员。( )
4、结构体数组的数组名是一个指向整个数组的指针,不能直接赋值给指向单个结构体元素的指针变量。( )
3、 程序填空题(本题共1题)
1、题目描述:以下程序用于存储班级 5 个学生的姓名和年龄信息,使用结构体指针实现按年龄升序排序并打印学生信息,需补充缺失代码;
#include <stdio.h>
#include <string.h>
// (1) 补充结构体定义
____
int main() {
struct Student class[5] = {{"张三", 18}, {"李四", 20}, {"王五", 19}, {"赵六", 17}, {"孙七", 21}};
struct Student *p = class, *temp;
int i, j;
// 按年龄升序排序
for (i = 0; i < 4; i++) {
for (j = i + 1; j < 5; j++) {
// (2) 补充结构体指针访问年龄成员的判断条件
if (____ > ____) {
// (3) 补充结构体变量交换的代码
____ = class[i];
class[i] = class[j];
class[j] = ____;
}
}
}
// 打印排序后的学生信息
printf("排序后的班级学生信息:
");
for (; p < class + 5; ____) {
// (4) 补充使用结构体指针打印成员的语句
printf("姓名:%s,年龄:%d
", ____, ____);
}
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$