質問: pt2 - pt1; printf("方法1が%d円得です。\n", b); } } ``` とてもきたないプログラムだとは思いますが、 このようにして試して見ました。修正点、改良点ありましたらよろしくお願いします。
回答: 計算 double で行う、金額の端数は切り捨てる、 ガソリンが隣のスタンドにいくだけの量がないケースを考慮する、 テストをしやすくする, という観点で書いてみました。 z.c ``` #include int calc(double x, double y, int z) { int pt1 = (50 - x) * 153; // 隣のスタンドに行くだけのガソリンが無いなら、方法1が得になると判断する if (x * 8 < y) { return -pt1; } int pt2 = ((50 - x) + y / 8 ) * z + ( (y / 8) * 153 ); return pt1 - pt2; } void show_result(double d) { if (d < 0) { printf("方法1が%d円得です。\n", (int)-d); } else if (d > 0) { printf("方法2が%d円得です。\n", (int)d); } else { printf("どちらも同じです。\n"); } } int main(void) { int x, y, z; while(1) { printf("ガソリンの残量: x = "); scanf("%d", &x); printf("自宅からガソリンスタンドまでの距離: y = "); scanf("%d", &y); printf("ガソリンスタンドのリッター: z = "); scanf("%d", &z); if ((x <= 0 || x > 50) || (y < 0) || (z <= 0)) { break; } show_result(calc(x, y, z)); } // 次のようにしてテストコードを書ける // y = 3.0; // for (int x = 0; x <= 50; x+=5) { // for (int z = 90 ; z < 153; z+= 10) { // printf("x=%d, z=%d: %f\n", x, z, calc(x, y, z)); // } // } } ``` 想定範囲外の値が入力されたときの処理を cals 関数中で行う、 calc を呼ぶ前に弾くかといった事 (エラー処理)も検討をする必要があります。