题干:
代码如下:
#include <iostream>
using namespace std;
int main()
{
double F;
cin>>F;
double c=(double)5/9*(F-32);//这里多了个double
cout<<c<<endl;
return 0;
}
验证答案:
最开始编辑此代码的时候,可能会发现无论输入什么数字,其输出值都为“0”,其实这是犯了一个很基础的错误。
仔细观察上边的代码,很容易发现我在定义变量“c”的时候在后面多加了一个“(double)”,这个符号的意思是把其后数据(这里是那个整数“5”,很明显是int类型)的数据类型强行转换为double类型。
因为我们都知道int类型的数相除会有一个特性,那就是舍去小数点后的所有数字(也就是说输出数据的数据类型还是int类型),比如说“3/2”理论上来讲得数是“1.5”,但是实际输出却是“1”,那是因为“3”和“2”两个数都是整数,都默认为int类型,相除就会出现这样的特性。当我们用“(double)”将“3”的数据类型强行转换为double类型,那么这样的特性就不会触发,输出数据的数据类型就会变为double类型,会存在小数。
于是,如果我们不这样操作的话,“5/9”的值将会一直为“0”,这样无论我们输入什么数据,最终答案将都为“0”。
另外,上面的代码把“(double)”移动到“9”的前面其实也是一样的效果,甚至还可以直接把“5”或“9”写成“5.0”和“9.0”这样的小数形式,也就是说,只要相除的两个数其中一者不为int类型,那么结果就不会舍去小数点后的数。