我在大学的C ++课程中。我们被分配了一个项目来创建一个程序来使用pi = summation((-1)^ i + 1)*(4 / 2i-1)的系列来近似pi。
我需要输出看起来像这样:
该程序使用n项系列扩展来近似pi。
输入n的值> 6
pi [6] = 4 [1-1 / 3 + 1 / 5-1 / 7 + 1 / 9-1 / 11] = 2.9760461760417560644
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int numOfTerms;
cout <<"This program calculates pi using an n-term series expansion."<<endl;
cout <<"Enter the value for n>";
cin >>numOfTerms;
if (numOfTerms<=0)
cout <<numOfTerms<<"is an invalid number of terms."<<endl;
else
{
cout <<"pi["<<numOfTerms<<"] = ";
int i;
for (i=1; i<=numOfTerms; i++)
{
double pi, sum, firstTerm, secondTerm;
firstTerm=pow(-1,(i+1));
secondTerm=1/(2*i-1);
pi=firstTerm*secondTerm;
{
if (pi <= 4)
cout <<firstTerm<<"/"<<secondTerm;
else
cout <<"You have a C++ math error.";
}
sum=sum+(4*pi);
cout <<" = "<<sum<<endl;
}
}
return 0;
}
我有一个早期版本的代码可以正确地对n系列近似求和,但它不会显示等于总和的扩展系列。
我当前的版本不显示校正总和,但它在屏幕上显示pi [n] n次超过n行。
我愿意尝试自己计算大部分项目,我只需要知道是否有办法让我的循环输出显示在一行而不是每次迭代显示在它自己的路线上。
答案 0 :(得分:3)
不要使用endl,你的工作就完成了。
<强> ENDL 强>
插入换行符并刷新流。
它的行为等同于调用os.put('\ n')(或 os.put(os.widen('\ n'))用于其他字符类型),然后 os.flush()。强>
答案 1 :(得分:2)
三件事: 首先,为以下内容更改secondTerm的计算:
secondTerm=1.0/(2*i-1);
这样,你强迫它成为一个double(否则,它将返回一个我们不想要的int)。 其次,改变这一行:
cout <<firstTerm<<"/"<<secondTerm;
这一行:
cout <<pi;
这是因为secondTerm持有除法的结果,而不是分母。
第三,移动这一行:
cout <<" = "<<sum<<endl;
>> 循环之后的 ,因为它打印了最终结果,在对所有术语求和之后,您将执行此操作。 在 中包含该行会导致换行。如果这样做,则需要移动此行:
double pi, sum, firstTerm, secondTerm;
在 for 循环之前之前,所以sum变量继续存在。
如果你完成所有这些,程序将正常工作(虽然它打印所有条款,它们之间没有任何空格)。
答案 2 :(得分:1)
请勿使用endl
。这会导致换行。