pi的近似值可以使用下面给出的系列计算:
pi = 4 * [1 - 1/3 + 1/5 - 1/7 + 1/9 ... +(( - 1)^ n)/(2n + 1)]
编写一个C ++程序,用这个系列来计算pi的近似值。程序采用输入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;
}
答案 0 :(得分:1)
初始化错误:
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;
}
编辑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;
}
}
答案 1 :(得分:0)
交替标志必须是你的循环的一部分。使用复合语句将其包含在循环体中:
for (int i=1; i <=n; i++) {
sum += sign/(2.0*i+1.0);
sign *=-1;
}