鱼C论坛

 找回密码
 立即注册
查看: 1514|回复: 8

[已解决]新人求解

[复制链接]
发表于 2020-1-8 22:17:36 | 显示全部楼层 |阅读模式

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

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

x
c++S1E8课后作业动动手第0题

#include <stdio.h>

int main()
{
        float fah, cel;

        printf("请输入华氏度:");
        scanf("%f", &fah);

        cel = (fah - 32) * 5 / 9;
        printf("转换为摄氏度是:%.2f\n", cel);

        return 0;
}
为什么fah和cel两个变量要定义为float?cel定义为float还可以理解它是有小数位的,可是为什么不能定义为double?fah为什么不能定义为int?
求大佬解释
最佳答案
2020-1-9 21:30:34
Ash刻痕 发表于 2020-1-9 21:15
没人说不能定义,是我自己尝试过的,结果很奇怪。我把fah定义为int,cel定义为double,结果cel输出139839 ...

好吧。不知道你为什么会出现奇怪的结果。不知道你输入的是什么数值。我这里尝试没有出现奇怪的结果,但是能出现预知的错误。
若把fah定义为int,cel定义为double或者float,在执行cel = (fah - 32) * 5 / 9  语句的时候,会出现计算错误的现象。因为fah是int,而赋值操作符"="右侧没有小数,因而会按照int进行计算,计算的结果在赋值的时候进行浮点转换。等价于cel = float((fah - 32) * 5 / 9 ),计算出来的cel值都只有整数部分。例如输入100,得到37.00,输入99,得到也是37.00 。
若想要以浮点形式运算则"="右侧的式子中需要有浮点数,例如: (fah - 32.) * 5 / 9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-8 22:26:07 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-8 22:37 编辑

      楼主,在问别人为什么不能 "这样" 或 "那样" 做之前,能不能先陈述一下自己之所以要主张 "这样" 或 "那样" 做的理由、必要性或者好处呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-1-8 22:44:02 | 显示全部楼层
。。。。。。。。。。
有谁说不能定义成double么?
谁告诉你华氏温度就一定没有小数位的?
再者,若fah定义为int。你的程序在执行cel = (fah - 32) * 5 / 9  语句的时候不会出错?

这种问题很弱智哎。。。动动手尝试一下不就知道结果了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-9 21:15:33 | 显示全部楼层
sunrise085 发表于 2020-1-8 22:44
。。。。。。。。。。
有谁说不能定义成double么?
谁告诉你华氏温度就一定没有小数位的?

没人说不能定义,是我自己尝试过的,结果很奇怪。我把fah定义为int,cel定义为double,结果cel输出139839242.00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-9 21:18:48 | 显示全部楼层
jackz007 发表于 2020-1-8 22:26
楼主,在问别人为什么不能 "这样" 或 "那样" 做之前,能不能先陈述一下自己之所以要主张 "这样" 或 " ...

好的,这个问题是我没有描述清楚。问为什么不能这样是我试了其他的但结果相差甚远就很不明白,当时就想知道为什么要这样就没把问题写清楚,下次会改的,谢谢提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 21:30:34 | 显示全部楼层    本楼为最佳答案   
Ash刻痕 发表于 2020-1-9 21:15
没人说不能定义,是我自己尝试过的,结果很奇怪。我把fah定义为int,cel定义为double,结果cel输出139839 ...

好吧。不知道你为什么会出现奇怪的结果。不知道你输入的是什么数值。我这里尝试没有出现奇怪的结果,但是能出现预知的错误。
若把fah定义为int,cel定义为double或者float,在执行cel = (fah - 32) * 5 / 9  语句的时候,会出现计算错误的现象。因为fah是int,而赋值操作符"="右侧没有小数,因而会按照int进行计算,计算的结果在赋值的时候进行浮点转换。等价于cel = float((fah - 32) * 5 / 9 ),计算出来的cel值都只有整数部分。例如输入100,得到37.00,输入99,得到也是37.00 。
若想要以浮点形式运算则"="右侧的式子中需要有浮点数,例如: (fah - 32.) * 5 / 9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-9 21:48:33 | 显示全部楼层
sunrise085 发表于 2020-1-9 21:30
好吧。不知道你为什么会出现奇怪的结果。不知道你输入的是什么数值。我这里尝试没有出现奇怪的结果,但是 ...

您说的,我懂了,感谢。我输入的值是45,我实在虚拟机 Linux中搭建的C语言环境,出现奇怪结果的原因我也找到了,我把fah定义为了int,但在scanf("%f", &fah);在这句中我使用的是%f导致出现奇怪的结果应该是%d,您能给我解释一下为什么么?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:28:07 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-9 22:29 编辑
Ash刻痕 发表于 2020-1-9 21:48
您说的,我懂了,感谢。我输入的值是45,我实在虚拟机 Linux中搭建的C语言环境,出现奇怪结果的原因我也 ...


         scanf("fmt" , & v) ; 这一句必须要做到 fmt 与 v 的类型相一致,例如,v 为 int 型,fmt 就应该是 "%d",如果 v 为 float,fmt 就应该是 %f,v 为 double,fmt 就应该是 "%lf",这种搭配关系基本上是固定的,是 C / C++ 语言的规定,没有什么道理好讲,只要记住就好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-1-9 22:33:53 | 显示全部楼层
jackz007 发表于 2020-1-9 22:28
scanf("fmt" , & v) ; 这一句必须要做到 fmt 与 v 的类型相一致,例如,v 为 int 型,fmt 就 ...

scanf里的要类型一致,明白了谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 07:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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