近似求 PI:根据下式求 π 的近似值,直到最后一项小于给定精度 eps
有几个问题:
(1)fact函数求阶乘,当n大于15的时候,返回值超出int范围,所以,fact函数的返回值类型改成double类型
(2)multi函数同理,返回值类型也改成double
(3)因为eps是最后结果的精度,item是PI/2的的精度,所以 while循环条件应该是 while( item >= eps / 2)
(4)fact函数和multi函数中,result 从int改成double类型。
(5)fact函数for循环的 i 从1 开始
代码修改如下(修改部分有注释),如有帮助,望采纳,多谢。
#include <stdio.h>
double fact(int n); //修改 :返回值类型从int 改成double,否则结果容易越界
double multi(int n); //修改 :返回值类型从int 改成double,否则结果容易越界
int main(void)
{
double eps,item,sum;
int i;
printf("Enter eps: ");
scanf("%le",&eps);
i=0;
item = 1;
sum = 0;
while( item >= eps/2) { //修改,因最后的结果要乘以2,所以emp要除以2
sum = sum + item;
i++;
item = fact(i)/multi(2*i+1);
}
sum = sum + item;
printf("PI = %0.5f\n",sum*2);
return 0;
}
double fact(int n) //返回值类型改成double
{
double result; //返回值int 改成double
int i;
result = 1;
for(i=1;i<=n;i++) //修改,i从1开始
result = result * i;
return result;
}
double multi(int n) //返回值int类型改成double
{
double result;//int 改成double
int i;
result = 1;
for(i=3;i<=n;i=i+2){
result = result * i;
}
return result;
}
错误是因为你在 Code::Blocks 中打开了一个没有项目文件的文件
确保打开的是一个项目文件,而不是单个源文件。如果你只是想打开一个源文件,可以使用“文件”菜单中的“新建文件”选项来创建一个新的项目文件。
for (i = 0; i <= n; i++)
result = result * i;
这里i不能从0开始,要从1或者2开始。否则结果肯定都是0了。
#include <math.h>
void t_4__4_3() {
int deno = 1, flag = 1;
float sum = 0, item = 1, eps;
printf("Input eps:");
scanf("%f", &eps);
while (fabs(item) >= eps) {
item = 1.0 * flag / deno;
sum += item;
deno += 3, flag *= -1;
}
printf("%f\n", sum);
}