第7章 第41练 结构体数组《编程语言基础-C语言》(高教版第5版)一课一练

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

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第7章的第41练,内容涵盖第7章 结构体和共用体的7.4 结构体数组。 《编程语言基础-C语言》(高教版第5版)第41练 第7章 结构体和共用体 7.4 结构体数组(解析版) 一、单项选择题(本题共5小题) 1、下列关于结构体数组的说法,正确的是( ) A. 结构体数组中的每个元素必须是同一结构体类型 B. 结构体数组与数值型数组不同,其元素在内存中是分散存放的 C. 结构体数组的数组名代表的是第一个元素的地址,但该地址不能作为函数参数传递 D. 结构体数组的定义与一维数组不同,必须显式指定数组长度 答案:A 解析:结构体数组是数组元素类型为结构体类型的数组,因此每个元素都必须是同一结构体类型。选项B错误,结构体数组的各元素在内存中是连续存放的;选项C错误,结构体数组的数组名代表首元素的地址,可以像普通数组名一样作为函数参数传递;选项D错误,当对全部元素进行初始化时,数组长度可以省略,由编译器根据初值个数自动确定数组元素的个数。 2、若有以下定义和初始化,则 students[1].score 的值是( ) struct student { int num; char name[10]; float score; } students[3] = {{1001, "张三", 85.5}, {1002, "李四", 92.0}}; A. 85.5 B. 92.0 C. 0.0 D. 随机值 答案:B 解析:结构体数组初始化时,提供的初值个数可以小于数组长度,未赋值的元素会自动初始化为0或空字符。数组students长度为3,但只提供了两个结构体常量的初值,students[2]未被初始化。students[0].score为85.5,students[1].score为92.0,students[2].score为0.0。因此选项B正确。 3、若有以下结构体定义和数组,则正确引用数组元素中成员 age 的语句是( ) struct Person { char name[20]; int age; }; struct Person persons[5]; A. persons.age[0] B. persons[0].age C. persons->age[0] D. persons(0).age 答案:B 解析:引用结构体数组成员的语法格式为:数组名[下标].成员名。选项B正确;选项A误将数组名后加成员名;选项C使用了箭头运算符->,该运算符用于指向结构体的指针;选项D使用了圆括号,语法错误。 4、下列选项中,对结构体数组初始化错误的是( ) A. struct Student stu[2] = {{1001, "Tom", 90}, {1002, "Jerry", 85}}; B. struct Student stu[] = {{1001, "Tom", 90}, {1002, "Jerry", 85}}; C. struct Student stu[2] = {1001, "Tom", 90, 1002, "Jerry", 85}; D. struct Student stu[2] = {1001, "Tom", 90, 1002}; 答案:D 解析:对结构体数组进行初始化时,可以将每个学生的信息用一对花括号括起来,也可以将所有初值依次列出。但若提供的初值个数不是结构体成员个数的整数倍,则编译器无法正确划分元素边界,会导致初始化错误。选项D中,第一个元素需要3个初值(num、name、score),但提供的4个初值无法正确对应各成员。选项A和B正确,C中按顺序依次列出所有初值也是合法的。 5、若有以下程序段,则输出结果是( ) #include <stdio.h> struct { int x; int y; } s[2] = {{1, 3}, {2, 7}}; int main() { printf("%d", s[0].x * s[1].x); return 0; } A. 1 B. 2 C. 3 D. 6 答案:B 解析:s[0].x的值为1,s[1].x的值为2,两者相乘的结果为2。这是结构体数组初始化和成员引用的基础应用。需要注意的是,初始化列表{{1, 3}, {2, 7}}中,每个结构体常量分别用花括号括起来,s[0]的x=1、y=3,s[1]的x=2、y=7。 二、判断题(本题共5小题) 1、结构体数组中的每个元素都是一个结构体类型的变量,各元素在内存中是连续存放的。( ) 答案:√ 解析:结构体数组的各元素在内存中是连续存放的,与普通数组的内存存放方式相同,这保证了可以通过下标快速访问任意元素。 2、对结构体数组进行初始化时,如果提供了全部元素的初值,则可以省略数组长度,系统会根据初值个数自动确定数组元素的个数。( ) 答案:√ 解析:当对结构体数组的全部元素进行初始化时,数组长度可以省略。编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。 3、结构体数组可以像普通数组一样整体作为函数参数传递,但形参只能使用结构体数组形式,不能使用指针形式。( ) 答案:× 解析:结构体数组作为函数参数传递时,传递的是数组的首地址(传址)。形参可以使用数组形式(如void fun(struct Student s[], int n)),也可以使用指针形式(如void fun(struct Student *s, int n)),两者在编译时被视为等价。因此说法错误。 4、以下代码段中,第7行访问class[0].group是正确的成员引用。( ) struct { char *name; int num; char group; } class[5]; int main() { class[0].group = 'B'; return 0; } 答案:√ 解析:结构体数组元素中成员的引用格式为数组名[下标].成员名。class[0].group语法正确,可以对结构体数组中第一个元素的group成员进行赋值操作。因此判断正确。 5、定义一个包含5个学生的结构体数组后,可以通过scanf("%s", students[0].name);为学生姓名字符数组成员输入字符串。( ) 答案:√ 解析:对结构体数组成员进行输入操作时,与普通结构体变量的输入方式相同,需要逐一对各成员进行输入。students[0].name是一个字符数组名,代表该数组的首地址,因此可以作为scanf函数中%s格式符的参数,用于接收字符串。注意字符数组名前不需要加取地址符&,这与普通变量不同。因此判断正确。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第7章的第41练,内容涵盖第7章 结构体和共用体的7.4 结构体数组。 《编程语言基础-C语言》(高教版第5版)第41练 第7章 结构体和共用体 7.4 结构体数组(原卷版) 一、单项选择题(本题共5小题) 1、下列关于结构体数组的说法,正确的是( ) A. 结构体数组中的每个元素必须是同一结构体类型 B. 结构体数组与数值型数组不同,其元素在内存中是分散存放的 C. 结构体数组的数组名代表的是第一个元素的地址,但该地址不能作为函数参数传递 D. 结构体数组的定义与一维数组不同,必须显式指定数组长度 2、若有以下定义和初始化,则 students[1].score 的值是( ) struct Student { int num; char name[10]; float score; } students[3] = {{1001, "张三", 85.5}, {1002, "李四", 92.0}}; A. 85.5 B. 92.0 C. 0.0 D. 随机值 3、若有以下结构体定义和数组,则正确引用数组元素中成员 age 的语句是( ) struct Person { char name[20]; int age; }; struct Person persons[5]; A. persons.age[0] B. persons[0].age C. persons->age[0] D. persons(0).age 4、下列选项中,对结构体数组初始化错误的是( ) A. struct Student stu[2] = {{1001, "Tom", 90}, {1002, "Jerry", 85}}; B. struct Student stu[] = {{1001, "Tom", 90}, {1002, "Jerry", 85}}; C. struct Student stu[2] = {1001, "Tom", 90, 1002, "Jerry", 85}; D. struct Student stu[2] = {1001, "Tom", 90, 1002}; 5、若有以下程序段,则输出结果是( ) #include <stdio.h> struct { int x; int y; } s[2] = {{1, 3}, {2, 7}}; int main() { printf("%d", s[0].x * s[1].x); return 0; } A. 1 B. 2 C. 3 D. 6 二、判断题(本题共5小题) 1、结构体数组中的每个元素都是一个结构体类型的变量,各元素在内存中是连续存放的。( ) 2、对结构体数组进行初始化时,如果提供了全部元素的初值,则可以省略数组长度,系统会根据初值个数自动确定数组元素的个数。( ) 3、结构体数组可以像普通数组一样整体作为函数参数传递,但形参只能使用结构体数组形式,不能使用指针形式。( ) 4、以下代码段中,第7行访问class[0].group是正确的成员引用。( ) struct { char *name; int num; char group; } class[5]; int main() { class[0].group = 'B'; return 0; } 5、定义一个包含5个学生的结构体数组后,可以通过scanf("%s", students[0].name);为学生姓名字符数组成员输入字符串。( ) 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第7章 第41练 结构体数组《编程语言基础-C语言》(高教版第5版)一课一练-第1页
1

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