int num1, num2;
第一个月
average=(double)(num1+num2)/2; printf("average: %d", average);
我的测试printf显示平均值为:0这可能太简单了,但我看不出来,我的输入都是int,平均值是double,但不知怎么的,它计算不对?
inb24sb21#
您对printf使用了错误的格式说明符。%d说明符需要int参数,但您传递的是double。使用错误的格式说明符将调用undefined behavior。要打印double,请使用%f。
printf
%d
int
double
%f
printf("average: %f\n", average);
qxsslcnc2#
无需修改语句average=(double)(num1+num2)/2;即可在printf内获得预期结果,使用%f代替%d
average=(double)(num1+num2)/2;
(num1+num2)
integral
15
(double)15/2
floating
7.500000
average = (double)7.500000
0
这是一个工作的
int main() { int num1 = 7, num2 = 8; double average; average = (double)(num1 + num2)/2; printf("average: %f\n", average); return 0; }
58wvjzkj3#
int num1, num2; double average; average=(num1+num2)/2.; // Using a decimal point forces 2 to be a double. printf("average: %f\n", average); // Use the correct specifier for double: %f
u0sqgete4#
您应该使用printf(“平均值= %f”,平均值);而不是使用“%d”来打印平均值。我想这会解决你的问题...
xu3bshqb5#
整数除法产生整数结果:1/2 == 0、5/3 == 1等。如果需要浮点结果,则至少有一个操作数必须是浮点类型:1/2.0f == 0.5f、5/3.0 == 1.6667等等。因此,您需要将总和除以2.0,而不是2:
1/2 == 0
5/3 == 1
1/2.0f == 0.5f
5/3.0 == 1.6667
2.0
2
average = (num1 + num2)/2.0;
其次,您需要使用%f说明符进行浮点输出:
printf( "average: %f\n", average );
ioekq8ef6#
如果需要浮点结果,则至少有一个操作数必须是浮点类型这是我的解决方案:平均值=(数量1+数量2)/(双精度)2;printf(“1/2的值为:%.4f\n”,(双精度)(1/2));1/2的值为:0.0000printf(“1/2的值为:%.4f\n”,(1/(双精度)2));1/2的值为:0.5000
6条答案
按热度按时间inb24sb21#
您对
printf
使用了错误的格式说明符。%d
说明符需要int
参数,但您传递的是double
。使用错误的格式说明符将调用undefined behavior。要打印
double
,请使用%f
。qxsslcnc2#
无需修改语句
average=(double)(num1+num2)/2;
即可在printf
内获得预期结果,使用%f
代替%d
(num1+num2)
,其结果为integral
类型。假设为15
。接下来执行(double)15/2
时,结果为floating
类型,即7.500000
。average = (double)7.500000
平均值保持7.500000
,但因为你打印在%d
你得到0
作为其未定义的行为。而不是使用%f
这是一个工作的
58wvjzkj3#
u0sqgete4#
您应该使用printf(“平均值= %f”,平均值);而不是使用“%d”来打印平均值。我想这会解决你的问题...
xu3bshqb5#
整数除法产生整数结果:
1/2 == 0
、5/3 == 1
等。如果需要浮点结果,则至少有一个操作数必须是浮点类型:1/2.0f == 0.5f
、5/3.0 == 1.6667
等等。因此,您需要将总和除以
2.0
,而不是2
:其次,您需要使用
%f
说明符进行浮点输出:ioekq8ef6#
如果需要浮点结果,则至少有一个操作数必须是浮点类型
这是我的解决方案:
平均值=(数量1+数量2)/(双精度)2;
printf(“1/2的值为:%.4f\n”,(双精度)(1/2));
1/2的值为:0.0000
printf(“1/2的值为:%.4f\n”,(1/(双精度)2));
1/2的值为:0.5000