実現したいこと
タクシーメーター風の計算をするプログラムを練習で作っています。
・タクシーの初乗り料金が680円、1.3キロまでは初乗り料金だけ支払えばよい。
・1.3キロを超えると350メートルごとに200円加算される。
これをC言語で実装したいです。
発生している問題・エラーメッセージ
880円までの料金は計算されます。 それを超える料金だと画面にも何も表示されません。 22行目がうまくいっていない気がします。
該当のソースコード
C言語
1#include<stdio.h> 2 3int main(void) { 4 double kilo = 0.0;//距離km 5 double meter = 0.0;//距離m 6 int fare = 680;//運賃を初乗りで初期化 7 8 //マイナスの入力距離を防ぐ 9 do { 10 printf("距離をキロメートルで入力:"); 11 scanf_s("%lf", &kilo); 12 } while (0.0 >= kilo); 13 14 //キロメートルをメートルに変換 15 meter = kilo * 1000; 16 17 if (meter >= 1300) { 18 if (meter >= 1300 && meter <= 1650) { 19 //初乗りからワンメーターUPのみ 20 printf("運賃は%dです",fare + 200); 21 }if(meter >= 1651) {//運賃計算 22 fare = 680 + meter / 350 * 200;/*実行されない?*/ 23 } 24 } 25 else {//初乗り料金以内 26 printf("運賃は%dです", fare); 27 } 28 29 return 0; 30}
実行結果
距離をキロメートルで入力:1.0
運賃は680です
距離をキロメートルで入力:1.5
運賃は880です
距離をキロメートルで入力:2.0
(何も表示されません)
22行 fare = 680 + meter / 350 * 200;/*実行されない?*/
で料金を算出していますが、それを印字していません。
22行の次に
printf("運賃は%dです", fare);
を追加すれば良いかと。
計算はしてるけど、その結果を表示してないような…。
あと、1.6505 とか入れたら…。
それから、「1.3キロを超えると」なので 1.3 ちょうどの時は 680 円では?
比較に = を含めないといけないような制限があるんですかね。
>マイナスの入力距離を防ぐ
なら 0.0 は入力できないといけないのでは。
必ず "運賃はxxです" を表示するのでしたら return 0 の直前に printf("運賃は%dです", fare) を入れておいて、そこに向けて条件に従って fare を更新する形にしたほうが良いのではないでしょうか。
仕様にはワンメータUP の時に何か特別なことをすることは無いのに、なぜ if でワンメータUPだけ特別に計算しているのでしょう。
>1.3キロを超えると350メートルごとに200円加算
の仕様に
>fare = 680 + meter / 350 * 200
の式であってますか?
算数の問題でなくとも「超える」や「未満」は、それに対応するさせる必要があると思います。
hoshi-takanoriさんがおっしゃている通り、
距離は、整数ではないので、1650m超え~1651m未満がif分がどこにもありません。
また、1300m丁度も超えてはいないので、680円です。
fare = 680 + meter / 350 * 200;の計算もmeterは、整数ではないので、200円単位であがらない。
また、初乗り距離分も200円加算の計算に入ってます。対象は初乗り距離を超えた距離です。
あと、質問者の該当のソースコードを見ていると(料金計算やif分の+1しての比較などから)
距離を整数で演算したいように見えますが、特に問題文にはそういったことは、書いてありませんが、
そういう条件であれば、記載してください。

回答3件
あなたの回答
tips
プレビュー