忍者ブログ
RoboCup Junior Japan Rescue Kanto OB

             2005~2013
[223]  [222]  [221]  [220]  [219]  [218]  [217]  [216]  [215]  [214]  [213
今日はなんとなくプログラムの記事の続きを書こうという気分になりました。

前回のif文の記事で記載したように、 今日はwhile文について、

それとよくwhile文と対をなして示されることの多いdo~while文について書こうと思います。

これらもif文と同じように、条件文の1種なのですが、if文はある条件が成立したらこっちの文、しなかったらこっち・・・

という風に「分岐」を作る条件でした。

でもこれからやるwhile文やdo~while文は「ある条件が成立している間この文を繰り返す」という

繰り返し、ループを作る条件文になります。


例えばこんな感じで、

#include <stdio.h>
int main(void)
{
     int i;
     i=1;
     while(i<=5){
           printf("%d回目のループです。/n",x);
           i++;
      }
     return 0;
}


またはこんな風に、

int main(void)
{
     int i;
     i=1;
     do{
           printf("%d回目のループです。/n",x);
           i++;
      }while(i<=5)
     return 0;
}


この二つのプログラムはどちらも実行の結果は

1回目のループです。
2回目のループです。
3回目のループです。
4回目のループです。
5回目のループです。

という風になります。

iが1から5の間、つまり5回分ループ回数の表示を行うプログラムです。

whille文で変数iの値と、5という数字を比較して

iの方が小さければ{ }内の命令文を繰り返すようなプログラムになっています。

iの方が大きい場合は、{ }内の処理は行われなくなるので、{ }の下のプログラムに移動します。

といってもこのプログラムの場合、return 0; とあるのでこのままプログラムは終了します。


因みに7行目のi++;という命令は変数iに1を足す。という命令で、この++をインクリメント演算子といいます。

逆の--というのもあってこれはデクリメント演算子といいます。

今、上のプログラムと下のプログラムは同じだという説明をしました。

whileとdo~while、違うものを使っているはずなのに同じになるなんておかしくありませんか?

同じになるならなぜ2つも同じものがあるのだろう。まぁこれにはちょっと訳がありまして、


この二つにある違いがあるのですが、このプログラムでは、その違いが出力結果に表れないのです。

じゃあ違いを出すにはどうするか、こうすればでてきてくれますよ。

#include <stdio.h>
int main(void)
{
     int i;
     i=10;
     while(i<=5){
           printf("%d回目のループです。/n",x);
           i++;
      }
     return 0;
}




int main(void)
{
     int i;
     i=10;
     do{
           printf("%d回目のループです。/n",x);
           i++;
      }while(i<=5)
     return 0;
}


この2つのプログラム、どこが変わったかといいますと、4行目。

i=1;がi=10;に変わっています。つまりどちらの条件式も満たさない、

つまり当てはまらないようなiの値をあらかじめ示したという訳です。


この場合、上のプログラムの実行結果は




つまり何も実行されないのですが、下のプログラムの場合、このように出力されます。

10回目のループです。

条件に当てはまっていないのに条件文内のプログラムが1回だけ実行されています。

これの原因は条件を調べるタイミングが大いに関係しています。

ちょっと図を使いましょうか。

これがwhile文の構成です。

while文の構成です。
まず最初に条件を確認し、条件が成立するなら、下の条件文を実行し、赤矢印を通って条件の確認に戻ります。

この時、条件が不成立になった時は青矢印を通って条件の外の文にジャンプします。これがwhile文です。


ところがdo~while文はこのようになっています。
do~while文の構成です。

do~while文では、先に条件内の文を実行してから、条件の確認を行い、

条件が成立すれば赤矢印のように条件内の文の最初に飛びます。

不成立の場合は青矢印のようにそのまま下の文を実行します。

つまりdo~while文はwhile文と違い、条件がどうであろうと、最低一回は必ず条件内の文を実行するのです。

これが2つの違い、先程のプログラムの出力結果の違いの訳です。



これがwhile文とdo~while文です。

また、while文の使い道としては、こんなのがあります。

#include <stdio.h>
int main(void)
{
     while(1){
           printf("お腹がすきました。/n");
      }
     return 0;
}

このプログラムは

お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
お腹がすきました。
(以下無限)

という出力、つまり無限ループを行うプログラムです。

なぜ条件の部分に1を入れると、こうなるのでしょうか、

C言語では、1というものは「真」というものを意味していて、これは「常に正しい」という意味と捉えることができます。

なので条件の中に 1 とだけ入れておくと、「この条件は常に正しい」という意味になります。

常に正しいのだから、ずっと繰り返し続ける→無限ループ、という訳です。

因みに0は「偽」、常に正しくないという意味を持っていますのでこれを条件に入れちゃうと・・・


因みにこれはdo~while文でも、もちろん行ううことができます。

以上でwhile文とdo~while文の説明は以上です。

次もまた条件文の説明です。今度は先程の一番最初のプログラムで説明したような、

変数を条件とするとこで指定した回数ループを行うようなプログラムをもっと作りやすくするための条件文を紹介します。


それでは今日はこの辺で。

(^・ω・)ノRadiumProduction in RoboCup Junior
Comments
※コメントは内容確認後に手動で公開するようにしております。反映までしばらくお待ちください。
Your Name
Title
color
Comment
 

カレンダー
02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
最新CM
[05/09 ONE RoboCuper]
[05/07 HDD ほしいよー]
[04/21 ブラック3辛]
[12/26 bols-blue]
[06/08 ONE RoboCuper]
かうんた
カウンター カウンター
らじぷろ目次
らじぷろ検索機
プロフィール
HN:
Luz
性別:
男性

PR

忍者ブログ 2007-2021,Powered by Radium-Luz-Lα+-Rescatar in RadiumProduction [PR]


Related Posts Plugin for WordPress, Blogger...