请解释一下为什么 for 循环中的 printf 仅返回 0.00000
min 是一个非常大的值。尝试使用 float
和 %f
,但它仅返回 nan。
#include <stdio.h>
#include <math.h>
#include <conio.h>
double getMin (double xf,double yf,double zf)
{
if (xf < yf && xf < zf)
{
return (xf);
}
else if (yf < xf && yf < zf)
{
return (yf);
}
else return (zf);
}
int main()
{
double getMin (double xf,double yf,double zf);
double x = 1, y = 0, z = 1, min = 0;
for (int j = 3 ; j >= -2 ; j--)
{
x = (sin(pow(j, (1 / 2))) / (j + 1)) * x;
printf("\nP #1=%lf", x);
}
for (int k = 5 ; k <= 9 ; k++)
{
y = cos(k / (k - 10)) + y;
printf("\nS #1 = %lf", y);
}
for (int l = 2 ; l <= 8 ; l++)
{
z = (log10(l - 4)) * z;
printf("\nP #2= %lf", z);
}
min = getMin(x, y, z);
printf("\nM = %lf", min);
getch();
}
最佳答案
您的代码中存在多个问题。
您混合了整数算术和浮点算术。
1 / 2
计算结果为0
,而1. / 2
计算结果为0.5
。同样,您必须写k / (k - 10.)
如果你想要浮点运算。printf
double
的格式是%f
,不是%lf
。l
希望会被忽略。它在我的系统上,但也许它在您的环境中做了一些可疑的事情。printf
格式与scanf
不一致格式:避免使用scanf
的又一个原因.重新声明
getMin
在main
的局部范围内是无用且不好的做法。在第一个循环中,您计算
pow(j, (1 / 2))
。您可能是说pow(j, 0.5)
与sqrt(j)
相同。然而j
取值-1
和-2
,产生nan
正如预期的那样,pow(j, 0.5)
计算实数域中的平方根,而不是复数域中的平方根。计算
log(l - 4)
对于l=2
还返回nan
因为log
负值未定义。
通过这些修复,执行代码会给出以下输出:
P #1=0.246757
P #1=0.081246
P #1=0.034183
P #1=0.000000
P #1=nan
P #1=nan
S #1 = 0.540302
S #1 = 0.611040
S #1 = -0.079719
S #1 = -0.733362
S #1 = -1.644493
P #2= nan
P #2= nan
P #2= nan
P #2= nan
P #2= nan
P #2= nan
P #2= nan
M = nan
这对我来说似乎不正确:nan < x
和x < nan
始终评估为 false,因此 getMin(nan, y, nan)
返回nan
.
关于c - (C) printf 仅返回 0.(0) 和 %lf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33902267/