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

资源预览图

第41练 单元9 结构体指针与运算符、链表的节点结构《C语言程序设计》(高教版第2版)一课一练-第1页
1
第41练 单元9 结构体指针与运算符、链表的节点结构《C语言程序设计》(高教版第2版)一课一练-第2页
2

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