内容正文:
《编程语言基础-C语言》高等教育出版社(第5版)
第七章 结构体和共用体 章节过关卷(解析版)
考试时间:90分钟 满分:100分
姓名 班级 学号
一、单项选择题(本题共25小题,每题2分,共50分)
1、关于结构体类型变量的定义,以下写法正确的是( )
A. struct stu { int a; char b; } s;
B. struct stu { int a; char b; }; struct stu s;
C. struct { int a; char b; } s;
D. 以上都正确
【答案】D
【解析】A是在定义结构体类型的同时定义变量;B是先定义类型再定义变量;C是定义无名结构体类型的同时定义变量。三种写法在C语言中都是合法的。
2、以下关于结构体变量的说法,正确的是( )
A. 结构体变量可以作为一个整体进行输入和输出
B. 结构体变量不能作为函数参数传递
C. 两个相同类型的结构体变量之间可以直接赋值
D. 结构体变量中各成员在内存中占用同一段连续空间
【答案】C
【解析】C语言新标准允许将一个结构体变量直接赋值给另一个相同类型的结构体变量;A错误,结构体变量不能整体输入输出,只能对成员进行输入输出;B错误,结构体变量可以作为函数参数传递(值传递);D错误,结构体各成员占用不同的存储空间。
3、若有以下定义,则能正确引用结构体变量中成员age的是( )
struct student {
char name[20];
int age;
float score;
} stu;
A. student.age
B. struct.age
C. stu.age
D. stu->age
【答案】C
【解析】用成员运算符“.”引用成员,格式为“结构体变量名.成员名”。A和B是类型名错误;D是箭头运算符,用于结构体指针。
4、以下程序的输出结果是( )
struct data {
int a;
char b;
};
main() {
struct data x = {10, A};
struct data y;
y = x;
printf("%d,%c", y.a, y.b);
}
A. 10,A
B. 10,随机值
C. 编译错误
D. 运行时错误
【答案】A
【解析】相同类型的结构体变量之间可以直接赋值,将x的所有成员值复制给y,因此y.a=10,y.b=A。
5、以下关于结构体数组的说法,正确的是( )
A. 结构体数组的元素必须是同一结构体类型
B. 结构体数组的每个元素只能包含一个成员
C. 结构体数组不能进行初始化
D. 结构体数组在内存中不连续存储
【答案】A
【解析】结构体数组的每个元素都是同一结构体类型,每个元素包含该结构体的所有成员;B错误;C错误,结构体数组可以初始化;D错误,结构体数组在内存中连续存储。
6、若有以下定义,则sizeof(stu)的值是( )
struct student {
char name[10];
int age;
float score;
} stu;
A. 15
B. 16
C. 18
D. 20
【答案】D
【解析】name数组占10字节,填充2个字节,对齐int型。age占4字节,score占4字节,共20字节。结构体变量所占内存长度是各成员占的内存长度之和(考虑内存对齐时)。
7、若有以下定义,则能正确输出结构体数组第二个元素的score成员的是( )
struct stu {
int id;
float score;
} s[3] = {{1, 85.5}, {2, 90.0}, {3, 78.5}};
A. printf("%f", s.score[1]);
B. printf("%f", s[2].score);
C. printf("%f", s[1].score);
D. printf("%f", s.score[2]);
【答案】C
【解析】结构体数组的下标从0开始,第二个元素是s[1],score成员用“.”引用。s[1].score即90.0。
8、以下程序的输出结果是( )
struct example {
int a;
int b;
};
main() {
struct example arr[3] = {{1, 2}, {3, 4}, {5, 6}};
printf("%d", arr[1].a + arr[2].b);
}
A. 7
B. 8
C. 9
D. 10
【答案】C
【解析】arr[1].a是第二个元素的a成员,值为3;arr[2].b是第三个元素的b成员,值为6;3+6=9。
9、关于结构体指针,以下说法正确的是( )
A. 结构体指针只能指向结构体数组
B. 通过结构体指针访问成员只能用“.”运算符
C. 结构体指针可以指向结构体变量
D. 结构体指针不能作为函数参数
【答案】C
【解析】结构体指针可以指向结构体变量或结构体数组元素;通过指针访问成员可以用“->”或“(*p).成员名”;结构体指针可以作为函数参数实现地址传递。
10、若有以下定义,则该共用体变量所占内存字节数是( )(假设int占4字节,char占1字节)
union data {
int i;
char c;
float f;
} u;
A. 1
B. 4
C. 9
D. 12
【答案】B
【解析】共用体变量所占的内存长度等于最长的成员的长度。int占4字节,char占1字节,float占4字节,最长为4字节,因此u占4字节。
11、以下程序的输出结果是( )
struct value {
int i;
char c;
};
main() {
struct value v;
v.i = 65;
printf("%c", v.c);
}
A. A
B. 65
C. 随机值
D. 编译错误
【答案】C
【解析】给v.i赋值65,但输出的是v.c,所以输出为随机值。
12、关于结构体变量成员的引用,以下写法错误的是( )
A. stu.age
B. p->age(其中p为指向结构体的指针)
C. (*p).age(其中p为指向结构体的指针)
D. p.age(其中p为指向结构体的指针)
【答案】D
【解析】结构体指针引用成员有两种方式:p->age或(*p).age。D中p.age是错误写法,p是指针变量,不是结构体变量。
13、若有以下定义,则引用结构体变量中成员的正确方式是( )
struct student {
char name[20];
int age;
} stu, *p = &stu;
A. p.name
B. *p.name
C. (*p).name
D. stu->name
【答案】C
【解析】通过结构体指针引用成员的方式:(*p).name或p->name。A中p是指针,不能用“.”;B中*p.name的“.”优先级高于“*”,相当于*(p.name),p.name错误;D中stu是结构体变量,不能用“->”。
14、以下程序的输出结果是( )
struct node {
int x;
int y;
} s[2] = {{3, 4}, {5, 6}};
main() {
struct node *p = s;
printf("%d", (++p)->x);
}
A. 3
B. 4
C. 5
D. 6
【答案】C
【解析】p指向s[0],++p使p指向s[1],p->x取s[1].x的值为5。
15、以下关于结构体类型定义的叙述,正确的是( )
A. 结构体类型定义中不能包含其他结构体类型
B. 结构体类型定义中可以包含指向自身的指针
C. 结构体类型定义中不能包含数组类型
D. 结构体类型定义中不能包含指针类型
【答案】B
【解析】结构体的成员可以是数值类型、字符类型、数组类型,也可以是指针类型,甚至可以是正在定义的结构体类型指针(用于构建链表等)。A、C、D错误。
16、若有以下定义,则sizeof(stu)的值是( )
struct test {
char c;
int i;
char d;
} stu;
A. 6
B. 8
C. 9
D. 12
【答案】D
【解析】考虑内存对齐,char c占1字节,填充3字节使int i对齐到4字节边界,int i占4字节,char d占1字节,再填充3字节使结构体总大小为最大成员大小的整数倍(4的倍数),共12字节。
17、以下程序的输出结果是( )
struct student {
char name[10];
int age;
};
main() {
struct student s = {"Tom", 18};
struct student *p = &s;
p->age = 20;
printf("%d", s.age);
}
A. 18
B. 20
C. 0
D. 随机值
【答案】B
【解析】指针p指向s,通过p -> age修改age成员,等同于修改 s.age,因此s.age变为20。
18、若有以下定义,则能正确对结构体数组进行初始化的是( )
A. struct stu s[2] = {80, 85, 90, 95};
B. struct stu s[2] = {{80, 85}, {90, 95}};
C. struct stu s[2] = {80, 85};
D. struct stu s[2] = 80;
【答案】B
【解析】结构体数组初始化时,通常将每个结构体元素用一对花括号包起来。B是标准写法;A和C只提供了成员值,但没有指明每个结构体的边界;D语法错误。
19、以下程序的输出结果是( )
struct score {
int math;
int eng;
};
void fun(struct score *p) {
p->math += 10;
p->eng += 5;
}
int main() {
struct score s = {80, 70};
fun(&s);
printf("%d,%d", s.math, s.eng);
return 0;
}
A. 80,70
B. 90,75
C. 80,75
D. 90,70
【答案】B
【解析】通过指针传递结构体变量的地址,在函数内部通过指针修改成员,会直接影响实参,因此s.math变为90,s.eng变为75。
20、以下关于结构体变量作为函数参数的叙述,正确的是( )
A. 结构体变量作为实参时,传递的是结构体变量的地址
B. 结构体变量作为实参时,采取值传递方式
C. 结构体变量作为实参时,形参必须是结构体指针类型
D. 结构体变量不能作为函数参数
【答案】B
【解析】用结构体变量作实参时,采取的是“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。形参也必须是同类型的结构体变量。A错误;C错误,形参也可以是结构体变量;D错误。
21、若有以下定义,则结构体数组s中占用内存总字节数是( )(假设int占4字节,char占1字节)
struct person {
int id;
char name[8];
int age;
} s[3];
A. 15
B. 48
C. 45
D. 60
【答案】B
【解析】每个结构体变量占4+8+4=16字节,3个元素共48字节。
22、以下程序的输出结果是( )
struct teacher {
int id;
char name[20];
} t1 = {1001, "Zhang"}, t2;
main() {
t2 = t1;
t2.id = 1002;
printf("%d", t1.id);
}
A. 1001
B. 1002
C. 0
D. 随机值
【答案】A
【解析】t2 = t1将t1的值复制给t2,之后修改t2.id不影响t1,因此t1.id仍为1001。
23、以下程序的功能是交换两个结构体变量的值,划线处应填( )
struct point {
int x;
int y;
};
void swap(struct point *p1, struct point *p2) {
struct point temp;
temp = *p1;
________;
*p2 = temp;
}
A. p1 = p2
B. *p1 = *p2
C. p1 = *p2
D. *p1 = p2
【答案】B
【解析】通过指针交换两个结构体变量的值,先将p1指向的内容赋给temp,再将p2指向的内容赋给p1,最后将temp赋给p2。*p1 = *p2实现内容复制。
24、以下程序的功能是计算学生平均分,划线处应填( )
struct student {
int id;
int score;
} stu[5] = {{1, 85}, {2, 90}, {3, 78}, {4, 88}, {5, 92}};
main() {
int sum = 0, i;
for (i = 0; i < 5; i++)
________;
printf("%.2f", sum / 5.0);
}
A. sum += stu.score[i];
B. sum += stu[i].score;
C. sum += stu[i]->score;
D. sum += stu.score;
【答案】B
【解析】结构体数组元素的成员引用方式为数组名[下标].成员名。
25、以下程序的输出结果是( )
struct stu {
int a;
int b;
} arr[] = {{1,2}, {3,4}, {5,6}};
main() {
struct stu *p = arr + 1;
printf("%d", p->a + (p-1)->b);
}
A. 3
B. 4
C. 5
D. 6
【答案】C
【解析】p指向arr[1](值为{3,4}),p->a=3;(p-1)指向arr[0](值为{1,2}),(p-1)->b=2;3+2=5。
二、多选题(本题共5小题,每题4分,共20分)
1、以下关于结构体的说法,正确的有( )
A. 结构体变量中各成员占用不同的存储空间
B. 结构体变量可以整体赋值给另一个相同类型的结构体变量
C. 结构体变量可以作为函数参数传递
D. 结构体变量可以整体进行输入输出
【答案】ABC
【解析】结构体变量各成员占用不同的存储空间;相同类型的结构体变量之间可以直接赋值;结构体变量可以作为函数参数(值传递)。D错误,结构体变量不能整体输入输出,只能对成员进行输入输出。
2、以下关于结构体数组的叙述,正确的有( )
A. 结构体数组的每个元素都是一个结构体变量
B. 结构体数组在内存中是连续存储的
C. 结构体数组可以在定义时进行初始化
D. 结构体数组的元素个数必须是常量表达式
【答案】ABCD
【解析】A正确,每个元素是结构体变量;B正确,结构体数组连续存储;C正确,可以在定义时初始化;D正确。
3、以下关于结构体指针的说法,正确的有( )
A. 结构体指针可以指向结构体变量
B. 结构体指针可以指向结构体数组元素
C. 结构体指针可以作为函数参数
D. 结构体指针不能进行算术运算
【答案】ABC
【解析】结构体指针可以指向结构体变量或数组元素;可以作为函数参数实现地址传递;可以进行算术运算(如p++)以遍历数组。D错误。
4、以下选项中,能够正确访问结构体成员score的有( )(假设struct student *p指向某结构体变量)
A. stu.score
B. p.score
C. p->score
D. (*p).score
【答案】ACD
【解析】通过结构体变量访问成员用“.”,A正确;通过结构体指针访问成员用“->”或(*p).成员名,C和D正确。B中p是指针,不能用“.”。
5、以下关于结构体变量的初始化,正确的有( )
A. struct stu { int a; char b; } s = {10, A};
B. struct stu s = {10};
C. struct stu s = { A, 10},s1;s1=s;
D. struct stu s = {10, A, 20};
【答案】ABC
【解析】A是标准初始化;B部分初始化,未初始化的成员自动赋0;C语言中允许两个相同类型的结构体变量之间可以直接赋值;D初始化值个数超过成员个数,编译错误。
三、判断题(本题共10小题,每题2分,共20分)
1、结构体类型定义中不能包含指向自身的指针。( )
【答案】×
【解析】结构体类型定义中可以包含指向自身的指针,这是构建链表等数据结构的基础。
2、两个相同类型的结构体变量之间可以直接赋值。( )
【答案】√
【解析】新标准C允许将一个结构体变量直接赋值给另一个具有相同结构的结构体变量。
3、结构体变量所占内存长度等于各成员所占内存长度之和,且各成员分别占有自己的内存单元。( )
【答案】×
【解析】因为存在内存对齐问题,所以结构体变量所占内存长度大于各成员占的内存长度之和。每个成员分别占有其自己的内存单元。
4、通过结构体指针访问成员时,p->age与(*p).age是等价的。( )
【答案】√
【解析】箭头运算符是解引用和成员访问的简写,两者完全等价。
5、结构体变量可以作为函数参数传递,传递方式是值传递。( )
【答案】√
【解析】用结构体变量作实参时,采取“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。
6、结构体数组在内存中是连续存储的。( )
【答案】√
【解析】结构体数组的每个元素在内存中连续存放。
7、结构体类型定义中,成员的数据类型可以是已经定义的结构体类型。( )
【答案】√
【解析】结构体的成员可以是结构体类型,即结构体的嵌套定义。
8、结构体变量可以作为一个整体进行输入和输出操作。( )
【答案】×
【解析】不能将结构体变量作为一个整体输入输出,只能对变量当中的各个成员进行输入输出。
9、结构体成员的数据类型必须相同( )
【答案】×
【解析】结构体成员的数据类型可以不同。
10、结构体变量在定义时若未初始化,其成员的值是随机值。( )
【答案】√
【解析】局部结构体变量未初始化时,其成员的值是不确定的(随机值);全局或静态结构体变量未初始化时自动初始化为0。
四、填空题(本题共5小题,每题2分,共10分)
1、若有以下定义,则结构体变量stu所占内存字节数为 ( )。(假设int占4字节,char占1字节)
struct example {
char a;
int b;
char c;
} stu;
【答案】12
【解析】考虑内存对齐,char a占1字节,填充3字节使int b对齐到4字节边界,int b占4字节,char c占1字节,再填充3字节使结构体总大小为4的整数倍,共12字节。
2、以下程序段的功能是输出结构体数组中年龄最大的学生的姓名,请填空( )。
struct student {
char name[20];
int age;
} stu[5] = {{"Tom", 18}, {"Jerry", 20}, {"Alice", 19}};
main() {
int i, max = 0;
for (i = 1; i < 5; i++)
if (________) max = i;
printf("%s", stu[max].name);
}
【答案】stu[i].age > stu[max].age
【解析】遍历结构体数组,比较每个元素的age成员,记录最大值的下标。
3、以下程序段执行后,输出结果为 ( )。
struct node {
int a;
int b;
} arr[3] = {{1,2}, {3,4}, {5,6}};
main() {
struct node *p = arr;
int s = 0;
for (int i = 0; i < 3; i++, p++)
s += p->a;
printf("%d", s);
}
【答案】9
【解析】p遍历结构体数组,累加每个元素的a成员:1+3+5=9。
4、以下程序段中,结构体指针p指向数组stu的首元素,请填空,使程序输出第二个元素的id值( )。
struct student {
int id;
char name[20];
} stu[3] = {{1001, "Tom"}, {1002, "Jerry"}, {1003, "Alice"}};
struct student *p = stu;
printf("%d", ________);
【答案】(p + 1)->id 或 (*(p + 1)).id
【解析】p指向stu[0],p+1指向stu[1],通过箭头运算符或指针解引用访问id成员。
5、以下程序段的功能是交换两个结构体变量的值,请填空( )。
struct point {
int x;
int y;
};
void swap(struct point *p1, struct point *p2) {
struct point temp;
temp = *p1;
________;
*p2 = temp;
}
【答案】*p1 = *p2
【解析】通过指针交换两个结构体变量的值,先将p1指向的内容赋给temp,再将p2指向的内容赋给p1,最后将temp赋给p2。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
《编程语言基础-C语言》高等教育出版社(第5版)
第七章 结构体和共用体 章节过关卷(原卷版)
考试时间:90分钟 满分:100分
姓名 班级 学号
一、单项选择题(本题共25小题,每题2分,共50分)
1、关于结构体类型变量的定义,以下写法正确的是( )
A. struct stu { int a; char b; } s;
B. struct stu { int a; char b; }; struct stu s;
C. struct { int a; char b; } s;
D. 以上都正确
2、以下关于结构体变量的说法,正确的是( )
A. 结构体变量可以作为一个整体进行输入和输出
B. 结构体变量不能作为函数参数传递
C. 两个相同类型的结构体变量之间可以直接赋值
D. 结构体变量中各成员在内存中占用同一段连续空间
3、若有以下定义,则能正确引用结构体变量中成员age的是( )
struct student {
char name[20];
int age;
float score;
} stu;
A. student.age
B. struct.age
C. stu.age
D. stu->age
4、以下程序的输出结果是( )
struct data {
int a;
char b;
};
main() {
struct data x = {10, A};
struct data y;
y = x;
printf("%d,%c", y.a, y.b);
}
A. 10,A
B. 10,随机值
C. 编译错误
D. 运行时错误
5、以下关于结构体数组的说法,正确的是( )
A. 结构体数组的元素必须是同一结构体类型
B. 结构体数组的每个元素只能包含一个成员
C. 结构体数组不能进行初始化
D. 结构体数组在内存中不连续存储
6、若有以下定义,则sizeof(stu)的值是( )
struct student {
char name[10];
int age;
float score;
} stu;
A. 15
B. 16
C. 18
D. 20
7、若有以下定义,则能正确输出结构体数组第二个元素的score成员的是( )
struct stu {
int id;
float score;
} s[3] = {{1, 85.5}, {2, 90.0}, {3, 78.5}};
A. printf("%f", s.score[1]);
B. printf("%f", s[2].score);
C. printf("%f", s[1].score);
D. printf("%f", s.score[2]);
8、以下程序的输出结果是( )
struct example {
int a;
int b;
};
main() {
struct example arr[3] = {{1, 2}, {3, 4}, {5, 6}};
printf("%d", arr[1].a + arr[2].b);
}
A. 7
B. 8
C. 9
D. 10
9、关于结构体指针,以下说法正确的是( )
A. 结构体指针只能指向结构体数组
B. 通过结构体指针访问成员只能用“.”运算符
C. 结构体指针可以指向结构体变量
D. 结构体指针不能作为函数参数
10、若有以下定义,则该共用体变量所占内存字节数是( )(假设int占4字节,char占1字节)
union data {
int i;
char c;
float f;
} u;
A. 1
B. 4
C. 9
D. 12
11、以下程序的输出结果是( )
struct value {
int i;
char c;
};
main() {
struct value v;
v.i = 65;
printf("%c", v.c);
}
A. A
B. 65
C. 随机值
D. 编译错误
12、关于结构体变量成员的引用,以下写法错误的是( )
A. stu.age
B. p->age(其中p为指向结构体的指针)
C. (*p).age(其中p为指向结构体的指针)
D. p.age(其中p为指向结构体的指针)
13、若有以下定义,则引用结构体变量中成员的正确方式是( )
struct student {
char name[20];
int age;
} stu, *p = &stu;
A. p.name
B. *p.name
C. (*p).name
D. stu->name
14、以下程序的输出结果是( )
struct node {
int x;
int y;
} s[2] = {{3, 4}, {5, 6}};
main() {
struct node *p = s;
printf("%d", (++p)->x);
}
A. 3
B. 4
C. 5
D. 6
15、以下关于结构体类型定义的叙述,正确的是( )
A. 结构体类型定义中不能包含其他结构体类型
B. 结构体类型定义中可以包含指向自身的指针
C. 结构体类型定义中不能包含数组类型
D. 结构体类型定义中不能包含指针类型
16、若有以下定义,则sizeof(stu)的值是( )
struct test {
char c;
int i;
char d;
} stu;
A. 6
B. 8
C. 9
D. 12
17、以下程序的输出结果是( )
struct student {
char name[10];
int age;
};
main() {
struct student s = {"Tom", 18};
struct student *p = &s;
p->age = 20;
printf("%d", s.age);
}
A. 18
B. 20
C. 0
D. 随机值
18、若有以下定义,则能正确对结构体数组进行初始化的是( )
A. struct stu s[2] = {80, 85, 90, 95};
B. struct stu s[2] = {{80, 85}, {90, 95}};
C. struct stu s[2] = {80, 85};
D. struct stu s[2] = 80;
19、以下程序的输出结果是( )
struct score {
int math;
int eng;
};
void fun(struct score *p) {
p->math += 10;
p->eng += 5;
}
int main() {
struct score s = {80, 70};
fun(&s);
printf("%d,%d", s.math, s.eng);
return 0;
}
A. 80,70
B. 90,75
C. 80,75
D. 90,70
20、以下关于结构体变量作为函数参数的叙述,正确的是( )
A. 结构体变量作为实参时,传递的是结构体变量的地址
B. 结构体变量作为实参时,采取值传递方式
C. 结构体变量作为实参时,形参必须是结构体指针类型
D. 结构体变量不能作为函数参数
21、若有以下定义,则结构体数组s中占用内存总字节数是( )(假设int占4字节,char占1字节)
struct person {
int id;
char name[8];
int age;
} s[3];
A. 15
B. 48
C. 45
D. 60
22、以下程序的输出结果是( )
struct teacher {
int id;
char name[20];
} t1 = {1001, "Zhang"}, t2;
main() {
t2 = t1;
t2.id = 1002;
printf("%d", t1.id);
}
A. 1001
B. 1002
C. 0
D. 随机值
23、以下程序的功能是交换两个结构体变量的值,划线处应填( )
struct point {
int x;
int y;
};
void swap(struct point *p1, struct point *p2) {
struct point temp;
temp = *p1;
________;
*p2 = temp;
}
A. p1 = p2
B. *p1 = *p2
C. p1 = *p2
D. *p1 = p2
24、以下程序的功能是计算学生平均分,划线处应填( )
struct student {
int id;
int score;
} stu[5] = {{1, 85}, {2, 90}, {3, 78}, {4, 88}, {5, 92}};
main() {
int sum = 0, i;
for (i = 0; i < 5; i++)
________;
printf("%.2f", sum / 5.0);
}
A. sum += stu.score[i];
B. sum += stu[i].score;
C. sum += stu[i]->score;
D. sum += stu.score;
25、以下程序的输出结果是( )
struct stu {
int a;
int b;
} arr[] = {{1,2}, {3,4}, {5,6}};
main() {
struct stu *p = arr + 1;
printf("%d", p->a + (p-1)->b);
}
A. 3
B. 4
C. 5
D. 6
二、多选题(本题共5小题,每题4分,共20分)
1、以下关于结构体的说法,正确的有( )
A. 结构体变量中各成员占用不同的存储空间
B. 结构体变量可以整体赋值给另一个相同类型的结构体变量
C. 结构体变量可以作为函数参数传递
D. 结构体变量可以整体进行输入输出
2、以下关于结构体数组的叙述,正确的有( )
A. 结构体数组的每个元素都是一个结构体变量
B. 结构体数组在内存中是连续存储的
C. 结构体数组可以在定义时进行初始化
D. 结构体数组的元素个数必须是常量表达式
3、以下关于结构体指针的说法,正确的有( )
A. 结构体指针可以指向结构体变量
B. 结构体指针可以指向结构体数组元素
C. 结构体指针可以作为函数参数
D. 结构体指针不能进行算术运算
4、以下选项中,能够正确访问结构体成员score的有( )(假设struct student *p指向某结构体变量)
A. stu.score
B. p.score
C. p->score
D. (*p).score
5、以下关于结构体变量的初始化,正确的有( )
A. struct stu { int a; char b; } s = {10, A};
B. struct stu s = {10};
C. struct stu s = { A, 10},s1;s1=s;
D. struct stu s = {10, A, 20};
三、判断题(本题共10小题,每题2分,共20分)
1、结构体类型定义中不能包含指向自身的指针。( )
2、两个相同类型的结构体变量之间可以直接赋值。( )
3、结构体变量所占内存长度等于各成员所占内存长度之和,且各成员分别占有自己的内存单元。( )
4、通过结构体指针访问成员时,p->age与(*p).age是等价的。( )
5、结构体变量可以作为函数参数传递,传递方式是值传递。( )
6、结构体数组在内存中是连续存储的。( )
7、结构体类型定义中,成员的数据类型可以是已经定义的结构体类型。( )
8、结构体变量可以作为一个整体进行输入和输出操作。( )
9、结构体成员的数据类型必须相同( )
10、结构体变量在定义时若未初始化,其成员的值是随机值。( )
四、填空题(本题共5小题,每题2分,共10分)
1、若有以下定义,则结构体变量stu所占内存字节数为 ( )。(假设int占4字节,char占1字节)
struct example {
char a;
int b;
char c;
} stu;
2、以下程序段的功能是输出结构体数组中年龄最大的学生的姓名,请填空( )。
struct student {
char name[20];
int age;
} stu[5] = {{"Tom", 18}, {"Jerry", 20}, {"Alice", 19}};
main() {
int i, max = 0;
for (i = 1; i < 5; i++)
if (________) max = i;
printf("%s", stu[max].name);
}
3、以下程序段执行后,输出结果为 ( )。
struct node {
int a;
int b;
} arr[3] = {{1,2}, {3,4}, {5,6}};
main() {
struct node *p = arr;
int s = 0;
for (int i = 0; i < 3; i++, p++)
s += p->a;
printf("%d", s);
}
4、以下程序段中,结构体指针p指向数组stu的首元素,请填空,使程序输出第二个元素的id值( )。
struct student {
int id;
char name[20];
} stu[3] = {{1001, "Tom"}, {1002, "Jerry"}, {1003, "Alice"}};
struct student *p = stu;
printf("%d", ________);
5、以下程序段的功能是交换两个结构体变量的值,请填空( )。
struct point {
int x;
int y;
};
void swap(struct point *p1, struct point *p2) {
struct point temp;
temp = *p1;
________;
*p2 = temp;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$