gpt4 book ai didi

c++ - 使用泰勒方法 C++ 和循环计算 Pi

转载 作者:行者123 更新时间:2023-11-28 05:36:35 32 4
gpt4 key购买 nike

可以使用下面给出的系列计算 pi 的近似值:

pi = 4 * [ 1 - 1/3 + 1/5 - 1/7 + 1/9 … + ((-1)^n)/(2n + 1) ]

用这个数列写一个C++程序来计算圆周率的近似值。该程序采用输入 n,确定 pi 值的近似值中的项数,并输出近似值。包括一个循环,允许用户为新值 n 重复此计算,直到用户说她或他想结束程序。

预期结果是:输入要近似的项数(或零以退出):1个使用 1 项的近似值为 4.00。输入要近似的项数(或零以退出):2个使用 2 项的近似值为 2.67。输入要近似的项数(或零以退出):0

我现在可以得到正确的结果,但我不知道如何包含一个循环,允许用户为新值 n 重复此计算,直到用户说她或他想结束程序。

#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;

int main()
{ int n; double pi, sum;
do {
cout << "Enter the number of terms to approximate (or zero to quit):" << endl;
cin >> n;

if (n >0)
{

double sum=1.0;
int sign=-1;

for (int i=1; i <=n; i++) {
sum += sign/(2.0*i+1.0);
sign=-sign;
}
pi=4.0*sum;

cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);

cout << "The approximation is " << pi << " using "<< n << " terms" << endl;
}
} while(n>0);



cout << endl;

return 0;
}

最佳答案

你有错误的初始化:

double sum=0.0;
int sign=1;

应该是

double sum = 1.0;
int sign = -1;

循环也错了(有错别字?),应该是

for (int i = 1; i < n; i++) { /* please, notice "i < n" and "{"  */
sum += sign / (2.0 * i + 1.0);
sign = -sign; /* more readable, IMHO than sign *=-1; */
}

pi = 4.0 * sum; /* you can well move it out of the loop */

编辑如果你想重复计算一个常见的做法是提取一个函数(不要把所有东西都塞进一个main):

double compute(int n) {
if (n < 0)
return 0.0;

double sum = 1.0;
int sign = -1;

for (int i = 1; i < n; i++) {
sum += sign / (2.0 * i + 1.0);
sign = -sign; /* more readable, IMHO than sign *=-1; */
}

return 4.0 * sum;
}

EDIT 2 main 函数可能是这样的:

int main() {
int n = -1;

/* quit on zero */
while (n != 0) {
cout << "Enter the number of terms to approximate (or zero to quit):" << endl;
cin >> n;

if (n > 0)
cout << "The approximation is " << compute(n) << " using "<< n << " terms" << endl;
}
}

关于c++ - 使用泰勒方法 C++ 和循环计算 Pi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163899/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com