新人求解
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:37 编辑
楼主,在问别人为什么不能 "这样" 或 "那样" 做之前,能不能先陈述一下自己之所以要主张 "这样" 或 "那样" 做的理由、必要性或者好处呢? 。。。。。。。。。。
有谁说不能定义成double么?
谁告诉你华氏温度就一定没有小数位的?
再者,若fah定义为int。你的程序在执行cel = (fah - 32) * 5 / 9语句的时候不会出错?
这种问题很弱智哎。。。动动手尝试一下不就知道结果了? sunrise085 发表于 2020-1-8 22:44
。。。。。。。。。。
有谁说不能定义成double么?
谁告诉你华氏温度就一定没有小数位的?
没人说不能定义,是我自己尝试过的,结果很奇怪。我把fah定义为int,cel定义为double,结果cel输出139839242.00
jackz007 发表于 2020-1-8 22:26
楼主,在问别人为什么不能 "这样" 或 "那样" 做之前,能不能先陈述一下自己之所以要主张 "这样" 或 " ...
好的,这个问题是我没有描述清楚。问为什么不能这样是我试了其他的但结果相差甚远就很不明白,当时就想知道为什么要这样就没把问题写清楚,下次会改的,谢谢提醒 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 sunrise085 发表于 2020-1-9 21:30
好吧。不知道你为什么会出现奇怪的结果。不知道你输入的是什么数值。我这里尝试没有出现奇怪的结果,但是 ...
您说的,我懂了,感谢。我输入的值是45,我实在虚拟机 Linux中搭建的C语言环境,出现奇怪结果的原因我也找到了,我把fah定义为了int,但在scanf("%f", &fah);在这句中我使用的是%f导致出现奇怪的结果应该是%d,您能给我解释一下为什么么?谢谢 本帖最后由 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++ 语言的规定,没有什么道理好讲,只要记住就好。 jackz007 发表于 2020-1-9 22:28
scanf("fmt" , & v) ; 这一句必须要做到 fmt 与 v 的类型相一致,例如,v 为 int 型,fmt 就 ...
scanf里的要类型一致,{:5_105:}明白了谢谢
页:
[1]