内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第79卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①函数的定义;②函数的参数;③函数的返回值;④函数的调用;⑤函数原型;⑥函数的嵌套调用和递归调用。
湖南省《计算机应用类专业综合考纲百套卷》 第79卷
《计算机编程语言——C语言》
函数的定义和调用
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.(2022年)对C语言程序,以下说法正确的是( )
A. main 函数是主函数,一定要写在最前面
B.程序总是从main函数开始执行的
C.程序中只能调用库函数,不能自己定义函数
D.函数参数只能是整型
2.以下关于 C 语言函数定义的语法规则,描述正确的是( )
A. 函数定义可以写在其他函数内部
B. 函数名可以使用 C 语言全部关键字
C. 一个 C 程序中允许定义多个普通函数
D. 函数体的花括号 {} 可以省略
3.设有函数定义int fun(int a,int b),下列对该函数形参的说法错误的是( )
A. 形参a和b仅在 fun 函数内部有效
B. 形参必须在函数头部括号内定义类型
C. 两个形参之间必须用逗号分隔
D. 形参可以不指定数据类型
4.有如下函数定义,若执行调用test(3+2),则传入函数的实参值为( )
int test(int n)
{ int s; s = n * 2; return s; }
A. 3 B. 2 C. 5 D. 编译报错
5.设有以下程序片段,运行后输出结果是( )
int f(int x)
{ int t; t = x + 1; return t;}
int main()
{ int a, res;
a = 4;
res = f(a);
printf("%d",res); return 0; }
A. 4 B. 5 C. 3 D. 编译错误
6.分析如下代码,函数调用的实参个数是( )
int fun(int x, int y, int z)
{ return x+y+z; }
int main()
{ int a,b,c;
a=1;b=2;c=3;
fun(a, 5, b+c);
return 0; }
A. 1 B. 2 C. 3 D. 4
7.执行以下程序段的输出结果是( )
void show(int k)
{ printf("%d ",k*2);}
int main()
{ int n; n = 6;
show(n); return 0;}
A. 6 B. 12 C. 3 D. 无输出
8.执行以下程序代码的输出结果是( )
int f1(int a)
{ int res; res = a + 3; return res; }
int f2(int b)
{ int res; res = f1(b) * 2; return res; }
int main()
{ int num; num = 2;printf("%d",f2(num)); return 0; }
A. 10 B. 5 C. 4 D. 8
9.设有以下递归函数,传入实参5,函数返回值为( )
int digui(int n)
{ if(n <= 1) return 1;
return n + digui(n-1); }
A. 5 B. 15 C. 12 D. 9
10.分析代码,函数调用后返回值是( )
int sub(int x, int y)
{ if(x > y) return x - y;
else return y - x; }
int main()
{ int m,n; m=8; n=3;
printf("%d",sub(m,n));
return 0; }
A. 5 B. -5 C. 11 D. 24
11.设有如下代码,则程序运行后的输出结果是( )
int f(int t)
{ return t*3; }
int main()
{ int x; x = f(1+2*3); printf("%d",x); return 0; }
A.19 B.20 C.21 D.22
12.设有以下所示程序代码,运行后的输出结果是( )
int one(int a)
{ int s; s = a * 2; return s;}
int two(int b)
{ int s; s = one(b) + 4; return s; }
int main()
{ int num; num = 3;printf("%d", two(num)); return 0; }
A. 6 B. 10 C. 7 D. 12
13.分析如下代码,程序运行后的输出结果是( )
int fun(int n)
{ if(n == 0) return 0;
return fun(n-1) + 2; }
int main()
{int res; res = fun(4); printf("%d", res); return 0; }
A. 4 B. 6 C. 8 D. 10
14.分析如下代码,程序运行后的输出结果是( )
int fn(int k)
{ int t;
if(k == 1) return 1;
t = fn(k-1) * k;
return t; }
int main()
{int num;num = fn(3);printf("%d",num);return 0; }
A. 3 B. 6 C. 9 D. 12
15.分析如下代码,程序运行后的输出结果是( )
int a(int x)
{ return x + 1;}
int b(int y)
{ return a(y) * 3;}
int c(int z)
{ return b(z) - 2;}
int main()
{int res;res = c(2);printf("%d",res);return 0; }
A. 7 B. 9 C. 11 D. 13
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.(2025年)下列程序的运行结果是__________________。
#include <stdio.h>
int x=3;
int f(int x){
if(x/2>1)
f(x/2);
printf("%d",x);
return 1;
}
int main(){
int x=5;
f(x);
return 0;
}
2.(2022年)下列程序的运行结果是__________________。
#include "stdio.h"
int fun(int m)
{int n=0;
m/=2;
if(m)
{
n*=m;
return (fun(m-2));
}
else
return n; }
int main(void)
{int i;
for(i=0;i<2;i++)
printf("fun(%d)=%d+",4+i,fun(4+i));
return 0;
}
3.下列程序的运行结果是__________________。
#include <stdio.h>
int dg(int n)
{ if(n == 1)
return 5;
return dg(n - 1) * 2 + n * n;
}
int main()
{ int num;
num = dg(5);
printf("%d", num);
return 0;
}
4.下列程序的运行结果是__________________。
#include <stdio.h>
int fb(int k)
{ if(k == 1 || k == 2)
return 4;
return fb(k-1) + fb(k-2) + k;
}
int main()
{ int num;
num = fb(7);
printf("%d", num);
return 0;
}
5.下列程序的运行结果是__________________。
#include <stdio.h>
int calc(int n)
{ int i;
int sum;
sum = 0;
for(i = 1; i <= n; i++)
sum = sum + i * 3;
return sum;
}
int fun(int x)
{ return calc(x) - calc(x - 2);}
int main()
{ int res;
res = fun(7);
printf("%d", res);
return 0; }
6.下列程序的运行结果是__________________。
#include <stdio.h>
int a(int x)
{ int t;
t = 0;
while(x > 0)
{ t = t + x;
x = x - 1; }
return t; }
int b(int y)
{ return a(y) * 2;}
int c(int z)
{ return b(z + 1) - a(z - 1);}
int main()
{ int res;
res = c(6);
printf("%d", res);
return 0;}
7.下列程序的运行结果是__________________。
#include <stdio.h>
int F(int x)
{ if(x == 0) return 1;
if(x % 2 == 1) return G(x - 1) + x;
return G(x - 1) - x;}
int G(int x)
{ if(x == 0) return 3;
if(x % 2 == 1) return F(x - 1) * 2;
return F(x - 1) + x;}
int main()
{ int num;num = F(4);printf("%d", num);return 0; }
8.下列程序的运行结果是__________________。
#include <stdio.h>
int count(int num)
{ int cnt;
cnt = 0;
while(num > 0)
{ cnt = cnt + 1;
num = num / 2;}
return cnt;}
int main()
{ int s;
s = count(count(20) + count(12));
printf("%d", s);
return 0;}
9.下列程序的运行结果是__________________。
#include <stdio.h>
int get_val(int n)
{ int i;
int s;
s = 0;
for(i = 1; i <= n; i++)
{ if(i % 3 != 0)
s = s + i * 2;}
return s;}
int main()
{ int res;
res = get_val(6) - get_val(4);
printf("%d", res);
return 0;}
10.下列程序的运行结果是__________________。
#include <stdio.h>
int rec(int n)
{ if(n < 3) return n;
return rec(n - 1) + rec(n - 2) - rec(n - 3);}
int loop_sum(int m)
{ int i,s;
s = 0;
for(i = 1; i <= m; i++)
s = s + rec(i);
return s;}
int main()
{ int r;
r = loop_sum(7);
printf("%d", r);
return 0; }
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.(2025年)AI 具有很强的学习能力。第一天它学习 1 个知识点;接下来两天中,每天学习 2 个知识点;再接下来三天中,每天学习 3 个知识点;……。下面程序功能是:按以上规律进行学习,输入学习天数 n 时,输出 AI 共学习了多少个知识点。例如:当 n=7 时,AI 一共学习了 18(1+2+2+3+3+3+4=18)个知识点。
#include <stdio.h>
int study(int n){
________①________
int s;
int sum=0;
do{
s=___________②___________
sum+= _________③________
k++;
}while(s<n);
sum=sum-________④________;
return sum;
}
int main(){
int y,n;
printf("n=");
scanf("%d",&n);
if(n>0){
___________⑤___________
printf("n=%d,y=%d
",n,y);
}else{
printf("error! ");
}
return 0;
}
2.(2024年)形如2,3,5,7,11,131这样的素数被称为对称素数,下面程序的功能是寻找 1~10000 内的对称素数并输出。
#include <stdio.h>
int isPrime(int n);
int suNum(int n);
int main()
{
int n;
for(n=2; ________①________ ;n++)
{
if(isPrime(n))
if(suNum(n))
printf("%d is a suNum
",n);
}
return 0;
}
int isPrime(int n)
{
int i,flag=1;
if(n!=2 && n%2==0)
flag=0;
for(i=3;i*i<=n;i+=2)
if( ________②________ )
flag=0;
return flag;
}
int suNum(int n)
{
________③________
if( ________④________ )
flag=1;
if(n>100 && ________⑤________ )
flag=1;
return flag;
}
3.现有一堆椰子,按照固定规则连续进行多轮分配:
①共有 5 名水手,每名水手依次对椰子进行分配:将当前所有椰子平均分成 5 份,分配后必然剩余 1 个椰子,该椰子丢弃;水手拿走其中 1 份,把剩下 4 份椰子合并,留给下一位水手。
②5 名水手全部完成分配后,再对剩余的椰子执行最后一轮分配:依旧平均分成 5 份,同样会剩余 1 个椰子并丢弃。
下列程序的功能是:求出满足以上整套分配规则的最小椰子总数。
#include <stdio.h>
int divide(int num)
{ if(________①_______)
return -1;
return ________②________;
}
int check(int total)
{ int i;
int now = total;
for(i = 0; i < 5; i++)
{ now = ______③_______;
if(now == -1)
return 0;
}
now = divide(now);
if(now == -1)
return 0;
________④_______;
}
int main()
{ int n = 1;
while(1)
{ if(______⑤______ == 1)
{ printf("满足条件的最小椰子数:%d
", n);
break;
}
n++; }
return 0; }
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.(2025年)下列程序中,函数f()的功能是:求级数前n项的和并返回。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 double f(int n){
L3 int p=1,q=1,t;
L4 double s=0;
L5 while(n--){
L6 s+=1*p/q;
L7 t=q;
L8 q=p;
L9 p=t;
L10 }
L11 return s;
L12 }
L13 int main(){
L14 int n;
L15 printf("input n=");
L16 scanf("%d",&n);
L17 printf("sum=%f
",f(n));
L18 return 0;
L19 }
2.某人闯关一座古堡,全程共 8 个关卡,每一关的行进步数遵循固定规律:当前关卡步数 = 上一关步数 × 2 + 3。已知闯到第 8 关时,该关卡对应的步数为 637。下列程序的功能是:计算并输出第一关的初始行进步数。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int getFirstStep(int lastStep, int totalLevels) {
L3 int currentStep = lastStep;
L4 int i;
L5 for (i = 0; i < totalLevels ; i++) {
L6 currentStep = (currentStep + 3) * 2;
L7 }
L8 return currentStep;
L9 }
L10 int main() {
L11 int level8_step = 637;
L12 int total_levels = 8;
L13 int first_step = getFirstStep(level8_step, total_levels);
L14 printf("第一关的初始行进步数为: %d
", first_step);
L15 return 0;
L16 }
3.下列程序的功能是输出200~300内的亲密数对。函数f()的功能是:求一个正整数的因子(包含1但不包含自身)的和。如果一个正整数a的因子和等于另一个正整数b,并且b的因子和也等于a,则称a与b互为一对亲密数,如220与284就是一对亲密数。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int f(int n){
L3 int i=0,s=0;
L4 for(i=1;i<=n/2;i++)
L5 if(n/i==0)
L6 s+=n;
L7 return s;
L8 }
L9 int main(){
L10 int i,j,s;
L11 for(i=200;i<300;i++){
L12 s=f(i);
L13 for(j=i+1;j<300;j++)
L14 if(s==j)
L15 if(i==j)
L16 printf("i=%d,j=%d
",i,j);
L17 }
L18 return 0;
L19 }
4.(2023年)下列程序中,函数 f 的功能是:求整数 n(n<1000)每个数位上包含 1 的个数,如:17 中各数位包含 1 的数量为 1,112 中各数位包含 1 的数量为 2。主函数的功能是求小于等于 N 的自然数中,各数位包含 1 的数量的和。如 N=7,执行结果为 “iCount=1”;如 N=12,执行结果为 “iCount=5”。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 unsigned int f(unsigned int n)
L3 {
L4 unsigned int iNum=0;
L5 while(n)
L6 {
L7 iNum+=(n%10)?0:1;
L8 n%=10;
L9 }
L10 return iNum;
L11 }
L12 int main()
L13 {
L14 unsigned int N=12;
L15 unsigned int iCount=0;
L16 int i;
L17 for(i=1;i<=N;i++)
L18 {
L19 iCount=f(i);
L20 }
L21 printf("iCount=%d",iCount);
L22 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第79卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①函数的定义;②函数的参数;③函数的返回值;④函数的调用;⑤函数原型;⑥函数的嵌套调用和递归调用。
湖南省《计算机应用类专业综合考纲百套卷》 第79卷
《计算机编程语言——C语言》
函数的定义和调用
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.(2022年)对C语言程序,以下说法正确的是( )
A. main 函数是主函数,一定要写在最前面
B.程序总是从main函数开始执行的
C.程序中只能调用库函数,不能自己定义函数
D.函数参数只能是整型
【答案】B
【解析】C 语言程序固定从main函数开始执行。A:main 函数位置无强制要求;C:支持自定义函数;D:函数参数可为多种数据类型。
2.以下关于 C 语言函数定义的语法规则,描述正确的是( )
A. 函数定义可以写在其他函数内部
B. 函数名可以使用 C 语言全部关键字
C. 一个 C 程序中允许定义多个普通函数
D. 函数体的花括号 {} 可以省略
【答案】C
【解析】C 语言函数不能嵌套定义,A 错误;函数名不能使用关键字,B 错误;函数体必须用 {} 包裹,D 错误;程序可包含多个自定义函数,C 正确。
3.设有函数定义int fun(int a,int b),下列对该函数形参的说法错误的是( )
A. 形参a和b仅在 fun 函数内部有效
B. 形参必须在函数头部括号内定义类型
C. 两个形参之间必须用逗号分隔
D. 形参可以不指定数据类型
【答案】D
【解析】C 语言有形参必须声明数据类型,无类型写法语法错误,D 错误;其余选项均符合形参语法规则。
4.有如下函数定义,若执行调用test(3+2),则传入函数的实参值为( )
int test(int n)
{ int s; s = n * 2; return s; }
A. 3 B. 2 C. 5 D. 编译报错
【答案】C
【解析】实参可以是表达式,调用时先计算表达式3+2结果为 5,再将值传递给形参 n。
5.设有以下程序片段,运行后输出结果是( )
int f(int x)
{ int t; t = x + 1; return t;}
int main()
{ int a, res;
a = 4;
res = f(a);
printf("%d",res); return 0; }
A. 4 B. 5 C. 3 D. 编译错误
【答案】B
【解析】实参 a=4 传递给形参 x,函数计算 4+1=5 并返回,最终输出 5。
6.分析如下代码,函数调用的实参个数是( )
int fun(int x, int y, int z)
{ return x+y+z; }
int main()
{ int a,b,c;
a=1;b=2;c=3;
fun(a, 5, b+c);
return 0; }
A. 1 B. 2 C. 3 D. 4
【答案】C
【解析】本次调用依次传入a、5、b+c三个实参,与形参个数一一对应。
7.执行以下程序段的输出结果是( )
void show(int k)
{ printf("%d ",k*2);}
int main()
{ int n; n = 6;
show(n); return 0;}
A. 6 B. 12 C. 3 D. 无输出
【答案】B
【解析】实参 6 传给形参 k,计算 6*2=12 并打印,输出 12。
8.执行以下程序代码的输出结果是( )
int f1(int a)
{ int res; res = a + 3; return res; }
int f2(int b)
{ int res; res = f1(b) * 2; return res; }
int main()
{ int num; num = 2;printf("%d",f2(num)); return 0; }
A. 10 B. 5 C. 4 D. 8
【答案】A
【解析】属于函数嵌套调用。num=2 传入 f2,f2 调用 f1 (2) 得到 5,5*2=10,最终输出 10。
9.设有以下递归函数,传入实参5,函数返回值为( )
int digui(int n)
{ if(n <= 1) return 1;
return n + digui(n-1); }
A. 5 B. 15 C. 12 D. 9
【答案】B
【解析】该函数实现 1~n 累加。digui (5)=5+4+3+2+1=15。
10.分析代码,函数调用后返回值是( )
int sub(int x, int y)
{ if(x > y) return x - y;
else return y - x; }
int main()
{ int m,n; m=8; n=3;
printf("%d",sub(m,n));
return 0; }
A. 5 B. -5 C. 11 D. 24
【答案】A
【解析】函数求两数差值的绝对值,8-3=5,输出 5。
11.设有如下代码,则程序运行后的输出结果是( )
int f(int t)
{ return t*3; }
int main()
{ int x; x = f(1+2*3); printf("%d",x); return 0; }
A.19 B.20 C.21 D.22
【答案】C
【解析】先计算实参表达式1+2*3得 7,再执行7*3,最终结果为 21。
12.设有以下所示程序代码,运行后的输出结果是( )
int one(int a)
{ int s; s = a * 2; return s;}
int two(int b)
{ int s; s = one(b) + 4; return s; }
int main()
{ int num; num = 3;printf("%d", two(num)); return 0; }
A. 6 B. 10 C. 7 D. 12
【答案】B
【解析】num=3 传入 two 函数,two 调用 one (3) 得到 6,6+4=10,最终输出 10。
13.分析如下代码,程序运行后的输出结果是( )
int fun(int n)
{ if(n == 0) return 0;
return fun(n-1) + 2; }
int main()
{int res; res = fun(4); printf("%d", res); return 0; }
A. 4 B. 6 C. 8 D. 10
【答案】C
【解析】递归推演:fun (4)=fun (3)+2,fun (3)=fun (2)+2,fun (2)=fun (1)+2,fun (1)=fun (0)+2,fun (0)=0;累加得 0+2+2+2+2=8。
14.分析如下代码,程序运行后的输出结果是( )
int fn(int k)
{ int t;
if(k == 1) return 1;
t = fn(k-1) * k;
return t; }
int main()
{int num;num = fn(3);printf("%d",num);return 0; }
A. 3 B. 6 C. 9 D. 12
【答案】B
【解析】该函数实现阶乘运算,3! = 3*2*1 = 6。
15.分析如下代码,程序运行后的输出结果是( )
int a(int x)
{ return x + 1;}
int b(int y)
{ return a(y) * 3;}
int c(int z)
{ return b(z) - 2;}
int main()
{int res;res = c(2);printf("%d",res);return 0; }
A. 7 B. 9 C. 11 D. 13
【答案】A
【解析】逐层计算:a (2)=3,b (2)=3×3=9,c (2)=9-2=7。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.(2025年)下列程序的运行结果是__________________。
#include <stdio.h>
int x=3;
int f(int x){
if(x/2>1)
f(x/2);
printf("%d",x);
return 1;
}
int main(){
int x=5;
f(x);
return 0;
}
【答案】25
2.(2022年)下列程序的运行结果是__________________。
#include "stdio.h"
int fun(int m)
{int n=0;
m/=2;
if(m)
{
n*=m;
return (fun(m-2));
}
else
return n; }
int main(void)
{int i;
for(i=0;i<2;i++)
printf("fun(%d)=%d+",4+i,fun(4+i));
return 0;
}
【答案】fun(4)=0+fun(5)=0+
3.下列程序的运行结果是__________________。
#include <stdio.h>
int dg(int n)
{ if(n == 1)
return 5;
return dg(n - 1) * 2 + n * n;
}
int main()
{ int num;
num = dg(5);
printf("%d", num);
return 0;
}
【答案】205
4.下列程序的运行结果是__________________。
#include <stdio.h>
int fb(int k)
{ if(k == 1 || k == 2)
return 4;
return fb(k-1) + fb(k-2) + k;
}
int main()
{ int num;
num = fb(7);
printf("%d", num);
return 0;
}
【答案】102
5.下列程序的运行结果是__________________。
#include <stdio.h>
int calc(int n)
{ int i;
int sum;
sum = 0;
for(i = 1; i <= n; i++)
sum = sum + i * 3;
return sum;
}
int fun(int x)
{ return calc(x) - calc(x - 2);}
int main()
{ int res;
res = fun(7);
printf("%d", res);
return 0; }
【答案】39
6.下列程序的运行结果是__________________。
#include <stdio.h>
int a(int x)
{ int t;
t = 0;
while(x > 0)
{ t = t + x;
x = x - 1; }
return t; }
int b(int y)
{ return a(y) * 2;}
int c(int z)
{ return b(z + 1) - a(z - 1);}
int main()
{ int res;
res = c(6);
printf("%d", res);
return 0;}
【答案】41
7.下列程序的运行结果是__________________。
#include <stdio.h>
int F(int x)
{ if(x == 0) return 1;
if(x % 2 == 1) return G(x - 1) + x;
return G(x - 1) - x;}
int G(int x)
{ if(x == 0) return 3;
if(x % 2 == 1) return F(x - 1) * 2;
return F(x - 1) + x;}
int main()
{ int num;num = F(4);printf("%d", num);return 0; }
【答案】-4
8.下列程序的运行结果是__________________。
#include <stdio.h>
int count(int num)
{ int cnt;
cnt = 0;
while(num > 0)
{ cnt = cnt + 1;
num = num / 2;}
return cnt;}
int main()
{ int s;
s = count(count(20) + count(12));
printf("%d", s);
return 0;}
【答案】4
9.下列程序的运行结果是__________________。
#include <stdio.h>
int get_val(int n)
{ int i;
int s;
s = 0;
for(i = 1; i <= n; i++)
{ if(i % 3 != 0)
s = s + i * 2;}
return s;}
int main()
{ int res;
res = get_val(6) - get_val(4);
printf("%d", res);
return 0;}
【答案】10
10.下列程序的运行结果是__________________。
#include <stdio.h>
int rec(int n)
{ if(n < 3) return n;
return rec(n - 1) + rec(n - 2) - rec(n - 3);}
int loop_sum(int m)
{ int i,s;
s = 0;
for(i = 1; i <= m; i++)
s = s + rec(i);
return s;}
int main()
{ int r;
r = loop_sum(7);
printf("%d", r);
return 0; }
【答案】28
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.(2025年)AI 具有很强的学习能力。第一天它学习 1 个知识点;接下来两天中,每天学习 2 个知识点;再接下来三天中,每天学习 3 个知识点;……。下面程序功能是:按以上规律进行学习,输入学习天数 n 时,输出 AI 共学习了多少个知识点。例如:当 n=7 时,AI 一共学习了 18(1+2+2+3+3+3+4=18)个知识点。
#include <stdio.h>
int study(int n){
________①________
int s;
int sum=0;
do{
s=___________②___________
sum+= _________③________
k++;
}while(s<n);
sum=sum-________④________;
return sum;
}
int main(){
int y,n;
printf("n=");
scanf("%d",&n);
if(n>0){
___________⑤___________
printf("n=%d,y=%d
",n,y);
}else{
printf("error! ");
}
return 0;
}
【答案】①int k=1; ②k*(k+1)/2;或(k*k-k)/2+k;
③k * k; ④(s-n)*(k-1) ⑤y=study(n);
2.(2024年)形如2,3,5,7,11,131这样的素数被称为对称素数,下面程序的功能是寻找 1~10000 内的对称素数并输出。
#include <stdio.h>
int isPrime(int n);
int suNum(int n);
int main()
{
int n;
for(n=2; ________①________ ;n++)
{
if(isPrime(n))
if(suNum(n))
printf("%d is a suNum
",n);
}
return 0;
}
int isPrime(int n)
{
int i,flag=1;
if(n!=2 && n%2==0)
flag=0;
for(i=3;i*i<=n;i+=2)
if( ________②________ )
flag=0;
return flag;
}
int suNum(int n)
{
________③________
if( ________④________ )
flag=1;
if(n>100 && ________⑤________ )
flag=1;
return flag;
}
【答案】①n<=10000; ②n%i==0 ③int flag=0; ④n<=11
⑤n>100&&n%10==n/100||n>1000&&n%10==n/1000&&n/10%10==n/100%10
3.现有一堆椰子,按照固定规则连续进行多轮分配:
①共有 5 名水手,每名水手依次对椰子进行分配:将当前所有椰子平均分成 5 份,分配后必然剩余 1 个椰子,该椰子丢弃;水手拿走其中 1 份,把剩下 4 份椰子合并,留给下一位水手。
②5 名水手全部完成分配后,再对剩余的椰子执行最后一轮分配:依旧平均分成 5 份,同样会剩余 1 个椰子并丢弃。
下列程序的功能是:求出满足以上整套分配规则的最小椰子总数。
#include <stdio.h>
int divide(int num)
{ if(________①_______)
return -1;
return ________②________;
}
int check(int total)
{ int i;
int now = total;
for(i = 0; i < 5; i++)
{ now = ______③_______;
if(now == -1)
return 0;
}
now = divide(now);
if(now == -1)
return 0;
________④_______;
}
int main()
{ int n = 1;
while(1)
{ if(______⑤______ == 1)
{ printf("满足条件的最小椰子数:%d
", n);
break;
}
n++; }
return 0; }
【答案】①num % 5 != 1 ②(num - 1) / 5 * 4 ③divide(now)
④return 1 ⑤check(n)
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.(2025年)下列程序中,函数f()的功能是:求级数前n项的和并返回。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 double f(int n){
L3 int p=1,q=1,t;
L4 double s=0;
L5 while(n--){
L6 s+=1*p/q;
L7 t=q;
L8 q=p;
L9 p=t;
L10 }
L11 return s;
L12 }
L13 int main(){
L14 int n;
L15 printf("input n=");
L16 scanf("%d",&n);
L17 printf("sum=%f
",f(n));
L18 return 0;
L19 }
【答案】①L6 s+=1.0*p/q; 或 s+=(double)*p/q; 或 s+=*p/(double)q;
②L8 q=p+q; 或 q=p+t;
2.某人闯关一座古堡,全程共 8 个关卡,每一关的行进步数遵循固定规律:当前关卡步数 = 上一关步数 × 2 + 3。已知闯到第 8 关时,该关卡对应的步数为 637。下列程序的功能是:计算并输出第一关的初始行进步数。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int getFirstStep(int lastStep, int totalLevels) {
L3 int currentStep = lastStep;
L4 int i;
L5 for (i = 0; i < totalLevels ; i++) {
L6 currentStep = (currentStep + 3) * 2;
L7 }
L8 return currentStep;
L9 }
L10 int main() {
L11 int level8_step = 637;
L12 int total_levels = 8;
L13 int first_step = getFirstStep(level8_step, total_levels);
L14 printf("第一关的初始行进步数为: %d
", first_step);
L15 return 0;
L16 }
【答案】①L5 for (i = 0; i < totalLevels - 1; i++) {
②L6 currentStep = (currentStep - 3) / 2;
3.下列程序的功能是输出200~300内的亲密数对。函数f()的功能是:求一个正整数的因子(包含1但不包含自身)的和。如果一个正整数a的因子和等于另一个正整数b,并且b的因子和也等于a,则称a与b互为一对亲密数,如220与284就是一对亲密数。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int f(int n){
L3 int i=0,s=0;
L4 for(i=1;i<=n/2;i++)
L5 if(n/i==0)
L6 s+=n;
L7 return s;
L8 }
L9 int main(){
L10 int i,j,s;
L11 for(i=200;i<300;i++){
L12 s=f(i);
L13 for(j=i+1;j<300;j++)
L14 if(s==j)
L15 if(i==j)
L16 printf("i=%d,j=%d
",i,j);
L17 }
L18 return 0;
L19 }
【答案】①L5 if(n%i==0)
②L6 s+=i;
③L15 if(i==f(j)) 或 if(f(j)==i)
4.(2023年)下列程序中,函数 f 的功能是:求整数 n(n<1000)每个数位上包含 1 的个数,如:17 中各数位包含 1 的数量为 1,112 中各数位包含 1 的数量为 2。主函数的功能是求小于等于 N 的自然数中,各数位包含 1 的数量的和。如 N=7,执行结果为 “iCount=1”;如 N=12,执行结果为 “iCount=5”。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 unsigned int f(unsigned int n)
L3 {
L4 unsigned int iNum=0;
L5 while(n)
L6 {
L7 iNum+=(n%10)?0:1;
L8 n%=10;
L9 }
L10 return iNum;
L11 }
L12 int main()
L13 {
L14 unsigned int N=12;
L15 unsigned int iCount=0;
L16 int i;
L17 for(i=1;i<=N;i++)
L18 {
L19 iCount=f(i);
L20 }
L21 printf("iCount=%d",iCount);
L22 }
【答案】①L7 iNum+=(n%10)==1?1:0;
②L8 n/=10;
③L19 iCount+=f(i);
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$