在程序编辑区编写程序,给定程序功能是:
从键盘输入n的值,求下列表达式的值(按四舍五入保留10位小数)。
s=1+1/3+(12)/(35)+(123)/(357)+…+(123…n)/(357…(2n+1))
程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构!
这个代码应该怎么改呀?
#include
double fun(int n)
{
double s=1.0, t=1.0;
int k;
double rtn=1.0;
for(k=1;k<=n; k++)
{
t = k+(k-1)*10*t;
s = (2*k+1)+(k-1)*10*s;
rtn=t/s+rtn;
}
return rtn;
}
int main(void)
{
double sum;
int n;
scanf("%d",&n);
fun(n);
// sum=rtn;
printf("%.10lf",sum);
return 0;
}
修改点(1):
在 main 函数中,需要将 fun(n) 的返回值赋给变量 sum,以便后面的输出语句能够正确输出结果。因此需要修改 fun(n) 的调用方式,将其改为 sum = fun(n)。
修改点(2):
根据题目要求,需要按照四舍五入保留10位小数输出结果,因此需要在输出语句中使用格式化字符串 "%.10lf"。其中 %lf 表示输出一个 double 类型的变量,而 .10 表示保留小数点后 10 位。
另外需要注意的是,题目中给出的求和公式存在误导性,实际上每一项中分子和分母的位数均与 $k$ 相等。因此在计算 t 和 s 的值时,需要将 (k-1)*10 改为 (k-1)。
修改后如下:
#include <stdio.h>
double fun(int n)
{
double s=1.0, t=1.0;
int k;
double rtn=1.0;
for(k=1; k<=n; k++)
{
t = k+(k-1)*10*t;
s = (2*k+1)+(k-1)*10*s;
rtn=t/s+rtn;
}
return rtn;
}
int main(void)
{
double sum;
int n;
scanf("%d",&n);
sum = fun(n); // 修改点(1)
printf("%.10lf",sum);
return 0;
}
望采纳 谢谢
你这个函数fun在主函数调用之后的返回值赋值给sum啊。sum=fun(n);
题目有歧义
13579之后呢,是1357911么?还是10305070911