- ベストアンサー
C言語のforとwhileについて・・・
C言語で「While 文を使って、1から100までの和を求めて表示するプログラムを作る」ことをやってみました。↓ ですが、forではできたのですが、whileでは動きませんでした。 whileで作る時は、forのどの部分を変えれば出来るんでしょうか? 解説できましたら、お願いします。。 #include <stdio.h> int main(void) { int i,wa; wa=0; for(i=1; i<=100; i++) { wa=wa+i; } printf("和=%d\n",wa); }
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
がると申します。 んと… while(i=1; i<=100; i++) だと、コンパイルでエラーになりません? for(i=1; i<=100; i++) { /* 処理 */ } をwhileで書くと、概ね i = 1; while(i <= 100) { /* 処理 */ i++; } という感じになります(厳密には、インクリメントのタイミングが微妙なのですが)。 インクリメントのタイミングを図るのであれば i = 1; while(i++ <= 100) { /* 処理 */ } という方法もありますね。 i ++ と ++ i との差異をきちんと認識しないと難しいですが。 まずは、whileの文法をきちんと書籍で確認されることをお勧めいたします。
その他の回答 (8)
- bnosuke-x
- ベストアンサー率39% (43/110)
ちょうどついこの間、for と while と do - whileを人様に教える機会がありました。 その内容を書きます。 まずwhileを教え、forについては、 for( a ; b ; c ){ x } whileと同じなんだけど、 ループに入る前に a を1回だけ実行。 ループの中身 x を実行したあと、毎回 c を実行。 b の条件が成り立っている間ずっと繰り返す(これはwhileと一緒)。 と教えました。 そういう風に教わりませんでした? ちゃんと勉強しましょうよ。
お礼
まだやり始めたばかりです。 これからまた勉強しようと思います。
- Agamemnon
- ベストアンサー率20% (25/125)
>forの部分をwhileに変えただけで、やりました。 なんでそんな発想になっちゃうんですかね? 言語のリファレンスくらい読みましょうよ? for を単純に while に変えても文法が違うのだから 動きませんよ。 for と while を入れ替えても同じ動きをするなら 別々の命令で定義する必要がないでしょ?
お礼
文法違うから、どうやったら動くのか質問しているのに、回答になっていないですね。 forとwhileでどう変わるか聞いているんです。
for (i = 1; i <= 100; i++) { /* 何かの処理 */ } という処理は、 i = 1; while (i <= 100) { /* 何かの処理 */ i++; } という処理と、完全に等価です。
お礼
ありがとうございました。
スーツのデザイナーですのでC言語は判りません。 そこで、Javascript を例にした一文を紹介します。 質問者の疑問には、答えているかと思います。 まあ、「プログラミング言語C」のパクリに過ぎません。 素人でも、この本は読んでいますよ! 質問者も一読を! 「表の各行は同じ計算式で計算されるから、出力行ごとに1回繰り返すループを使うのがよい。これが次の while 文の目的である。 while ( fahr <= upper) { ・・・ } この while ループは次のように働く。まず、カッコ内の条件をテストする。これが真(fahr が upper 以下)であれば、ループの本体が実行される。次に条件が再チェックされ、真であれば、ループ本体が再び実行される。このテストが偽となると、ループは終わりとなりそこで終わりである。」(「プログラミング言語C」12頁) <script type="text/javascript"> <!-- // // Javascript: f=0,20,・・・300に対して、摂氏-華氏対応表を出力する // var lower = 0; /* 温度表の下限 */ var upper = 300; /* 上限 */ var step = 20; /* きざみ */ fahr = lower; document.writeln("<pre>"); while ( fahr <= upper) { celsius = (fahr - 32) * 5/9; document.write(fahr + "\t" + celsius + "\n"); fahr = fahr + step; } document.write("</pre>"); //--> </script> 「周知のように、プログラムを書くにはいろいろなやり方がある。温度変換プログラムを別の形に書いてみよう。 <script type="text/javascript"> <!-- document.writeln("</pre>"); document.write("\n"); for ( fahr = 0; fahr <= 300; fahr = fahr + 20) document.write(fahr + "\t" + (5.0 / 9.0) * (fahr ? 32) + "\n"); document.write("</pre>"); --> </script> これでも同じ答えが出るが、プログラムは違って見える。大きく改めた点は、変数の多くを除いたことで、fahr を残し、しかもそれを int にしている。上限・下限ときざみの大きさは、for 文の定数としてのみ書いた。この for はそれ自体が新しい構文である。」 「さて、for 自体はループであり、while の一般化になっている。これを前に出てきた while と比較すると、その役割は明白であろう。for にはセミコロンで区切られた三つの部分がある。最初の fahr = 0 は、ループ本体に入る前に一度だけ実行される。第二の fahr <= 300 という部分は、ループを制御するテストすなわち条件である。この条件を評価して、これが真であれば、ループの本体が実行される。次に、再初期化のステップ fahr = fahr + 20 が実行され、先の条件が再び評価される。このループは条件が偽となれば、終りとなる。while と同様に、このループの本体は、一つの文であってもよいし、大カッコにはさまれた一群の文であってもよい。また、初期化と再初期化の部分は、一つの式なら何でも許される」。(「プログラミング言語C」16~17頁)
お礼
ありがとうございました。
- crew21
- ベストアンサー率26% (58/222)
ていうかまず自分の書いたプログラム載せろや。 最低限の礼儀だろ。
お礼
あなたの礼儀もなっていないですね。 ちゃんと最後まで回答してください。
補足
forの部分をwhileに変えただけで、やりました。 int main(void) { int i,wa; wa=0; while(i=1; i<=100; i++) { wa=wa+i; } printf("和=%d\n",wa); }
- aoi1923
- ベストアンサー率31% (6/19)
i=1; while(i <= 100) { wa+=i++; } ってとこかな あんまスマートじゃないとおもう わざわざwhileを使う必要ないね
- hana-hana3
- ベストアンサー率31% (4940/15541)
iの初期値設定 while(iの比較条件){ 加算 iのカウントアップ } http://www1.cts.ne.jp/~clab/hsample/Flow/Flow03.html
- PED02744
- ベストアンサー率40% (157/390)
答えを書くのは簡単ですが、 とりあえず、あなたの作成した「動かないwhile()を使ったソース」 を見せていただけませんか? そちらで指摘する方がよいでしょう。
補足
forの部分をwhileに変えただけで、やりました。 int main(void) { int i,wa; wa=0; while(i=1; i<=100; i++) { wa=wa+i; } printf("和=%d\n",wa); }
お礼
参考になりました。 まだやり始めなので、これからまた勉強しようと思います。