计算机二级C语言上机真题(100)【附详解】
函数fun 的功能是:计算正整数n 的所有因子(1 和n 除外)之和作为
函数值返回。 例如:n=120 时,函数值为239。
#include < conio.h >
#include < stdio.h >
int fun(int n)
{ int _1__,s=0;
/*能整除n 的自然数即称为因子*/
for (i=2;i< n;i++)
if (n%i==0) s=___2__;
return (s);
}
main() /*主函数*/
{ printf("%d\n",fun(120));
}
(2011年2月)
解析: 本题的考核点是计算n 所有因子的算法。
解题思路:判断因子的方法是:能被n整除的数。由于题意中指明需将1和n
除外,所以循环的范围应从2至n-1。
答案:1: i 2: s+i
答案:【1】i 【2】s+i
【真题2】 已知一个数列的前三项分别为0,0,1, 以后的各项都是其相邻的前三
项之和。给定程序modi.c 中函数 fun 的功能是:计算并输出该数列前n项的平方
根之和sum。n 的值通过形参传入。 例如,当n=10 时,程序的输出结果应为:
23.197745。 请改正函数fun 中的错误,使程序能输出正确的结果。 注意:不要
改动main 函数,
#include < conio.h >
#include < stdio.h >
#include < math.h >
/************found************/
fun(int n)
{ double sum, s0, s1, s2, s; int k;
sum = 1.0;
if (n < = 2) sum = 0.0;
s0 = 0.0; s1 = 0.0; s2 = 1.0;
for (k = 4; k < = n; k++)
{ s = s0 + s1 + s2;
sum += sqrt(s);
s0 = s1; s1 = s2; s2 = s;
}
/************found************/
return sum
}
main ( )
{ int n;
clrscr( );
printf("Input N=");
scanf("%d", &n);
printf("%f\n", fun(n) );
}
(2011年2月)
解析: 本题的考核点是C语言中的函数的入口参数和类型转换。
C 语言规定,凡不加类型说明的函数,一律自动按整型处理。如果函数有返回
值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类
型。根据题意,函数返回值为实型,所以第一处错误"fun(int n)"应改为"float
fun (int n)"或具有相同作用的句子。
函数的返回值是通过函数中的return语句获得的。return 语句后面的括弧可以
不要,但分号不能少,必须加分号。所以,第二处错误应改为"return sum;"或
相同作用的句子。
如果函数值的类型和return语句中表达式的 值不一致,则以函数类型为准。对
数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。
本评析仅作参考。
【真题3】 请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个
数,结果由函数返回。其中Fibonacci 数列F(n)的定义为 F(0)=0,F(1)=1,
F(n)=F(n-1)+F(n-2) 例如:t=1000 时 ,函数值为987。 注意:部分源程序给
出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun的花括号
中填入所编写的若干语句。 试题程序:
#include < conio.h >
#include < math.h >
#include < stdio.h >
int fun(int t)
{…… }
main()
{int n;
clrscr();
n=1000;
printf("n=%d, f=%d\n",n, fun(n)); }
(2011年2月)
解析:
int fun(int t)
{int a=1,b=1,c=0,i; /*a 代表第n-2 项,b 代表第n-1 项,c 代表
第n 项*/
/*如果求得的数c 比指定比较的数小,则
计算下一个Fibonacci 数,对a,b 重新置数*/
do {
c=a+b;
a=b;
b=c;
}
while (c< t); /*如果求得的数c 比指定比较的数大时,退出
循环*/
c=a; /*此时数c 的前一个Fibonacci 数为小于指
定比较的数的最大的数*/
return c;}
函数值返回。 例如:n=120 时,函数值为239。
#include < conio.h >
#include < stdio.h >
int fun(int n)
{ int _1__,s=0;
/*能整除n 的自然数即称为因子*/
for (i=2;i< n;i++)
if (n%i==0) s=___2__;
return (s);
}
main() /*主函数*/
{ printf("%d\n",fun(120));
}
(2011年2月)
解析: 本题的考核点是计算n 所有因子的算法。
解题思路:判断因子的方法是:能被n整除的数。由于题意中指明需将1和n
除外,所以循环的范围应从2至n-1。
答案:1: i 2: s+i
答案:【1】i 【2】s+i
【真题2】 已知一个数列的前三项分别为0,0,1, 以后的各项都是其相邻的前三
项之和。给定程序modi.c 中函数 fun 的功能是:计算并输出该数列前n项的平方
根之和sum。n 的值通过形参传入。 例如,当n=10 时,程序的输出结果应为:
23.197745。 请改正函数fun 中的错误,使程序能输出正确的结果。 注意:不要
改动main 函数,
#include < conio.h >
#include < stdio.h >
#include < math.h >
/************found************/
fun(int n)
{ double sum, s0, s1, s2, s; int k;
sum = 1.0;
if (n < = 2) sum = 0.0;
s0 = 0.0; s1 = 0.0; s2 = 1.0;
for (k = 4; k < = n; k++)
{ s = s0 + s1 + s2;
sum += sqrt(s);
s0 = s1; s1 = s2; s2 = s;
}
/************found************/
return sum
}
main ( )
{ int n;
clrscr( );
printf("Input N=");
scanf("%d", &n);
printf("%f\n", fun(n) );
}
(2011年2月)
解析: 本题的考核点是C语言中的函数的入口参数和类型转换。
C 语言规定,凡不加类型说明的函数,一律自动按整型处理。如果函数有返回
值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类
型。根据题意,函数返回值为实型,所以第一处错误"fun(int n)"应改为"float
fun (int n)"或具有相同作用的句子。
函数的返回值是通过函数中的return语句获得的。return 语句后面的括弧可以
不要,但分号不能少,必须加分号。所以,第二处错误应改为"return sum;"或
相同作用的句子。
如果函数值的类型和return语句中表达式的 值不一致,则以函数类型为准。对
数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。
本评析仅作参考。
【真题3】 请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个
数,结果由函数返回。其中Fibonacci 数列F(n)的定义为 F(0)=0,F(1)=1,
F(n)=F(n-1)+F(n-2) 例如:t=1000 时 ,函数值为987。 注意:部分源程序给
出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun的花括号
中填入所编写的若干语句。 试题程序:
#include < conio.h >
#include < math.h >
#include < stdio.h >
int fun(int t)
{…… }
main()
{int n;
clrscr();
n=1000;
printf("n=%d, f=%d\n",n, fun(n)); }
(2011年2月)
解析:
int fun(int t)
{int a=1,b=1,c=0,i; /*a 代表第n-2 项,b 代表第n-1 项,c 代表
第n 项*/
/*如果求得的数c 比指定比较的数小,则
计算下一个Fibonacci 数,对a,b 重新置数*/
do {
c=a+b;
a=b;
b=c;
}
while (c< t); /*如果求得的数c 比指定比较的数大时,退出
循环*/
c=a; /*此时数c 的前一个Fibonacci 数为小于指
定比较的数的最大的数*/
return c;}