• ベストアンサー

for文を使って。

プログラミングを勉強している初心者ですが、以下の問題につまずいてしまいました。 「10000以下の任意の数を入力して、10000からその数を引くことのできる回数を調べるプログラムを作成せよ。」 for文とデクリメント演算子を使ってつくろうとしているのですが…。 詳しいアドバイスお願いします!!

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.7

☆う~ん、残念(◆)。まずいのは +++++ の部分だけだったのに・・。 #include <stdio.h> void main() {  int i;  int x;  int count = 0; // +++++ まだ1回も引いてないよ  printf( "10000以下の 正の整数 を入れてください:" );  scanf( "%d", &x );  for( i = 10000; i > 0; ){   i -= x; // ▼+++++「 i = 10000 - x; ですと i は、一定」   count++;  }  printf( "%d は、10000から %d 回引くことができます。", x, count ); } 注:インデントに全角空白を用いています。タブに一括変換して下さい。 負の数(10000以下の任意の数)を入れて、試して?下さい。 なお、2つめの修正部分(▼)を for 文の中に入れれば、カッコイイかな。 --------------------------------------- ところで、 >デクリメント演算子を使って はどうしたのですか?。 --------------------------------------- >『10000から9000回引くことができる』となりました。 >どこがまちがっていますか? >i--? >順番が間違っているのですか・・・? >分かりました! >i=10000-x が i=i-x ですよね? ←違います←コンパイラが・・。 ◆ご自身の視認性の良いソースを、見捨てるなんて・・。 「勿体を付ける」のも、偶にはいいかも知れませんよ。

その他の回答 (9)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.10

> 試してみたのですが・・・ > 実行結果が『10000から9000回引くことができます。』 そういう場合は、「何を入力したときに」という 前提を書く必要があります。 よろしいでしょうか。

kokko28
質問者

補足

失礼しました。 1000を入力したときでした。

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.9

No.7 です。 失礼しました、申し訳ありません。 ★for 文を for( i = 10000; i >= x; ){ と訂正します。 No.8 さんご指摘ありがとうございます。 検証が足りませんでした。

kokko28
質問者

お礼

有難うございます! 正しい実行結果になりました。 助かりました!!

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

元のコードもお世辞にも視認性が良いわけではないし、 入力値が丁度 10000 を割り切る時しか正しくカウントできていません。

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

>ANo.4さんので実行をしてみたのですが、 >『10000から9000回引くことができる』となりました。 >どこがまちがっていますか? それを考えるのがあなたの仕事だ。

kokko28
質問者

補足

分かりました! i=10000-x が i=i-x ですよね?

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

>for文の中が間違っているのだと思うのですが・・・。 >よろしくお願いします。 Step 実行させて、ループのたびに i が幾つになるか確認しましょう。 あわせて ANo.4 氏のコードも確認してみよう。

kokko28
質問者

お礼

ありがとうございます。 ANo.4さんので実行をしてみたのですが、 『10000から9000回引くことができる』となりました。 どこがまちがっていますか? i--? 順番が間違っているのですか・・・?

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

#include <stdio.h> int main(void) { int i, x, count = 0; printf("10000以下の数を入れてください:"); scanf("%d", &x); for (i = 10000 - x; i > 0; i--) { count++; } printf("10000から%d回引くことができます。", count); return 0; }

kokko28
質問者

お礼

ありがとうございます。 試してみたのですが・・・ 実行結果が『10000から9000回引くことができます。』 となってしまいました。 何度も申し訳ないですが、よろしくお願いします。

  • A-VAREST
  • ベストアンサー率0% (0/1)
回答No.3

単純に無限ループとif文使えばできると思いますー

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

課題の丸投げ投稿は「質問ではない」として「ご遠慮頂いている行為」です。丸投げ投稿は運営スタッフにより削除されます。 「自分で考えた(間違った)解答」も載せ「これだとうまく動かない。どこが悪いか判らないので、アドバイスを」と言う形式で投稿すれば、削除されません。

kokko28
質問者

補足

すみません。自分で作ったプログラムです。 for文の中が間違っているのだと思うのですが・・・。 よろしくお願いします。 #include<stdio.h> main() { int i; int x; int count = 1; printf("10000以下の数を入れてください:"); scanf("%d",&x); for(i = 10000; i > 0;) { i = 10000 - x; count++; } printf("10000から%d回引くことができます。",count); }

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

まずは作ったやつを補足にどうぞ。

kokko28
質問者

お礼

すみません。 上に記載しました。 よろしくお願いします。