第47练 第9章 结构体的定义与使用《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
7页
|
29人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第47练,内容涵盖第9章结构体与联合体的9.1~9.2 结构体的定义与使用。
《C语言程序设计》(电子工业出版社)一课一练 第47练
第9章 结构体与联合体
9.1~9.2 结构体的定义与使用
1、 单项选择题(本题共4小题)
1、下列关于 C 语言结构体类型定义的语法,正确的是( )
A. struct Student {int id; char name [10] }
B. struct { int age; char sex; } Person;
C. struct Teacher { float salary; char subject; };
D. student struct { int num; float score; };
2、已知已定义结构体类型struct Student { int id; char name[20]; };,下列结构体变量的定义方式错误的是( )
A. struct Student s1;
B. struct Student s2 = {102, "LiSi"};
C. struct Student s3, s4;
D. Student s5;
3、已知有嵌套结构体定义:
struct Date { int year; int month; int day; };
struct Stu { int id; struct Date birth; };
struct Stu stu1;
下列选项中能正确引用 stu1 出生月份的是( )
A. stu1.month
B. birth.month
C. stu1.birth.month
D. struct stu1.birth.month
4、关于结构体类型和结构体变量的区别,下列描述正确的是( )
A. 结构体类型是数据模板,不分配内存;结构体变量是具体实例,分配内存
B. 结构体变量是一种数据类型模板,不分配内存
C. 结构体类型和结构体变量都会自动分配内存空间
D. 结构体类型定义后会立即分配内存空间
2、 判断题(本题共3题)
1、定义结构体类型后,系统会自动为该类型分配对应的内存空间。( )
2、结构体成员的名称可以和程序中的普通变量同名,二者不会互相影响。( )
3、任意两个结构体变量都可以直接进行整体赋值操作。( )
3、 填空题(本题共2题)
1、在 C 语言中,定义结构体类型必须使用的关键字是____,它是构造结构体类型的标识。
2、已知结构体变量struct Student s = {101, "ZhaoLiu", 89.5};,引用该变量的成绩成员并将其加 5 的语句是____。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
struct Score {
int math;
int english;
};
int main() {
struct Score s1 = {90, 85};
struct Score s2 = s1;
s2.math = 95;
printf("s1: math=%d, english=%d
", s1.math, s1.english);
printf("s2: math=%d, english=%d
", s2.math, s2.english);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第9章的第47练,内容涵盖第9章结构体与联合体的9.1~9.2 结构体的定义与使用。
《C语言程序设计》(电子工业出版社)一课一练 第47练
第9章 结构体与联合体
9.1~9.2 结构体的定义与使用
1、 单项选择题(本题共4小题)
1、下列关于 C 语言结构体类型定义的语法,正确的是( )
A. struct Student {int id; char name [10] }
B. struct { int age; char sex; } Person;
C. struct Teacher { float salary; char subject; };
D. student struct { int num; float score; };
【答案】C
【解析】结构体定义的大括号后必须加分号(A 错误);B 是直接定义变量的方式,但选项描述的是类型定义,且命名不符合规范;结构体定义必须以struct开头,结构体名在struct之后(D 错误),只有 C 的语法完全正确。
2、已知已定义结构体类型struct Student { int id; char name[20]; };,下列结构体变量的定义方式错误的是( )
A. struct Student s1;
B. struct Student s2 = {102, "LiSi"};
C. struct Student s3, s4;
D. Student s5;
【答案】D
【解析】C 语言中使用自定义结构体类型定义变量时,必须加上struct关键字(除非用typedef重命名),直接写Student s5;不符合语法规则,其他三种定义方式均正确。
3、已知有嵌套结构体定义:
struct Date { int year; int month; int day; };
struct Stu { int id; struct Date birth; };
struct Stu stu1;
下列选项中能正确引用 stu1 出生月份的是( )
A. stu1.month
B. birth.month
C. stu1.birth.month
D. struct stu1.birth.month
【答案】C
【解析】嵌套结构体的成员需要逐层引用,先通过stu1.birth访问到嵌套的 Date 结构体变量,再通过.month访问到月份成员,只有 C 的引用方式符合规则。
4、关于结构体类型和结构体变量的区别,下列描述正确的是( )
A. 结构体类型是数据模板,不分配内存;结构体变量是具体实例,分配内存
B. 结构体变量是一种数据类型模板,不分配内存
C. 结构体类型和结构体变量都会自动分配内存空间
D. 结构体类型定义后会立即分配内存空间
【答案】A
【解析】结构体类型只是自定义的数据格式模板,仅规定成员结构,不分配内存;结构体变量是类型的具体实例,定义变量时才会系统分配内存。B、C、D 表述均错误。
2、 判断题(本题共3题)
1、定义结构体类型后,系统会自动为该类型分配对应的内存空间。( )
【答案】×
【解析】结构体类型仅用于描述数据的组织格式,是一种抽象的模板,不会占用内存;只有定义结构体变量时,系统才会根据类型分配实际的内存空间。
2、结构体成员的名称可以和程序中的普通变量同名,二者不会互相影响。( )
【答案】√
【解析】结构体成员的作用域仅限于所属的结构体变量,与普通变量的作用域相互独立,因此同名时不会产生冲突,各自的使用互不影响。
3、任意两个结构体变量都可以直接进行整体赋值操作。( )
【答案】×
【解析】结构体变量的整体赋值必须满足 “同类型” 的前提,只有两个变量属于完全相同的结构体类型时,才能直接整体赋值,不同类型的结构体变量无法直接赋值。
3、 填空题(本题共2题)
1、在 C 语言中,定义结构体类型必须使用的关键字是____,它是构造结构体类型的标识。
【答案】struct
【解析】struct是 C 语言规定的构造结构体类型的专用关键字,没有它无法完成结构体类型的定义。这是结构体类型区别于基本数据类型的核心标识。
2、已知结构体变量struct Student s = {101, "ZhaoLiu", 89.5};,引用该变量的成绩成员并将其加 5 的语句是____。
【答案】s.score = s.score + 5; 或 s.score += 5;
【解析】结构体成员的引用格式为 “变量名.成员名”,s.score可以像普通 float 变量一样参与运算。该语句通过成员运算符访问成绩成员,完成自增 5 的操作,符合结构体成员的使用规则。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
struct Score {
int math;
int english;
};
int main() {
struct Score s1 = {90, 85};
struct Score s2 = s1;
s2.math = 95;
printf("s1: math=%d, english=%d
", s1.math, s1.english);
printf("s2: math=%d, english=%d
", s2.math, s2.english);
return 0;
}
【答案】
程序运行结果:
s1: math=90, english=85
s2: math=95, english=85
【解析】
结构体变量s2 = s1是同类型变量的整体赋值,系统会将s1的所有成员值拷贝到s2的内存空间中,二者是相互独立的实例。修改s2的 math 成员不会影响s1的成员值,因此输出结果中s1的 math 仍为 90,s2的 math 为修改后的 95,english 成员均为 85。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$