第49练 第9章 结构体指针《C语言程序设计》(电子工业出版社)一课一练

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

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第49练,内容涵盖第9章结构体与联合体的9.4 结构体指针。 《C语言程序设计》(电子工业出版社)一课一练 第49练 第9章 结构体与联合体 9.4 结构体指针 1、 单项选择题(本题共4小题) 1、已知struct Student s; struct Student *p = &s;,下列引用结构体成员 num 的方式中,正确的是( ) A. p.num B. (*p) num C. (*p).num D. p->num [] 2、若有结构体数组定义 struct Stu stu[3]; 和指针 struct Stu *p;,下列能让指针 p 指向数组第一个元素的正确赋值语句是( ) A. p = stu [0]; B. p = *stu; C. p = &stu; D. p = stu; 3、结构体指针 p 指向结构体数组的首元素后,执行p++操作,指针 p 会( ) A. 移动 1 个字节,指向当前元素的下一个字节 B. 移动一个结构体大小的字节数,指向数组的下一个元素 C. 保持原地址不变 D. 移动 4 个字节,无论结构体大小 4、下列关于结构体指针引用成员的两种方式(*p).num和p->num的关系,描述正确的是( ) A. 完全等价,功能相同 B. 语法不同,功能不同 C. 仅在指向结构体变量时等价,指向数组时不等价 D. 仅在指向数组时等价,指向变量时不等价 2、 判断题(本题共3题) 1、结构体指针 p 指向结构体数组时,执行p++操作,指针会移动 1 个字节的地址。( ) 2、使用结构体指针引用成员时,(*p).name和p->name的功能完全等价,都能正确访问指针指向的结构体成员 name。( ) 3、可以直接将结构体变量赋值给结构体指针,例如struct Student s; struct Student *p = s;是合法的。( ) 3、 填空题(本题共2题) 1、已知结构体指针 p 指向某结构体变量,引用其成员 age 的两种指针形式分别是____和____。 2、若有定义struct Book book[5]; struct Book *p;,要让指针 p 指向结构体数组的第三个元素(下标为 2),正确的赋值语句是____。 4、 读程序写结果题(本题共1题) 1、阅读下面的 C 语言程序,写出程序运行后的输出结果。 【程序代码】 #include <stdio.h> struct Student { int id; char name[10]; }; int main() { struct Student stu = {103, "ZhangSan"}; struct Student *p = &stu; printf("ID: %d, Name: %s ", (*p).id, p->name); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第49练,内容涵盖第9章结构体与联合体的9.4 结构体指针。 《C语言程序设计》(电子工业出版社)一课一练 第49练 第9章 结构体与联合体 9.4 结构体指针 1、 单项选择题(本题共4小题) 1、已知struct Student s; struct Student *p = &s;,下列引用结构体成员 num 的方式中,正确的是( ) A. p.num B. (*p) num C. (*p).num D. p->num [] 【答案】C 【解析】结构体指针引用成员时,(*p)必须加括号(因为成员运算符.优先级高于*),然后用.访问成员,即(*p).num;也可以用p->num,选项中只有 C 格式正确,A、B、D 均存在语法错误。 2、若有结构体数组定义 struct Stu stu[3]; 和指针 struct Stu *p;,下列能让指针 p 指向数组第一个元素的正确赋值语句是( ) A. p = stu [0]; B. p = *stu; C. p = &stu; D. p = stu; 【答案】D 【解析】结构体数组名 stu 代表数组首地址,等价于第一个元素的地址,直接赋值给指针即可指向数组起始位置。 3、结构体指针 p 指向结构体数组的首元素后,执行p++操作,指针 p 会( ) A. 移动 1 个字节,指向当前元素的下一个字节 B. 移动一个结构体大小的字节数,指向数组的下一个元素 C. 保持原地址不变 D. 移动 4 个字节,无论结构体大小 【答案】B 【解析】结构体指针的加减运算会自动根据指向的结构体类型调整步长,p++会让指针移动整个结构体所占的字节数,直接指向数组的下一个元素,这是指针类型匹配的自动特性。 4、下列关于结构体指针引用成员的两种方式(*p).num和p->num的关系,描述正确的是( ) A. 完全等价,功能相同 B. 语法不同,功能不同 C. 仅在指向结构体变量时等价,指向数组时不等价 D. 仅在指向数组时等价,指向变量时不等价 【答案】A 【解析】(*p).num和p->num是结构体指针引用成员的两种等价写法,无论指针指向结构体变量还是结构体数组元素,二者的功能和执行结果完全一致,C 语言编译时会将它们解析为相同的访问逻辑。 2、 判断题(本题共3题) 1、结构体指针 p 指向结构体数组时,执行p++操作,指针会移动 1 个字节的地址。( ) 【答案】× 【解析】结构体指针的步长由指向的结构体类型大小决定,p++会移动整个结构体所占的字节数,而非 1 个字节,目的是直接指向数组的下一个结构体元素。 2、使用结构体指针引用成员时,(*p).name和p->name的功能完全等价,都能正确访问指针指向的结构体成员 name。( ) 【答案】√ 【解析】这两种写法是 C 语言规定的结构体指针访问成员的等价形式,->是(*p).的简化写法,编译后执行逻辑完全相同,均可正确访问成员。 3、可以直接将结构体变量赋值给结构体指针,例如struct Student s; struct Student *p = s;是合法的。( ) 【答案】× 【解析】结构体指针需要存储结构体变量的地址,正确的赋值方式是p = &s;,直接赋值结构体变量 s 会导致类型不匹配,编译报错。 3、 填空题(本题共2题) 1、已知结构体指针 p 指向某结构体变量,引用其成员 age 的两种指针形式分别是____和____。 【答案】(*p).age、p->age 【解析】(*p).age通过解引用指针得到结构体变量,再用成员运算符访问成员;p->age是 C 语言为结构体指针提供的简化访问语法,二者功能完全等价,是结构体指针访问成员的标准写法。 2、若有定义struct Book book[5]; struct Book *p;,要让指针 p 指向结构体数组的第三个元素(下标为 2),正确的赋值语句是____。 【答案】p = &book[2];(或p = book + 2;) 【解析】&book[2]直接获取数组第三个元素的地址,赋值给指针 p 即可让其指向该元素;book + 2通过数组首地址加偏移量(偏移 2 个结构体大小),同样能指向第三个元素,两种写法均符合语法规则。 4、 读程序写结果题(本题共1题) 1、阅读下面的 C 语言程序,写出程序运行后的输出结果。 【程序代码】 #include <stdio.h> struct Student { int id; char name[10]; }; int main() { struct Student stu = {103, "ZhangSan"}; struct Student *p = &stu; printf("ID: %d, Name: %s ", (*p).id, p->name); return 0; } 【答案】 程序运行结果: ID: 103, Name: ZhangSan 【解析】 结构体指针 p 通过&stu指向结构体变量 stu,(*p).id和p->name分别用两种等价方式访问结构体成员,最终输出变量 stu 的 id 和 name 成员值。两种成员访问方式功能一致,均能正确获取指针指向的结构体成员数据。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第49练 第9章 结构体指针《C语言程序设计》(电子工业出版社)一课一练-第1页
1

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