下列给定程序中,函数fun()的功能是:传入一个整数m,计算如下公式的值。
t=1/2-1/3-…-1/m
例如,若输入5,则应输出-0.283333。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <conio.h>
#include <stdio.h>
double fun(int m)
double t=l.0;
int i;
for (i=2; i<=m; i++)
/*************found**************/
t=l.0-1/i;
/*************found**************/
main ( )
int m;
clrscr ();
printf ("\nPlease enter 1 integer numbers
: In");
scanf ("%d", &m);
printf("\n\nThe result is %lfln",
fun (m));
参考答案:错误:t=1.0-1/i; 正确:t-=1.0/i;
(2)错误: ; 正确:return t;
解析: 解答类似题目的思路是我们依然先从数学思路着手,即理解数学上的规律,再分析C语言的流程,本题中分母依等差数列递增,最好用循环语句解决。我们先从第1句1/2的表达式来看起:当i从2(必须从2开始)开始循环的时候,虽然 t=1.0-1/i;和t-=1.0/i;的第1个值都是相同的,但随着循环的累加,我们就能发现问题所在了!