- ベストアンサー
for文を使って。
プログラミングを勉強している初心者ですが、以下の問題につまずいてしまいました。 「10000以下の任意の数を入力して、10000からその数を引くことのできる回数を調べるプログラムを作成せよ。」 for文とデクリメント演算子を使ってつくろうとしているのですが…。 詳しいアドバイスお願いします!!
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
☆う~ん、残念(◆)。まずいのは +++++ の部分だけだったのに・・。 #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)
> 試してみたのですが・・・ > 実行結果が『10000から9000回引くことができます。』 そういう場合は、「何を入力したときに」という 前提を書く必要があります。 よろしいでしょうか。
- yama5140
- ベストアンサー率54% (136/250)
No.7 です。 失礼しました、申し訳ありません。 ★for 文を for( i = 10000; i >= x; ){ と訂正します。 No.8 さんご指摘ありがとうございます。 検証が足りませんでした。
お礼
有難うございます! 正しい実行結果になりました。 助かりました!!
- koko_u_
- ベストアンサー率18% (459/2509)
元のコードもお世辞にも視認性が良いわけではないし、 入力値が丁度 10000 を割り切る時しか正しくカウントできていません。
- koko_u_
- ベストアンサー率18% (459/2509)
>ANo.4さんので実行をしてみたのですが、 >『10000から9000回引くことができる』となりました。 >どこがまちがっていますか? それを考えるのがあなたの仕事だ。
補足
分かりました! i=10000-x が i=i-x ですよね?
- koko_u_
- ベストアンサー率18% (459/2509)
>for文の中が間違っているのだと思うのですが・・・。 >よろしくお願いします。 Step 実行させて、ループのたびに i が幾つになるか確認しましょう。 あわせて ANo.4 氏のコードも確認してみよう。
お礼
ありがとうございます。 ANo.4さんので実行をしてみたのですが、 『10000から9000回引くことができる』となりました。 どこがまちがっていますか? i--? 順番が間違っているのですか・・・?
- asuncion
- ベストアンサー率33% (2127/6289)
#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; }
お礼
ありがとうございます。 試してみたのですが・・・ 実行結果が『10000から9000回引くことができます。』 となってしまいました。 何度も申し訳ないですが、よろしくお願いします。
- A-VAREST
- ベストアンサー率0% (0/1)
単純に無限ループとif文使えばできると思いますー
- chie65536
- ベストアンサー率41% (2512/6032)
課題の丸投げ投稿は「質問ではない」として「ご遠慮頂いている行為」です。丸投げ投稿は運営スタッフにより削除されます。 「自分で考えた(間違った)解答」も載せ「これだとうまく動かない。どこが悪いか判らないので、アドバイスを」と言う形式で投稿すれば、削除されません。
補足
すみません。自分で作ったプログラムです。 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)
まずは作ったやつを補足にどうぞ。
お礼
すみません。 上に記載しました。 よろしくお願いします。
補足
失礼しました。 1000を入力したときでした。