为什么我的函数没有返回浮点数?

时间:2018-06-17 09:03:38

标签: c++ arrays

我已经制作了一个程序来查找一维数组的平均值。它有点工作但我的问题是浮子子程序不会在main中返回float。

void vnesi_niza(int n, int a[50])
{
    for (int i=0;i<n;i++)
    {
        cout << "a[" << i << "]=";
        cin > >a[i];
    }
}

float sreden_uspeh(int n, int a[50])
{
    int sum=0;
    float as;
    for (int i=0;i<n;i++)
    {
        sum+=a[i];
        as=sum/n;
    }
    return as;
}

int main()
{
    int n;
    int niza[50];
    cout << "input the number of elements" << endl;
    cout << "n=";
    cin >> n;
    vnesi_niza(n,niza);
    cout << endl;
    cout << "the average is " << endl;
    cout << sreden_uspeh(n,niza); //sreden_uspeh means average
    return 0;
}

4 个答案:

答案 0 :(得分:2)

由于等级之和的类型为int,因此除法运算将是整数除法,即它将下降到前一个最接近的整数。所以你应该像这样做一个十进制除法:as = (1.0 * sum) / n

注意:您不需要每次在循环中计算平均值,只需在循环中执行它就可以返回它。

答案 1 :(得分:2)

as=sum/n执行整数除法,然后将as赋值等于结果,因此sreden_uspeh函数将截断(向下舍入)的输入数组的平均值返回到整数。

如果您将变量sum声明为float sum = 0(而不是int sum = 0),那么n将被转换为浮点数,并且as=sum/n将发生as=(float)sum/n 1}},根据conversions

或者,您可以在执行除法as时将第一个操作数转换为浮点数。

此外,您正在分配float sreden_uspeh(int n, int a[50]) { int sum=0; for (int i=0;i<n;i++) { sum+=a[i]; } return (float)sum/n; } 但不会在循环的每次迭代中使用它,这是低效的。实际上你可以写

int a[50]

另请注意int *a已衰减为指针类型sreden_uspeh;完整数组未传递给%

此外,当您执行整数除法以获取模数(使用.outer-div { overflow: hidden; } .inner-div { padding: 0px; margin: 0px; height: 100%; } #port1 { height: 100%; width: 100%; background-size: cover; background-position: center; transition: all 0.5s ease; background-image: url(../img/desk.jpg); } .inner-div:hover { transform: scale(1.2); }运算符)时很常见,因为同时取整数商和模数都不会丢失任何信息。

答案 2 :(得分:0)

你犯了一个小错误。 $passwordList = ['password','secretPassword','anything']; if (isset($_POST["password"]) && in_array($_POST["password"], $passwordList)) { // do protected stuff here } 的类型为sumint

float

声明float sreden_uspeh(int n, int a[50]) { float sum=0; float as; for (int i=0;i<n;i++) { sum+=a[i]; as=sum/n; } return as; } 中的另一个错误。

答案 3 :(得分:0)

当你输入int / int时,答案会在int中计算出来。在病房之后它变成了浮动,所以你必须使它成为float / int