鱼C论坛

 找回密码
 立即注册
查看: 1890|回复: 14

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

[复制链接]
发表于 2015-3-29 22:06:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

F]_F978QD9J~ZRXZ7I]L7M7.png 刚刚自己试着打了下练习。但是算出来的结果为什么最后个是0,不是1才对吗为什么谁能帮我解答下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-29 22:52:20 | 显示全部楼层
y是 float类型,要用%f打印,你却用了%d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-3-29 23:05:29 | 显示全部楼层
仰望天上的光 发表于 2015-3-29 22:52
y是 float类型,要用%f打印,你却用了%d

但是为什么编译器给过,没有提示错误呢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-29 23:10:13 | 显示全部楼层
Anny黄 发表于 2015-3-29 23:05
但是为什么编译器给过,没有提示错误呢!

应该是类型自动转换,但能转出个0 来也是想不到的·
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-30 21:12:57 | 显示全部楼层
Anny黄 发表于 2015-3-29 23:05
但是为什么编译器给过,没有提示错误呢!

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

使用道具 举报

 楼主| 发表于 2015-3-31 22:31:52 | 显示全部楼层
haiouda 发表于 2015-3-29 23:10
应该是类型自动转换,但能转出个0 来也是想不到的·

非常谢谢你的帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我明白了,感谢帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 11:02:54 | 显示全部楼层
楼上完美解答了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-3 15:30:10 | 显示全部楼层

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-4 22:29:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-4 22:40:10 | 显示全部楼层
C语言的强大 数据类型自动转换鸟~~ 最后一个 %d 换成 %f 就好鸟~ 我觉得一开始学习就要养成良好的代码书写格式~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-6 17:46:31 | 显示全部楼层
路过ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 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浮点数规范。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-23 12:08:00 From FishC Mobile | 显示全部楼层
仰望天上的光 发表于 2015-4-8 19:58
你说得基本正确,不过printf函数中,所有的float类型都会被自动转换double,也就是说实际上是用64位的IEE ...

嗯嗯,我好好研究一下,才接触c没多久,想问题太片面了,谢谢你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 22:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表