请解释一下,为什么printf in循环只返回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();
}
答案 0 :(得分:1)
您的代码中存在多个问题。
混合整数运算和浮点运算。 1 / 2
评估为0
,而1. / 2
评估为0.5
。同样,如果需要浮点运算,则必须编写k / (k - 10.)
。
printf
的{{1}}格式为double
,而非%f
。希望%lf
被忽略。它在我的系统上,但也许它在您的环境中做了一些可疑的事情。 l
格式与printf
格式不一致:避免使用scanf
的另一个原因。
在scanf
的本地范围内重新声明getMin
是无用且不好的做法。
在第一个循环中,您计算main
。您可能意味着pow(j, (1 / 2))
与pow(j, 0.5)
相同。然而,sqrt(j)
采用值j
和-1
,按预期产生-2
,nan
计算真实域中的平方根,而不是复杂域。< / p>
为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
总是评估为false,因此x < nan
会返回getMin(nan, y, nan)
。
答案 1 :(得分:0)
使用此代码(与发布的代码相同),在输出中添加一些间距并在代码布局中进行更正:
P #1=0.059006
P #1=0.024826
P #1=0.020890
P #1=inf
P #1=-inf
S #1 = 0.540302
S #1 = 1.080605
S #1 = 0.664458
S #1 = 0.010814
S #1 = -0.900316
P #2= nan
P #2= nan
P #2= nan
P #2= nan
P #2= nan
P #2= nan
P #2= nan
M = nan
导致此输出:
getMin()
输出的原因是:
这些表达式:(1/2)是整数表达式。这个将评估为0,因为整数不能有分数。
摘自pow()&#34的手册页;如果x是小于0的有限值,并且y是有限非整数,则会发生域错误,并返回NaN。&#34;
摘自log10的手册页(和log())&#34;如果x是NaN,则返回NaN。如果x为1,则结果为+0。如果x为正无穷大,则返回正无穷大。如果x为零,则发生极点错误,并且函数分别返回-HUGE_VAL,-HUGE_VALF或-HUGE_VALL。如果x为负(包括负无穷大),则发生域错误,并返回NaN(不是数字)。&#34;
正在传递对-inf
的调用-0.900316
,nan
和nan
,这些调用均被视为有效的双号,因此返回[select type="open"]
[option value=x]
[...]
[select type="close"]
add_shortcode('select', 'shortcodeSelect');
function shortcodeSelect($atts) {
if ($atts['type'] === 'open') {
return '<select>';
}
return '</select>';
}
add_shortcode('option', 'shortcodeOption');
function shortcodeOption($atts) {
$value = isset($atts['value']) ? $atts['value'] : '';
return '<option value="' . $value . '">' . $value . '</option>
}
以上段落解释了为什么输出如所示。
强烈建议阅读/理解代码中调用的系统函数。