2013-10-31 233 views
1

我必須找到幾何級數三分之一+ 1/9 + 1/27的總和.....,我必須輸出與setprecision 6.For循環被跳過C++

這裏的總和是我的代碼:

#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,當我嘗試在添加測試COUT for循環中,程序崩潰。

+0

因此,循環內的每個'cout'語句都會導致崩潰?什麼錯誤信息給出? – abiessu

回答

12

(1/x)始終爲0,因爲這兩個參數都是int。改爲使用(1.0/x)

+1

經典錯誤!我們之前都做過,OP,所以不要沮喪!確切地說, – AndyG

+0

。一旦你做到了,你就會非常小心地使用花車。有一句好話說,優秀的程序員不是那些不犯錯誤的人。他們是那些,他們讓他們所有人都曾經一次:) –

+0

我重新閱讀整個程序,試圖做幾次測試,無法找到問題,它非常簡單..非常感謝!在未來我會小心使用花車。 :) – user2699298

1

因爲xint

(1/x) 

被評價爲整數除法,它向下舍入到零。然後將其轉換爲(float),但它已經爲零。

你可以使用(1/(float) x)來得到你想要的。

1

改變這一行:

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

到:

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

你做的整數除法,這將導致0,然後澆注這一結果浮動。