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



我是C的新手,但我以前用C++和C#进行过编码。我已经将此代码作为赋值编写,但是浮点运算不能正常工作。它应该做的是,通过输入两个正整数,n和m,最终结果应该是,与n的和和和乘法的平方根的和。

我的问题是,即使第一个和有效,乘法和平方根(最后是最后的和(都不起作用。最后,无论我写的是两个数字n和m,总和都是可以的,另外两个将完全不准确——要么是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;
}

应该将整数值而不是指针传递给函数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;
}

最新更新