C语言中实型数据运算的问题! 如图: a = 1.0/3*3 b = 3/2 c = 1/3*3 为什么产生这样的结果

如题所述

第一个,1.0/3,因为1.0是浮点型的,所以在运算的时候会自动转换为浮点数运算,然后在乘以3.其实1.0/3*3的结果有的时候可能是0.999999,这是因为在计算机中有些数是无法完全转换为二进制的,只能近似相等。比如for(double i=9;i>=0;--i) 你在输出 i ,很有可能得到 *.99999或者*.000001,
第二个,3/2是整数相除,会自动省略小数。如果想要得到1.5可以这样(float)3/2或者变为3.0/2,
第三个,1/3是整数相除,得到0,所以再乘以任何东西都是0了。
建议你去看看c语言的数据类型转换,很多都是隐式转换,
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-24
个人认为如此:

a=(1.0/3)*3;
1.0是浮点数,而3是整形数,所以对3进行隐式转换到浮点型,得出的结果与3的浮点型数相乘,得1.0 。

b=3/2;
3和2都是整形,所以相除得1,余1,而得出的整形结果是1,放进浮点型的结果里,所以是1.0 。

c=(1/3)*3;
1和3都是整形,所以相除得0,而0*3=0,所以结果是0 。本回答被提问者采纳
第2个回答  2012-07-24
首先说一下,楼主要想达到预期的效果只需要把c=1/3*3 改为1.0/3*3
至于原因,就是涉及到整型和浮点型变量在内存中有关存储位的知识了。简单点说,1/3这个操作被系统默认为两整型相除,得到的结果也是整型,所以1/3的值为0.333333333的整数部分,也就是0,后面0*3当然就是0了,而c是浮点型,所以显示的结果是0.00000了,
希望对楼主有帮助。
第3个回答  2012-07-24
因为你计算的时候
a = 1.0 / 3 * 3 // float/int/int 结果用float类型
b = 3/2 // int/int 结果是int类型 3/2 int 类型结果就是1
最后一样 int/int*int 1/3*3结果int类型 0
然后你打印的时候都是%f 所以是 1.000000 1.000000 0.000000
你先看下C语言类型转换,下面是网址,
http://baike.baidu.com/view/3975627.htm
如果不同类型数据进行计算的话,那需要把不同的类型都转换成在其中级别最高的类型在计算!
第4个回答  2012-07-24
① . 首先1.0/3=0.333333 0.333333*3=0.999999
编译系统自动进位,你想想 1/3.0 = ? *3 = 1是不是这个道理
当然因为单精度所以后面1保留 6位
② . 3/2=1.5 ,没错但是"/ "在C语言中算出结果是取整数。相当于b=(int)3/2;
③ . 因为1/3 =0.3333..取整为0,但因为输出格式是%f,所以后面保留六位是0.000000

不知道你懂没有 希望能对你有所帮助

C语言中实型数据运算的问题!如图:a=1.0\/3*3b=3\/2c=1\/3*3为什么产生这样...
1、平时乘号*可以省略,但是编程时*不能省。3b必须写成3*b;如果有必要,应写成(3*b)——这跟运算符的优先级有关。2、”a=1.0\/3*3b=3\/2c=1\/3*3"……额的神哪,这也太有想象力了吧?"=“是赋值号,将右边的值赋给左边,楼主是要让编译器解方程?你高估人家了...由于没图片,也没...

[c语言]printf("%f\\n",1.0\/3*3)与printf("%f\\n",1\/3*3)计算结果为什么不...
1\/3*3这是按整数进行计算,1\/3*3=0*3=0 (1\/3的值会先取整,结果为0)

C语言中进行浮点数的运算为什么1.0\/3.0*3不等于一??
先进行1除以3除不尽..有小数只是0.3333333333再*3得不到1的!!!

c语言中1.0\/3*3为什么等于1
在c语言中 除数和被除数有一个为浮点数时 结果就是浮点数 所以1.0\/2=0.5 0.5*3=1.5

在C++中计算1除以三再乘以三 会怎么样?
结果依然会是0。因为,实际计算时候,产生了精度损失,使得实际结果小于1。输出类型改变后,只会取整数部分。include<stdio.h> include<stdlib.h> main(){ printf("%d",1\/3*3);} 这样的结果是0 include<stdio.h> include<stdlib.h> main(){ printf("%d",1\/3.0*3);} 这样的结果是0 ...

为什么在C语言程序中计算1.0\/3.0*3结果不是1
1.0\/3.0在c语言中结果是0.3333333,那个3不是无穷的,是受限制的,所以乘以3后,不是1,而是0.9999999

为什么c语言中的double(3\/2)等于1
首先纠正一个错误,在C语言中是没有\\这个运算符的。 \\符号一般用来做换行标记或者作为转义字符标识。用在这里的是\/,代表除法操作。也就是说,(double)(3\/2);这里应用到如下几个知识点。1 数值常量的默认类型。在没有特殊标识情况下,整型的数值常量,如题目中的3和2,都会默认为int型。2 整型的...

C语言中除法怎么取得小数?
除了一开始用float进行定义之外,后面进行除法运算的时候要加.0,否则算出的结果电脑会自动取整 如:3\/2的结果和3.0\/2的结果就不同 因为没有定义3\/2为浮点型,所以3\/2自动取整,结果等于1 而3.0\/2,由于预先用浮点型表示 其结果显然为:1.5 ...

c语言中d=1\/3*3.0;与d=1.0\/3*3;d=?有什么区别
d=1\/3*3.0;这时d=0,d=(1\/3)*3.0,这里1是整形,1\/3也是整形,等于0,所以0*3.0=0 d=1.0\/3*3;这时d=1,d=(1.0\/3)*3,这里1.0是浮点型,1.0\/3也是浮点型,等于0.333333再乘以3等于1.

C语言中一个整数除以另一个整数结果为什么只取整?
int a=5, b=3;float c;c = a\/b; \/\/ 输出结果为1.0 c是float型的,按常理c应该等于1.667,但是由于被除数(即变量a)的数据类型为int型,所以在执行完a\/b后,运算结果会转换为int型(即舍去小数),故a\/b = 1,之后再将取整后的数据(即整数1)转换为float类型(即1.0)赋值给变量...

相似回答