内容正文:
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第74卷,为课程综合卷,按《C语言程序设计知识》课程综合范围和要求编写。具体内容为:基本数据类型与顺序程序设计、分支程序设计、循环程序设计、数组与指针、函数与结构体。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第74卷 课程综合卷——C语言程序设计知识
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.定义一个值不再改变、初值为100的整型常量,正确语句是( )
A.int const = MAX 100;
B.const int MAX = 100;
C.const MAX = 100;
D.int MAX = const 100;
【答案】B
【解析】const用于声明只读对象,类型、标识符和初始化表达式的位置必须正确;MAX声明后不能作为普通变量重新赋值。
2.若从键盘输入5,运行下列程序段后输出的是( )
int n;
scanf("%d", &n);
n = n + 3;
printf("%d
", n);
A.8
B.5
C.3
D.2
【答案】A
【解析】scanf把输入值存入n,赋值语句n=n+3把n改为8,printf按照%d输出整型变量的当前值。
3.表达式x < y && y % 2 == 1的值是( )
int x = 4, y = 7;
printf("%d
", x < y && y % 2 == 1);
A.0
B.1
C.4
D.7
【答案】B
【解析】x<y和y%2==1都成立,逻辑与运算结果为真;C语言用整数1表示真,用0表示假。
4.变量x为6时,下列if语句的输出是( )
int x = 6;
if (x % 2 == 0)
printf("E");
else
printf("O");
A.O
B.EO
C.E
D.无输出
【答案】C
【解析】x除以2的余数为0,条件成立,执行if分支输出E,不会执行else分支。
5.变量n为2时,switch语句执行后的输出是( )
int n = 2;
switch (n)
{
case 1: printf("A"); break;
case 2: printf("B"); break;
default: printf("C");
}
A.A
B.C
C.B
D.BC
【答案】C
【解析】n的值为2,匹配case 2并输出B,随后break结束switch,不会继续执行default分支。
6.while循环结束后,变量s的值是( )
int i = 1, s = 0;
while (i <= 3)
{
s += i;
i++;
}
A.6
B.3
C.5
D.7
【答案】A
【解析】while循环依次把1、2、3累加到s中,循环结束时s等于1+2+3,即6。
7.do-while循环结束后,变量i的值是( )
int i = 0;
do
{
i += 2;
} while (i < 5);
A.6
B.4
C.5
D.8
【答案】A
【解析】do-while至少执行一次,i依次变为2、4、6;当i为6时条件i<5不成立,循环结束。
8.for循环完成累加后,变量s的值是( )
int i, s = 0;
for (i = 1; i <= 4; i++)
s += i;
A.4
B.6
C.10
D.11
【答案】C
【解析】for循环的i依次为1、2、3、4,s依次累加这些值,最终为10。
9.嵌套循环全部执行后,变量c的值是( )
int i, j, c = 0;
for (i = 1; i <= 2; i++)
for (j = 1; j <= 3; j++)
c++;
A.3
B.5
C.9
D.6
【答案】D
【解析】外层循环执行2次,每次内层循环执行3次,c一共自增2×3次,结果为6。
10.当break条件满足时,循环结束后变量s的值是( )
int i, s = 0;
for (i = 1; i <= 5; i++)
{
if (i == 4) break;
s += i;
}
A.3
B.10
C.15
D.6
【答案】D
【解析】当i等于4时执行break,循环立即结束;已累加的i为1、2、3,因此s为6。
11.continue跳过偶数后,变量s的值是( )
int i, s = 0;
for (i = 1; i <= 5; i++)
{
if (i % 2 == 0) continue;
s += i;
}
A.9
B.6
C.12
D.15
【答案】A
【解析】continue跳过偶数i的累加语句,s只累加1、3、5,结果为9。
12.正确地定义并初始化含4个整型元素的一维数组是( )
A.int a = [1, 2, 3, 4];
B.int a(4) = {1, 2, 3, 4};
C.int [4] a = {1, 2, 3, 4};
D.int a[4] = {1, 2, 3, 4};
【答案】D
【解析】一维数组定义要先写元素类型和数组名,再在方括号中给出长度;初始化列表使用花括号。
13.二维数组a按下标访问时,下列printf输出的是( )
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
printf("%d
", a[1][0] + a[0][2]);
A.5
B.6
C.7
D.8
【答案】C
【解析】a[1][0]为4,a[0][2]为3,二者相加为7;二维数组的下标从0开始。
14.若随后要用printf("%s", name)输出字符串"Liu",正确的定义是( )
A.char name = "Liu";
B.char name[3] = "Liu";
C.char name[6] = "Liu";
D.char name[6] = "Li";
【答案】C
【解析】字符串需要以'\0'结束,"Liu"占用4个字符位置;char name[6]容量足够且可以作为字符串输出。
15.通过指针p赋值后,变量x的值是( )
int x = 12;
int *p = &x;
*p = 20;
A.12
B.20
C.10
D.0
【答案】B
【解析】p保存x的地址,*p访问该地址对应的变量;给*p赋20等价于给x赋20。
16.已定义int a[2][3]; int (*p)[3] = a;,访问a[0][1]的表达式是( )
A.p[1][0]
B.p[0][1]
C.*p[0]
D.p[0]
【答案】B
【解析】p是指向含3个int元素的一维数组的指针,p[0]表示第一行,p[0][1]表示该行下标为1的元素。
17.函数add被调用并返回后,main函数输出的是( )
int add(int a, int b)
{
return a + b;
}
int main(void)
{
printf("%d
", add(3, 5));
return 0;
}
A.5
B.6
C.15
D.8
【答案】D
【解析】函数add接收3和5两个实参并返回它们的和,main函数把返回值按%d输出,因此结果为8。
18.正确地定义并初始化一个含学号和等级字符的结构体变量是( )
A.struct Student { int id; char grade; } s = {101, "A"};
B.struct Student { int id; char grade; } s = {101, 'A'};
C.struct Student { int id; char grade; } = s {101, 'A'};
D.Student struct { int id; char grade; } s = {101, 'A'};
【答案】B
【解析】结构体定义以struct开头,char成员用字符常量'A'初始化;字符串"A"不能直接初始化单个char成员。
19.数组实参传给sumArray后,函数调用结果是( )
int sumArray(int a[], int n)
{
int i, s = 0;
for (i = 0; i < n; i++) s += a[i];
return s;
}
int main(void)
{
int a[3] = {2, 4, 6};
printf("%d
", sumArray(a, 3));
return 0;
}
A.12
B.6
C.8
D.14
【答案】A
【解析】sumArray通过形参a依次访问三个数组元素2、4、6并累加,返回12;调用时数组名a作为实参传入。
20.break与continue共同作用后,变量count的值是( )
int i, count = 0;
for (i = 1; i <= 6; i++)
{
if (i == 3) continue;
if (i == 5) break;
count++;
}
A.2
B.4
C.6
D.3
【答案】D
【解析】i为1、2、4时count各加1;i为3时continue跳过加法,i为5时break结束循环,因此count为3。
二、简答题(共2题,每题10分,共20分)
1.阅读下列程序,写出输出结果,并说明程序的功能。
#include <stdio.h>
int main(void)
{
int a[5] = {3, 6, 1, 8, 4};
int i, sum = 0, count = 0;
for (i = 0; i < 5; i++)
{
if (a[i] % 2 == 0)
{
sum += a[i];
count++;
}
}
printf("%d %d
", count, sum);
return 0;
}
【答案】输出结果为:3 18。程序遍历一维数组,筛选出数组中的所有偶数元素,统计偶数元素的个数,同时累加计算所有偶数元素的总和,最终依次输出偶数个数、偶数总和。
【解析】给定数组元素为{3, 6, 1, 8, 4},逐一判断奇偶性:3为奇数、6为偶数、1为奇数、8为偶数、4为偶数。其中有效偶数为6、8、4,共计3个;偶数求和:6+8+4=18。因此程序最终输出计数结果3、求和结果18。本题考查一维数组遍历、for循环结构、if条件判断、取模运算的基础应用,核心考点为偶数判定与数组数据统计累加逻辑。原答案存在数据统计失误,遗漏数组元素4,导致结果错误。
2.阅读下列程序,写出输出结果,并说明形参p在函数中的作用。
#include <stdio.h>
struct Student
{
char name[10];
int score;
};
void addBonus(struct Student *p)
{
if (p->score < 60)
p->score += 10;
}
int main(void)
{
struct Student s = {"Li", 55};
addBonus(&s);
printf("%s %d
", s.name, s.score);
return 0;
}
【答案】输出结果为:Li 65。p是指向结构体变量s的指针形参,函数通过p->score访问并修改调用者s中的score成员。
【解析】addBonus接收&s后,p保存s的地址;score小于60时加10。p->score等价于(*p).score,修改会反映到s本身。
三、案例分析题(共1题,共10分)
1.下列程序的功能是输出数组中的最大值。请填写3处空缺,使程序能够正确编译运行,并写出程序输出结果。
#include <stdio.h>
int maxValue(int a[], int n)
{
int i, max = a[0];
for (i = 1; /* (1) */; i++)
{
if (/* (2) */)
max = a[i];
}
return max;
}
int main(void)
{
int a[5] = {12, 7, 19, 5, 10};
printf("%d
", /* (3) */);
return 0;
}
【答案】(1)i < n;(2)a[i] > max;(3)maxValue(a, 5)。程序输出结果为:19。
【解析】循环从下标1开始逐个比较剩余元素,条件(2)成立时更新max。main将数组名a和元素个数5传给函数,函数返回最大值19。
四、综合应用题(共1题,共10分)
1.编写完整C程序:输入3名学生的姓名和3门课程成绩,计算并保存每名学生的平均分,依次输出姓名和平均分,最后输出平均分不低于60分的学生人数。要求:使用结构体数组保存学生信息;使用函数计算平均分;函数通过指向结构体的指针修改平均分成员;姓名按不含空格的字符串输入。
【答案】参考程序:
#include <stdio.h>
#define STUDENT_COUNT 3
#define COURSE_COUNT 3
struct Student
{
char name[12];
int score[COURSE_COUNT];
float average;
};
float getAverage(int score[], int n)
{
int i, sum = 0;
for (i = 0; i < n; i++)
sum += score[i];
return (float)sum / n;
}
void calculateAverage(struct Student *p)
{
p->average = getAverage(p->score, COURSE_COUNT);
}
int main(void)
{
struct Student students[STUDENT_COUNT];
int i, j, passCount = 0;
for (i = 0; i < STUDENT_COUNT; i++)
{
scanf("%11s", students[i].name);
for (j = 0; j < COURSE_COUNT; j++)
scanf("%d", &students[i].score[j]);
calculateAverage(&students[i]);
if (students[i].average >= 60.0f)
passCount++;
}
for (i = 0; i < STUDENT_COUNT; i++)
printf("%s %.2f
", students[i].name, students[i].average);
printf("%d
", passCount);
return 0;
}
【解析】程序用结构体数组保存3名学生的姓名、成绩数组和平均分。getAverage通过数组形参遍历成绩并返回浮点平均值;calculateAverage通过结构体指针修改average成员。main使用嵌套for循环完成输入,使用if统计及格人数,最后输出结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第74卷,为课程综合卷,按《C语言程序设计知识》课程综合范围和要求编写。具体内容为:基本数据类型与顺序程序设计、分支程序设计、循环程序设计、数组与指针、函数与结构体。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第74卷 课程综合卷——C语言程序设计知识
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.定义一个值不再改变、初值为100的整型常量,正确语句是( )
A.int const = MAX 100;
B.const int MAX = 100;
C.const MAX = 100;
D.int MAX = const 100;
2.若从键盘输入5,运行下列程序段后输出的是( )
int n;
scanf("%d", &n);
n = n + 3;
printf("%d
", n);
A.8
B.5
C.3
D.2
3.表达式x < y && y % 2 == 1的值是( )
int x = 4, y = 7;
printf("%d
", x < y && y % 2 == 1);
A.0
B.1
C.4
D.7
4.变量x为6时,下列if语句的输出是( )
int x = 6;
if (x % 2 == 0)
printf("E");
else
printf("O");
A.O
B.EO
C.E
D.无输出
5.变量n为2时,switch语句执行后的输出是( )
int n = 2;
switch (n)
{
case 1: printf("A"); break;
case 2: printf("B"); break;
default: printf("C");
}
A.A
B.C
C.B
D.BC
6.while循环结束后,变量s的值是( )
int i = 1, s = 0;
while (i <= 3)
{
s += i;
i++;
}
A.6
B.3
C.5
D.7
7.do-while循环结束后,变量i的值是( )
int i = 0;
do
{
i += 2;
} while (i < 5);
A.6
B.4
C.5
D.8
8.for循环完成累加后,变量s的值是( )
int i, s = 0;
for (i = 1; i <= 4; i++)
s += i;
A.4
B.6
C.10
D.11
9.嵌套循环全部执行后,变量c的值是( )
int i, j, c = 0;
for (i = 1; i <= 2; i++)
for (j = 1; j <= 3; j++)
c++;
A.3
B.5
C.9
D.6
10.当break条件满足时,循环结束后变量s的值是( )
int i, s = 0;
for (i = 1; i <= 5; i++)
{
if (i == 4) break;
s += i;
}
A.3
B.10
C.15
D.6
11.continue跳过偶数后,变量s的值是( )
int i, s = 0;
for (i = 1; i <= 5; i++)
{
if (i % 2 == 0) continue;
s += i;
}
A.9
B.6
C.12
D.15
12.正确地定义并初始化含4个整型元素的一维数组是( )
A.int a = [1, 2, 3, 4];
B.int a(4) = {1, 2, 3, 4};
C.int [4] a = {1, 2, 3, 4};
D.int a[4] = {1, 2, 3, 4};
13.二维数组a按下标访问时,下列printf输出的是( )
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
printf("%d
", a[1][0] + a[0][2]);
A.5
B.6
C.7
D.8
14.若随后要用printf("%s", name)输出字符串"Liu",正确的定义是( )
A.char name = "Liu";
B.char name[3] = "Liu";
C.char name[6] = "Liu";
D.char name[6] = "Li";
15.通过指针p赋值后,变量x的值是( )
int x = 12;
int *p = &x;
*p = 20;
A.12
B.20
C.10
D.0
16.已定义int a[2][3]; int (*p)[3] = a;,访问a[0][1]的表达式是( )
A.p[1][0]
B.p[0][1]
C.*p[0]
D.p[0]
17.函数add被调用并返回后,main函数输出的是( )
int add(int a, int b)
{
return a + b;
}
int main(void)
{
printf("%d
", add(3, 5));
return 0;
}
A.5
B.6
C.15
D.8
18.正确地定义并初始化一个含学号和等级字符的结构体变量是( )
A.struct Student { int id; char grade; } s = {101, "A"};
B.struct Student { int id; char grade; } s = {101, 'A'};
C.struct Student { int id; char grade; } = s {101, 'A'};
D.Student struct { int id; char grade; } s = {101, 'A'};
19.数组实参传给sumArray后,函数调用结果是( )
int sumArray(int a[], int n)
{
int i, s = 0;
for (i = 0; i < n; i++) s += a[i];
return s;
}
int main(void)
{
int a[3] = {2, 4, 6};
printf("%d
", sumArray(a, 3));
return 0;
}
A.12
B.6
C.8
D.14
20.break与continue共同作用后,变量count的值是( )
int i, count = 0;
for (i = 1; i <= 6; i++)
{
if (i == 3) continue;
if (i == 5) break;
count++;
}
A.2
B.4
C.6
D.3
二、简答题(共2题,每题10分,共20分)
1.阅读下列程序,写出输出结果,并说明程序的功能。
#include <stdio.h>
int main(void)
{
int a[5] = {3, 6, 1, 8, 4};
int i, sum = 0, count = 0;
for (i = 0; i < 5; i++)
{
if (a[i] % 2 == 0)
{
sum += a[i];
count++;
}
}
printf("%d %d
", count, sum);
return 0;
}
2.阅读下列程序,写出输出结果,并说明形参p在函数中的作用。
#include <stdio.h>
struct Student
{
char name[10];
int score;
};
void addBonus(struct Student *p)
{
if (p->score < 60)
p->score += 10;
}
int main(void)
{
struct Student s = {"Li", 55};
addBonus(&s);
printf("%s %d
", s.name, s.score);
return 0;
}
三、案例分析题(共1题,共10分)
1.下列程序的功能是输出数组中的最大值。请填写3处空缺,使程序能够正确编译运行,并写出程序输出结果。
#include <stdio.h>
int maxValue(int a[], int n)
{
int i, max = a[0];
for (i = 1; /* (1) */; i++)
{
if (/* (2) */)
max = a[i];
}
return max;
}
int main(void)
{
int a[5] = {12, 7, 19, 5, 10};
printf("%d
", /* (3) */);
return 0;
}
四、综合应用题(共1题,共10分)
1.编写完整C程序:输入3名学生的姓名和3门课程成绩,计算并保存每名学生的平均分,依次输出姓名和平均分,最后输出平均分不低于60分的学生人数。要求:使用结构体数组保存学生信息;使用函数计算平均分;函数通过指向结构体的指针修改平均分成员;姓名按不含空格的字符串输入。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$