内容正文:
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第55卷,为专题训练卷,按“数组与指针”专题范围和要求编写。具体内容为:(1)理解一维数组的定义及初始化。(2)掌握一维数组元素的引用;(3)理解二维数组的定义及初始化。(4)掌握二维数组元素的引用;(5)掌握字符数组的定义及引用;(1)理解指针变量的定义及引用。(2)掌握指向数组的指针变量。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第55卷 专题训练——数组与指针
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.遍历int a[6]的全部元素时,循环变量i的初始值应为( )
A.0
B.1
C.5
D.6
2.遍历长度为n的一维数组时,避免访问越界的常用条件是( )
A.i <= n
B.i < n
C.i > n
D.i == n
3.执行下列程序后,a[3]的值是( )
int a[5] = {3, 1, 4, 2, 5};
int i;
for (i = 1; i < 5; i++)
a[i] = a[i] + a[i - 1];
A.8
B.10
C.9
D.12
4.执行下列程序后,changes的值是( )
int a[5] = {2, 5, 3, 6, 4};
int changes = 0, i;
for (i = 1; i < 5; i++)
if (a[i] > a[i - 1]) changes++;
A.1
B.3
C.2
D.4
5.执行下列程序后,pos的值是( )
int a[6] = {5, 8, 3, 8, 1, 6};
int pos = -1, i;
for (i = 0; i < 6; i++)
{
if (a[i] == 8)
{
pos = i;
break;
}
}
A.2
B.1
C.3
D.4
6.执行下列程序后,a[0]的值是( )
int a[3] = {6, 4, 2};
int t = a[0];
a[0] = a[2];
a[2] = t;
A.4
B.6
C.2
D.8
7.数组a中第i个元素的下一个元素应表示为( )
A.a[i]
B.a[i - 1]
C.a[i + 2]
D.a[i + 1]
8.执行下列程序后,a[2]的值是( )
int a[4] = {1, 2, 3, 4};
a[2] = a[0] + a[1];
A.1
B.4
C.2
D.3
9.执行下列程序后,result的值是( )
int a[5] = {5, 1, 4, 2, 3};
int result = a[0];
int i;
for (i = 1; i < 5; i++)
if (a[i] > result) result = a[i];
A.1
B.3
C.4
D.5
10.判断数组中是否存在目标值target时,找到目标后可将found设置为( )
A.-1
B.0
C.1
D.数组长度
11.执行下列程序后,evenSum的值是( )
int a[5] = {1, 4, 6, 3, 8};
int evenSum = 0, i;
for (i = 0; i < 5; i++)
if (a[i] % 2 == 0) evenSum += a[i];
A.10
B.12
C.18
D.21
12.将数组元素逆序访问时,最后一次访问的下标是( )
int a[5];
for (i = 4; i >= 0; i--)
A.0
B.1
C.4
D.5
13.执行下列程序后,a[0]的值是( )
int a[4] = {3, 1, 4, 2};
int i;
for (i = 0; i < 3; i++)
if (a[i] > a[i + 1]) { int t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; }
A.2
B.1
C.3
D.4
14.计算10个成绩总和时,sum变量应具备的特征是( )
A.只能保存单个字符
B.不能进行加法
C.只保存数组下标
D.能保存累加结果
15.某程序统计相邻数组元素差值大于4的次数,运行后gap的值是( )
int a[5] = {2, 5, 9, 14, 20};
int gap = 0, i;
for (i = 1; i < 5; i++)
if (a[i] - a[i - 1] > 4) gap++;
A.1
B.3
C.4
D.2
16.查找数组中第一个等于target的元素时,找到后使用break的作用是( )
A.结束整个循环
B.清空数组内容
C.修改数组长度
D.重新初始化数组
17.执行下列程序后,a[0]的值是( )
int a[4] = {1, 2, 3, 4};
int t = a[3], i;
for (i = 3; i > 0; i--)
a[i] = a[i - 1];
a[0] = t;
A.2
B.3
C.4
D.1
18.数组元素整体左移一位时,原a[0]通常应( )
A.自动变成数组长度
B.被保存或直接丢弃
C.复制到所有元素
D.只能放入a[0]
19.循环计算数组元素平均值时,平均值通常应使用( )
A.最大下标 / 最小下标
B.首元素 - 尾元素
C.元素个数 * 首元素
D.sum / 元素个数
20.设计数组遍历前,最应先明确的是( )
A.元素含义、长度和范围
B.输出颜色和桌面主题
C.键盘型号和显示器尺寸
D.文件图标和窗口主题
二、简答题(共2题,每题10分,共20分)
1.阅读程序,写出输出结果,并说明max和maxIndex的值。
#include <stdio.h>
int main()
{
int a[5] = {4, 9, 2, 7, 6};
int max = a[0], maxIndex = 0, i;
for (i = 1; i < 5; i++)
{
if (a[i] > max)
{
max = a[i];
maxIndex = i;
}
}
printf("%d %d
", max, maxIndex);
return 0;
}
2.阅读程序,写出输出结果,并说明count的值。
#include <stdio.h>
int main()
{
int a[6] = {2, 5, 8, 1, 6, 3};
int count = 0, i;
for (i = 0; i < 6; i++)
{
if (a[i] % 2 == 0)
count++;
}
printf("%d
", count);
return 0;
}
三、案例分析题(共1题,共10分)
1.某程序要求查找数组中最大的成绩并输出其下标,但原程序把maxIndex初始化为1,且遍历从下标2开始。请指出问题并修改。
#include <stdio.h>
int main()
{
int a[5] = {88, 92, 76, 95, 90};
int max = a[1], maxIndex = 1, i;
for (i = 2; i < 5; i++)
if (a[i] > max)
{
max = a[i];
maxIndex = i;
}
printf("%d %d
", max, maxIndex);
return 0;
}
四、综合应用题(共1题,共10分)
1.编写程序:输入10个整数存入数组,分别统计其中正数、负数和0的个数,并计算所有正数的和。
#include <stdio.h>
int main()
{
int a[10];
int positive = 0, negative = 0, zero = 0, positiveSum = 0;
int i;
for (i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
if (a[i] > 0)
{
positive++;
positiveSum += a[i];
}
else if (a[i] < 0)
negative++;
else
zero++;
}
printf("%d %d %d %d
", positive, negative, zero, positiveSum);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第55卷,为专题训练卷,按“数组与指针”专题范围和要求编写。具体内容为:(1)理解一维数组的定义及初始化。(2)掌握一维数组元素的引用;(3)理解二维数组的定义及初始化。(4)掌握二维数组元素的引用;(5)掌握字符数组的定义及引用;(1)理解指针变量的定义及引用。(2)掌握指向数组的指针变量。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第55卷 专题训练——数组与指针
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.遍历int a[6]的全部元素时,循环变量i的初始值应为( )
A.0
B.1
C.5
D.6
【答案】A
【解析】一维数组下标从0开始,长度为6的数组第一个元素下标为0。
2.遍历长度为n的一维数组时,避免访问越界的常用条件是( )
A.i <= n
B.i < n
C.i > n
D.i == n
【答案】B
【解析】长度为n的数组有效下标为0到n-1,使用i<n可以访问全部元素且不访问n。
3.执行下列程序后,a[3]的值是( )
int a[5] = {3, 1, 4, 2, 5};
int i;
for (i = 1; i < 5; i++)
a[i] = a[i] + a[i - 1];
A.8
B.10
C.9
D.12
【答案】B
【解析】循环依次更新元素:a[1]=1+3=4,a[2]=4+4=8,a[3]=2+8=10,因此a[3]为10。
4.执行下列程序后,changes的值是( )
int a[5] = {2, 5, 3, 6, 4};
int changes = 0, i;
for (i = 1; i < 5; i++)
if (a[i] > a[i - 1]) changes++;
A.1
B.3
C.2
D.4
【答案】C
【解析】满足a[i]>a[i-1]的情况有5>2和6>3,共2次,因此changes为2。
5.执行下列程序后,pos的值是( )
int a[6] = {5, 8, 3, 8, 1, 6};
int pos = -1, i;
for (i = 0; i < 6; i++)
{
if (a[i] == 8)
{
pos = i;
break;
}
}
A.2
B.1
C.3
D.4
【答案】B
【解析】程序从下标0开始查找,第一次遇到8的位置是下标1,赋值后break结束循环,因此pos为1。
6.执行下列程序后,a[0]的值是( )
int a[3] = {6, 4, 2};
int t = a[0];
a[0] = a[2];
a[2] = t;
A.4
B.6
C.2
D.8
【答案】C
【解析】通过临时变量交换a[0]和a[2],交换后a[0]由6变为2。
7.数组a中第i个元素的下一个元素应表示为( )
A.a[i]
B.a[i - 1]
C.a[i + 2]
D.a[i + 1]
【答案】D
【解析】数组下标按整数递增时,第i个下标后面的相邻下标是i+1,因此下一个元素为a[i+1]。
8.执行下列程序后,a[2]的值是( )
int a[4] = {1, 2, 3, 4};
a[2] = a[0] + a[1];
A.1
B.4
C.2
D.3
【答案】D
【解析】a[0]+a[1]等于3,赋值后a[2]为3。
9.执行下列程序后,result的值是( )
int a[5] = {5, 1, 4, 2, 3};
int result = a[0];
int i;
for (i = 1; i < 5; i++)
if (a[i] > result) result = a[i];
A.1
B.3
C.4
D.5
【答案】D
【解析】result从5开始,后续元素均不大于5,所以最大值result仍为5。
10.判断数组中是否存在目标值target时,找到目标后可将found设置为( )
A.-1
B.0
C.1
D.数组长度
【答案】C
【解析】found通常用0表示未找到、1表示找到;找到目标后设置为1。
11.执行下列程序后,evenSum的值是( )
int a[5] = {1, 4, 6, 3, 8};
int evenSum = 0, i;
for (i = 0; i < 5; i++)
if (a[i] % 2 == 0) evenSum += a[i];
A.10
B.12
C.18
D.21
【答案】C
【解析】偶数元素为4、6、8,evenSum=4+6+8=18。
12.将数组元素逆序访问时,最后一次访问的下标是( )
int a[5];
for (i = 4; i >= 0; i--)
A.0
B.1
C.4
D.5
【答案】A
【解析】逆序下标依次为4、3、2、1、0,最后一次访问下标0。
13.执行下列程序后,a[0]的值是( )
int a[4] = {3, 1, 4, 2};
int i;
for (i = 0; i < 3; i++)
if (a[i] > a[i + 1]) { int t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; }
A.2
B.1
C.3
D.4
【答案】B
【解析】第一次比较3和1并交换,a[0]变为1;后续交换不再改变a[0]。
14.计算10个成绩总和时,sum变量应具备的特征是( )
A.只能保存单个字符
B.不能进行加法
C.只保存数组下标
D.能保存累加结果
【答案】D
【解析】sum需要持续保存多个成绩的累加结果,应选择能够进行数值累加且范围足够的数值类型。
15.某程序统计相邻数组元素差值大于4的次数,运行后gap的值是( )
int a[5] = {2, 5, 9, 14, 20};
int gap = 0, i;
for (i = 1; i < 5; i++)
if (a[i] - a[i - 1] > 4) gap++;
A.1
B.3
C.4
D.2
【答案】D
【解析】相邻元素差值依次为3、4、5、6,其中大于4的有5和6,共2个,因此gap为2。
16.查找数组中第一个等于target的元素时,找到后使用break的作用是( )
A.结束整个循环
B.清空数组内容
C.修改数组长度
D.重新初始化数组
【答案】A
【解析】break用于立即结束当前循环,找到第一个目标后可避免继续查找。
17.执行下列程序后,a[0]的值是( )
int a[4] = {1, 2, 3, 4};
int t = a[3], i;
for (i = 3; i > 0; i--)
a[i] = a[i - 1];
a[0] = t;
A.2
B.3
C.4
D.1
【答案】C
【解析】先保存末元素4,再将a[2]、a[1]、a[0]依次右移,最后把4放入a[0],因此a[0]为4。
18.数组元素整体左移一位时,原a[0]通常应( )
A.自动变成数组长度
B.被保存或直接丢弃
C.复制到所有元素
D.只能放入a[0]
【答案】B
【解析】左移会使原a[0]离开数组有效位置,若任务需要保留它,应先保存,否则会被覆盖或丢弃。
19.循环计算数组元素平均值时,平均值通常应使用( )
A.最大下标 / 最小下标
B.首元素 - 尾元素
C.元素个数 * 首元素
D.sum / 元素个数
【答案】D
【解析】平均值等于全部元素之和除以元素个数,即sum/count。
20.设计数组遍历前,最应先明确的是( )
A.元素含义、长度和范围
B.输出颜色和桌面主题
C.键盘型号和显示器尺寸
D.文件图标和窗口主题
【答案】A
【解析】明确元素含义、数组长度和有效下标范围,有助于正确设计遍历和边界控制。
二、简答题(共2题,每题10分,共20分)
1.阅读程序,写出输出结果,并说明max和maxIndex的值。
#include <stdio.h>
int main()
{
int a[5] = {4, 9, 2, 7, 6};
int max = a[0], maxIndex = 0, i;
for (i = 1; i < 5; i++)
{
if (a[i] > max)
{
max = a[i];
maxIndex = i;
}
}
printf("%d %d
", max, maxIndex);
return 0;
}
【答案】输出:9 1。max为9,maxIndex为1。
【解析】max从a[0]的4开始,遍历到a[1]时更新为9并记录下标1,后续元素均不超过9。
2.阅读程序,写出输出结果,并说明count的值。
#include <stdio.h>
int main()
{
int a[6] = {2, 5, 8, 1, 6, 3};
int count = 0, i;
for (i = 0; i < 6; i++)
{
if (a[i] % 2 == 0)
count++;
}
printf("%d
", count);
return 0;
}
【答案】输出:3。count为3。
【解析】数组中的偶数是2、8、6,共3个,遍历每个元素时满足a[i]%2==0就使count加1。
三、案例分析题(共1题,共10分)
1.某程序要求查找数组中最大的成绩并输出其下标,但原程序把maxIndex初始化为1,且遍历从下标2开始。请指出问题并修改。
#include <stdio.h>
int main()
{
int a[5] = {88, 92, 76, 95, 90};
int max = a[1], maxIndex = 1, i;
for (i = 2; i < 5; i++)
if (a[i] > max)
{
max = a[i];
maxIndex = i;
}
printf("%d %d
", max, maxIndex);
return 0;
}
【答案】应以第0个元素初始化,并从第1个元素开始比较:
int max = a[0], maxIndex = 0;
for (i = 1; i < 5; i++)
if (a[i] > max)
{
max = a[i];
maxIndex = i;
}
【解析】原程序跳过了a[0],当a[0]才是最大值时会得到错误结果。数组下标从0开始,正确做法是使用a[0]和下标0初始化,再从i=1比较到i=4。
四、综合应用题(共1题,共10分)
1.编写程序:输入10个整数存入数组,分别统计其中正数、负数和0的个数,并计算所有正数的和。
#include <stdio.h>
int main()
{
int a[10];
int positive = 0, negative = 0, zero = 0, positiveSum = 0;
int i;
for (i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
if (a[i] > 0)
{
positive++;
positiveSum += a[i];
}
else if (a[i] < 0)
negative++;
else
zero++;
}
printf("%d %d %d %d
", positive, negative, zero, positiveSum);
return 0;
}
【答案】参考程序如上。评分点:正确声明数组和四个统计变量;使用0至9下标输入10个整数;分别判断正数、负数和0;正确更新三个计数及正数和;输出顺序正确。
【解析】数组长度为10,有效下标是0至9。每次输入一个元素后立即分类统计:大于0时增加positive并累加positiveSum,小于0时增加negative,等于0时增加zero。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$