C语言初级问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 09:07:16
为什么C里面用FLOAT进行/(除法)运算时,输出的结果有时是FLOAT,有时是取整呀,比如下面这两个程序:
程序一:
#include "stdio.h"
main()
{float x,y,z;
x=5/2;
y=5/2*1.0;
z=1.0*5/2;
printf("x=%f ",x);
printf("y=%f ",y);
printf("z=%f\n",z);
getch();
}

运算结果是:x=2.000000 y=2.000000 z=2.500000
x和y的运算结果都是取整,为什么?

程序二:
main()
{
float x,y;
char o;
double r;
scanf("%f%f%c",&x,&y,&o);
switch(o)
{case'+':r=x+y;break;
case'-':r=x-y;break;
case'*':r=x*y;break;
case'/':r=x/y;break;
}
printf("%f",r);
}
运行结果:r=0。600000
为什么两个程序运行结果差别这么大?

前面那个就是一个数据类型的问题
如果你写成x=5.0/2.0;
或者float i,j; i=5; j=2; x=i/j;
看看结果吧,其他的不用我说了

后面那个,其他的不说,先说你的scanf("%f%f%c",&x,&y,&o)吧,
X,Y都是数字,中间没一个","或空格,或其他的分隔符,你怎么判断你的输入啊?

我改成scanf("%f,%f,%c",&x,&y,&o)后在机子上跑了,完全没问题!

从键盘接受的存在了定义过类型的变量里,做除法的时候知道是浮点数的除法。
而5/2这样的写法是两个整型常量相除,结果是除出来的商。
比如5/2,商2余1,则在第一段程序里x得2

因为你定义的x为FLOAT,而5/2的结果是整型的,你要把整型赋给FLOAT的,电脑自动转换格式为赋值号左边的格式.整型除整型结果还是整型.所以取整了.

第一个程序,根据运算符号的顺序,y=5/2*1.0的运算过程是先计算5/2的整数数结果,得到2,然后需要用整数2乘以浮点数1.0,这时计算机才会扩大整数2的类型,变成浮点数2.0,再乘以1.0,所以结果就是2.0,和x的结果一样。z的结果同理。

这是运算的基本问题,可以看看讲解基础的书,了解计算的本质。

第二个问题你输入的是什么?

/t和*优先级相同
计算x=5/2; x=2
计算y=5/2*1.0; y=2.500000
计算z=1.0*5/2; y=2.500000
以单精度输出时结果就为 x=2.000000 y=2.000000 z=2.500000
第二个问题你还没说输入的数是多少...