#include <stdio.h> void main() { printf("%d\n",1/3*3); } 这个哪里错了我怎么算不出来呢
1个回答
展开全部
printf("%d\n",1/3*3);
首先 %d指的是以整数形式输出
然后再说 1/3*3的结果,两个运算符 乘 除
第一步 1/3 = 0 : c/c++中整数除法就相当于数学计算中的除法结果取整1/3 = 0.33 取整=0,但是C语言中的除法就只计算整数部分(不是通过结果取整这种方法得到的)
然后进行第二步 *3 = 0*3 = 0.
如果你需要得到的是实数结果,这个运算 1/3*3 应该写为: 1.0/3 * 3 或 1/3.0 *3
也就是说只有实数的除法结果才会保存小数。
明白了上面这点之后,我们再看 printf("%d", 1/3*3), 如果只是简单的把运算式写成 1/3.0*3就能得到正确结果么?实际上结果依然是0.这个原因就是%d的作用了,%d是将结果直接取整输出,是不是 1.0/3*3(或1/3.0*3)真的等于 1?数学上是真的等于1,但是C语言得到的不是1,因为C语言的数据类型而言,数据真正的保存为1.0/3 = 0.3333333....(位数决定于数据类型的长度(sizeof)),所以 1/3.0*3 = 0.999999... 只是输出时以1.0为输出。所以, %d的输出为0.想正确得到 结果为1,只有使用 %.0f 输出为没有小数位数的实数。全部代码为:
#include <stdio.h>
int main()
{
printf("%.0f\n",(1.0/3)*3);
return 0;
}
首先 %d指的是以整数形式输出
然后再说 1/3*3的结果,两个运算符 乘 除
第一步 1/3 = 0 : c/c++中整数除法就相当于数学计算中的除法结果取整1/3 = 0.33 取整=0,但是C语言中的除法就只计算整数部分(不是通过结果取整这种方法得到的)
然后进行第二步 *3 = 0*3 = 0.
如果你需要得到的是实数结果,这个运算 1/3*3 应该写为: 1.0/3 * 3 或 1/3.0 *3
也就是说只有实数的除法结果才会保存小数。
明白了上面这点之后,我们再看 printf("%d", 1/3*3), 如果只是简单的把运算式写成 1/3.0*3就能得到正确结果么?实际上结果依然是0.这个原因就是%d的作用了,%d是将结果直接取整输出,是不是 1.0/3*3(或1/3.0*3)真的等于 1?数学上是真的等于1,但是C语言得到的不是1,因为C语言的数据类型而言,数据真正的保存为1.0/3 = 0.3333333....(位数决定于数据类型的长度(sizeof)),所以 1/3.0*3 = 0.999999... 只是输出时以1.0为输出。所以, %d的输出为0.想正确得到 结果为1,只有使用 %.0f 输出为没有小数位数的实数。全部代码为:
#include <stdio.h>
int main()
{
printf("%.0f\n",(1.0/3)*3);
return 0;
}
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询