编写fun,其功能是:根据以下公式计算s,将结果作为函数值返回;n通过形参传入. 帮我看看我哪里出问题了?编写fun,其功能是:根据以下公式计算s,将结果作为函数值返回;n通过形参传入. s=1
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/24 22:48:23
编写fun,其功能是:根据以下公式计算s,将结果作为函数值返回;n通过形参传入. 帮我看看我哪里出问题了?编写fun,其功能是:根据以下公式计算s,将结果作为函数值返回;n通过形参传入. s=1
编写fun,其功能是:根据以下公式计算s,将结果作为函数值返回;n通过形参传入. 帮我看看我哪里出问题了?
编写fun,其功能是:根据以下公式计算s,将结果作为函数值返回;n通过形参传入.
s=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+4)+ …… +1/(1+2+……n)
例如:若n的值为11时,函数的值为:1.833333
#include
double fun(int n)
{int a,i,b;
a=1;i=0;
for (;i
编写fun,其功能是:根据以下公式计算s,将结果作为函数值返回;n通过形参传入. 帮我看看我哪里出问题了?编写fun,其功能是:根据以下公式计算s,将结果作为函数值返回;n通过形参传入. s=1
#include
double fun(int n)
{
\x05/*
\x05\x05程序最主要的问题是变量类型声明不对.
\x05\x05如果变量 a 声明为 int ,那么 1/a 的结果是没有小数部分的,结果永远是一个整数.
\x05\x05这就造成了精度误差.
\x05\x05要想结果含有小数部分,那么 a/b 中的两个变量 a,b 至少有一个是浮点类型的.
\x05\x05
\x05\x05另外,你的程序可以利用等差数列求和公式:
\x05\x05\x051+2+...+n=n*(n+1)/2
\x05\x05进一步简化成下面这个样子.
\x05*/
\x05if(n==1)
\x05\x05return 1.0;
\x05else
\x05\x05// 注意这里必须是 1.0 不能是1,否则结果是没有小数部分的!
\x05\x05return 1.0/(n*(n+1)/2)+fun(n-1);
}
int main()
{
\x05int c;
\x05scanf("%d",&c);
\x05printf("%lf\n",fun(c));
}