打招呼。我正在做以下练习:运行一个程序,使用下面的系列来确定π的近似值。计算是通过在序列中生成一定数量的项来执行的。要考虑的术语数是从标准输入(键盘)读取的(大于或等于30000)。注意:在解决此问题时,不能使用C编程语言math.h库中的函数。

例如:输入一个值,输入>=30000:输入30000应该会给你结果o pi:3.141559我所拥有的问题: Uppon输入相同的值(30000)我没有得到corret o pi=3.14.但实际上是:0.0067.
这是我的代码:
#include<stdio.h>
#include<math.h>
int main(void){
double numerator, denominator, pi=0.0;
int k;
printf("input a total number o terms >=30000:");
for ( k=1;k<=30000;k++){
scanf("%d",&k);
if(k>=30000){
if(k%2==0){
numerator=1;
}
else {
numerator=-1;
}
}
denominator=2.0*k+1.0;
pi+=numerator/denominator;
pi=4*pi;
printf("value of PI is= %lf",pi);
}
return 0;
}有人能指出我做错了什么吗?我该如何解决?
非常感谢您的时间和关注。
谢谢。
发布于 2021-11-11 18:25:52
算法的实现有很多问题:
尝试在for循环中避免scanf ad printf。
不要从用户那里获取k变量,而是尝试获取k的最大值。
denominator=2*k+1是错误的,如果你遵循你在问题中给出的算法,并且应该改为denominator=2*k-1。
每次迭代都要重复pi*=4。
我应用了所有这些改进,只需要3000次迭代就可以得到pi=3.141926。
这里有一些关于for循环应该是什么样子的帮助:
for (int k=1;k<iterations;k++){
numerator*=-1;
denominator=2.0*k-1.0;
pi+=numerator/denominator;
}https://stackoverflow.com/questions/69932881
复制相似问题