c语言问题!关于printf函数输出格式的!

#include <stdio.h>
int main()
#define HIGHT 100
{
double i=1,s=0,h;
h=HIGHT;
while (i<=10)
{i++;
s=s+2*h;
h=h/2;
}
s=s-HIGHT;
printf("第十次反弹高度:%f\n共经过%f米\n",h,s);
return 0;
}
这个程序中,如果把%f换成%d为什么输出的结果不同。%f输出正确结果而用%d则输出错误结果!能不能解释一下为什么会这样???谢谢!!

第1个回答  2014-12-28
double i=1,s=0,h;这句代码里面,h定义的是double类型的,所以,h在后面的运算和赋值,都是double类型的,%f是浮点数的输出格式,%f输出的时候是按照double的输出,%d,用来输出十进制整数,这里不能把double作为十进制输出,C语言是强语言,不会做自动转换。追问

用int申请时,一样错

追答

h变为int,输出应该是0了,那就没问题了啊,当h小于2的时候,h/2就变为0了。

本回答被提问者和网友采纳
第2个回答  2014-12-28
%f, %d对于计算机来说,根本就不认识,计算机存储是按二进制,%f,%lf才会按照浮点数的存储方式去取出需要打印的输,而%d和其他格式则是按照其他的相应方式去取,所用%d格式去取浮点数,一般都是错误的追问

好像用int申请一样错误

追答

你是没有理解到计算机的数据的储存方式,C基础还有待提高呀。要不你就不会再追问我这个问题啦。如果int, h = 1时。h/2 == 0

第3个回答  2014-12-28
double i=1,s=0,h;
声明声明类型的变量,就要用什么类型的格式符;
int %d
long %ld
float %f
double %lf
char %c
char% %s

第4个回答  2014-12-27
因为整型和浮点型的存储方式不一样追问

为什么整型就计不准而浮点型就计得准!换成其他数据类型会怎样?

追答

那是因为h,s本来就是按浮点型存的,其他只有%lf是准的,其他也不准

追问

用int声明h.s然后用%d一样不对?怎么回事?

追答

h=h/2,h是int类型时,商会去掉小数部分

相似回答