提问者:小点点

浮点数组的平均值


如何得到除法的浮点结果?

虽然我将平均数组定义为float。

int main()
{    
const int Number = 20; 
int Fibonacci[Number]; 
float average[Number];
for ( int i =0; i <= Number; i++ )
{
    if ( i == 0 ) 
       {Fibonacci[i] = 0;}
    else if ( i == 1 ) 
       {Fibonacci[i] = 1;}
    else 
       {Fibonacci[i] = Fibonacci[i -1] + Fibonacci[i -2];

        //average[i] = (Fibonacci[i -1] + Fibonacci[i -2])/2 ;   
       }
}

cout<< "The first 20 Fibonacci series numbers are: \n";
for ( int i = 1; i <= Number; i++)
{    cout<< Fibonacci[i]<<endl;

}



cout<< "The average adjacent array numbers are: \n";
for ( int i = 3; i <= Number; i++)
{   average[i] = (Fibonacci[i]/2);
    //cout.precision(0);

问题就在这里

    cout<< average[i]<<endl;     <-----here the problem!!
}

return 0;
}

我很感激任何帮助。 提前谢谢你。


共3个答案

匿名用户

当你做除法的时候,你是在做整数除法,所以你不会得到浮点结果。 一个简单的修复方法如下:

average[i] = Fibonacci[i] / 2.0f;

注意,如果/的操作数之一是float,那么您将得到浮点除法。

另外,请注意,您的循环索引在数组中的位置太远了。 您需要在number之前停止,如下所示:

for ( int i = 0; i < Number; i++)

这是因为有效的数组索引从0.。 (编号-1)

匿名用户

只需对Fibonacci数组进行类型转换,如下所示-

平均值[i]=((float)Fibonacci[i]/2);

因为为了得到浮点结果,/操作中使用的两个变量中的任何一个都必须是浮点。

匿名用户

如果Fibonacci[i]类型为int,则(Fibonacci[i]/2)是一个整数除法,结果是一个整数值(没有任何小数部分)。 将这个积分结果赋给一个浮点数并不能改变您已经执行了积分除法的事实。

可以通过使其中一个操作数为浮点值来强制浮点除法。

所以(1)要么用石膏。。。

((float)Fibonacci[i])/2

或(2)除以2.0f(它是一个浮点值):

Fibonacci[i]/2.0f