第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);为学生姓名字符数组成员输入字符串。( )
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$