内容正文:
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第75卷,为课程综合卷,按《C语言程序设计知识》课程综合范围和要求编写。具体内容为:基本数据类型与顺序程序设计、分支程序设计、循环程序设计、数组与指针、函数与结构体。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第75卷 课程综合卷——C语言程序设计知识
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.在标准C语言中,执行下列程序输出的是( )
#include <stdio.h>
char c = 'A';
printf("%d
", (int)sizeof(c));
A.0
B.2
C.1
D.4
2.从键盘输入8和3后,下面程序输出的结果是( )
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d
", a - b, a * b);
A.11 24
B.5 11
C.24 5
D.5 24
3.调用下列程序段中的函数后,输出结果是( )
#include <stdlib.h>
int n = -7;
printf("%d
", abs(n));
A.7
B.-7
C.49
D.0
4.若x为0、y为5,表达式的值是( )
int x = 0, y = 5;
printf("%d
", x == 0 || y > 3);
A.0
B.1
C.5
D.-1
5.变量score为78时,执行下列条件语句输出的是( )
int score = 78;
if (score >= 90)
printf("A");
else if (score >= 80)
printf("B");
else if (score >= 60)
printf("C");
else
printf("D");
A.A
B.C
C.B
D.D
6.变量level为2时,switch语句输出的是( )
int level = 2;
switch (level)
{
case 1: printf("A"); break;
case 2: printf("B");
case 3: printf("C"); break;
default: printf("D");
}
A.B
B.C
C.ABC
D.BC
7.变量n连续整除2,直至它不再为正数,程序结束时n为( )
int n = 10;
while (n > 0)
n /= 2;
A.0
B.1
C.2
D.3
8.累计1到3的处理过程采用do-while,sum最终为( )
int k = 1, sum = 0;
do
{
sum += k;
k++;
} while (k <= 3);
A.3
B.5
C.6
D.7
9.for循环结束后,变量product的值是( )
int i, product = 1;
for (i = 1; i <= 4; i++)
product *= i;
A.24
B.6
C.12
D.120
10.下列嵌套循环执行后,变量hits的值是( )
int i, j, hits = 0;
for (i = 1; i <= 2; i++)
{
for (j = 1; j <= 3; j++)
if ((i + j) % 2 == 0)
hits++;
}
A.2
B.5
C.6
D.3
11.跳过首次迭代并在i为5时退出,total最终等于( )
int i, total = 0;
for (i = 1; i <= 6; i++)
{
if (i == 1) continue;
if (i == 5) break;
total += i;
}
A.6
B.9
C.12
D.15
12.下列数组初始化后,a[1]的值是( )
int a[4] = {1};
A.1
B.2
C.0
D.3
13.程序输出的一维数组最大值是( )
int a[5] = {7, 18, 4, 12, 15};
int i, max = a[0];
for (i = 1; i < 5; i++)
if (a[i] > max) max = a[i];
printf("%d
", max);
A.7
B.12
C.15
D.18
14.二维数组初始化后,表达式a[0][1] + a[1][2]的值是( )
int a[2][3] = {{1, 2, 3}, {4, 5, 7}};
printf("%d
", a[0][1] + a[1][2]);
A.9
B.6
C.7
D.8
15.若要把字符数组word作为字符串Code输出,正确的定义是( )
A.char word = "Code";
B.char word[4] = "Code";
C.char word[5] = "Code";
D.char word[5] = "Cod";
16.交换函数通过地址传递参数,调用结束时b的内容为( )
void swap(int *x, int *y)
{
int t = *x;
*x = *y;
*y = t;
}
int a = 6, b = 2;
swap(&a, &b);
A.2
B.6
C.4
D.8
17.借助数组指针p计算两项差值,程序输出的是( )
int a[2][2] = {{2, 4}, {6, 8}};
int (*p)[2] = a;
printf("%d
", p[1][0] - p[0][1]);
A.0
B.4
C.2
D.6
18.函数power返回后,main函数输出的是( )
int power(int base, int n)
{
int i, result = 1;
for (i = 0; i < n; i++)
result *= base;
return result;
}
printf("%d
", power(3, 3));
A.6
B.9
C.81
D.27
19.下列结构体变量初始化后,s.score的值是( )
struct Student
{
char name[10];
int score;
};
struct Student s = {"Wang", 86};
A.86
B.68
C.76
D.96
20.调用函数后,结构体变量s的level成员是( )
struct Student { int score; char level; };
void setLevel(struct Student *p)
{
if (p->score >= 90) p->level = 'A';
}
struct Student s = {95, 'C'};
setLevel(&s);
A.'B'
B.'A'
C.'C'
D.'D'
二、简答题(共2题,每题10分,共20分)
1.阅读下列程序,写出输出结果,并说明循环和数组元素访问的作用。
#include <stdio.h>
int main(void)
{
int a[6] = {4, 9, 2, 7, 5, 8};
int i, evenSum = 0, oddCount = 0;
for (i = 0; i < 6; i++)
{
if (a[i] % 2 == 0)
evenSum += a[i];
else
oddCount++;
}
printf("%d %d
", evenSum, oddCount);
return 0;
}
2.阅读下列程序,写出输出结果,并说明函数形参及返回值的作用。
#include <stdio.h>
int countGreater(int a[], int n, int limit)
{
int i, count = 0;
for (i = 0; i < n; i++)
if (a[i] > limit)
count++;
return count;
}
int main(void)
{
int data[5] = {6, 12, 4, 15, 9};
printf("%d
", countGreater(data, 5, 8));
return 0;
}
三、案例分析题(共1题,共10分)
1.下列程序用于统计成绩数组中的最高分、最低分和平均分。请填写3处空缺,使程序能够正确编译运行,并写出程序输出结果。
#include <stdio.h>
void analyze(int a[], int n, int *max, int *min, double *avg)
{
int i, sum = 0;
*max = a[0];
*min = a[0];
for (i = 0; /* (1) */; i++)
{
if (a[i] > *max) *max = a[i];
if (a[i] < *min) *min = a[i];
sum += a[i];
}
*avg = (double)sum / n;
}
int main(void)
{
int score[5] = {76, 91, 68, 84, 88};
int max, min;
double avg;
analyze(score, /* (2) */, &max, &min, &avg);
printf("%d %d %.1f
", max, min, /* (3) */);
return 0;
}
四、综合应用题(共1题,共10分)
1.编写完整C程序:输入4名选手的编号和3轮成绩,计算每名选手的总分与平均分,输出平均分最高的选手编号及其平均分,并统计平均分达到60分的选手人数。要求:使用结构体数组保存选手信息;使用函数计算总分;函数通过结构体指针修改总分和平均分成员;使用循环完成输入和统计。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第75卷,为课程综合卷,按《C语言程序设计知识》课程综合范围和要求编写。具体内容为:基本数据类型与顺序程序设计、分支程序设计、循环程序设计、数组与指针、函数与结构体。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第75卷 课程综合卷——C语言程序设计知识
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.在标准C语言中,执行下列程序输出的是( )
#include <stdio.h>
char c = 'A';
printf("%d
", (int)sizeof(c));
A.0
B.2
C.1
D.4
【答案】C
【解析】char类型对象占用1个字节,sizeof(c)的结果为1;强制转换为int后可按%d输出。
2.从键盘输入8和3后,下面程序输出的结果是( )
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d
", a - b, a * b);
A.11 24
B.5 11
C.24 5
D.5 24
【答案】D
【解析】a-b等于5,a*b等于24;两个%d按printf参数顺序输出这两个表达式的结果。
3.调用下列程序段中的函数后,输出结果是( )
#include <stdlib.h>
int n = -7;
printf("%d
", abs(n));
A.7
B.-7
C.49
D.0
【答案】A
【解析】abs函数返回整数的绝对值,abs(-7)的结果为7。
4.若x为0、y为5,表达式的值是( )
int x = 0, y = 5;
printf("%d
", x == 0 || y > 3);
A.0
B.1
C.5
D.-1
【答案】B
【解析】x==0为真,y>3也为真,两个关系表达式由逻辑或连接,结果为真,C语言用1表示真。
5.变量score为78时,执行下列条件语句输出的是( )
int score = 78;
if (score >= 90)
printf("A");
else if (score >= 80)
printf("B");
else if (score >= 60)
printf("C");
else
printf("D");
A.A
B.C
C.B
D.D
【答案】B
【解析】score小于80但不小于60,前两个条件不成立,第三个else if分支成立,所以输出C。
6.变量level为2时,switch语句输出的是( )
int level = 2;
switch (level)
{
case 1: printf("A"); break;
case 2: printf("B");
case 3: printf("C"); break;
default: printf("D");
}
A.B
B.C
C.ABC
D.BC
【答案】D
【解析】level匹配case 2,先输出B;该分支没有break,继续执行case 3输出C,随后break结束switch。
7.变量n连续整除2,直至它不再为正数,程序结束时n为( )
int n = 10;
while (n > 0)
n /= 2;
A.0
B.1
C.2
D.3
【答案】A
【解析】n从10开始每次整除以2,依次变为5、2、1、0;当n为0时条件n>0不成立,循环结束。
8.累计1到3的处理过程采用do-while,sum最终为( )
int k = 1, sum = 0;
do
{
sum += k;
k++;
} while (k <= 3);
A.3
B.5
C.6
D.7
【答案】C
【解析】循环先执行一次,k依次为1、2、3并累加到sum;k变为4后条件k<=3不成立,sum为6。
9.for循环结束后,变量product的值是( )
int i, product = 1;
for (i = 1; i <= 4; i++)
product *= i;
A.24
B.6
C.12
D.120
【答案】A
【解析】循环将1、2、3、4依次乘入product,结果为1×2×3×4=24。
10.下列嵌套循环执行后,变量hits的值是( )
int i, j, hits = 0;
for (i = 1; i <= 2; i++)
{
for (j = 1; j <= 3; j++)
if ((i + j) % 2 == 0)
hits++;
}
A.2
B.5
C.6
D.3
【答案】D
【解析】外层i取1、2,内层j取1、2、3;满足i+j为偶数的组合是(1,1)、(1,3)、(2,2),因此hits为3。
11.跳过首次迭代并在i为5时退出,total最终等于( )
int i, total = 0;
for (i = 1; i <= 6; i++)
{
if (i == 1) continue;
if (i == 5) break;
total += i;
}
A.6
B.9
C.12
D.15
【答案】B
【解析】i为1时先continue不累加;i为2、3、4分别累加2、3、4,i为5时break,因此total为9。
12.下列数组初始化后,a[1]的值是( )
int a[4] = {1};
A.1
B.2
C.0
D.3
【答案】C
【解析】初始化列表只给出a[0],其余未显式初始化的元素自动初始化为0,因此a[1]为0。
13.程序输出的一维数组最大值是( )
int a[5] = {7, 18, 4, 12, 15};
int i, max = a[0];
for (i = 1; i < 5; i++)
if (a[i] > max) max = a[i];
printf("%d
", max);
A.7
B.12
C.15
D.18
【答案】D
【解析】循环比较数组的5个元素,最大元素为18,函数返回max并输出。
14.二维数组初始化后,表达式a[0][1] + a[1][2]的值是( )
int a[2][3] = {{1, 2, 3}, {4, 5, 7}};
printf("%d
", a[0][1] + a[1][2]);
A.9
B.6
C.7
D.8
【答案】A
【解析】a[0][1]为2,a[1][2]为7,二者相加得到9;二维数组的两个下标都从0开始。
15.若要把字符数组word作为字符串Code输出,正确的定义是( )
A.char word = "Code";
B.char word[4] = "Code";
C.char word[5] = "Code";
D.char word[5] = "Cod";
【答案】C
【解析】字符串需要以'\0'结尾;word[5]能够保存Code的4个字符和结束标志,适合用%s输出。word[4]没有位置保存结束标志,不能作为完整C字符串安全使用。
16.交换函数通过地址传递参数,调用结束时b的内容为( )
void swap(int *x, int *y)
{
int t = *x;
*x = *y;
*y = t;
}
int a = 6, b = 2;
swap(&a, &b);
A.2
B.6
C.4
D.8
【答案】B
【解析】swap接收a和b的地址,通过指针间接访问并交换两个实参的值;调用后b得到原来a的值6。
17.借助数组指针p计算两项差值,程序输出的是( )
int a[2][2] = {{2, 4}, {6, 8}};
int (*p)[2] = a;
printf("%d
", p[1][0] - p[0][1]);
A.0
B.4
C.2
D.6
【答案】C
【解析】p是指向含2个int元素数组的指针,p[1][0]为6,p[0][1]为4,二者相减得到2。
18.函数power返回后,main函数输出的是( )
int power(int base, int n)
{
int i, result = 1;
for (i = 0; i < n; i++)
result *= base;
return result;
}
printf("%d
", power(3, 3));
A.6
B.9
C.81
D.27
【答案】D
【解析】power从1开始循环3次,每次乘以3,返回3×3×3=27。
19.下列结构体变量初始化后,s.score的值是( )
struct Student
{
char name[10];
int score;
};
struct Student s = {"Wang", 86};
A.86
B.68
C.76
D.96
【答案】A
【解析】结构体初始化列表按成员声明顺序给name和score赋值,因此s.score为86。
20.调用函数后,结构体变量s的level成员是( )
struct Student { int score; char level; };
void setLevel(struct Student *p)
{
if (p->score >= 90) p->level = 'A';
}
struct Student s = {95, 'C'};
setLevel(&s);
A.'B'
B.'A'
C.'C'
D.'D'
【答案】B
【解析】函数形参p指向s,score为90时满足条件,函数通过p->level把成员设置为字符常量'A'。
二、简答题(共2题,每题10分,共20分)
1.阅读下列程序,写出输出结果,并说明循环和数组元素访问的作用。
#include <stdio.h>
int main(void)
{
int a[6] = {4, 9, 2, 7, 5, 8};
int i, evenSum = 0, oddCount = 0;
for (i = 0; i < 6; i++)
{
if (a[i] % 2 == 0)
evenSum += a[i];
else
oddCount++;
}
printf("%d %d
", evenSum, oddCount);
return 0;
}
【答案】输出结果为:14 3。程序使用for循环遍历一维数组,通过下标a[i]访问元素;偶数4、2、8的和为14,奇数元素9、7、5共有3个。
【解析】循环变量i从0变化到5,if根据元素除以2的余数分支处理,else对应奇数元素计数。
2.阅读下列程序,写出输出结果,并说明函数形参及返回值的作用。
#include <stdio.h>
int countGreater(int a[], int n, int limit)
{
int i, count = 0;
for (i = 0; i < n; i++)
if (a[i] > limit)
count++;
return count;
}
int main(void)
{
int data[5] = {6, 12, 4, 15, 9};
printf("%d
", countGreater(data, 5, 8));
return 0;
}
【答案】输出结果为:3。形参a接收数组首元素地址,n表示有效元素个数,limit是比较基准;函数返回数组中大于8的元素个数。
【解析】数组中12、15、9大于8,count最终为3;函数调用时data、5和8分别传给a、n和limit。
三、案例分析题(共1题,共10分)
1.下列程序用于统计成绩数组中的最高分、最低分和平均分。请填写3处空缺,使程序能够正确编译运行,并写出程序输出结果。
#include <stdio.h>
void analyze(int a[], int n, int *max, int *min, double *avg)
{
int i, sum = 0;
*max = a[0];
*min = a[0];
for (i = 0; /* (1) */; i++)
{
if (a[i] > *max) *max = a[i];
if (a[i] < *min) *min = a[i];
sum += a[i];
}
*avg = (double)sum / n;
}
int main(void)
{
int score[5] = {76, 91, 68, 84, 88};
int max, min;
double avg;
analyze(score, /* (2) */, &max, &min, &avg);
printf("%d %d %.1f
", max, min, /* (3) */);
return 0;
}
【答案】(1)i < n;(2)5;(3)avg。程序输出结果为:91 68 81.4。
【解析】循环遍历数组并通过三个指针形参修改最高分、最低分和平均分;数组总和为407,平均值为407/5=81.4。
四、综合应用题(共1题,共10分)
1.编写完整C程序:输入4名选手的编号和3轮成绩,计算每名选手的总分与平均分,输出平均分最高的选手编号及其平均分,并统计平均分达到60分的选手人数。要求:使用结构体数组保存选手信息;使用函数计算总分;函数通过结构体指针修改总分和平均分成员;使用循环完成输入和统计。
【答案】参考程序:
#include <stdio.h>
#define PLAYER_COUNT 4
#define ROUND_COUNT 3
struct Player
{
int id;
int score[ROUND_COUNT];
int total;
double average;
};
void calculate(struct Player *p)
{
int i;
p->total = 0;
for (i = 0; i < ROUND_COUNT; i++)
p->total += p->score[i];
p->average = (double)p->total / ROUND_COUNT;
}
int main(void)
{
struct Player players[PLAYER_COUNT];
int i, j, qualified = 0, best = 0;
for (i = 0; i < PLAYER_COUNT; i++)
{
scanf("%d", &players[i].id);
for (j = 0; j < ROUND_COUNT; j++)
scanf("%d", &players[i].score[j]);
calculate(&players[i]);
if (players[i].average >= 60.0)
qualified++;
if (i == 0 || players[i].average > players[best].average)
best = i;
}
printf("%d %.2f
", players[best].id, players[best].average);
printf("%d
", qualified);
return 0;
}
【解析】程序用结构体数组保存编号、三轮成绩、总分和平均分。calculate通过结构体指针清零并累加成绩,再计算平均分;main使用嵌套循环完成输入,使用if统计达标人数并比较最高平均分,最后输出最高选手信息和达标人数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$