急急急
运用这个公式输入不同的n求圆周率,公式为pi/4=1-1/3+1/5-1/7+1/9-...+(-1)的(n+1)次方*1/(2n-1)。#include <stdio.h>
#include<math.h>
int main()
{
int n,i=1,l;
double pi;
scanf("%d",&n);
while (fabs(i)<=(2*n-1))
{
i*=i+2;
pi+=l*1.0/i;
l=-1*l;
}
printf("%8.3lf",pi);
}
请问这个程序错在哪里了,为什么输出很奇怪? 王小二° 发表于 2023-11-14 22:20
可以用while循环写一下吗
#include <stdio.h>
#include <math.h>
int main() {
int n, l = 1, i = 0;
double pi = 0.0;
scanf("%d", &n);
while(i < n) {
pi += l * 1.0 / (2 * i + 1);
l = -l;
i++;
}
pi *= 4;
printf("%8.3lf", pi);
return 0;
} 这个程序中存在几个问题。首先,变量 pi 没有被初始化,所以在计算时它的值是未定义的。其次, i 的更新逻辑有误,导致它不会按预期方式增加。最后,循环的终止条件也不正确。
以下是修复后的代码:
#include <stdio.h>
#include <math.h>
int main() {
int n, l = 1;
double pi = 0.0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
pi += l * 1.0 / (2 * i + 1);
l = -l;
}
pi *= 4;
printf("%8.3lf", pi);
return 0;
}
修复后的代码使用了 for 循环来迭代 n 次,每次迭代都更新了 pi 的值,并最终乘以4以得到圆周率的近似值。同时,修复了 l 的初始化问题。 isdkz 发表于 2023-11-14 22:17
这个程序中存在几个问题。首先,变量 pi 没有被初始化,所以在计算时它的值是未定义的。其次, i 的更新逻 ...
可以用while循环写一下吗
页:
[1]