函数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;} |