前言
这次主要分析这一次练习中的出现的错误,之前做的题目中也有一些错误没有更正,看后续有时间就补上。
正文
代码一(错误)
#include <stdio.h>
#include <math.h>
int jc(int fm){
int i;
int sum=1;
for(i=1;i<=fm;i++)
sum=sum*i;
return sum;
}
int main(){
double x;
double sum=1;
int fm,i;
double fz;
scanf("%lf",&x);
for(i=1;(fz/fm)>=0.00001;i++){
fz=pow(x,i*1.0);
fm=jc(i);
sum=sum+pow(x,i)/jc(i);
}
printf("%.4lf",sum);
}
分析:首先是,函数 jc(int fm)返回值sum要是double型。其次“最后一项的绝对值小于0.00001”所以最后计算结果后,还应该再加一项。
代码(正确):
#include <stdio.h>
#include <math.h>
double func(int n)
{
double s=1;
for(int i=1;i<=n;i++)
{
s=s*i;
}
return(s);
}
int main()
{
double x,sum=1.0;
int i=1;
scanf("%lf",&x);
do
{
sum=sum+pow(x,i)/func(i);
i++;
}while(pow(x,i)/func(i)>=0.00001);
sum = sum +pow(x,i)/func(i);
printf("%0.4f\n",sum);
return 0;
}
否则就这样,用do-while循环把i++放在前面。
int main()
{
double x,sum=1.0;
int i=0;//i=1改为i=0
scanf("%lf",&x);
do
{
i++;
sum=sum+pow(x,i)/func(i);
}while(pow(x,i)/func(i)>=0.00001);
// sum = sum +pow(x,i)/func(i);
printf("%0.4f\n",sum);
return 0;
}
https://blog.csdn.net/melody_1016/article/details/82972720
https://blog.csdn.net/weixin_44164333/article/details/104656596