内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第80卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①数组元素作为函数参数;②数组名作为函数参数;③多维数组作为函数参数。
湖南省《计算机应用类专业综合考纲百套卷》 第80卷
《计算机编程语言——C语言》
数组作为函数参数
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.执行以下程序段的输出结果是( )
void func(int x)
{ x = x * 2;}
int main()
{ int arr[4] = {2, 5, 7, 9};
func(arr[1]);
func(arr[3] + 1);
printf("%d,%d", arr[1], arr[3]);
return 0; }
A. 10,18 B. 5,9 C. 10,9 D. 5,18
2.关于单个数组元素作为函数实参,下列说法错误的是( )
A. 本质是将元素的数值传递给形参变量
B. 函数内部对形参的修改,无法回写到原数组
C. 可以将不同下标、多个数组元素同时传入函数
D. 函数形参必须定义为数组类型才能接收数组元素
3.执行以下程序段的输出结果是( )
int calc(int a, int b)
{ return a + b / 2;}
int main()
{ int num[5] = {8, 4, 6, 10, 2};
int res = calc(num[0], num[2]);
printf("%d", res);
return 0; }
A. 11 B. 7 C. 9 D. 14
4.执行以下程序段的输出结果是( )
void set(int x)
{ if(x > 5) x = 0;
else x += 3;}
int main()
{ int arr[3] = {4, 6, 2};
set(arr[0]);
set(arr[1]);
set(arr[2]);
printf("%d", arr[0] + arr[1] + arr[2]);
return 0; }
A. 6 B. 12 C. 10 D. 8
5.执行以下程序段的输出结果是( )
void swap(int x, int y)
{int t = x;x = y;y = t;}
int main()
{ int arr[2] = {9, 15};
swap(arr[0], arr[1]);
printf("%d %d", arr[0], arr[1]);
return 0; }
A. 15 9 B. 9 15 C. 0 0 D. 随机值
6.定义 int sum(int p){ return p*p; },int b[4]={3,4,5,6};,执行表达式 sum(b[1]) + sum(b[2]) 的结果是( )
A. 41 B. 25 C. 16 D. 9
7.关于数组元素作为函数参数,结合下标运算,下列描述正确的是( )
A. 函数调用时,arr[i++] 作为实参会修改原数组下标对应的元素值
B. 数组元素做实参,结合算术表达式运算后传递,仍属于值传递
C. 必须保证数组下标为常量,才能作为函数实参
D. 函数内修改形参,可以反向修改数组下标
8.执行以下程序段的输出结果是( )
void add(int a[], int n)
{ int i;
for(i = 0; i < n; i++)
a[i] += 2;}
int main()
{ int arr[4] = {1,2,3,4};
add(arr, 4);
printf("%d", arr[2]);
return 0; }
A. 3 B. 5 C. 4 D. 6
9.对于一维数组名作为函数参数,下列说法正确的是( )
A. 函数形参 int a[] 会重新定义一个全新数组
B. 调用时必须严格写明数组长度,否则程序报错
C. 函数内部可以修改原数组中的元素值
D. 只能读取数组元素,不能对元素进行赋值修改
10.执行以下程序段的输出结果是( )
void clear(int s[], int len)
{ int i;
for(i = 1; i < len; i++)
s[i] = s[i-1];}
int main()
{ int a[5] = {2,4,6,8,10};
clear(a,5);
printf("%d %d",a[1],a[3]);
return 0;}
A. 2 2 B. 4 6 C. 2 4 D. 6 8
11.执行以下程序段的输出结果是( )
int getMax(int t[], int num)
{ int i, max = t[0];
for(i = 1; i < num; i++)
if(t[i] > max) max = t[i];
return max;}
int main()
{ int data[6] = {5, 18, 9, 22, 13, 7};
printf("%d", getMax(data, 6));
return 0;}
A. 18 B. 22 C. 13 D. 9
12.执行以下程序段的输出结果是( )
void minus(int x[], int n)
{ int i;
for(i=0; i<n; i++)
if(x[i] % 2 == 0)
x[i] -= 1;}
int main()
{ int b[4] = {2,3,6,7};
minus(b,4);
printf("%d %d",b[0],b[2]);
return 0;}
A. 1 5 B. 2 6 C. 1 6 D. 2 5
13.执行以下程序段的输出结果是( )
int total(int arr[], int cnt)
{ int sum = 0, i;
for(i = 0; i < cnt; i++)
sum += arr[i];
return sum;}
int main()
{ int a[3] = {10, 20, 30};
int b[4] = {1,2,3,4};
int res = total(a,3) - total(b,4);
printf("%d", res);
return 0;}
A. 50 B. 54 C. 44 D. 60
14.执行以下程序段的输出结果是( )
void show(int m[][3], int row)
{ int i,j;
for(i=0; i<row; i++)
printf("%d ", m[i][1]);}
int main()
{ int mat[2][3] = {{1,2,3},{4,5,6}};
show(mat, 2);
return 0;}
A. 1 4 B. 2 5 C. 3 6 D. 2 3
15.执行以下程序段的输出结果是( )
void change(int arr[][2], int r)
{ int i;
for(i=0; i<r; i++)
arr[i][0] = arr[i][0] * 2;}
int main()
{ int a[3][2] = {{3,5},{2,7},{4,1}};
change(a,3);
printf("%d", a[1][0]);
return 0;}
A. 2 B. 4 C. 6 D. 8
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.(2025年)下列程序的运行结果是__________________。
#include <stdio.h>
#define M 3
#define N 3
void f(int a[M][N],int m[N]){
int i,j,t;
for(j=0;j<N;j++){
t=a[0][j];
for(i=1;i<M;i++)
if(a[i][j]>t)
t=a[i][j];
m[j]=t;
}
}
int main(){
int d[M][N]={2,10,3,23,45,32,78,1,34};
int m[N],i;
f(d,m);
for(i=0;i<N;i++)
printf("%4d",m[i]);
printf("
");
return 0;
}
2.(2024年)下列程序的运行结果是__________________。
#include <stdio.h>
int fun(char s[],int bb[])
{
int num=0,n=0,i;
while(s[num])
num++;
for(i=0;i<num-1;i++)
if(s[i]>='0'&&s[i]<='9')
bb[n++]=s[i]-'2';
return n;
}
int main()
{
char str[]="a5ef2wn1";
int bb[8],n,i;
n=fun(str,bb);
for(i=0;i<n;i++)
printf("%d+",bb[i]);
return 0;
}
3.(2024年)下列程序的运行结果是__________________。
#include <stdio.h>
#define M 5
#define N 5
void f(int a[],int b[],int c[],int m,int n);
int main()
{
int a[M]={1,2,3,4,5};
int b[N]={2,3,4,5,6};
int c[M+N];
int i;
f(a,b,c,M,N);
return 0;
}
void f(int a[],int b[],int c[],int m,int n)
{
int i=0,j=0,k=0;
while(i<m && j<n)
{
if(a[i]<=b[j])
{
a[i]<b[j]?c[k++]=a[i++]:(c[k++]=a[i++],j++);
}
else
c[k++]=b[j++];
if(i==m)
{
while(k<m+n-j)
c[k++]=b[j++];
}
else if(j==n)
{
while(k<m+n-i)
c[k++]=a[i++];
}
}
for(i=0;i<k;i++)
printf("%d+",c[i]);
}
4.(2023年)下列程序的运行结果是__________________。
#include <stdio.h>
int max(int x,int y)
{
return(x>y)?x:y;
}
int main()
{
int A[]={2,-3,8};
int n=sizeof(A)/sizeof(int);
int nStart=A[n-1];
int nAll=A[n-1];
int i;
for(i=n-2;i>=0;i--)
{
nStart=max(A[i],nStart+A[i]);
nAll=max(nStart,nAll);
}
printf("max=%d
",nAll);
return 0;
}
5.下列程序的运行结果是__________________。
#include <stdio.h>
void calc(int arr[], int brr[], int crr[], int len)
{ int i;
for(i = 0; i < len; i++)
{ if(arr[i] % brr[i] == 0)
crr[i] = arr[i] + brr[i];
else
crr[i] = arr[i] - brr[i];
}
}
int main()
{ int a[6] = {12, 7, 18, 9, 20, 5};
int b[6] = {3, 2, 6, 4, 5, 3};
int c[6];
int i;
calc(a, b, c, 6);
for(i = 0; i < 6; i++)
{ printf("%d ", c[i]); }
return 0;}
6.下列程序的运行结果是__________________。
#include <stdio.h>
int getRes(int x, int y)
{
return x > y ? (x - y) : (y + x);
}
void traverse(int arr[], int brr[], int len)
{ int i;
for(i = 0; i < len; i++)
{
arr[i] = getRes(arr[i], brr[i]);
}
}
int main()
{ int num1[4] = {9, 4, 15, 7};
int num2[4] = {5, 8, 6, 7};
int i;
traverse(num1, num2, 4);
for(i = 0; i < 4; i++)
{ printf("%d ", num1[i]); }
return 0;}
7.下列程序的运行结果是__________________。
#include <stdio.h>
void reverse(int a[], int left, int right)
{ int t;
while(left < right)
{ t = a[left];
a[left] = a[right];
a[right] = t;
left++;
right--;
}
}
int main()
{ int data[7] = {1, 2, 3, 4, 5, 6, 7},i;
reverse(data, 1, 5);
for(i = 0; i < 7; i++)
{ printf("%d ", data[i]);}
return 0; }
8.下列程序的运行结果是__________________。
#include <stdio.h>
int checkLine(int t[][3], int line)
{ if(t[line][0] + t[line][1] == t[line][2])
return 1;
return 0;}
int main()
{ int tab[3][3] = {{2,3,5}, {4,1,6}, {7,2,9}};
int cnt = 0;
int i;
for(i = 0; i < 3; i++)
{
if(checkLine(tab, i))
cnt++;
}
printf("%d", cnt);
return 0;}
9.下列程序的运行结果是__________________。
#include <stdio.h>
int getRank(int x)
{ if(x >= 90) return 3;
if(x >= 70) return 2;
return 1;
}
void stat(int a[], int n, int res[])
{ int i,r;
for(i = 0; i < 3; i++) res[i] = 0;
for(i = 0; i < n; i++)
{ r = getRank(a[i]);
res[r-1]++;
}
}
int main()
{ int score[6] = {95,66,72,88,91,59};
int cnt[3];
stat(score,6,cnt);
printf("%d,%d,%d",cnt[0],cnt[1],cnt[2]);
return 0;}
10.下列程序的运行结果是__________________。
#include <stdio.h>
void lineOp(int m[][3],int r)
{ int i,j;
for(i=0;i<r;i++)
{ for(j=0;j<3;j++)
{ if(i%2==0) m[i][j] += j;
else m[i][j] -= j;
}
}
}
int main()
{ int mat[3][3]={{1,1,1},{2,2,2},{3,3,3}};
lineOp(mat,3);
printf("%d",mat[2][2]);
return 0; }
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.下列程序的功能是:生成包含 15 项的斐波那契数列(前两项为 1,从第三项开始每一项等于前两项之和),统计并输出该数列中偶数的个数。
#include <stdio.h>
void createFib(int arr[], int n)
{ int i;
arr[0] = 1;
arr[1] = 1;
for(i = 2; i < n; i++)
___________①___________;
}
int isEven(int x)
{
return ________②_______;
}
int main()
{ int num[15];
int i, count = 0;
createFib(num, 15);
for(i = 0; i < 15; i++)
{ if(________③_______)
{ count++; }
}
printf("偶数个数:%d
", count);
return 0;}
2.下列程序的功能是:输入一个 3 行 4 列的整数矩阵,对矩阵进行处理:偶数行每个元素加 4,奇数行每个元素乘 2,处理完成后逐行输出整个矩阵。
#include <stdio.h>
void rowOper(int mat[][4], int row)
{ int i, j;
for(i = 0; i < row; i++)
{ for(j = 0; j < 4; j++)
{ if(_______①______)
mat[i][j] += 4;
else
_______②______;
}
}
}
int main()
{ int m[3][4];
int i, j;
for(i = 0; i < 3; i++)
{ for(j = 0; j < 4; j++)
{ scanf("%d", &m[i][j]); }
}
_______③_______;
for(i = 0; i < 3; i++)
{ for(j = 0; j < 4; j++)
{ printf("%d ", m[i][j]);}
printf("
");
}
return 0; }
3.下列程序的功能是:输入 7 个整数存入数组,将数组整体连续右移三位,右移规则为最后一个元素移到数组首位,其余元素依次向后顺延,输出移位后的数组。
#include <stdio.h>
void rightShift(int arr[], int n)
{ int last = arr[_____①_____];
int i;
for(i = n-1; i > 0; i--)
{
________②_______;
}
arr[0] = _______③_____; }
int main()
{ int a[7];
int i;
for(i = 0; i < 7; i++)
scanf("%d", &a[i]);
rightShift(a, 7);
rightShift(a, 7);
rightShift(a, 7);
for(i = 0; i < 7; i++)
printf("%d ", a[i]);
return 0;}
4.下列程序的功能是:输入一个 4 行 3 列的整数矩阵,计算矩阵中第 2 列所有奇数元素的和并输出结果。
#include <stdio.h>
int colOddSum(int mat[][3], int row, int col)
{ int i, sum = 0;
for(i = 0; i < row; i++)
{ if(_________①_______)
sum += mat[i][col];
}
_______②_______;
}
int main()
{ int m[4][3];
int i, j, res;
for(i = 0; i < 4; i++)
{ for(j = 0; j < 3; j++)
{
scanf("%d", &m[i][j]);
}
}
res = _______③______;
printf("%d
", res);
return 0;}
5.下列程序的功能是:输入 7 个整数和一个阈值,将数组中大于阈值的元素统一替换为阈值,再计算并输出数组所有元素的整数平均值。
#include <stdio.h>
void filter(int arr[], int n, int limit)
{ int i;
for(i = 0; i < n; i++)
{ if(_____________)
arr[i] = limit;
}
}
int getAvg(int arr[], int n)
{ int i, sum = 0;
for(i = 0; i < n; i++)
sum += arr[i];
return sum / n;}
int main()
{ int num[7], th;
int i, avg;
for(i = 0; i < 7; i++)
scanf("%d", &num[i]);
scanf("%d", &th);
___________________;
___________________;
printf("%d
", avg);
return 0;}
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:输入 10 个整数存入数组,查找数组中最大值所在的下标,输出该下标与对应数值。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int findMaxIndex(int arr[], int n)
L3 { int i, maxIdx = 0;
L4 for(i = 1; i < n; i++)
L5 { if(arr[i] < arr[maxIdx])
L6 maxIdx = i; }
L7 return maxIdx;
L8 }
L9 int main()
L10 { int data[10];
L11 int i, idx;
L12 for(i = 0; i < 10; i++)
L13 scanf("%d", &data[i]);
L14 idx = findMaxIndex(data);
L15 printf("下标=%d,数值=%d
", idx, data[idx]);
L16 return 0; }
2.下列程序的功能是:输入 6 个整数,对数组中每个元素按规则计算:奇数求平方,偶数除以 2,将所有运算结果累加,输出最终总和。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int singleCalc(int x)
L3 { if(x % 2 == 1)
L4 return x;
L5 else
L6 return x / 2;}
L7 int arrCalc(int arr[], int n)
L8 { int i, sum = 0;
L9 for(i = 0; i < n; i++)
L10 sum = singleCalc(arr[i]);
L11 return sum;
L12 }
L13 int main()
L14 { int a[6];
L15 int i, res;
L16 for(i = 0; i < 6; i++)
L17 scanf("%d", &a[i]);
L18 res = arrCalc(a, 6);
L19 printf("%d
", res);
L20 return 0; }
3.下列程序的功能是:输入一个 2 行 4 列的整数矩阵,计算每一行所有元素的整数平均值,并用平均值替换该行第一个元素,最后输出两行新的首元素。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 void rowAvgReplace(int mat, int row)
L3 { int i, j, sum;
L4 for(i = 0; i < row; i++)
L5 { sum = 1;
L6 for(j = 0; j < 4; j++)
L7 sum += mat[i][j];
L8 mat[i][j] = sum / 4;
L9 }
L10 }
L11 int main()
L12 { int m[2][4];
L13 int i, j;
L14 for(i = 0; i < 2; i++)
L15 { for(j = 0; j < 4; j++)
L16 scanf("%d", &m[i][j]);
L17 }
L18 rowAvgReplace(m, 2);
L19 for(i = 0; i < 2; i++)
L20 { for(j = 0; j < 4; j++)
L21 printf("%4d", m[i][j]);
L22 printf("
");
L23 }
L24 return 0; }
4.下列程序的功能是:输入一个 4 行 2 列的整数矩阵,仅对奇数行进行处理:每个元素加上自身所在的列下标,处理完成后逐行输出整个矩阵,注意,行从0开始。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 void oddRowOp(int mat[][2], int row)
L3 { int i, j;
L4 for(i = 0; i < row; i++)
L5 { if(i % 2 = 1)
L6 { for(j = 0; j < 2; j++)
L7 mat[i][j] = mat[i][j] + i;
L8 }
L9 }
L10 }
L11 int main()
L12 { int m[4][2];
L13 int i, j;
L14 for(i = 0; i < 4; i++)
L15 { for(j = 0; j < 2; j++)
L16 scanf("%d", &m[i][j]);
L17 }
L18 oddRowOp(m[0][0], 4);
L19 for(i = 0; i < 4; i++)
L20 { for(j = 0; j < 2; j++)
L21 printf("%d ", m[i][j]);
L22 printf("
");
L23 }
L24 return 0; }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第80卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①数组元素作为函数参数;②数组名作为函数参数;③多维数组作为函数参数。
湖南省《计算机应用类专业综合考纲百套卷》 第80卷
《计算机编程语言——C语言》
数组作为函数参数
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.执行以下程序段的输出结果是( )
void func(int x)
{ x = x * 2;}
int main()
{ int arr[4] = {2, 5, 7, 9};
func(arr[1]);
func(arr[3] + 1);
printf("%d,%d", arr[1], arr[3]);
return 0; }
A. 10,18 B. 5,9 C. 10,9 D. 5,18
【答案】B
【解析】数组元素是值传递,函数内修改形参不会影响原数组;arr[3]+1 是表达式值,同样不改变原元素。
2.关于单个数组元素作为函数实参,下列说法错误的是( )
A. 本质是将元素的数值传递给形参变量
B. 函数内部对形参的修改,无法回写到原数组
C. 可以将不同下标、多个数组元素同时传入函数
D. 函数形参必须定义为数组类型才能接收数组元素
【答案】D
【解析】接收数组元素时,形参定义为普通基本类型变量即可,无需数组类型。
3.执行以下程序段的输出结果是( )
int calc(int a, int b)
{ return a + b / 2;}
int main()
{ int num[5] = {8, 4, 6, 10, 2};
int res = calc(num[0], num[2]);
printf("%d", res);
return 0; }
A. 11 B. 7 C. 9 D. 14
【答案】A
【解析】传入 8 和 6,表达式 8 + 6/2 = 8+3=11。
4.执行以下程序段的输出结果是( )
void set(int x)
{ if(x > 5) x = 0;
else x += 3;}
int main()
{ int arr[3] = {4, 6, 2};
set(arr[0]);
set(arr[1]);
set(arr[2]);
printf("%d", arr[0] + arr[1] + arr[2]);
return 0; }
A. 6 B. 12 C. 10 D. 8
【答案】B
【解析】值传递,原数组元素不变,求和 4+6+2=12。
5.执行以下程序段的输出结果是( )
void swap(int x, int y)
{int t = x;x = y;y = t;}
int main()
{ int arr[2] = {9, 15};
swap(arr[0], arr[1]);
printf("%d %d", arr[0], arr[1]);
return 0; }
A. 15 9 B. 9 15 C. 0 0 D. 随机值
【答案】B
【解析】数组元素值传递,函数内交换形参,原数组元素不受影响。
6.定义 int sum(int p){ return p*p; },int b[4]={3,4,5,6};,执行表达式 sum(b[1]) + sum(b[2]) 的结果是( )
A. 41 B. 25 C. 16 D. 9
【答案】A
【解析】4²+5²=16+25=41。
7.关于数组元素作为函数参数,结合下标运算,下列描述正确的是( )
A. 函数调用时,arr[i++] 作为实参会修改原数组下标对应的元素值
B. 数组元素做实参,结合算术表达式运算后传递,仍属于值传递
C. 必须保证数组下标为常量,才能作为函数实参
D. 函数内修改形参,可以反向修改数组下标
【答案】B
【解析】数组元素、元素表达式均为值传递;下标变量合法,形参修改不影响原数组下标与元素。
8.执行以下程序段的输出结果是( )
void add(int a[], int n)
{ int i;
for(i = 0; i < n; i++)
a[i] += 2;}
int main()
{ int arr[4] = {1,2,3,4};
add(arr, 4);
printf("%d", arr[2]);
return 0; }
A. 3 B. 5 C. 4 D. 6
【答案】B
【解析】数组名作参数,函数内修改元素会作用于原数组;3+2=5。
9.对于一维数组名作为函数参数,下列说法正确的是( )
A. 函数形参 int a[] 会重新定义一个全新数组
B. 调用时必须严格写明数组长度,否则程序报错
C. 函数内部可以修改原数组中的元素值
D. 只能读取数组元素,不能对元素进行赋值修改
【答案】C
【解析】数组名作参数,函数操作的就是原数组元素,可读写。
10.执行以下程序段的输出结果是( )
void clear(int s[], int len)
{ int i;
for(i = 1; i < len; i++)
s[i] = s[i-1];}
int main()
{ int a[5] = {2,4,6,8,10};
clear(a,5);
printf("%d %d",a[1],a[3]);
return 0;}
A. 2 2 B. 4 6 C. 2 4 D. 6 8
【答案】A
【解析】循环从下标 1 开始,依次用前一个元素覆盖当前元素,最终数组全部变为 2。
11.执行以下程序段的输出结果是( )
int getMax(int t[], int num)
{ int i, max = t[0];
for(i = 1; i < num; i++)
if(t[i] > max) max = t[i];
return max;}
int main()
{ int data[6] = {5, 18, 9, 22, 13, 7};
printf("%d", getMax(data, 6));
return 0;}
A. 18 B. 22 C. 13 D. 9
【答案】B
【解析】遍历数组找最大值,最大值为 22。
12.执行以下程序段的输出结果是( )
void minus(int x[], int n)
{ int i;
for(i=0; i<n; i++)
if(x[i] % 2 == 0)
x[i] -= 1;}
int main()
{ int b[4] = {2,3,6,7};
minus(b,4);
printf("%d %d",b[0],b[2]);
return 0;}
A. 1 5 B. 2 6 C. 1 6 D. 2 5
【答案】A
【解析】偶数元素减 1,2-1=1,6-1=5。
13.执行以下程序段的输出结果是( )
int total(int arr[], int cnt)
{ int sum = 0, i;
for(i = 0; i < cnt; i++)
sum += arr[i];
return sum;}
int main()
{ int a[3] = {10, 20, 30};
int b[4] = {1,2,3,4};
int res = total(a,3) - total(b,4);
printf("%d", res);
return 0;}
A. 50 B. 54 C. 44 D. 60
【答案】A
【解析】程序中首先调用 total(a, 3),对数组 a 的前3个元素 {10, 20, 30} 求和得到 60;接着调用 total(b, 4),对数组 b 的前4个元素 {1, 2, 3, 4} 求和得到 10;最后执行减法运算 res = 60 - 10 = 50,因此程序的输出结果为 50,正确答案为 A。
14.执行以下程序段的输出结果是( )
void show(int m[][3], int row)
{ int i,j;
for(i=0; i<row; i++)
printf("%d ", m[i][1]);}
int main()
{ int mat[2][3] = {{1,2,3},{4,5,6}};
show(mat, 2);
return 0;}
A. 1 4 B. 2 5 C. 3 6 D. 2 3
【答案】B
【解析】固定取每行第 2 列(下标 1)元素:2、5。
15.执行以下程序段的输出结果是( )
void change(int arr[][2], int r)
{ int i;
for(i=0; i<r; i++)
arr[i][0] = arr[i][0] * 2;}
int main()
{ int a[3][2] = {{3,5},{2,7},{4,1}};
change(a,3);
printf("%d", a[1][0]);
return 0;}
A. 2 B. 4 C. 6 D. 8
【答案】B
【解析】每行第 0 列元素乘 2,2*2=4。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.(2025年)下列程序的运行结果是__________________。
#include <stdio.h>
#define M 3
#define N 3
void f(int a[M][N],int m[N]){
int i,j,t;
for(j=0;j<N;j++){
t=a[0][j];
for(i=1;i<M;i++)
if(a[i][j]>t)
t=a[i][j];
m[j]=t;
}
}
int main(){
int d[M][N]={2,10,3,23,45,32,78,1,34};
int m[N],i;
f(d,m);
for(i=0;i<N;i++)
printf("%4d",m[i]);
printf("
");
return 0;
}
【答案】 78 45 34
2.(2024年)下列程序的运行结果是__________________。
#include <stdio.h>
int fun(char s[],int bb[])
{
int num=0,n=0,i;
while(s[num])
num++;
for(i=0;i<num-1;i++)
if(s[i]>='0'&&s[i]<='9')
bb[n++]=s[i]-'2';
return n;
}
int main()
{
char str[]="a5ef2wn1";
int bb[8],n,i;
n=fun(str,bb);
for(i=0;i<n;i++)
printf("%d+",bb[i]);
return 0;
}
【答案】3+0+
3.(2024年)下列程序的运行结果是__________________。
#include <stdio.h>
#define M 5
#define N 5
void f(int a[],int b[],int c[],int m,int n);
int main()
{
int a[M]={1,2,3,4,5};
int b[N]={2,3,4,5,6};
int c[M+N];
int i;
f(a,b,c,M,N);
return 0;
}
void f(int a[],int b[],int c[],int m,int n)
{
int i=0,j=0,k=0;
while(i<m && j<n)
{
if(a[i]<=b[j])
{
a[i]<b[j]?c[k++]=a[i++]:(c[k++]=a[i++],j++);
}
else
c[k++]=b[j++];
if(i==m)
{
while(k<m+n-j)
c[k++]=b[j++];
}
else if(j==n)
{
while(k<m+n-i)
c[k++]=a[i++];
}
}
for(i=0;i<k;i++)
printf("%d+",c[i]);
}
【答案】1+2+3+4+5+6+
4.(2023年)下列程序的运行结果是__________________。
#include <stdio.h>
int max(int x,int y)
{
return(x>y)?x:y;
}
int main()
{
int A[]={2,-3,8};
int n=sizeof(A)/sizeof(int);
int nStart=A[n-1];
int nAll=A[n-1];
int i;
for(i=n-2;i>=0;i--)
{
nStart=max(A[i],nStart+A[i]);
nAll=max(nStart,nAll);
}
printf("max=%d
",nAll);
return 0;
}
【答案】max=8
5.下列程序的运行结果是__________________。
#include <stdio.h>
void calc(int arr[], int brr[], int crr[], int len)
{ int i;
for(i = 0; i < len; i++)
{ if(arr[i] % brr[i] == 0)
crr[i] = arr[i] + brr[i];
else
crr[i] = arr[i] - brr[i];
}
}
int main()
{ int a[6] = {12, 7, 18, 9, 20, 5};
int b[6] = {3, 2, 6, 4, 5, 3};
int c[6];
int i;
calc(a, b, c, 6);
for(i = 0; i < 6; i++)
{ printf("%d ", c[i]); }
return 0;}
【答案】15 5 24 5 25 2
6.下列程序的运行结果是__________________。
#include <stdio.h>
int getRes(int x, int y)
{
return x > y ? (x - y) : (y + x);
}
void traverse(int arr[], int brr[], int len)
{ int i;
for(i = 0; i < len; i++)
{
arr[i] = getRes(arr[i], brr[i]);
}
}
int main()
{ int num1[4] = {9, 4, 15, 7};
int num2[4] = {5, 8, 6, 7};
int i;
traverse(num1, num2, 4);
for(i = 0; i < 4; i++)
{ printf("%d ", num1[i]); }
return 0;}
【答案】4 12 9 14
7.下列程序的运行结果是__________________。
#include <stdio.h>
void reverse(int a[], int left, int right)
{ int t;
while(left < right)
{ t = a[left];
a[left] = a[right];
a[right] = t;
left++;
right--;
}
}
int main()
{ int data[7] = {1, 2, 3, 4, 5, 6, 7},i;
reverse(data, 1, 5);
for(i = 0; i < 7; i++)
{ printf("%d ", data[i]);}
return 0; }
【答案】1 6 5 4 3 2 7
8.下列程序的运行结果是__________________。
#include <stdio.h>
int checkLine(int t[][3], int line)
{ if(t[line][0] + t[line][1] == t[line][2])
return 1;
return 0;}
int main()
{ int tab[3][3] = {{2,3,5}, {4,1,6}, {7,2,9}};
int cnt = 0;
int i;
for(i = 0; i < 3; i++)
{
if(checkLine(tab, i))
cnt++;
}
printf("%d", cnt);
return 0;}
【答案】2
9.下列程序的运行结果是__________________。
#include <stdio.h>
int getRank(int x)
{ if(x >= 90) return 3;
if(x >= 70) return 2;
return 1;
}
void stat(int a[], int n, int res[])
{ int i,r;
for(i = 0; i < 3; i++) res[i] = 0;
for(i = 0; i < n; i++)
{ r = getRank(a[i]);
res[r-1]++;
}
}
int main()
{ int score[6] = {95,66,72,88,91,59};
int cnt[3];
stat(score,6,cnt);
printf("%d,%d,%d",cnt[0],cnt[1],cnt[2]);
return 0;}
【答案】2,2,2
10.下列程序的运行结果是__________________。
#include <stdio.h>
void lineOp(int m[][3],int r)
{ int i,j;
for(i=0;i<r;i++)
{ for(j=0;j<3;j++)
{ if(i%2==0) m[i][j] += j;
else m[i][j] -= j;
}
}
}
int main()
{ int mat[3][3]={{1,1,1},{2,2,2},{3,3,3}};
lineOp(mat,3);
printf("%d",mat[2][2]);
return 0; }
【答案】5
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.下列程序的功能是:生成包含 15 项的斐波那契数列(前两项为 1,从第三项开始每一项等于前两项之和),统计并输出该数列中偶数的个数。
#include <stdio.h>
void createFib(int arr[], int n)
{ int i;
arr[0] = 1;
arr[1] = 1;
for(i = 2; i < n; i++)
___________①___________;
}
int isEven(int x)
{
return ________②_______;
}
int main()
{ int num[15];
int i, count = 0;
createFib(num, 15);
for(i = 0; i < 15; i++)
{ if(________③_______)
{ count++; }
}
printf("偶数个数:%d
", count);
return 0;}
【答案】①arr[i] = arr[i-1] + arr[i-2]
②x % 2 == 0 ? 1 : 0 ③isEven(num[i])
2.下列程序的功能是:输入一个 3 行 4 列的整数矩阵,对矩阵进行处理:偶数行每个元素加 4,奇数行每个元素乘 2,处理完成后逐行输出整个矩阵。
#include <stdio.h>
void rowOper(int mat[][4], int row)
{ int i, j;
for(i = 0; i < row; i++)
{ for(j = 0; j < 4; j++)
{ if(_______①______)
mat[i][j] += 4;
else
_______②______;
}
}
}
int main()
{ int m[3][4];
int i, j;
for(i = 0; i < 3; i++)
{ for(j = 0; j < 4; j++)
{ scanf("%d", &m[i][j]); }
}
_______③_______;
for(i = 0; i < 3; i++)
{ for(j = 0; j < 4; j++)
{ printf("%d ", m[i][j]);}
printf("
");
}
return 0; }
【答案】①i % 2 == 0 ②mat[i][j] *= 2 ③rowOper(m, 3)
3.下列程序的功能是:输入 7 个整数存入数组,将数组整体连续右移三位,右移规则为最后一个元素移到数组首位,其余元素依次向后顺延,输出移位后的数组。
#include <stdio.h>
void rightShift(int arr[], int n)
{ int last = arr[_____①_____];
int i;
for(i = n-1; i > 0; i--)
{
________②_______;
}
arr[0] = _______③_____; }
int main()
{ int a[7];
int i;
for(i = 0; i < 7; i++)
scanf("%d", &a[i]);
rightShift(a, 7);
rightShift(a, 7);
rightShift(a, 7);
for(i = 0; i < 7; i++)
printf("%d ", a[i]);
return 0;}
【答案】①n-1 ②arr[i] = arr[i-1] ③last
4.下列程序的功能是:输入一个 4 行 3 列的整数矩阵,计算矩阵中第 2 列所有奇数元素的和并输出结果。
#include <stdio.h>
int colOddSum(int mat[][3], int row, int col)
{ int i, sum = 0;
for(i = 0; i < row; i++)
{ if(_________①_______)
sum += mat[i][col];
}
_______②_______;
}
int main()
{ int m[4][3];
int i, j, res;
for(i = 0; i < 4; i++)
{ for(j = 0; j < 3; j++)
{
scanf("%d", &m[i][j]);
}
}
res = _______③______;
printf("%d
", res);
return 0;}
【答案】①mat[i][col] % 2 != 0 ②return sum
③colOddSum(m, 4, 1)
5.下列程序的功能是:输入 7 个整数和一个阈值,将数组中大于阈值的元素统一替换为阈值,再计算并输出数组所有元素的整数平均值。
#include <stdio.h>
void filter(int arr[], int n, int limit)
{ int i;
for(i = 0; i < n; i++)
{ if(_____________)
arr[i] = limit;
}
}
int getAvg(int arr[], int n)
{ int i, sum = 0;
for(i = 0; i < n; i++)
sum += arr[i];
return sum / n;}
int main()
{ int num[7], th;
int i, avg;
for(i = 0; i < 7; i++)
scanf("%d", &num[i]);
scanf("%d", &th);
___________________;
___________________;
printf("%d
", avg);
return 0;}
【答案】①arr[i] > limit ②filter(num, 7, th)
③avg = getAvg(num, 7)
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:输入 10 个整数存入数组,查找数组中最大值所在的下标,输出该下标与对应数值。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int findMaxIndex(int arr[], int n)
L3 { int i, maxIdx = 0;
L4 for(i = 1; i < n; i++)
L5 { if(arr[i] < arr[maxIdx])
L6 maxIdx = i; }
L7 return maxIdx;
L8 }
L9 int main()
L10 { int data[10];
L11 int i, idx;
L12 for(i = 0; i < 10; i++)
L13 scanf("%d", &data[i]);
L14 idx = findMaxIndex(data);
L15 printf("下标=%d,数值=%d
", idx, data[idx]);
L16 return 0; }
【答案】①L5 { if(arr[i] > arr[maxIdx])
②L14 idx = findMaxIndex(data, 10);
2.下列程序的功能是:输入 6 个整数,对数组中每个元素按规则计算:奇数求平方,偶数除以 2,将所有运算结果累加,输出最终总和。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int singleCalc(int x)
L3 { if(x % 2 == 1)
L4 return x;
L5 else
L6 return x / 2;}
L7 int arrCalc(int arr[], int n)
L8 { int i, sum = 0;
L9 for(i = 0; i < n; i++)
L10 sum = singleCalc(arr[i]);
L11 return sum;
L12 }
L13 int main()
L14 { int a[6];
L15 int i, res;
L16 for(i = 0; i < 6; i++)
L17 scanf("%d", &a[i]);
L18 res = arrCalc(a, 6);
L19 printf("%d
", res);
L20 return 0; }
【答案】①L4 return x * x;
②L10 sum += singleCalc(arr[i]);
3.下列程序的功能是:输入一个 2 行 4 列的整数矩阵,计算每一行所有元素的整数平均值,并用平均值替换该行第一个元素,最后输出两行新的首元素。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 void rowAvgReplace(int mat, int row)
L3 { int i, j, sum;
L4 for(i = 0; i < row; i++)
L5 { sum = 1;
L6 for(j = 0; j < 4; j++)
L7 sum += mat[i][j];
L8 mat[i][j] = sum / 4;
L9 }
L10 }
L11 int main()
L12 { int m[2][4];
L13 int i, j;
L14 for(i = 0; i < 2; i++)
L15 { for(j = 0; j < 4; j++)
L16 scanf("%d", &m[i][j]);
L17 }
L18 rowAvgReplace(m, 2);
L19 for(i = 0; i < 2; i++)
L20 { for(j = 0; j < 4; j++)
L21 printf("%4d", m[i][j]);
L22 printf("
");
L23 }
L24 return 0; }
【答案】①L2 void rowAvgReplace(int mat[][4], int row)
②L5 { sum = 0;
③L8 mat[i][0] = sum / 4;
4.下列程序的功能是:输入一个 4 行 2 列的整数矩阵,仅对奇数行进行处理:每个元素加上自身所在的列下标,处理完成后逐行输出整个矩阵,注意,行从0开始。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 void oddRowOp(int mat[][2], int row)
L3 { int i, j;
L4 for(i = 0; i < row; i++)
L5 { if(i % 2 = 1)
L6 { for(j = 0; j < 2; j++)
L7 mat[i][j] = mat[i][j] + i;
L8 }
L9 }
L10 }
L11 int main()
L12 { int m[4][2];
L13 int i, j;
L14 for(i = 0; i < 4; i++)
L15 { for(j = 0; j < 2; j++)
L16 scanf("%d", &m[i][j]);
L17 }
L18 oddRowOp(m[0][0], 4);
L19 for(i = 0; i < 4; i++)
L20 { for(j = 0; j < 2; j++)
L21 printf("%d ", m[i][j]);
L22 printf("
");
L23 }
L24 return 0; }
【答案】①L5 { if(i % 2 == 1)
②L7 mat[i][j] = mat[i][j] + j;
③L18 oddRowOp(m, 4);
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$