内容正文:
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第13卷,为知识训练卷,按《C语言程序设计知识》中“结构体定义与引用”范围和要求编写。具体内容为:(1)了解结构体变量的定义及初始化。(2)理解结构体变量的引用。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第13卷 C语言程序设计知识——结构体定义与引用
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.下列结构体定义语句正确的是( )
A.struct Student { int id, float score; };
B.struct Student ( int id; float score; );
C.Student { int id; float score; };
D.struct Student { int id; float score; };
【答案】D
【解析】C 语言结构体定义必须以struct开头,结构体成员包裹在大括号内,每个成员以分号结尾,整体末尾加分号。A 同一行定义两种不同类型成员语法错误;B 错误使用圆括号;C 缺少struct关键字;只有 D 语法正确。
2.已定义struct Book { int id; float price; };,声明结构体变量b的正确语句是( )
A.struct Book b;
B.struct b Book;
C.Book b;
D.define Book b;
【答案】A
【解析】未使用typedef为结构体类型定义别名时,声明变量必须写成struct Book b;。
3.结构体变量s有成员age,引用该成员应使用的运算符是( )
A.::
B.->
C..
D.&
【答案】C
【解析】普通结构体变量使用点运算符引用成员,例如s.age;->主要用于结构体指针。
4.执行下列程序后,输出结果是( )
struct Point { int x; int y; };
int main(void) {
struct Point p = {3, 5};
printf("%d", p.x + p.y);
return 0;
}
A.15
B.8
C.3
D.5
【答案】B
【解析】变量p初始化为x=3、y=5,p.x+p.y等于3+5=8。
5.下列语句中,能够在定义结构体变量时完成初始化的是( )
A.struct Student = s {1001, 86};
B.struct Student s; s = {1001, 86};
C.Student struct s = {1001, 86};
D.struct Student s = {1001, 86};
【答案】D
【解析】结构体变量可以在定义时用花括号按成员顺序初始化;定义后不能直接用s={...}整体赋值。
6.若定义struct Student { int id; int score; };,下列成员赋值语句正确的是( )
A.s->id = 1;
B.Student.id = 1;
C.s.id = 1;
D.struct Student.id = 1;
【答案】C
【解析】假定已经声明结构体变量s,则应使用s.id引用并修改id成员;s->id要求s是结构体指针。
7.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
int main(void) {
struct Student a = {1, 80};
struct Student b = {2, 90};
a = b;
printf("%d %d", a.id, a.score);
return 0;
}
A.2 90
B.1 90
C.1 80
D.2 80
【答案】A
【解析】相同结构体类型的变量可以整体赋值,执行a=b后,a的两个成员分别变为2和90。
8.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
int main(void) {
struct Student s = {1001, 75};
s.score = s.score + 5;
printf("%d", s.score);
return 0;
}
A.1001
B.80
C.75
D.程序错误
【答案】B
【解析】s.score初值为75,执行s.score=s.score+5后变为80。
9.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
int main(void) {
struct Student s[2] = {{101, 78}, {102, 91}};
printf("%d", s[1].id);
return 0;
}
A.102
B.78
C.101
D.91
【答案】A
【解析】s[1]表示数组的第2个结构体元素,其id成员为102。
10.执行下列程序后,输出结果是( )
struct Score { int chinese; int math; };
int main(void) {
struct Score s = {86, 94};
printf("%d", s.chinese + s.math / 2);
return 0;
}
A.180
B.133.0
C.133
D.90
【答案】C
【解析】结构体成员均为int型,先计算94/2=47,再计算86+47=133。
11.向结构体成员输入整数年龄age时,scanf函数中正确的实参写法是( )
A.scanf("%d", s.age);
B.scanf("%d", &struct s.age);
C.scanf("%d", age);
D.scanf("%d", &s.age);
【答案】D
【解析】scanf输入整数需要传递变量地址,结构体变量s的age成员地址写作&s.age。
12.下列关于相同结构体类型变量赋值的说法正确的是( )
A.只能逐个成员赋值,不能整体赋值
B.可以使用a=b将b的成员值复制给a
C.只能比较a==b,不能赋值
D.结构体变量不能作为赋值语句左值
【答案】B
【解析】同一结构体类型的变量可以整体赋值,a=b会将b的各成员值复制给a。
13.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
void change(struct Student s) {
s.score = 100;
}
int main(void) {
struct Student s = {1, 80};
change(s);
printf("%d", s.score);
return 0;
}
A.1
B.程序错误
C.80
D.100
【答案】C
【解析】结构体参数s按值传递,函数内修改的是副本,不会改变main函数中的原结构体变量,因此输出80。
14.执行下列程序后,输出结果是( )
struct Point { int x; int y; };
struct Point makePoint(int a, int b) {
struct Point p = {a, b};
return p;
}
int main(void) {
struct Point q = makePoint(2, 6);
printf("%d", q.x * q.y);
return 0;
}
A.26
B.16
C.8
D.12
【答案】D
【解析】makePoint(2,6)返回成员为2和6的结构体,q.x*q.y等于2*6=12。
15.下列语句中,用于判断两个结构体变量的id成员相等的是( )
A.if (a.id == b.id)
B.if (struct a.id == struct b.id)
C.if (a == b)
D.if (a.id = b.id)
【答案】A
【解析】引用成员后使用关系运算符==进行相等判断,正确写法为if (a.id == b.id)。
16.执行下列程序后,输出结果是( )
struct Date { int year; int month; };
int main(void) {
struct Date d = {2026, 8};
printf("%d", d.year - 2000 + d.month);
return 0;
}
A.2034
B.34
C.26
D.2026
【答案】B
【解析】d.year为2026、d.month为8,表达式的值为2026-2000+8=34。
17.已定义struct Book { char name[20]; int pages; };,下列定义并初始化语句正确的是( )
A.struct Book b = {C语言, 320};
B.struct Book b = ["C语言", 320];
C.struct Book b = ("C语言", 320);
D.struct Book b = {"C语言", 320};
【答案】D
【解析】结构体初始化采用大括号包裹初始值,字符串常量必须用双引号。A 缺少字符串引号;B 使用方括号、C 使用圆括号均不符合语法;只有 D 书写规范。
18.下列语句中,能够正确声明结构体数组stu并初始化两个元素的是( )
A.array struct Student stu[2] = {{1, 80}, {2, 90}};
B.struct Student stu[2] = {{1, 80}, {2, 90}};
C.struct Student stu = [2]{{1, 80}, {2, 90}};
D.struct Student[2] stu = {{1, 80}, {2, 90}};
【答案】B
【解析】结构体数组的声明形式为struct Student stu[2],数组初始化仍使用花括号嵌套表示各元素。
19.若定义struct Student { int id; float score; };,下列函数声明正确的是( )
A.struct print(Student s);
B.void print(struct s Student);
C.void print(struct Student s);
D.void print(Student s);
【答案】C
【解析】未通过 typedef 定义结构体别名时,结构体完整类型为struct Student。A 返回值非法,参数缺少 struct;B 参数类型书写错误;D 省略 struct,语法不合法;只有 C 函数声明格式正确。
20.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
int total(struct Student a, struct Student b) {
return a.score + b.score;
}
int main(void) {
struct Student x = {1, 76};
struct Student y = {2, 84};
printf("%d", total(x, y));
return 0;
}
A.160
B.76
C.2
D.84
【答案】A
【解析】函数接收两个结构体实参,返回它们score成员之和,76+84=160。
二、简答题(共2题,每题10分,共20分)
1.阅读程序,写出程序的输出结果。
#include <stdio.h>
struct Student {
int id;
int score;
};
int main(void)
{
struct Student s[3] = {{1, 76}, {2, 88}, {3, 91}};
int sum = s[0].score + s[2].score;
s[1] = s[0];
printf("%d %d %d
", sum, s[1].id, s[1].score);
return 0;
}
【答案】输出:167 1 76
【解析】sum取第1个和第3个元素的score,值为76+91=167;s[1]=s[0]后,s[1]的id和score分别变为1和76。
2.阅读程序,写出程序的输出结果。
#include <stdio.h>struct Item { int price; int count;};int value(struct Item x){ return x.price * x.count;}int main(void){ struct Item a = {7, 3}; struct Item b = {5, 4}; printf("%d %d
", value(
a), value(
b)); return 0;}
【答案】输出:21 20
【解析】value(a)=7*3=21,value(b)=5*4=20;结构体变量作为实参按值传递,函数根据两个成员计算乘积。
三、案例分析题(共1题,共10分)
1.下面程序用于输出成绩最高的学生编号,但程序中有一处错误,请指出并改正。
#include <stdio.h>
struct Student {
int id;
int score;
};
int main(void)
{
struct Student s[2] = {{101, 86}, {102, 93}};
int best = 0;
if (s[1].score > s[0].score)
best = 1;
printf("%d
", s[best].score);
return 0;
}
【答案】将printf中的s[best].score改为s[best].id。
【解析】题目要求输出成绩最高的学生编号。best用于保存最高成绩学生的下标,s[best].score输出的是最高成绩,不能得到编号;应引用id成员,即s[best].id。
四、综合应用题(共1题,共10分)
1.编写程序:定义结构体Student,包含学号id和成绩score;在main函数中输入3名学生的学号和成绩,找出成绩最高的学生,并输出其学号和成绩。
【答案】
#include <stdio.h>
struct Student {
int id;
int score;
};
int main(void)
{
struct Student s[3];
int i;
int best = 0;
for (i = 0; i < 3; i++)
scanf("%d%d", &s[i].id, &s[i].score);
for (i = 1; i < 3; i++) {
if (s[i].score > s[best].score)
best = i;
}
printf("%d %d
", s[best].id, s[best].score);
return 0;
}
【解析】程序先定义Student结构体和结构体数组s,输入每个元素的id与score;best保存当前最高成绩的下标,遍历数组后通过s[best].id和s[best].score输出最高成绩学生的信息。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第13卷,为知识训练卷,按《C语言程序设计知识》中“结构体定义与引用”范围和要求编写。具体内容为:(1)了解结构体变量的定义及初始化。(2)理解结构体变量的引用。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第13卷 C语言程序设计知识——结构体定义与引用
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.下列结构体定义语句正确的是( )
A.struct Student { int id, float score; };
B.struct Student ( int id; float score; );
C.Student { int id; float score; };
D.struct Student { int id; float score; };
2.已定义struct Book { int id; float price; };,声明结构体变量b的正确语句是( )
A.struct Book b;
B.struct b Book;
C.Book b;
D.define Book b;
3.结构体变量s有成员age,引用该成员应使用的运算符是( )
A.::
B.->
C..
D.&
4.执行下列程序后,输出结果是( )
struct Point { int x; int y; };
int main(void) {
struct Point p = {3, 5};
printf("%d", p.x + p.y);
return 0;
}
A.15
B.8
C.3
D.5
5.下列语句中,能够在定义结构体变量时完成初始化的是( )
A.struct Student = s {1001, 86};
B.struct Student s; s = {1001, 86};
C.Student struct s = {1001, 86};
D.struct Student s = {1001, 86};
6.若定义struct Student { int id; int score; };,下列成员赋值语句正确的是( )
A.s->id = 1;
B.Student.id = 1;
C.s.id = 1;
D.struct Student.id = 1;
7.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
int main(void) {
struct Student a = {1, 80};
struct Student b = {2, 90};
a = b;
printf("%d %d", a.id, a.score);
return 0;
}
A.2 90
B.1 90
C.1 80
D.2 80
8.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
int main(void) {
struct Student s = {1001, 75};
s.score = s.score + 5;
printf("%d", s.score);
return 0;
}
A.1001
B.80
C.75
D.程序错误
9.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
int main(void) {
struct Student s[2] = {{101, 78}, {102, 91}};
printf("%d", s[1].id);
return 0;
}
A.102
B.78
C.101
D.91
10.执行下列程序后,输出结果是( )
struct Score { int chinese; int math; };
int main(void) {
struct Score s = {86, 94};
printf("%d", s.chinese + s.math / 2);
return 0;
}
A.180
B.133.0
C.133
D.90
11.向结构体成员输入整数年龄age时,scanf函数中正确的实参写法是( )
A.scanf("%d", s.age);
B.scanf("%d", &struct s.age);
C.scanf("%d", age);
D.scanf("%d", &s.age);
12.下列关于相同结构体类型变量赋值的说法正确的是( )
A.只能逐个成员赋值,不能整体赋值
B.可以使用a=b将b的成员值复制给a
C.只能比较a==b,不能赋值
D.结构体变量不能作为赋值语句左值
13.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
void change(struct Student s) {
s.score = 100;
}
int main(void) {
struct Student s = {1, 80};
change(s);
printf("%d", s.score);
return 0;
}
A.1
B.程序错误
C.80
D.100
14.执行下列程序后,输出结果是( )
struct Point { int x; int y; };
struct Point makePoint(int a, int b) {
struct Point p = {a, b};
return p;
}
int main(void) {
struct Point q = makePoint(2, 6);
printf("%d", q.x * q.y);
return 0;
}
A.26
B.16
C.8
D.12
15.下列语句中,用于判断两个结构体变量的id成员相等的是( )
A.if (a.id == b.id)
B.if (struct a.id == struct b.id)
C.if (a == b)
D.if (a.id = b.id)
16.执行下列程序后,输出结果是( )
struct Date { int year; int month; };
int main(void) {
struct Date d = {2026, 8};
printf("%d", d.year - 2000 + d.month);
return 0;
}
A.2034
B.34
C.26
D.2026
17.已定义struct Book { char name[20]; int pages; };,下列定义并初始化语句正确的是( )
A.struct Book b = {C语言, 320};
B.struct Book b = ["C语言", 320];
C.struct Book b = ("C语言", 320);
D.struct Book b = {"C语言", 320};
18.下列语句中,能够正确声明结构体数组stu并初始化两个元素的是( )
A.array struct Student stu[2] = {{1, 80}, {2, 90}};
B.struct Student stu[2] = {{1, 80}, {2, 90}};
C.struct Student stu = [2]{{1, 80}, {2, 90}};
D.struct Student[2] stu = {{1, 80}, {2, 90}};
19.若定义struct Student { int id; float score; };,下列函数声明正确的是( )
A.struct print(Student s);
B.void print(struct s Student);
C.void print(struct Student s);
D.void print(Student s);
20.执行下列程序后,输出结果是( )
struct Student { int id; int score; };
int total(struct Student a, struct Student b) {
return a.score + b.score;
}
int main(void) {
struct Student x = {1, 76};
struct Student y = {2, 84};
printf("%d", total(x, y));
return 0;
}
A.160
B.76
C.2
D.84
二、简答题(共2题,每题10分,共20分)
1.阅读程序,写出程序的输出结果。
#include <stdio.h>
struct Student {
int id;
int score;
};
int main(void)
{
struct Student s[3] = {{1, 76}, {2, 88}, {3, 91}};
int sum = s[0].score + s[2].score;
s[1] = s[0];
printf("%d %d %d
", sum, s[1].id, s[1].score);
return 0;
}
2.阅读程序,写出程序的输出结果。
#include <stdio.h>struct Item { int price; int count;};int value(struct Item x){ return x.price * x.count;}int main(void){ struct Item a = {7, 3}; struct Item b = {5, 4}; printf("%d %d
", value(
a), value(
b)); return 0;}
三、案例分析题(共1题,共10分)
1.下面程序用于输出成绩最高的学生编号,但程序中有一处错误,请指出并改正。
#include <stdio.h>
struct Student {
int id;
int score;
};
int main(void)
{
struct Student s[2] = {{101, 86}, {102, 93}};
int best = 0;
if (s[1].score > s[0].score)
best = 1;
printf("%d
", s[best].score);
return 0;
}
四、综合应用题(共1题,共10分)
1.编写程序:定义结构体Student,包含学号id和成绩score;在main函数中输入3名学生的学号和成绩,找出成绩最高的学生,并输出其学号和成绩。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$