第13卷 结构体定义与引用 《C语言程序设计知识》山东省(春季高考)《软件与应用技术类考纲百套卷》

2026-08-13
| 2份
| 17页
| 5人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 题集-专项训练
知识点 结构体和共用体
使用场景 中职复习
学年 2027-2028
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 178 KB
发布时间 2026-08-13
更新时间 2026-08-13
作者 xy06893
品牌系列 学易金卷·考纲百套卷
审核时间 2026-08-13
下载链接 https://m.zxxk.com/soft/59181729.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

编写说明: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名学生的学号和成绩,找出成绩最高的学生,并输出其学号和成绩。     原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第13卷 结构体定义与引用 《C语言程序设计知识》山东省(春季高考)《软件与应用技术类考纲百套卷》
1
第13卷 结构体定义与引用 《C语言程序设计知识》山东省(春季高考)《软件与应用技术类考纲百套卷》
2
第13卷 结构体定义与引用 《C语言程序设计知识》山东省(春季高考)《软件与应用技术类考纲百套卷》
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。