Ash刻痕 发表于 2020-1-8 22:17:36

新人求解

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?
求大佬解释

jackz007 发表于 2020-1-8 22:26:07

本帖最后由 jackz007 于 2020-1-8 22:37 编辑

      楼主,在问别人为什么不能 "这样" 或 "那样" 做之前,能不能先陈述一下自己之所以要主张 "这样" 或 "那样" 做的理由、必要性或者好处呢?

sunrise085 发表于 2020-1-8 22:44:02

。。。。。。。。。。
有谁说不能定义成double么?
谁告诉你华氏温度就一定没有小数位的?
再者,若fah定义为int。你的程序在执行cel = (fah - 32) * 5 / 9语句的时候不会出错?

这种问题很弱智哎。。。动动手尝试一下不就知道结果了?

Ash刻痕 发表于 2020-1-9 21:15:33

sunrise085 发表于 2020-1-8 22:44
。。。。。。。。。。
有谁说不能定义成double么?
谁告诉你华氏温度就一定没有小数位的?


没人说不能定义,是我自己尝试过的,结果很奇怪。我把fah定义为int,cel定义为double,结果cel输出139839242.00

Ash刻痕 发表于 2020-1-9 21:18:48

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

好的,这个问题是我没有描述清楚。问为什么不能这样是我试了其他的但结果相差甚远就很不明白,当时就想知道为什么要这样就没把问题写清楚,下次会改的,谢谢提醒

sunrise085 发表于 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

Ash刻痕 发表于 2020-1-9 21:48:33

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

您说的,我懂了,感谢。我输入的值是45,我实在虚拟机 Linux中搭建的C语言环境,出现奇怪结果的原因我也找到了,我把fah定义为了int,但在scanf("%f", &fah);在这句中我使用的是%f导致出现奇怪的结果应该是%d,您能给我解释一下为什么么?谢谢

jackz007 发表于 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++ 语言的规定,没有什么道理好讲,只要记住就好。

Ash刻痕 发表于 2020-1-9 22:33:53

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

scanf里的要类型一致,{:5_105:}明白了谢谢
页: [1]
查看完整版本: 新人求解