2

我是一名软件开发学生,我需要将华氏温度转换为摄氏温度,但我的代码计算错误。这是我的代码:

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;
}
4

3 回答 3

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)第二个错误是您为变量选择了错误的类型。温度不是一个整数(例如说温度是 80.5 度没有错)。因此,您应该为变量选择浮点类型float,这是一种可能性。

3)第三个错误是相当技术性的,但理解起来很重要。在您编写的方程式中5/959都是整数,因此计算机将执行整数除法,这意味着无论除法的数学结果如何,计算机都会删除结果的小数部分,留下一个整数。所以数学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;
}

我敢肯定你会惊讶于一个简短的程序可以有这么多的错误。它只是强调在编写代码时必须小心和精确。

于 2019-01-21T07:31:56.380 回答
2

您的公式使用 int : 5/9 意味着您正在失去一些精度将 5 更改为 5.0 或者如果您想将摄氏度更改为浮动

于 2019-01-21T07:22:45.477 回答
1

如果您必须使用 int,那么您应该在最后一步执行除法,以减少 int 类型的精度损失。但请记住,这可能会导致 int-overflows (不应该是温度问题......)

#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;
}
于 2019-01-21T07:10:59.767 回答