急!!!求问C语言大神!!!下面的题目为什么输出b=7不是8?在线等!!!

如题所述

计算机是不会四舍五入的,除非你自己算,比如:
b=((float)(*p1)/(*p2)+0.5)+7;
在计算(*p1)/(*p2)时,由于分子、分母都是整数,所以计算机默认用整数进行运算,结果也是整数,相当于实际结果截断小数部分。追问

可是你举的这个例子不是用float强制类型转换了么

追答

所以说你原来的程序是不会进行带小数的计算,如果不用强制数据类型转换的话没有小数部分被保留也就谈不上四舍五入。
对不起,误会了,我后面这句话:在计算(*p1)/(*p2)时...
是针对你的原来程序说的。

追问

那你讲的这个例子,计算时是*p和*q先分别取整数得出结果呈float型,还是*p和*q先取float型再计算?

追答

b=((float)(*p1)/(*p2)+0.5)+7;这个例子中,先将p1中的数据取出,做强制数据类型转换成float然后再进行计算,计算顺序为:

b=(int)((((float)(*p1))/(*p2)+0.5)+7);

    取数*p1

    转换成float型

    由于有float型数据参与除法运算,启用浮点运算单元

    取数*p2

    进行浮点运算,结果是浮点的

    结果加0.5实现整数部分四舍五入

    用浮点运算单元实现浮点计算加7

    由于变量b是整形的,将浮点数的整数部分截取下来赋值。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-26
4/6=0.几
而b是整形变量,所以取整为0。0+7=7追问

计算过程中就已经取整了?为什么不是先等于7.几再约等于7?

追答

程序就是这么走的,再说这里的取整就是删除尾数

追问

那取整是删除尾数而不是四舍五入的原理是什么呢?

追答

阿哥,这是编c语言的人设定的,,,

追问

我是问原理哎!这是由数据的存储方式决定的,其实你不知道可以承认不知道的。

追答

奥⊙▽⊙,这我真的不知道

第2个回答  2013-12-27
两int型数据运算结果一定是int型追答

4/6抛弃余数

所此可知,同类型数据相运算,结果还是该类型数据

异类型数据运算,结果是,较“大”的类型

比如说4.0/6,这里先把6做个类型转换为6.0,int型到Double型。然后做,4.0/6.0得出结果,为Double型

异类型数据运算,其中一个类型,必须能够隐式转换为另一个类型,否则编译报错。

在计算机存储结构中,除法运算,其结果是用两个寄存器暂存的,一个是存余数,另一个是存抛弃余数后的结果。

比如说,4/6,一个寄存器存0,另一个寄存器存4.所以,两int型数据相除,其结果,就取前者的值。至于浮点运算,挺复杂的,当你学到,计算机组成原理时,肯定会讲到。

第3个回答  2013-12-26
b是整型数,只取整数部分追问

p2=&m

我怎么这么丢三落四

相似回答
大家正在搜