2013-09-21 70 views
0
void harmsec(){ 

    int n = 1; 
    float y = 1; 
    printf("Harmonic sequence: "); 

     while (y >= 0.11){ 
      printf("%.2f", y); 
      printf(", "); 
      n = n + 1; 
      y = 1*(1/n); 
     } /*while*/ 
     if (y < 0.11){ 
      printf("%.2f", y); 
      printf("\n"); 
     }/*if*/ 
}/*harmonic sequence*/ 

我想知道我的代碼有什麼問題,試圖輸出諧波序列。輸出僅爲1.00,然後爲0.0。C中的諧波序列

+0

正如一些人已經注意到的,'(1/n)'是整數除法。即使它是一個浮點數,你也不需要乘以1。 – Teepeemm

+0

爲什麼'printf(「%。2f,」,y);'和'printf(「%。2f \ n」,y)'代替'printf()'調用對呢? –

回答

4

1/n被完成爲整數除法,並且n是2第一次所以1/2 = 0和y變爲零。

將1/n更改爲1./n,然後計算浮點精度的除法。

+0

謝謝,我不能相信我錯過了。 –

3

y = 1*(1./n); //make the result as float

+0

嗯,那是一個愚蠢的錯誤。謝謝:) –

1
void harmsec(){ 

int n = 1; 
float y = 1; 
printf("Harmonic sequence: "); 

    while (y >= 0.11){ 
     printf("%.2f", y); 
     printf(", "); 
     n = n + 1; 
     y = 1*(((double)1)/n); 
    } /*while*/ 
    if (y < 0.11){ 
     printf("%.2f", y); 
     printf("\n"); 
    }/*if*/ 
}/*harmonic sequence*/ 
+0

使用cast而不是'1.0'看起來有點笨拙,就像乘以1(儘管這是問題)。就我個人而言,我不喜歡在其他答案中使用的'1'符號;我被帶到認爲應該有小數點兩側的數字,以確保沒有歧義。編譯器OTOH不在意。 –