Anny黄 发表于 2015-3-29 22:06:04

学C语言遇到不会的了,求帮助

本帖最后由 Anny黄 于 2015-4-21 21:54 编辑

刚刚自己试着打了下练习。但是算出来的结果为什么最后个是0,不是1才对吗为什么谁能帮我解答下

仰望天上的光 发表于 2015-3-29 22:52:20

y是 float类型,要用%f打印,你却用了%d

Anny黄 发表于 2015-3-29 23:05:29

仰望天上的光 发表于 2015-3-29 22:52
y是 float类型,要用%f打印,你却用了%d

但是为什么编译器给过,没有提示错误呢!

haiouda 发表于 2015-3-29 23:10:13

Anny黄 发表于 2015-3-29 23:05
但是为什么编译器给过,没有提示错误呢!

应该是类型自动转换,但能转出个0 来也是想不到的·

仰望天上的光 发表于 2015-3-30 21:12:57

Anny黄 发表于 2015-3-29 23:05
但是为什么编译器给过,没有提示错误呢!

因为从语法上说,这句是正确的。就好比你见到一个PPMM,对她说:“我要吃掉你。”这句话从语法上完全没有问题,编译器也不会去报错,但执行起来却会得到不可预知的后果。如果你要深究为什么float写%d会得到0的话,这就涉及float类型在内存中的表示(自己baiduIEEE754规范),这个只是已经超出了C语言标准的要求(也就是说C语言标准值要求你知道,这样写会得到不可预知的结果就OK了)

Anny黄 发表于 2015-3-31 22:31:52

haiouda 发表于 2015-3-29 23:10
应该是类型自动转换,但能转出个0 来也是想不到的·

非常谢谢你的帮助!

Anny黄 发表于 2015-3-31 22:32:27

仰望天上的光 发表于 2015-3-30 21:12
因为从语法上说,这句是正确的。就好比你见到一个PPMM,对她说:“我要吃掉你。”这句话从语法上完全没有 ...

我明白了,感谢帮助

吾王Ein 发表于 2015-4-1 11:02:54

楼上完美解答了

364904690 发表于 2015-4-3 15:30:10

吾王Ein 发表于 2015-4-1 11:02
楼上完美解答了

{:5_90:}

邓爷爷 发表于 2015-4-4 22:29:49

{:9_241:}

ebloke 发表于 2015-4-4 22:40:10

C语言的强大 数据类型自动转换鸟~~ 最后一个 %d 换成 %f 就好鸟~ 我觉得一开始学习就要养成良好的代码书写格式~~{:5_91:}

らHorizon°Eter 发表于 2015-4-6 17:46:31

路过ing……

943339665 发表于 2015-4-8 11:16:52

同是新人,我前两周也遇到过同样的问题,不过自己翻教材,终于找到了答案。而在谭浩强c语言第四版第七章或者第八章中也提到了这个问题(具体的我也记不清了)。首先,你定义了一个实型变量,但用整型格式打印的时候却出了问题,这个时候很多人就会直接下意识的直接把数据格式改一下,正确输出就万事大吉。但我觉得这样不好,至少也该搞清楚为什么会这样吧。教材上第五十页关于float的定义为三十二个字节,编译系统默认前二十四个字节表示小数部分,后八个字节保存''指数部分,所以实际上在float格式下,1的存储形式应该是0.1*e1,用整型格式打印的时候,默认整数部分为0,理所当然会出现0这个结果咯。其实这些东西书上都有,只需要'仔细思考就行 希望对你有帮助。

仰望天上的光 发表于 2015-4-8 19:58:48

943339665 发表于 2015-4-8 11:16
同是新人,我前两周也遇到过同样的问题,不过自己翻教材,终于找到了答案。而在谭浩强c语言第四版第七章或 ...

你说得基本正确,不过printf函数中,所有的float类型都会被自动转换double,也就是说实际上是用64位的IEEE 754 长浮点数来表示float(这也说明了为什么在printf中%f和%lf效果一样,但在scanf中效果却不一样)。我没看过谭浩强的书,不过你说的“1的存储形式应该是0.1*e1”是不对的(或者说仅仅是初步概念上正确,不信你把float的二进制位打印出来看看),C语言中float和double的存储格式唯一的依据是IEEE754浮点数规范。

943339665 发表于 2015-4-23 12:08:00

仰望天上的光 发表于 2015-4-8 19:58
你说得基本正确,不过printf函数中,所有的float类型都会被自动转换double,也就是说实际上是用64位的IEE ...

嗯嗯,我好好研究一下,才接触c没多久,想问题太片面了,谢谢你了
页: [1]
查看完整版本: 学C语言遇到不会的了,求帮助