- 締切済み
プログラムの修正お願いします。
レンタルビデオを借りる。 1本150円。 5本借りると100円引き。 5本を越えると5本目以降は1本100円。 どこが間違ってるでしょうか?? 教えてください。 #include<stdio.h> void main(void) { int i,money; printf("借りる本数を入力 ---> "); scanf("%d",&i); if(i < 5){ money = i * 150; } else if(i == 5){ money = money - 100; } else{ money = money + (i-5)*100; } printf("合計金額は%d円です。\n",money); }
- みんなの回答 (25)
- 専門家の回答
みんなの回答
- Largo_sp
- ベストアンサー率19% (105/538)
>> こんなのはどうかな? >→意味がわかりません。 俺にいってるのかな? こんな考え方(書き方)もあるかなぁという事ですが…… もちっと書くと main() { int i,j,money; printf("借りる本数を入力 ---> "); scanf("%d",&i); j=money=0; while(j<i){ money +=150 if ( j==4 ) // 5本の時 money -=100; //5本目から\100ならここは150 if (j>4) money -=50; j++; } printf("合計金額は%d円です。\n",money); } としたほうがきれいかな… if でなくて case のほうがきれいかなぁ
- 78tch
- ベストアンサー率31% (50/157)
> こんなのはどうかな? →意味がわかりません。
- Largo_sp
- ベストアンサー率19% (105/538)
ちょっと茶々いれ こんなのはどうかな? for(j=0;j>i;j++) { money = money + 150 if (j>=5) money = money - 50; if (j=5) money = money -50; } 仕様書の書き方とは違いますが、結果は同じになりますよね…… 5本目以降一本当たり50円引き 但し5本目は100円引き(もう50円引き) と読み替えたかきかたです
- Mizyu
- ベストアンサー率41% (245/593)
あ、すいません、、、問題読み違えてました…。 仕事片手間に回答するもんじゃないですね…。 > 専門家やら経験者やらがこれほど集まって間違いだらけの回答…(^^; これは私のこととして肝に銘じます…。 しかし > 5本借りると100円引き。 > 5本を越えると5本目以降は1本100円。 この条件は同時に満たされるのでしょうか? また10本借りた時は2回目の「100円引き」はあるのでしょうか? その仕様が疑問ではありますが 同時に満たされる、かつ5本毎に100円引きというのであれば if (i<5){ money = i * 150; }else{ money = ( 5 * 150 ) + ((i-5) * 100) - (100*((i-(i%5))/5)); } もしくは int j; for(j=0;j<i;j++){ if (j<4){ money = money + 150; }else{ money = money + 100; } if (i%5==0){ money = money -100; } } (もう、PG引退したほうがいいかもなぁ…。)
- Mizyu
- ベストアンサー率41% (245/593)
#2です…。#5の訂正も間違ってたようで…。 しかし、専門家やら経験者やらがこれほど集まって間違いだらけの回答…(^^; ちょっと苦笑いしてしまいました。 (そういう私もコレで飯食ってるはずなのに…w) 正解(今度こそ)は money = (i*150) + (i-4)*100; でしょうか。 でも私はこの課題があったら個人的には ------------ int j; money = 0; for (j=0;j<i;j++){ money = money + 150; if (j>4){ money = money -100; } } ------------ こう組んでしまうでしょう。 実際の手順と処理順が等しいのでこうすれば保守する人もわかりやすいかと。 演算回数が増えるので、時と場合によりけりですが。
- yotta
- ベストアンサー率32% (26/79)
#6 です,間違いました else if(i == 5){ money = money - 100; } else{ money = money + (i-5)*100; } の部分を下記に置き換える else { money = 4 * 150 - 100 + ( i - 4 ) * 100; } に訂正して下さい
- 78tch
- ベストアンサー率31% (50/157)
ああっ、#8さんまで・・・ #4さんの後半のが正解。
- azicyan
- ベストアンサー率21% (368/1747)
iに具体的な数字を入れて考えるといいでしょう。 まずi=5本だったとします。 すると・・・ i==5の文しか実行されません。 つまりMONEYは-100円です。 あくまでも5本でかける150円払った上で100円引きなんですから、 i*150-100 ですかな・・?? となります。 5本より大きい場合も 4本は150円それ以降を100円と考えて 4*150+(i-4)*100 でいいんじゃないでしょうか?
- 78tch
- ベストアンサー率31% (50/157)
○ money = (4*150) + (i-4)*100; あぁ・・・発想はすごいっ!と思ったらi=5の時違わないですか?
- yotta
- ベストアンサー率32% (26/79)
else if(i == 5){ money = money - 100; } else{ money = money + (i-5)*100; } の部分を下記に置き換える else { money = 5 * 150 - 100; if(i > 5){ money = money + (i-5)*100; } } 理由は,5本以上の時,100円引きされない