- 締切済み
if文の問題で…
[問題]通話時間(秒単位)を入力し,通話料を計算し出力するプログラムを書け.なお,通話料は,以下のようにして計算するものとする. 通話時間≦基本通話時間( 1151 秒) 基本料金:882円 基本通話時間を 183 秒超える毎に 9 円ずつ加算 この問題がよくわかりません。一応自分で組んでみて実行してみたのですがどうやら出てくる答えが違うようです。(因みにC言語で書きました。)どなたか教えてくれないでしょうか??
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- high4
- ベストアンサー率0% (0/0)
「基本通話時間を 183 秒超える毎に 9 円ずつ加算」の表現が不思議ですよね。 このままだと、(1151 + 1)~(1151+183) は基本料金のままになります。業界の常識は知らないのですが、世間一般は、基本通話時間を1秒でも越えたら加算されると考えます。 プログラムは、 前者なら sec <= 1151 ? 882 : (sec - 1151)/183 * 9 + 882; 後者なら sec <= 1151 ? 882 : ((sec - 1151 - 1)/183 + 1) * 9 + 882; です。 後者は、この種の計算のよくあるパターンです。
- tuyo1980
- ベストアンサー率0% (0/2)
#include(stdio.h) void main(void) { int p,answer; printf("通話時間(秒単位)を入力\n") scanf("%d",&p); if(p <= 1151) { printf("基本料金は882円\n") } else { answer = ((p/183)*9)+882 printf("基本料金は%d円\n",answer) } } これで駄目かな。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・回答者 No.2 さんの if 判定を反転して、基本通話時間を超えた分を money に 加算する方法です。このため、最初 money には基本料金の 882 をセットしておくこと。 サンプル: int telephone = 12345; ←通話時間 int money = 882; ←基本料を最初にセットしておく if ( telephone > 1151 ){ ←基本通話時間を越えたら money += ((telephone - 1151) / 183) * 9; ←183 秒毎に 9 円ずつ加算 } その他: ・基本通話時間を越えたら、基本通話時間(1151)を引いた通話時間を 183 秒で割って 183 秒のブロックがいくつあるのか求めます。求めた数に 9 円をかければ基本通話時間を 越えた金額が求まります。これを基本料金の money(882) に加算すればよいのです。 ・以上。参考に!
- marori3
- ベストアンサー率25% (23/91)
// 通話時間はtelltime // 料金はmoney if(telltime<=1151){ money = 882; } else{ money = ((telltime-1151)/183)*9+882; } でどうでしょう?
- Oh-Orange
- ベストアンサー率63% (854/1345)
★補足要求します。 >一応自分で組んでみて実行してみたのですがどうやら出てくる答えが違うようです。 ↑ならそのソースを補足に貼り付けてみて下さい。 ・以上。待っています。