内容正文:
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第76卷,为课程综合卷,按《C语言程序设计知识》课程综合范围和要求编写。具体内容为:基本数据类型与顺序程序设计、分支程序设计、循环程序设计、数组与指针、函数与结构体。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第76卷 课程综合卷——C语言程序设计知识
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.变量a和常量step参与运算后,程序输出的是( )
int a = 5;
const int step = 2;
a += step;
printf("%d
", a);
A.5
B.7
C.2
D.10
2.按运算符优先级计算,下面程序输出的是( )
int a = 2, b = 3;
printf("%d
", a + b * 2);
A.8
B.10
C.7
D.6
3.调用strlen统计字符串长度后,程序输出的是( )
#include <string.h>
printf("%d
", (int)strlen("C2026"));
A.4
B.6
C.2026
D.5
4.短路求值完成后,程序输出的是( )
int x = 0;
int y = x && ++x;
printf("%d %d
", y, x);
A.0 1
B.1 0
C.0 0
D.1 1
5.变量n为14时,执行条件语句输出的是( )
int n = 14;
if (n % 7 == 0)
printf("X");
else if (n % 2 == 0)
printf("Y");
else
printf("Z");
A.Y
B.Z
C.X
D.N
6.m未命中任何case时,switch最终打印的字符是( )
int m = 4;
switch (m)
{
case 1: printf("A"); break;
case 3: printf("C"); break;
default: printf("Z");
}
A.Z
B.A
C.C
D.无输出
7.while循环完成3次乘法后,power的值是( )
int i = 1, power = 1;
while (i <= 3)
{
power *= 2;
i++;
}
A.4
B.6
C.12
D.8
8.do-while程序将整数123倒序后,变量reverse的值是( )
int n = 123, reverse = 0;
do
{
reverse = reverse * 10 + n % 10;
n /= 10;
} while (n > 0);
A.123
B.321
C.231
D.312
9.for循环累加所有不大于5的奇数后,sum的值是( )
int i, sum = 0;
for (i = 1; i <= 5; i++)
if (i % 2 != 0)
sum += i;
A.6
B.10
C.15
D.9
10.下列嵌套循环的循环体总共执行多少次( )
int i, j, count = 0;
for (i = 1; i <= 3; i++)
for (j = 1; j <= i; j++)
count++;
A.6
B.3
C.4
D.9
11.该循环记录的有效迭代次数是( )
int i, count = 0;
for (i = 1; i <= 7; i++)
{
if (i == 2) continue;
if (i == 6) break;
count++;
}
A.3
B.5
C.4
D.6
12.数组初始化后,printf输出的两个值是( )
int a[5] = {2, 4};
printf("%d %d
", a[1], a[4]);
A.2 4
B.4 2
C.0 4
D.4 0
13.计算一维数组元素个数后,程序输出的是( )
int a[] = {3, 1, 4, 1};
printf("%d
", (int)(sizeof(a) / sizeof(a[0])));
A.3
B.4
C.5
D.16
14.取出二维数组第二行的两端元素相加,程序输出的是( )
int a[2][3] = {{1, 3, 5}, {2, 4, 6}};
printf("%d
", a[1][0] + a[1][2]);
A.8
B.6
C.7
D.10
15.字符数组按字符和结束标志初始化后,程序输出的是( )
char s[6] = {'r', 'o', 'b', 'o', 't', '\0'};
printf("%c
", s[3]);
A.r
B.b
C.o
D.t
16.通过指针修改x后,printf输出的是( )
int x = 9;
int *p = &x;
*p -= 4;
printf("%d
", x);
A.4
B.9
C.13
D.5
17.把二维数组第二行首元素改为10后,a[1][0]的值是( )
int a[2][2] = {{1, 2}, {3, 4}};
int (*p)[2] = a;
p[1][0] = 10;
printf("%d
", a[1][0]);
A.10
B.11
C.13
D.18
18.调用adjust(10)所得返回值是( )
int adjust(int n)
{
return n / 2 + 3;
}
printf("%d
", adjust(10));
A.5
B.8
C.7
D.10
19.结构体变量初始化后,表达式b.pages / 10的值是( )
struct Book
{
int pages;
char type;
};
struct Book b = {120, 'P'};
printf("%d
", b.pages / 10);
A.10
B.11
C.12
D.120
20.函数通过结构体指针更新成员后,程序输出的是( )
struct Point { int x, y; };
void move(struct Point *p)
{
p->x += 2;
p->y -= 1;
}
struct Point q = {4, 7};
move(&q);
printf("%d %d
", q.x, q.y);
A.4 7
B.6 6
C.6 7
D.4 6
二、简答题(共2题,每题10分,共20分)
1.阅读下列程序,写出输出结果,并说明数组形参和返回值在函数中的作用。
#include <stdio.h>
int transformedSum(int a[], int n)
{
int i, total = 0;
for (i = 0; i < n; i++)
{
if (a[i] > 5)
total += a[i] - 5;
}
return total;
}
int main(void)
{
int data[5] = {3, 8, 6, 10, 4};
printf("%d
", transformedSum(data, 5));
return 0;
}
2.阅读下列程序,写出输出结果,并说明结构体指针形参如何保存计算结果。
#include <stdio.h>
struct Range
{
int max;
int min;
};
void findRange(int a[], int n, struct Range *r)
{
int i;
r->max = a[0];
r->min = a[0];
for (i = 1; i < n; i++)
{
if (a[i] > r->max) r->max = a[i];
if (a[i] < r->min) r->min = a[i];
}
}
int main(void)
{
int data[5] = {6, 2, 9, 4, 7};
struct Range result;
findRange(data, 5, &result);
printf("%d %d
", result.max, result.min);
return 0;
}
三、案例分析题(共1题,共10分)
1.下列程序用于统计成绩数组中高于给定分数的成绩个数。请填写3处空缺,使程序能够正确编译运行,并写出程序输出结果。
#include <stdio.h>
int countAbove(int a[], int n, int limit)
{
int i, count = 0;
for (i = 0; /* (1) */; i++)
{
if (a[i] > limit)
count++;
}
return count;
}
int main(void)
{
int score[6] = {56, 72, 68, 91, 45, 80};
printf("%d
", countAbove(score, /* (2) */, /* (3) */));
return 0;
}
四、综合应用题(共1题,共10分)
1.编写完整C程序:输入3名员工的编号和4天工作时长,计算每名员工的总时长与日均时长,输出日均时长最高的员工编号及其日均时长,并统计日均时长达到8小时的员工人数。要求:使用结构体数组保存员工信息;使用函数计算总时长和日均时长;函数通过结构体指针修改计算结果;使用循环完成输入、比较和统计。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第76卷,为课程综合卷,按《C语言程序设计知识》课程综合范围和要求编写。具体内容为:基本数据类型与顺序程序设计、分支程序设计、循环程序设计、数组与指针、函数与结构体。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第76卷 课程综合卷——C语言程序设计知识
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.变量a和常量step参与运算后,程序输出的是( )
int a = 5;
const int step = 2;
a += step;
printf("%d
", a);
A.5
B.7
C.2
D.10
【答案】B
【解析】a初值为5,const声明的step值为2;复合赋值a += step等价于a = a + step,因此输出7。
2.按运算符优先级计算,下面程序输出的是( )
int a = 2, b = 3;
printf("%d
", a + b * 2);
A.8
B.10
C.7
D.6
【答案】A
【解析】乘法优先于加法,a+b*2先计算3*2,再与2相加,结果为8。
3.调用strlen统计字符串长度后,程序输出的是( )
#include <string.h>
printf("%d
", (int)strlen("C2026"));
A.4
B.6
C.2026
D.5
【答案】D
【解析】字符串C2026由5个非结束字符组成,strlen返回不包括'\0'在内的字符数,因此结果为5。
4.短路求值完成后,程序输出的是( )
int x = 0;
int y = x && ++x;
printf("%d %d
", y, x);
A.0 1
B.1 0
C.0 0
D.1 1
【答案】C
【解析】x为0时逻辑与左侧已经为假,右侧++x不再执行;y和x均保持为0。
5.变量n为14时,执行条件语句输出的是( )
int n = 14;
if (n % 7 == 0)
printf("X");
else if (n % 2 == 0)
printf("Y");
else
printf("Z");
A.Y
B.Z
C.X
D.N
【答案】C
【解析】14除以7的余数为0,第一个if条件成立,直接输出X,不再判断后面的分支。
6.m未命中任何case时,switch最终打印的字符是( )
int m = 4;
switch (m)
{
case 1: printf("A"); break;
case 3: printf("C"); break;
default: printf("Z");
}
A.Z
B.A
C.C
D.无输出
【答案】A
【解析】m不匹配case 1和case 3,执行default分支输出Z。
7.while循环完成3次乘法后,power的值是( )
int i = 1, power = 1;
while (i <= 3)
{
power *= 2;
i++;
}
A.4
B.6
C.12
D.8
【答案】D
【解析】power初值为1,循环体执行3次,每次乘以2,因此最终为1×2×2×2=8。
8.do-while程序将整数123倒序后,变量reverse的值是( )
int n = 123, reverse = 0;
do
{
reverse = reverse * 10 + n % 10;
n /= 10;
} while (n > 0);
A.123
B.321
C.231
D.312
【答案】B
【解析】每次取n的个位放到reverse末位,再将n整除10;依次取出3、2、1,结果为321。
9.for循环累加所有不大于5的奇数后,sum的值是( )
int i, sum = 0;
for (i = 1; i <= 5; i++)
if (i % 2 != 0)
sum += i;
A.6
B.10
C.15
D.9
【答案】D
【解析】满足条件的数为1、3、5,sum=1+3+5=9。
10.下列嵌套循环的循环体总共执行多少次( )
int i, j, count = 0;
for (i = 1; i <= 3; i++)
for (j = 1; j <= i; j++)
count++;
A.6
B.3
C.4
D.9
【答案】A
【解析】外层i为1、2、3时,内层分别执行1、2、3次,总次数为1+2+3=6。
11.该循环记录的有效迭代次数是( )
int i, count = 0;
for (i = 1; i <= 7; i++)
{
if (i == 2) continue;
if (i == 6) break;
count++;
}
A.3
B.5
C.4
D.6
【答案】C
【解析】i为2时continue跳过本次计数,i为6时break结束循环;计数发生在i为1、3、4、5时,共4次。
12.数组初始化后,printf输出的两个值是( )
int a[5] = {2, 4};
printf("%d %d
", a[1], a[4]);
A.2 4
B.4 2
C.0 4
D.4 0
【答案】D
【解析】a[1]由初始化列表赋值为4;a[4]没有显式初值,数组剩余元素自动初始化为0。
13.计算一维数组元素个数后,程序输出的是( )
int a[] = {3, 1, 4, 1};
printf("%d
", (int)(sizeof(a) / sizeof(a[0])));
A.3
B.4
C.5
D.16
【答案】B
【解析】数组a有4个int元素,sizeof(a)/sizeof(a[0])得到数组总元素个数4。
14.取出二维数组第二行的两端元素相加,程序输出的是( )
int a[2][3] = {{1, 3, 5}, {2, 4, 6}};
printf("%d
", a[1][0] + a[1][2]);
A.8
B.6
C.7
D.10
【答案】A
【解析】第二行下标为1,两端元素是a[1][0]=2和a[1][2]=6,二者相加为8。
15.字符数组按字符和结束标志初始化后,程序输出的是( )
char s[6] = {'r', 'o', 'b', 'o', 't', '\0'};
printf("%c
", s[3]);
A.r
B.b
C.o
D.t
【答案】C
【解析】s[3]是字符数组中的第4个元素,按下标从0开始计算,其值为字符o;最后的'\0'是字符串结束标志。
16.通过指针修改x后,printf输出的是( )
int x = 9;
int *p = &x;
*p -= 4;
printf("%d
", x);
A.4
B.9
C.13
D.5
【答案】D
【解析】p保存x的地址,*p访问x本身;*p -= 4使x由9变为5。
17.把二维数组第二行首元素改为10后,a[1][0]的值是( )
int a[2][2] = {{1, 2}, {3, 4}};
int (*p)[2] = a;
p[1][0] = 10;
printf("%d
", a[1][0]);
A.10
B.11
C.13
D.18
【答案】A
【解析】p指向每行含2个int元素的数组,p[1][0]就是a[1][0];赋值后该元素为10。
18.调用adjust(10)所得返回值是( )
int adjust(int n)
{
return n / 2 + 3;
}
printf("%d
", adjust(10));
A.5
B.8
C.7
D.10
【答案】B
【解析】adjust先把10整除2得到5,再加3,返回值为8。
19.结构体变量初始化后,表达式b.pages / 10的值是( )
struct Book
{
int pages;
char type;
};
struct Book b = {120, 'P'};
printf("%d
", b.pages / 10);
A.10
B.11
C.12
D.120
【答案】C
【解析】结构体初始化按成员顺序将pages设为120,整型除法120/10的结果为12。
20.函数通过结构体指针更新成员后,程序输出的是( )
struct Point { int x, y; };
void move(struct Point *p)
{
p->x += 2;
p->y -= 1;
}
struct Point q = {4, 7};
move(&q);
printf("%d %d
", q.x, q.y);
A.4 7
B.6 6
C.6 7
D.4 6
【答案】B
【解析】move接收结构体变量q的地址,通过p->x和p->y分别加2、减1,因此q变为(6,6)。
二、简答题(共2题,每题10分,共20分)
1.阅读下列程序,写出输出结果,并说明数组形参和返回值在函数中的作用。
#include <stdio.h>
int transformedSum(int a[], int n)
{
int i, total = 0;
for (i = 0; i < n; i++)
{
if (a[i] > 5)
total += a[i] - 5;
}
return total;
}
int main(void)
{
int data[5] = {3, 8, 6, 10, 4};
printf("%d
", transformedSum(data, 5));
return 0;
}
【答案】输出结果为:9。形参a接收数组首元素地址,n表示有效元素个数;函数把大于5的元素分别减5后累加,8、6、10贡献3、1、5,返回总和9。
【解析】data作为数组实参传给a,函数通过return把计算结果交给main,main再按%d输出。
2.阅读下列程序,写出输出结果,并说明结构体指针形参如何保存计算结果。
#include <stdio.h>
struct Range
{
int max;
int min;
};
void findRange(int a[], int n, struct Range *r)
{
int i;
r->max = a[0];
r->min = a[0];
for (i = 1; i < n; i++)
{
if (a[i] > r->max) r->max = a[i];
if (a[i] < r->min) r->min = a[i];
}
}
int main(void)
{
int data[5] = {6, 2, 9, 4, 7};
struct Range result;
findRange(data, 5, &result);
printf("%d %d
", result.max, result.min);
return 0;
}
【答案】输出结果为:9 2。函数先用数组首元素初始化max和min,再遍历其余元素;r指向调用者的result,r->max和r->min的修改会保留到函数返回后。
【解析】结构体指针形参允许函数一次修改结构体的多个成员,数组形参和n共同确定比较范围。
三、案例分析题(共1题,共10分)
1.下列程序用于统计成绩数组中高于给定分数的成绩个数。请填写3处空缺,使程序能够正确编译运行,并写出程序输出结果。
#include <stdio.h>
int countAbove(int a[], int n, int limit)
{
int i, count = 0;
for (i = 0; /* (1) */; i++)
{
if (a[i] > limit)
count++;
}
return count;
}
int main(void)
{
int score[6] = {56, 72, 68, 91, 45, 80};
printf("%d
", countAbove(score, /* (2) */, /* (3) */));
return 0;
}
【答案】(1)i < n;(2)6;(3)70。程序输出结果为:3。
【解析】循环依次访问6个成绩,比较a[i]与70;72、91、80满足条件,函数返回3。
四、综合应用题(共1题,共10分)
1.编写完整C程序:输入3名员工的编号和4天工作时长,计算每名员工的总时长与日均时长,输出日均时长最高的员工编号及其日均时长,并统计日均时长达到8小时的员工人数。要求:使用结构体数组保存员工信息;使用函数计算总时长和日均时长;函数通过结构体指针修改计算结果;使用循环完成输入、比较和统计。
【答案】参考程序:
#include <stdio.h>
#define EMPLOYEE_COUNT 3
#define DAY_COUNT 4
struct Employee
{
int id;
int hours[DAY_COUNT];
int total;
float average;
};
void calculateWork(struct Employee *p)
{
int i;
p->total = 0;
for (i = 0; i < DAY_COUNT; i++)
p->total += p->hours[i];
p->average = (float)p->total / DAY_COUNT;
}
int main(void)
{
struct Employee employees[EMPLOYEE_COUNT];
int i, j, qualified = 0, best = 0;
for (i = 0; i < EMPLOYEE_COUNT; i++)
{
scanf("%d", &employees[i].id);
for (j = 0; j < DAY_COUNT; j++)
scanf("%d", &employees[i].hours[j]);
calculateWork(&employees[i]);
if (employees[i].average >= 8.0f)
qualified++;
if (i == 0 || employees[i].average > employees[best].average)
best = i;
}
printf("%d %.2f
", employees[best].id, employees[best].average);
printf("%d
", qualified);
return 0;
}
【解析】程序使用结构体数组保存员工编号、4天时长、总时长和平均时长。calculateWork通过结构体指针清零并累加hours数组,再计算平均值;main使用嵌套for循环完成输入,利用if统计达标人数并更新最高平均值下标,最后输出最高员工信息和达标人数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$