#include <stdio.h>
int main()
{
int i;
const int N = 4;
double a=0, b=0, c=0, d=0;
for (i = 1 ; i <= N ; i++)
{
a += i;
b += i * i;
}
c = a / N;
d = b / N - c * c;
printf("%.0f\n", d);
return 0;
}
其结果为1,但我不知道结果为何为1。我认为c
是3,而N-c*c
是-2.25,所以d
是-13 ,所以我认为打印d
的结果是-13,但结果是1。
此结果来自何处?
答案 0 :(得分:1)
这是因为您没有注意到为解决方案选择的算法。
for循环进行迭代,并使变量a = 1+2+3+4
和b = 1^2+2^2+3^3+4^4
然后a = 10
和b = 30
生成c=2.5
和d=7.5-2.5^2=1.25
,然后选择打印
%.0f
,您将获得一个。
如果要以2点精度打印浮点,请使用%.2f
。
答案 1 :(得分:1)
在for
循环之后,a
为10.0,而b
为30.0。然后为c
分配了10.0 / 4
,因此c
为2.5
。下一行等效于d = (30.0 / 4) - (2.5 * 2.5)
,因此d
是7.5 - 6.25
,即1.25
。然后,您用printf()
的"%.0f"
参数修剪所有小数,因此剩下的就是1
。与之类似,它是1.25
的向下取整版本。
如果将打印行更改为:
printf("%f\n", d);
然后,您将看到特定的d
的所有十进制数字。
同样,在给定.0
的格式字符串中,%
之后f
之前的printf()
决定了要打印的小数位数。超出的任何数字都将四舍五入。