我是软件开发的学生,我需要从华氏转换为摄氏,但是我的代码计算错了。 这是我的代码:
int main() {
// configure the out put to display money
cout.setf(ios::fixed); //no scientific notation
cout.setf(ios::showpoint); //show decimal point
cout.precision(0); //two decimal for cents
int fahrenheit = 0 ;
int celsius = 5/9*(fahrenheit-32);
cout << "Please enter Fahrenheit degrees: ";
cin >> fahrenheit ;
cout << "Celsius: " << celsius << endl;
return 0;
}
答案 0 :(得分:2)
您的公式使用的是int:5/9表示您将精度降低了一些,将5更改为5.0,或者如果您想将摄氏度更改为浮动
答案 1 :(得分:2)
您的代码中有四个错误。
1)要点是要认识到计算机按照您要求的顺序进行操作。显然,正确的顺序是:a)要求用户输入温度b)将其转换为摄氏度。但是您的代码却相反。这是您的代码,上面有我的一些注释
// convert fahrenheit to celcius
int celsius = 5/9*(fahrenheit-32);
// ask user to enter fahrenheit temperature
cout << "Please enter Fahrenheit degrees: ";
cin >> fahrenheit ;
希望现在很明显,您对事物的看法是错误的
2)第二个错误是您为变量选择了错误的 type 。温度不是整数(例如,温度为80.5度没错)。因此,您应该为变量选择浮点类型,float
是一种可能。
3)第三个错误是非常技术性的,但很重要。在方程式中,您写了5/9
,5
和9
都是整数,因此计算机将执行整数除法,这意味着计算机将要除以除法结果的小数部分而剩下的整数。因此,数学上5/9
是0.555555...
,除去小数部分就剩下0
,因此您的方程式与0*(fahrenheit-32)
相同,显然不会给出正确的结果。使用5.0/9.0
代替5/9
可以得到浮点除法。
4)最终错误很简单
cout.precision(0); //two decimal for cents
如果您想保留两位小数位,应该
cout.precision(2);
最后,这不是错误,但是关于金钱的评论在有关温度的程序中不合适。
这是修正了这些错误的代码版本
int main() {
cout.setf(ios::fixed); //no scientific notation
cout.setf(ios::showpoint); //show decimal point
cout.precision(2); //two decimal places
float fahrenheit;
cout << "Please enter Fahrenheit degrees: ";
cin >> fahrenheit;
float celsius = 5.0/9.0*(fahrenheit-32.0);
cout << "Celsius: " << celsius << endl;
return 0;
}
我敢肯定您对一个简短的程序会犯这么多错误感到惊讶。它只是强调在编写代码时必须小心且精确。
答案 2 :(得分:1)
如果必须使用int,则应在最后一步执行除法,以减少int类型的精度损失。但是请记住,这可能会导致int溢出(对温度来说应该不是问题...)
#include <iostream>
using namespace std;
int main() {
// configure the out put to display money
cout.setf(ios::fixed); //no scientific notation
cout.setf(ios::showpoint); //show decimal point
cout.precision(0); //two decimal for cents
int fahrenheit = 0 ;
cout << "Please enter Fahrenheit degrees: ";
cin >> fahrenheit ;
int celsius = 5*(fahrenheit-32)/9;
cout << "Celsius: " << celsius << endl;
return 0;
}