こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2006-11-14 16:42:11

QNo.2538957

困ってます

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

がると申します。

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

投稿日時 - 2006-11-14 17:10:10

お礼

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

投稿日時 - 2006-11-21 15:45:00

ANo.6

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.9

ちょうどついこの間、for と while と do - whileを人様に教える機会がありました。
その内容を書きます。


まずwhileを教え、forについては、

for( a ; b  ; c ){
  x
}

whileと同じなんだけど、
ループに入る前に a を1回だけ実行。
ループの中身 x を実行したあと、毎回 c を実行。
b の条件が成り立っている間ずっと繰り返す(これはwhileと一緒)。

と教えました。


そういう風に教わりませんでした?

ちゃんと勉強しましょうよ。

投稿日時 - 2006-11-14 21:52:27

お礼

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

投稿日時 - 2006-11-21 15:43:11

ANo.8

>forの部分をwhileに変えただけで、やりました。

なんでそんな発想になっちゃうんですかね?
言語のリファレンスくらい読みましょうよ?
for を単純に while に変えても文法が違うのだから
動きませんよ。

for と while を入れ替えても同じ動きをするなら
別々の命令で定義する必要がないでしょ?

投稿日時 - 2006-11-14 20:33:28

お礼

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

投稿日時 - 2006-11-21 15:36:25

ANo.7

for (i = 1; i <= 100; i++) {
/* 何かの処理 */
}

という処理は、

i = 1;
while (i <= 100) {
/* 何かの処理 */
i++;
}

という処理と、完全に等価です。

投稿日時 - 2006-11-14 18:27:50

お礼

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

投稿日時 - 2006-11-29 22:26:20

ANo.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頁)

投稿日時 - 2006-11-14 17:03:35

お礼

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

投稿日時 - 2006-11-21 15:46:37

ANo.4

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

投稿日時 - 2006-11-14 16:51:33

補足

forの部分をwhileに変えただけで、やりました。

int main(void)
{
int i,wa;

wa=0;
while(i=1; i<=100; i++)
{
wa=wa+i;
}
printf("和=%d\n",wa);
}

投稿日時 - 2006-11-14 16:58:40

お礼

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

投稿日時 - 2006-11-21 15:42:16

ANo.3

i=1;
while(i <= 100)
{
wa+=i++;
}

ってとこかな
あんまスマートじゃないとおもう

わざわざwhileを使う必要ないね

投稿日時 - 2006-11-14 16:49:56

ANo.2

iの初期値設定
while(iの比較条件){
加算
iのカウントアップ
}

http://www1.cts.ne.jp/~clab/hsample/Flow/Flow03.html

投稿日時 - 2006-11-14 16:48:54

ANo.1

答えを書くのは簡単ですが、

とりあえず、あなたの作成した「動かないwhile()を使ったソース」
を見せていただけませんか?

そちらで指摘する方がよいでしょう。

投稿日時 - 2006-11-14 16:46:53

補足

forの部分をwhileに変えただけで、やりました。

int main(void)
{
int i,wa;

wa=0;
while(i=1; i<=100; i++)
{
wa=wa+i;
}
printf("和=%d\n",wa);
}

投稿日時 - 2006-11-14 16:53:46

あなたにオススメの質問