问题 填空题

下列给定程序中,函数 fun() 的功能是:计算并输出下列级数的的N项之和SN,直到SN+1大于q为止,q的值通过形参传入。 SN=2/1+3/2+4/3+(N+1)/N 例如,若q的值为50.0,则函数值为49.394948。 请改正程序中的错误,使它能得出正确的结果。 注意;不要改动main 函数,不得增行或删行,也不得更改程序的结构. 试题程序: #include <conio.h> #include <stdio. h> /**************found***************/ double fun(double q) { int n; double s,t; n=2; s=2.0; while (s<=q){t=s /*************found *************/ s=s+ (n+1)/n; n++;} printf ("n=%d\n ", n); /************found***************/ return s; } main () { clrscr(); printf ("%f\n ",fun (50)); }

答案

参考答案:(1)错误:double fun (double q) 正确:double fun (int q)

解析:(2)错误:s=s+(n+1)/n; 正确:s=s+(double)(n+1)/n; (3)错误:return s; 正确:return t; 该程序中多次出现了函数调用过程中定义混乱的错误,关于类似问题,我们在前面的试题中已经做过比较详细的解释,主要是对基础知识的把握。在这里我们再对函数调用规则做一简单说明。 C语言规定,在以下几种情况下可以不在调用函数前对被调用函数做类型说明。 (1)如果函数的值(函数的返回值)是整型或字符型,可以不必进行说明,系统对它们自动按整型说明。但为清晰起见,建议都加以说明为好。 (2)如果被调用函数的定义出现在主调函数之前,可以不必加以说明。因为编译系统已经先知道了已定义的函数类型,会自动处理的。也就是说,将被调用的函数的定义放在主调函数之前,就可以不必另加类型说明。 (3)如果已在所有函数定义之前,在文件的开头,在函数的外部已说明了函数类型,则在各个主调函数中不必对所调用的函数再做类型说明。 除了以上3种情况外,都应该按上述介绍的方法对所调用函数的返回值做类型说明,否则编译时就会出现错误。

选择题
选择题