内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第28练,内容是7.1-7.2 结构体概述、结构体变量的定义方法。
《C语言》(第五版)一课一练 第28练
7.1-7.2 结构体概述、结构体变量的定义方法
一、单选题
1. 以下关于C语言结构体的叙述中,正确的是( )
A. 结构体中的成员必须是同一种数据类型
B. 结构体类型与数组完全相同,没有区别
C. 结构体是一种构造数据类型,可以将不同类型的数据组合成一个整体
D. 定义结构体类型后系统会为其分配内存空间
2. 以下结构体类型声明中,语法正确的是( )
A. struct Student { int num; char name[20]; float score; };
B. Student { int num; char name[20]; float score; };
C. struct Student { int num, char name[20], float score; };
D. struct Student [ int num; char name[20]; float score; ];
3. 以下选项中,能正确定义结构体变量s的方式是( )
A. struct s { int x; float y; };
B. { int x; float y; } struct s;
C. structure { int x; float y; } s;
D. struct { int x; float y; } s;
4. 以下关于结构体类型与结构体变量的描述中,正确的是( )
A. 结构体类型和结构体变量都会在定义时分配内存空间
B. 定义结构体类型时不分配内存,定义结构体变量时才分配内存
C. 可以对结构体类型进行赋值操作
D. 结构体类型可以在程序运行时修改其成员
5. 设有结构体定义:struct Point { int x; int y; }; 以下能正确初始化结构体变量p的是( )
A. struct Point p = {3, 4};
B. struct Point p = (3, 4);
C. struct Point p = [3, 4];
D. struct Point p = {x:3, y:4};
6. 设有以下定义:
struct Date { int year; int month; int day; };
struct Student { int num; struct Date birth; };
则以下能正确访问Student类型变量stu的出生年份的是( )
A. stu.birth->year
B. stu.Date.year
C. stu.birth.year
D. stu->birth.year
7. 以下程序片段中,叙述正确的是
struct S {
int a;
char b;
float c;
} x = {1, 'A', 2.5}, y = x;( )
A. y=x是非法的,结构体变量之间不能直接赋值
B. y=x编译通过但运行时会出现错误
C. y=x的效果等同于比较x和y的各成员是否相等
D. y=x是合法的,将x各成员的值赋给y的对应成员
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
struct Rect {
int w;
int h;
};
main()
{
struct Rect r1 = {3, 4}, r2;
r2 = r1;
r2.w = 5;
printf("%d,%d
", r1.w + r1.h, r2.w + r2.h);
}
三、案例分析题
9. 以下程序的功能是定义一个表示学生信息的结构体类型,输入一个学生的学号、姓名和成绩,并输出该学生信息。请填空。
#include <stdio.h>
【1】 Student {
int num;
char name[20];
float score;
};
main()
{
【2】 stu;
printf("请输入学号、姓名、成绩:");
scanf("%d%s%f", &stu.num, 【3】, &stu.score);
printf("学号:%d 姓名:%s 成绩:%.1f
", stu.num, stu.name, stu.score);
}
四、综合应用题
10. 编写一个C程序:定义一个表示圆的结构体类型Circle,包含成员radius(半径,浮点型);定义两个Circle类型的变量c1和c2并初始化;计算并输出两个圆的面积之差(结果保留2位小数)。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第28练,内容是7.1-7.2 结构体概述、结构体变量的定义方法。
《C语言》(第五版)一课一练 第28练
7.1-7.2 结构体概述、结构体变量的定义方法
一、单选题
1. 以下关于C语言结构体的叙述中,正确的是( )
A. 结构体中的成员必须是同一种数据类型
B. 结构体类型与数组完全相同,没有区别
C. 结构体是一种构造数据类型,可以将不同类型的数据组合成一个整体
D. 定义结构体类型后系统会为其分配内存空间
【答案】C
【解析】结构体是一种构造数据类型,它允许将不同类型的数据成员组合在一起形成一个新的类型。A错误,结构体成员可以是不同类型,这正是结构体与数组的区别之一。B错误,数组的元素必须类型相同,结构体成员可以类型不同。D错误,定义结构体类型本身不分配内存,定义结构体变量时才分配内存空间。
2. 以下结构体类型声明中,语法正确的是( )
A. struct Student { int num; char name[20]; float score; };
B. Student { int num; char name[20]; float score; };
C. struct Student { int num, char name[20], float score; };
D. struct Student [ int num; char name[20]; float score; ];
【答案】A
【解析】C语言中声明结构体类型的标准格式为struct 结构体名{ 成员列表 };,成员之间用分号分隔。A格式完全正确。B缺少struct关键字。C中成员之间不应该用逗号分隔,应使用分号。D中花括号被写成了方括号,语法错误。
3. 以下选项中,能正确定义结构体变量s的方式是( )
A. struct s { int x; float y; };
B. { int x; float y; } struct s;
C. structure { int x; float y; } s;
D. struct { int x; float y; } s;
【答案】D
【解析】D使用了匿名结构体(省略结构体名)直接定义变量s,这是合法的定义方式。A定义的是结构体类型struct s,并没有定义变量。B的书写顺序错误,关键字struct应在花括号前面。C中structure不是C语言的关键字,正确的关键字是struct。
4. 以下关于结构体类型与结构体变量的描述中,正确的是( )
A. 结构体类型和结构体变量都会在定义时分配内存空间
B. 定义结构体类型时不分配内存,定义结构体变量时才分配内存
C. 可以对结构体类型进行赋值操作
D. 结构体类型可以在程序运行时修改其成员
【答案】B
【解析】结构体类型是一个模板描述,定义时不占用内存空间;定义结构体变量时,系统根据类型的成员为变量分配相应的内存。A错误,类型本身不分配内存。C错误,不能对类型赋值,赋值操作的对象是变量。D错误,类型是静态描述,不能在运行时修改其成员定义。
5. 设有结构体定义:struct Point { int x; int y; }; 以下能正确初始化结构体变量p的是( )
A. struct Point p = {3, 4};
B. struct Point p = (3, 4);
C. struct Point p = [3, 4];
D. struct Point p = {x:3, y:4};
【答案】A
【解析】结构体变量初始化使用花括号{},按成员顺序依次给出初值,各值用逗号分隔。A格式正确。B使用圆括号是错误的,圆括号用于函数调用。C使用方括号是错误的。D中x:3, y:4的写法不是C语言的初始化语法,这种写法属于其他语言的特征。
6. 设有以下定义:
struct Date { int year; int month; int day; };
struct Student { int num; struct Date birth; };
则以下能正确访问Student类型变量stu的出生年份的是( )
A. stu.birth->year
B. stu.Date.year
C. stu.birth.year
D. stu->birth.year
【答案】C
【解析】结构体嵌套时,访问内层成员使用多级点运算符。stu是结构体变量,birth是stu的成员(也是结构体变量),year是birth的成员,因此用stu.birth.year访问。A中birth不是指针,不能用->运算符。B中Date是类型名不是成员名。D中stu不是指针,不能用->运算符。
7. 以下程序片段中,叙述正确的是
struct S {
int a;
char b;
float c;
} x = {1, 'A', 2.5}, y = x;( )
A. y=x是非法的,结构体变量之间不能直接赋值
B. y=x编译通过但运行时会出现错误
C. y=x的效果等同于比较x和y的各成员是否相等
D. y=x是合法的,将x各成员的值赋给y的对应成员
【答案】D
【解析】同类型的结构体变量之间可以直接赋值,其效果是将右侧变量各成员的值逐个复制到左侧变量的对应成员中。A错误,C语言允许同类型结构体变量之间赋值。B错误,赋值操作在编译和运行阶段都是合法的。C错误,赋值操作是复制数据,不是比较操作。
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
struct Rect {
int w;
int h;
};
main()
{
struct Rect r1 = {3, 4}, r2;
r2 = r1;
r2.w = 5;
printf("%d,%d
", r1.w + r1.h, r2.w + r2.h);
}
【答案】7,9
【解析】程序定义结构体类型Rect,成员w和h分别表示宽和高。r1初始化为{3,4},r2=r1将r1各成员值复制给r2,此时r2为{3,4}。然后r2.w=5修改r2的w为5,r2变为{5,4}。r1不受影响仍为{3,4}。输出r1.w+r1.h=3+4=7,r2.w+r2.h=5+4=9。
三、案例分析题
9. 以下程序的功能是定义一个表示学生信息的结构体类型,输入一个学生的学号、姓名和成绩,并输出该学生信息。请填空。
#include <stdio.h>
【1】 Student {
int num;
char name[20];
float score;
};
main()
{
【2】 stu;
printf("请输入学号、姓名、成绩:");
scanf("%d%s%f", &stu.num, 【3】, &stu.score);
printf("学号:%d 姓名:%s 成绩:%.1f
", stu.num, stu.name, stu.score);
}
【答案】【1】struct
【2】struct Student
【3】stu.name
【解析】【1】声明结构体类型需使用struct关键字。【2】定义结构体变量时需写完整类型名struct Student。【3】name是字符数组,数组名本身就是地址,因此scanf中不需要取地址符&,直接写stu.name即可。
四、综合应用题
10. 编写一个C程序:定义一个表示圆的结构体类型Circle,包含成员radius(半径,浮点型);定义两个Circle类型的变量c1和c2并初始化;计算并输出两个圆的面积之差(结果保留2位小数)。
【答案】#include <stdio.h>
#define PI 3.14159
struct Circle {
float radius;
};
main()
{
struct Circle c1 = {3.0}, c2 = {5.0};
float area1, area2, diff;
area1 = PI * c1.radius * c1.radius;
area2 = PI * c2.radius * c2.radius;
diff = area2 - area1;
printf("面积之差:%.2f
", diff);
}
【解析】程序首先用struct Circle定义结构体类型,包含浮点型成员radius。分别初始化c1半径为3.0、c2半径为5.0。按圆面积公式PI*r*r分别计算两个圆的面积,再求差值并输出。使用%.2f保留两位小数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$