繁体   English   中英

为什么浮动操作不能正常工作?

[英]Why don't float operations work properly?

我是 C 的新手,但我之前曾在 C++ 和 C# 中编码。 我已将此代码编写为作业,但浮动操作无法正常工作。 它应该做的是,通过输入两个正整数 n 和 m,最终结果应该是和与 n 和乘法的平方根的和

我的问题是,即使第一个总和有效,乘法和平方根(以及最后的总和)都不起作用。 最后,无论 n 和 mi 写什么两个数字,总和都是可以的,而其他两个将完全不准确——要么是 1,要么是乘法和最终的总和,要么是没有意义的东西(准确地说,“1 .#INF00")。

这是我写的代码。 有谁知道我做错了什么,或者我该如何解决这个问题?

float sum(int n)
{
    float s = 0;
    for(float i = 1; i<=(float)n; i++)
    {
        s += (2*i)/(3*i*i+4);
    }
    return s;
}

float multiplication(int m)
{
    float p = 1;
    for(float j = 1; j <= (float)m; j++)
    {
        p *= (float)(j*j+1);
    }
    return p;
}

int main()
{
    int n;
    int m;
    scanf("%i", &n);
    scanf("%i", &m);
    float s = sum(&n);
    float p = multiplication(&m);
    float e = s + (float)sqrt(p);
    printf("The sum is %f \n", s);
    printf("The multiplication is %f \n", p);
    printf("The final expression is %f \n", e);
    getch();
    return 0;
}

您应该将 integer 值而不是指针传递给函数summultiplication

float sum(int n)
{
    float s = 0;
    for(float i = 1; i<=(float)n; i++)
    {
        s += (2*i)/(3*i*i+4);
    }
    return s;
}

float multiplication(int m)
{
    float p = 1;
    for(float j = 1; j <= (float)m; j++)
    {
        p *= (float)(j*j+1);
    }
    return p;
}

int main()
{
    int n;
    int m;
    scanf("%i", &n);
    scanf("%i", &m);
    float s = sum(n); /* pass an integer, not a pointer */
    float p = multiplication(m); /* pass an integer, not a pointer */
    float e = s + (float)sqrt(p);
    printf("The sum is %f \n", s);
    printf("The multiplication is %f \n", p);
    printf("The final expression is %f \n", e);
    getch();
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM