C语言求表达式的值,函数调用

在程序编辑区编写程序,给定程序功能是:

从键盘输入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