首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要做什么才能得到正确的值?

我需要做什么才能得到正确的值?
EN

Stack Overflow用户
提问于 2021-11-11 18:02:35
回答 1查看 74关注 0票数 1

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

例如:输入一个值,输入>=30000:输入30000应该会给你结果o pi:3.141559我所拥有的问题: Uppon输入相同的值(30000)我没有得到corret o pi=3.14.但实际上是:0.0067.

这是我的代码:

代码语言:javascript
运行
复制
#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;
}

有人能指出我做错了什么吗?我该如何解决?

非常感谢您的时间和关注。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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循环应该是什么样子的帮助:

代码语言:javascript
运行
复制
for (int k=1;k<iterations;k++){
      numerator*=-1;
      denominator=2.0*k-1.0;
      pi+=numerator/denominator;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69932881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档