• 締切済み

プログラムの修正お願いします。

レンタルビデオを借りる。 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); }

みんなの回答

回答No.25

盛り上がってるなぁ笑 頑張って補足を読み解いてみましたが、欲しいのはこの回答では? money = i * 150; if( i == 5 ) {   money = money - 100; } if( i >= 5 ) {   money = money - (i - 4) * 50; }

tv_mania
質問者

お礼

みなさんどうもありがとうございました。

回答No.24

こんなのはどうでしょう。 左部が0~5本の場合、真中が5本以上の場合の値引き 右部が6本以上の場合を別々に求めて加算します。 #define MAX(a,b) ((a>b)? a:b) #define MIN(a,b) ((a<b)? a:b) money=(150*MIN(i,5)) + ((5<=i)? -100:0) + (100*MAX(0,i-5));

回答No.23

moneyの計算式を一行にしてみました。 プログラムのお勉強には向きません。(^^; money=((i<=4)? 150*i: 650) + ((5<i)? 100*(i-5): 0); もしくは money=((i<=5)? 150*i: 150*5) + ((5<=i)? -100:0) + ((5<i)? 100*(i-5): 0);

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.22

5度目の投稿になります。 > if(i < 5){ > money = i * 150; > } > else if(i == 5){ > money = 5*150 - 100; > } > 5*150のところを上で使ったmoney(=i*150)に置き換えて考えたいんです。 #2で答えてますが、「上で使ったmoney」とありますが、elseに入る時には使ってないです。 なので置き換えてもmoneyは初期値、もしくはそれ以前に初期化した値しか入ってません。 もしかしたら貴方の悩んでいる個所は「if文の考え方」以前のプログラムの考え方が間違っているかもしれません。 ここで答えている人たちは私も含めてプログラムを書ける人たちで、プログラムを理解した上での回答しかできないので あなたの理解度が分からない以上、これ以上よい回答は得られないと思います。 「まず、プログラムというのは~」・・・とまで親切に教えてくれる人なんていません。 この質問の趣旨がプログラムを覚えたいというところにあれば、自分で勉強してください。 仕様さえわかれば算数レベルです。コンパイラと根気さえあれば、一日で十分解決するでしょう。 プログラムに興味が無く、課題として出されて仕方なくこなすための質問であるなら せめて、不明確な仕様の部分のフォローをしてください。 ・「5本で100円引き」は5本のときだけか、5本以上のときも含むか、それか5本毎で100円ずつ引くのか? ・「5本を超えると」の表現は5本の時点で適応か、6本以上で適応か? このあたりの情報さえあれば、ここで回答している方ならみんな、5分もあれば組めるレベルです。 (私みたいに凡ミスはあるでしょうけど)

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.21

らあごです。連続投稿で申し訳ありませんが、 #17の補足の意図を汲んでも…… money = i * 150; if ( i > 4 ) { money = money - 100;    // \100引き money = money - (i-5)*(150-100)  //1本当たり\50引き } としかできないんですが……

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.20

らあごです。間違いがあったので訂正と… ふと……過去の質問をみていたら…… 2、レンタルビデオの本数を入力して、金額を出力する。 1本¥150。 5本で合計金額の¥100引き。 5本を超えると超えた分は1本¥100。 となっていましたが。。。。この問題でしょうか…… ○○以降というと、○○がはいってしまいますので 問題が変わってしまいますが…… この問題をみると、6本以上のとき\100引きはあるのかな? ちなみに、 #18の   money = i*5; // 5本分の料金をいれておく は   money = i*150; // 5本分の料金をいれておく の間違いです。 6本目以降100円引きがあるなら、    money = money + (i-5)*100; に-100を入れてください。

  • yotta
  • ベストアンサー率32% (26/79)
回答No.19

#6,#10 です.まだ締め切られてないので 1本では150円 (1x150) 2本では300円 (2x150) 3本では450円 (3x150) 4本では600円 (4x150) 5本では600円 (4x150)-100+(1x100) 4本と同じ 6本では700円 (4x150)-100+(2x100) 7本では800円 (4x150)-100+(3x100) 8本では900円 (4x150)-100+(4x100) となりますので else 以降 money = 4 * 150 - 100 + ( i - 4 ) * 100; 簡単にすると money = i * 100 + 100; です

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.18

もし、元のプログラムの式をかえずにプログラムを正しくするなら #include<stdio.h> void main(void) { int i,money; printf("借りる本数を入力 ---> "); scanf("%d",&i); if(i < 5)   {   money = i * 150;   } else{   money = i*5; // 5本分の料金をいれておく   if(i == 5)    {    money = money - 100; //5本だったら\100引き    }   else    {    money = money + (i-5)*100;    }   } printf("合計金額は%d円です。\n",money); } でしょうか。。。インデントが… 6本の時100円割引はなくなるけど…いいのかな?

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.17

No.4のarukamunです。 No.4の回答はできるだけプログラムをいじらずに間違っているところを訂正する形でアドバイスしました。 もし、自分が最初からコーディングしたとしたら、 #include<stdio.h> void main(void) {   int i,money ; /* エラーになるような範囲のiは入力されたくないので、仕様にはありませんが、101本以上借りないとしましたが、仕様がはっきりしていれば、この辺はもう少し考慮が必要です */   do {     printf("借りる本数を入力 ---> ");     scanf("%d",&i);   } while ( i < 1 || i > 100 ); /* とりあえず、単価150円で計算する */   money = i*150 ; /* 割引として計算する */   if ( i > 4 ){     money -= i*50 - 150 ;   }   printf("合計金額は%d円です。\n",money); } ちょっと、money -= i*50 - 150 ;の部分はトリッキーかも知れませんが、いかがでしょうか?

tv_mania
質問者

補足

if(i < 5){ money = i * 150; } else if(i == 5){ money = 5*150 - 100; } 5*150のところを上で使ったmoney(=i*150)に置き換えて考えたいんです。 else{ money = 5*150 - 100 + (i-5)*100; } の5*150-100の部分もmoney(=5*150-100)に置き換えて考えたいんです。 よろしくお願いします。

  • hitomit
  • ベストアンサー率16% (3/18)
回答No.16

仕様が明確でない部分があるので自信はありません。 こんなのではどうでしょうか? 1~4本:本数*150円 5本:5*150円 - 100円 6本以上:5本分の値段 + (本数-5)*100円 と解釈しました。 実行結果は4本のとき 600円         5本    650円         6本    750円        20本   2150円  とでます #include<stdio.h> void main(void) {   int i, money, j, waribiki ;   printf("借りる本数を入力 ---> ");   scanf("%d",&i);   if (i < 5) {     j = i ;     i = 0 ;     waribiki = 0 ;   }   else {     j = 5 ;     i = i - 5 ;     waribiki = 100 ;   }   money = (j * 150 - waribiki) + (i * 100) ;   printf("合計金額は%d円です。\n",money); }

関連するQ&A

  • またプログラムの修正おねがいします。

    キーボードから出力した3つの整数について、以下の判定を行い 判定結果を出力するプログラムを作成する。 全部同じ 2つ同じ バラバラ * 論理演算子を使わないこと。 * インデントを正しくつけること。 #include<stdio.h> void main(void) { int a,b,c; printf("a --->"); scanf("%d",$a); printf("b --->"); scanf("%d",$b); printf("c --->"); scanf("%d",$c); if(a==b){ if(b==c){ printf("全部同じ\n"); } } else if(a!=b){ if(b==c){ printf("2つ同じ"); } else if(a==c){ printf("2つ同じ"); } else{ printf("バラバラ"); } } } 最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

  • プログラムの添削

    以下のような数当てゲームを作りました.なるべくうまいプログラムを書けるようになりたいのですが,どのような改善点がありますか?よろしくお願いします. /*数当てゲームを作りなさい.*/ #include<stdio.h> void maegaki(void); /*このように関数を定義しまくることに意味はあるのか?main関数はすっきりするけど.*/ void in_check_out(int i); int main(void) { int i; int j; maegaki(); for(j=0;j<10;j++) { scanf("%d",&i); in_check_out(i); if(!(i-1)) return 0; printf("残り%d回です.\n",9-j); } return 0; } void maegaki(void) { printf("数当てゲームをはじめます.\nぼくの好きな整数を当ててください.\nチャンスは10回です.\nヒントはボゾン\n"); } void in_check_out(int i) { if(!(i-1)) { printf("正解!答えは1です.\n"); } else { printf("残念!\n"); if(i>1) printf("%dより小さいです.\n",i); else printf("%dより大きいです.\n",i); } }

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • 3つの整数が等しいかどうか調べるプログラム

    3つの整数が等しいかどうか調べるプログラムがよくわからないので、どなたか教えていただけないでしょうか?ちなみに、わからないながらに作ってみました。 #include <stdio.h> int main(void) { int x, y, z; puts("3つの整数を入力してください。"); printf("整数1:"); scanf("%d",&x); printf("整数2:"); scanf("%d",&y); printf("整数3:"); scanf("%d",&z); if (x==y==z) puts("3つの整数の値は同じです。"); else puts("3つの整数の値は違います。"); return (0); }

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

  • 素数であるかを判断するプログラムについて

    C言語を学習していて「独習C」48ページの次のプログラムが分かりませんでした。 ~~~~~~~~~~~~~~~~ #include <stdlib.h> #include <stdio.h> int main(void) { int num, i, is_prime; printf("判定したい数を入力してください"); scanf("%d", &num); /*ここからがわかりません*/ is_prime = 1; for(i=2; i<=num/2; i=i+1) if((num%i)==0) is_prime = 0; if(is_prime==1) printf("素数です"); else printf("素数ではありません"); return 0; } ~~~~~~~~~~~~~~~ 私はこうなると考えています。どこが間違っているでしょうか? numが0のとき、2<=0となり、素数 numが1のとき、2<=0.5となり、素数でない numが2のとき、2<=1となり、素数でない numが3のとき、2<=1.5となり、素数でない

  • 素数判定の繰返し

    繰返し素数判定を行ない、CtrlーDで終了するプログラムをつくっています。 まず繰返しなしの素数判定プログラムを作り #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } return(0); } これはちゃんとできたのですがそれを繰り返すことができません。 #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); while((a=getchar())!=EOF){ if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } printf("自然数を入力:"); scanf("%d",&a); } printf("プログラムを終了します。\n"); return(0); } これは訳わからないことになっちゃいます。。。 どうしたらいいんでしょうか??

  • c言語についての質問です。

    #include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • C言語について

    次のような問題です。 問 自然数nを入力し、nを3で割って割り切れるかどうかを判定し結果を表示する。「割り切れる」、「1余る」、「「2余る」のいずれかが入るものとする。 このようなものをつくりました。 #include<stdio.h> int main(void) { int n; printf("自然数:"); scanf("%d",&n); if(n==0){ printf("割り切れる\n"); }else if(n==1){ printf("1余る\n"); }else{ printf("2余る"); } return(0); } これで合っているかよろしくお願いします。

  • C言語のプログラムについて。

    #include <stdio.h> int main(void) {   int hoge,piyo;   printf("数値を入力せよ。:");   scanf("%d",&hoge);   piyo = hoge % 2;   if (piyo == 0) {     printf("%dは、偶数。\n",hoge);   } else {     printf("%dは、奇数。\n",hoge);   };   return 0; } という、プログラムが、実行できません。 といって、エラーメッセージがでてくれないので、困っています。 ひょっとして、非常に初歩的なミスという気もするのですが。 これはよかった!という、C言語に関する書籍、また、コンピュータのシステムに関する書籍がありましたら、合わせてご教授ください。

専門家に質問してみよう