2013-09-21 61 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不在意。 –