for循环被跳过c ++

时间:2013-10-31 22:28:49

标签: c++ for-loop

我必须找到几何级数1/3 + 1/9 + 1/27 .....的总和,我必须用setprecision 6输出总和。

这是我的代码:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int n;
    int x = 1;
    float sum = 0;
    cin >> n;
    for (int i = 1; i <= n; i++){
        x *= 3;
        sum += (float)(1/x);
    }
    cout << fixed << setprecision(6);
    cout << "Sum of the geometric progression of the first " << n << " elements is " << sum << endl;
    return 0;
}

程序始终输出0.000000,当我尝试在for循环中添加测试cout时,程序崩溃。

3 个答案:

答案 0 :(得分:12)

(1/x)始终为0,因为两个参数都是int。例如,使用(1.0 / x)代替。

答案 1 :(得分:1)

因为xint

(1/x)

被评估为整数除法,它向下舍入为零。然后将其转换为(float),但它已经为零。

您可以使用(1 / (float) x)来获得所需内容。

答案 2 :(得分:1)

更改此行:

    sum += (float)(1/x);

为:

    sum += (1/(float)x);

你正在进行整数除法,结果为0,然后将该结果转换为float。