0

摂氏-50度から200度までのすべてを華氏に10度刻みで変換し、両方の値だけでなく、どちらが大きいか小さいか、またはそれらが等しいかどうかをユーザーに印刷したいと思います。私の現在のコードは次のとおりです。

#include <stdio.h>

main()
{
    int fahr;

    for(fahr = -50; fahr < 201; fahr = fahr + 10)
    {
        double celsius = (5.0/9.0) * (fahr-32);

        if(fahr == celsius)
        {
           printf("%3d = %6.1f\n", fahr, celsius);
        }

        if(fahr > celsius)
        {
            printf("%3d > %6.1f\n", fahr, celsius);
        }

        if(fahr < celsius)
        {
            printf("%3d < %6.1f\n", fahr, celsius);
        }
    }
}

私の基本的な思考プロセスは、forステートメントを使用する必要があるということでした。そこには、より小さい、より大きい、等しいためのifがいくつかあります。ただし、ifステートメントを使用する場合は常にcelsiusは1つの数値としてのみ出力され、華氏は変換のたびに10ずつジャンプしません= /ですから、どうすればよいか迷っています。

編集:申し分なく、私が==の代わりに=を使用したちょっとばかげた間違い。私はプログラミングに不慣れなので、=は実際には等しいという意味ではないということを頭の中で理解しようとしています。とにかく、それは少なくとも華氏が正しい間隔で進まないことを修正しますが、摂氏は毎回変わるのではなく、2.2のままです。

EDITEDIT:ええと、助けてくれてありがとう、正しいデータ型をいつ使うべきかを学ぶ必要があるだけです!誰かがそれを必要とする場合に備えて、私はコードを最終的な形に変更しました!

4

2 に答える 2

3

if(fahr = celsius)はあなたが思うことをしません。結果がゼロ以外であるかどうかを割り当ててチェックします celsiusfahr

あなたが意味したのは:

if (fahr == celsius)
//      ^^^^

これにより、2つの値が等しいかどうかが比較されます。


完全に無関係な精度のポイントとして、次のように変換を記述する必要があります。

int celsius = (5 * (fahr - 32)) / 9;

これにより、浮動小数点への高額な変換や整数への変換の丸め誤差が不要になり、除算が可能な限り遅延します。もちろん、摂氏値はゼロに最も近い整数にのみ近似することに注意してください。

于 2012-09-04T06:58:29.070 に答える
0

これは課題です

if(fahr = celsius)

これは比較です

if(fahr == celsius)
于 2012-09-04T06:59:07.030 に答える