#include<stdio.h>
float calculateCharge(float);
main(){
float totalTime = 0;
float totalCharge = 0;
printf("%-8s%10s%10s\n", "クルマ", "駐車時間", "駐車料金");
// クルマ1
charge
= calculateCharge
(time); totalCharge += charge;
// クルマ2
charge
= calculateCharge
(time); totalCharge += charge;
// クルマ3
charge
= calculateCharge
(time); totalCharge += charge;
// 合計
printf("%-8s%10.1f%10.2f\n", "合計", totalTime
, totalCharge
); return 0;
}
float calculateCharge
(float time){ // 駐車料金(初期値として、基本料金2ドルを含む)
float charge = 2.0;
// 駐車時間が3時間以上のとき、
// 1時間につき、0.5ドルの追加料金を加算する
charge
+= (int)(time - 3) * 0.5; }
// 徴収は最大10ドルまで
if(charge > 10){
charge = 10;
}
return charge;
}
クルマ 駐車時間 駐車料金
1 1.5 2.00
2 4.0 2.50
3 24.0 10.00
合計 29.5 14.50
- 問題文の仕様と出力例との間に矛盾があるので、
出力例に合わせて作った。
問題文の仕様通りだと、
・クルマ1の駐車料金は2.5ドル
・クルマ2の駐車料金は4.0ドル
になるはず。 -- pissyard (2009-12-28 01:28:23)
- 最初に、関数calculateChargeの引数の値が24.0以上かを
チェックすると無駄な計算をしなくて済む。
if ( time >= 24 ) {
}
-- 名無しさん (2010-06-12 12:26:16)
- おもしろそうなので続けてください。
私もお勉強します。
気がついた点をメモしました。参考にしてください。
2010-06-12
関数 calculateChargeについて
----------------------------
L44 - 45では、駐車料金計算結果が10.0以上で判断しているが、
最初に、引数の値 time が24.0以上か調べたほうが無駄な計算が
省けます。
if ( time >= 24 ) {
charge = 10.0;
} else {
// その他
}
L44: time > 3 では意味がわからないので定数を設けたほうがわかり易いし
変更があった場合、訂正が一箇所で済みます。
例:
L40. float charge = 2.0;
L41. int BASE_TIME = 3;
L44. if ( time > BASE_TIME ) {
......
}
この参考書は古いので最新版ではこうなっています。
int main(void)
以上
-- gtk (2010-06-12 12:42:54)
- 訂正
---------
if ( time >= 24 ) {
return 10.0
} else {
// その他
}
main
-----
int main(void)
-- gtk (2010-06-12 12:51:24)
最終更新:2010年06月12日 12:51