• ベストアンサー

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); }

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.6

がると申します。 んと… 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の文法をきちんと書籍で確認されることをお勧めいたします。

choobn
質問者

お礼

参考になりました。 まだやり始めなので、これからまた勉強しようと思います。

その他の回答 (8)

  • bnosuke-x
  • ベストアンサー率39% (43/110)
回答No.9

ちょうどついこの間、for と while と do - whileを人様に教える機会がありました。 その内容を書きます。 まずwhileを教え、forについては、 for( a ; b  ; c ){   x } whileと同じなんだけど、 ループに入る前に a を1回だけ実行。 ループの中身 x を実行したあと、毎回 c を実行。 b の条件が成り立っている間ずっと繰り返す(これはwhileと一緒)。 と教えました。 そういう風に教わりませんでした? ちゃんと勉強しましょうよ。

choobn
質問者

お礼

まだやり始めたばかりです。 これからまた勉強しようと思います。

  • Agamemnon
  • ベストアンサー率20% (25/125)
回答No.8

>forの部分をwhileに変えただけで、やりました。 なんでそんな発想になっちゃうんですかね? 言語のリファレンスくらい読みましょうよ? for を単純に while に変えても文法が違うのだから 動きませんよ。 for と while を入れ替えても同じ動きをするなら 別々の命令で定義する必要がないでしょ?

choobn
質問者

お礼

文法違うから、どうやったら動くのか質問しているのに、回答になっていないですね。 forとwhileでどう変わるか聞いているんです。

noname#22058
noname#22058
回答No.7

for (i = 1; i <= 100; i++) { /* 何かの処理 */ } という処理は、 i = 1; while (i <= 100) { /* 何かの処理 */ i++; } という処理と、完全に等価です。

choobn
質問者

お礼

ありがとうございました。

noname#22222
noname#22222
回答No.5

スーツのデザイナーですので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頁)

choobn
質問者

お礼

ありがとうございました。

  • crew21
  • ベストアンサー率26% (58/222)
回答No.4

ていうかまず自分の書いたプログラム載せろや。 最低限の礼儀だろ。

choobn
質問者

お礼

あなたの礼儀もなっていないですね。 ちゃんと最後まで回答してください。

choobn
質問者

補足

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)
回答No.3

i=1; while(i <= 100) { wa+=i++; } ってとこかな あんまスマートじゃないとおもう わざわざwhileを使う必要ないね

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

iの初期値設定 while(iの比較条件){ 加算 iのカウントアップ } http://www1.cts.ne.jp/~clab/hsample/Flow/Flow03.html

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

答えを書くのは簡単ですが、 とりあえず、あなたの作成した「動かないwhile()を使ったソース」 を見せていただけませんか? そちらで指摘する方がよいでしょう。

choobn
質問者

補足

forの部分をwhileに変えただけで、やりました。 int main(void) { int i,wa; wa=0; while(i=1; i<=100; i++) { wa=wa+i; } printf("和=%d\n",wa); }

関連するQ&A

専門家に質問してみよう