• ベストアンサー

do~while文がよくわかりません

今参考書で勉強しているのですが、do~while文がよくわかりません 。コードは下記のようになります。どうして前の処理結果が足されていくのか理解できません。こんな馬鹿にどうかわかりやすくご教授していただけないでしょうか!? <?php $s = $i = 0; do{ ++$i; $s += $i; }while($i < 10); print "1 から $i までの和は $s"; ?>

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

  • ベストアンサー
noname#77845
noname#77845
回答No.1

判らないのは、「Do~While」文ではなく、演算子や変数ではないのですか? ++$i; は、$iをインクリメント(+1)しています。 $s += $i; は、別の書き方をすると $s = $s + $i; になります。 $iをインクリメントしていきその値を$sに足し込んでいるので、最初のループでは $s=$s+1; ($s=0+1); で$sには1が代入されます。 二回目のループでは $s=$s+2; ($s=1+2); で$sには3が代入されます。 これを$iが10未満の間続けるのが「Do~While」文のところです。

kjfcaoi
質問者

お礼

ありがとうございます。 そういえば、イマイチ$s += $i;のことがわかっていませんでした。 本にも$s = $s + $i;と書いていたのですが・・・・何となくよくわかりませんでした。何となく理解したつもりではいたのですが、本当は何もわかっていなかったんですね。ループだから2回目は1回目の続きになっていると思って良いのですね。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.3

こんにちは。  …さて、このプログラムで変数「$s」に数値が足し込まれていく理由ですが、 じゃあ、実際に我々がコンピュータになったつもりで、変数の値を追いかけてみることにしましょうか(以下、文字が見やすいように全角文字で書いていきます)。  このプログラムは、 ++$i; … 変数「$i」の値に1を加え、それを新たに「$i」の値とする。 $s+=$i; … 変数「$s」の値に変数「$i」の値を加え、それを新たに「$s」の値とする。 という手続きを、9回繰り返すというものですよね。そうすると ------------------------------------------------------------------------------          左側の実行文を実行した結果、 実行文      $iの値は   $sの値は (1回目) ++$i;      1 $s+=$i;           1(0+1) (2回目) ++$i;      2 $s+=$i;           3(2+1) (3回目) ++$i;      3 $s+=$i;           6(3+3) (4回目) ++$i;      4 $s+=$i;          10(6+4) (5回目) ++$i;      5 $s+=$i;          15(10+5) (6回目) ++$i;      6 $s+=$i;          21(15+6) (7回目) ++$i;      7 $s+=$i;          28(21+7) (8回目) ++$i;      8 $s+=$i;          36(28+8) (9回目) ++$i;      9 $s+=$i;          45(36+9) ------------------------------------------------------------------------------ という感じになります。あくまでも ご参考までに。

kjfcaoi
質問者

お礼

長々と書いてくださってありがとうございます。 やはり$s+=$i;の解釈がまったくできていなかったです。ありがとうございました。

すると、全ての回答が全文表示されます。
  • Redpython
  • ベストアンサー率56% (9/16)
回答No.2

こんにちは。 わたくしも edomin2004 殿のコメントと同じで、なぜ結果が足されていくのかが分からないのならば、do while 文の理解ではないでしょう。 edomin2004 殿のアドバイスをお読みになった後に、わたくしのコメントをお読み下さい。 <while 文の処理順序> while (判断) { 処理; } この場合、常に ”判断”にパスしているのなら、下記のような順序で動きます。 判断 1回目 処理 1回目 判断 2回目 処理 2回目 …… <do while 文の処理順序> do { 処理; } while (判断); この場合、常に ”判断”にパスしているのなら、下記のような順序で動きます。 処理 1回目 判断 1回目 処理 2回目 判断 2回目 …… つまり、while 文とは、まず ”判断”を行い、それに通過したら ”処理”に進めます。 一方、do while 文は、まず ”処理”を行い、次に ”判断”をしてもらうという訳です。

kjfcaoi
質問者

お礼

う~ん、その部分はOK!なんですよ。 やはり足されることに納得いかなかったんです。 回答ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A