#include <stdio.h> #include <string.h>

double fac(int n) { double s=1; int i; if(n<=1) return 1; for(i=n;i>0;i--) { s*=i; } return s; }

double sum(int n1,int n2) { int i; double s=0; for(i=n1;i<=n2;i++) { s+=1/fac(i); } return s; }

int main() { double s; s=sum(1,3)+sum(6,9)+sum(12,15); printf("\ns=%f",s); return 0; }

问题出在两个函数中的return语句位置不正确,导致只计算了一次循环。应将return语句移动到循环结束后再执行。修改后的代码如下:

#include <stdio.h> #include <string.h>

double fac(int n) { double s=1; int i; if(n<=1) return 1; for(i=n;i>0;i--) { s*=i; } return s; }

double sum(int n1,int n2) { int i; double s=0; for(i=n1;i<=n2;i++) { s+=1/fac(i); } return s; }

int main() { double s; s=sum(1,3)+sum(6,9)+sum(12,15); printf("\ns=%f",s); return 0; }

运行结果为:s=1.668282

C语言程序计算问题:求和函数结果错误分析与修正

原文地址: https://www.cveoy.top/t/topic/mQhf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录