• ベストアンサー

for文を使ったプログラムで困っています

for文を使って、10000からある数xを何回引けるか?またその残りを求めるプログラム(例:10000から3000は3回引くことができ、残りは1000である。)を作りたいのですが、引く回数が1多くなってしまいます。どこがいけないかわからないので困っています。よろしくおねがいします。 #include<stdio.h> void main() { int x; int Sa = 10000; int y; printf("10000以下の数を入力してください:"); scanf("%d",&x); for(y = 1; y*x <= 10000 ; y++) { Sa = Sa - x; } printf("10000から%d回引くことができます。\n",y); printf("残りは%dです。",Sa); }

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

x=3000のとき、 y=1,y*x<=10000を満たすのでSa=Sa-xを実行し、Sa=7000 yをインクリメントし、y=2 y*x<=10000を満たすのでSa=Sa-xを実行し、Sa=4000 yをインクリメントし、y=3 y*x<=10000を満たすのでSa=Sa-xを実行し、Sa=1000 yをインクリメントし、y=4 y*x<=10000を満たさないので、ループから抜ける という風に、yが(引ける回数+1)になったときにループを抜けます。 単純に、ループから抜けた後でyをデクリメントすればよいのではないでしょうか。

bookers628
質問者

お礼

なるほど!この場合は、10000より大きいときにループを抜け出す。 つまりy=4じゃないとループを抜けないから、4が返ってくるんですね。 ありがとうございます。yをデクリメントします。

その他の回答 (3)

回答No.4

例えば、 x=3000だとすると、 y*x<=10000を満たすのは、y=4なので、 必然的に引く回数が1つ多くなりますよね。 for文で作成したい場合は、 for(y = 1; y*x <= 10000 ; y++) { Sa = Sa - x; } if(Sa<0){ y = y -1; } でどうでしょうか? 美しくないですが・・・

bookers628
質問者

お礼

なるほど!この場合は、10000より大きいときにループを抜け出す。 つまりy=4じゃないとループを抜けないから、4が返ってくるんですね。 ありがとうございます。y-1を追加します。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>引く回数が1多くなってしまいます。 >どこがいけないかわからないので困っています。 いやいや、もうわかっているではないですか。 引く回数よりも1回多くカウントしているでしょう? というか、ループの終了条件が x*y <= 10000 と「わかっている」なら わざわざループをまわす必要はないですよね。 何かの演習問題だと思いますけど、出題意図を考えた方がよいかもしれません。

bookers628
質問者

補足

演習問題です。 for文を使うことが条件なので…

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

y=1をy=0に修正です。 意味はよーく考えて、補足か何かで聞いてみましょう。

関連するQ&A

  • for文

    #include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp;   } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。

  • プログラムの練習問題をやっていたのですが、練習問題の答えのような実行結

    プログラムの練習問題をやっていたのですが、練習問題の答えのような実行結果にならないので教えていただけませんか? 下記に記したプログラムを実行すると x=9 y=-9 [ 9]*[-9]=[ -81],[ 9]*[-8]=[ -72],[ 9]*[-7]=[ -63],・・・・ ・・・・ [10]*[-9]=[ -90],[10]*[-8]=[-80],・・・・ ・・・・ のようになるのですが、 x=9 y=-9 [ 9]*[-9]=[ -81],[10]*[-9]=[-90],・・・ [ 9]*[-8]=[ -72],[10]*[-8]=[-80],・・・ [ 9]*[-7]=[ -63],・・・ ・・・・ のようにするためにはどうすればいいですか? #include <stdio.h> int main(void) { int x,y,m,n; printf("x="); scanf("%d",&x); printf("y="); scanf("%d",&y); for(m=x;m<=x+3;m++) { printf("\n"); for(n=y;n<=y+14;n++) { printf("[%2d]*[%2d]=[%4d],",m,n,m*n); } printf("\n"); } return(0); }

  • Cの九九を表示するプログラムについて

    九九の表示を変えたいんですけど #include <stdio.h> int main(void) { int x,y; for (x = 1;x <= 9;x++) { for (y = 1;y <= 9;y++) { printf(" %2d ", x * y); } printf("\n"); } return 0; } これを実行すると 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . 9 . . . . . . . 81 となるのですが、これを 1 * 1 1 * 2 1 * 3 . . . 1 * 9 1 * 2 . . 1 * 9 . . . . . 9 * 9 と表示させたいのですがどなたか知恵を貸していただきませんでしょうか?

  • for文

    整数を読み込んで、その値を0までカウントダウンしながら表示するプログラム作りたいのですが、 while文ではできたのですが、for文ではうまくいきません。 どこが間違っているのでしょうか? OS:Windows XP C++Builder X パーソナル #include <stdio.h> int main(void) { int i; int num; printf("整数を入力してください:"); scanf("%d", &num); for(i = num; i <= 0; --i) { printf("%d", i); } return 0; } 宜しくお願いします。

  • for文のループがされません

    #include <stdio.h> main() { int n, count, c; int d = 50000; printf("整数を入力:"); scanf("%d",&n); for(count = 1; count <= n; count++){ c = d * (16 / 100); d += c; } printf("%d回目の数はは%dです\n",n,d); } というプログラムを作ったのですが、for文のところが実行されずに、 1回目ならば58000となるはずなのに初期値のまま50000と表示されてしまいます。 どなたかご指摘お願いします。

  • 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> void fxl(int x,int y); int main(void) { int a,b,m,n; printf("整数aの値を入力\n"); scanf("%d",&b); printf("整数bの値を入力\n"); scanf("%d",&b); m=a; n=b; fxl(m,n); printf("a=%dとb=%dを加算した値は%d\n",ab,m); printf("a=%dからb=%dを減算した値は%d\n",ab,n); return 0; } void fxl(int x,int y) { int j,k; j=x; k=y; x=j+k; y=j-k; } このプログラムを作ってみたのはいいのですが、参照渡しを使って正常に足し算、引き算をするにはどうすればよいのでしょうか。

  • プログラムの添削

    以下のような数当てゲームを作りました.なるべくうまいプログラムを書けるようになりたいのですが,どのような改善点がありますか?よろしくお願いします. /*数当てゲームを作りなさい.*/ #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); } }

  • for文

    for文なのですが、 scanfで得た、 iを for文のi--で、一づつへらしてますが、 0でfor文がおわりますが 0で終わりの記述がない気がするんですが、 どうしてでしょか? int main(void) {    int i;    printf("正の整数を入力してください。\n");    scanf("%d",&i);    for( ; i ; i--)    printf("qが入力されました。\n");    return 0; }

  • このプログラムの間違いを指摘していただけませんか?

    まだ、初めて一ヶ月も経たない者です。それでも、勉強しつつ、組んでみたのですが、うまくいきません。数字の足し算をして、結果を表示させたいのですが、四回足しても四回目の数字が、足されずに結果がでてしまいます。1と2と3と4と入力すると、6と出てきます。一体どのようにしたらよいのでしょうか?教えて頂けませんか?(下に書いてあります。) #include <stdio.h> int sub(int x, int y, int z){ return x + y + z; } int main() { int i; int a[i]; for (i=1; i<=1; ++i){ printf("数字は?\n"); scanf ("%d\n", &a[i]); scanf ("%d\n", &a[i+1]); scanf ("%d\n", &a[i+2]); scanf ("%d\n", &a[i+3]); int result,x,y,z; result = sub(a[i],a[i+1],a[i+2]); printf("結果は%d\n",result); } return 0; }

専門家に質問してみよう