それでは for文の8つの基本パターンで遊んでみる。

前回は失礼いたしました。


再開いたします。


サンプルプログラムはこちらでした。


#include <stdio.h>


int main(void){

int a;

for(a=1; a<=3; a++){

printf("このprintfは%d回目です\n",a);

}

return 0;

}



このプログラムにおいて


for(a=1; a<=3; a++)のところを


次の


for(;; ) (Visual Studioでは実行できません)

for(; ; a++) (Visual Studioでは実行できません)

for(; a<=3;) (Visual Studioでは実行できません)

for(a=1; ; )

for(; a<=3; a++) (Visual Studioでは実行できません)

for(a=1; a<=3; )

for(a=1;; a++)

for(a=1; a<=3; a++)


の別の形式に置き換えた場合


この8つのfor文のパターンの中に


1回も


printf("このprintfは%d回目です\n",a);


を実行しないものがあります。


それは・・・


どれだか 予想がつきますか?


わっかんな~~い💖 ですか? きゃはっ


う~ん それでは


とりあえず


次から次へと


この8つのパターンを1つずつプログラムに書き込んで


コンパイルしてみます。


まずは

for(;; )の場合 (Visual Studioでは実行できません)


#include <stdio.h>


int main(void){

int a;

for(;; ){

printf("このprintfは%d回目です\n",a);

}

return 0;

}

コンパイル結果


このprintfは4198543回目です

このprintfは4198543回目です

このprintfは4198543回目です

このfor文は初期化式において


変数aを初期化しないときに変数aに格納されている


いつもの数値4198543


をくりかえしprintf出力表示していますね。


a++もないのでaの値は4198543から増加しません。


条件式もかかれていないので


繰り返しはとまりません。



for(; ; a++)の場合 (Visual Studioでは実行できません)


#include <stdio.h>


int main(void){

int a;

for(; ; a++){

printf("このprintfは%d回目です\n",a);

}

return 0;

}

コンパイル結果


このprintfは4198543回目です

このprintfは4198544回目です

このprintfは4198545回目です


これはa++が継続処理方法に入っているので


変数aの値が1ずつ増加しながら


printf("このprintfは%d回目です\n",a);


をくりかえしていますね。


こちらも変数aを初期化していないので先ほどと同じく


変数aを初期化しないときに


変数aに最初から格納されている数値4198543から


繰り返しがはじまっています。


はいっ、さあ😝 


お次は


for(; a<=3;)の場合です。 (Visual Studioでは実行できません)


#include <stdio.h>


int main(void){

int a;

for(; a<=3;){

printf("このprintfは%d回目です\n",a);

}

return 0;

}


さあ、このプログラムのコンパイル結果はどうなるでしょうか?


コンパイル結果


















・・・・・・・・・・













・・・・・


???



コンパイル結果は何も表示なしです。


それはどうして?でしょうか?


for(; a<=3;)をよく観察してみます。


ここでも


変数aを初期化していないので先ほどと同じ


変数aを初期化しないときに


変数aに最初から格納されている数値4198543から


命令文の繰り返しがはじまります。


ですが・・・


for文の条件式の部分 a<=3と数値4198543を


よく見比べてみましょう。


このfor(; a<=3;)の意味は


aの数値が3以下なら


printf("このprintfは%d回目です\n",a);


の命令をくりかえしなさい。という意味なのです。


ここでは


aの数値は最初から4198543となっており


aの数値は3以下ではないので


この命令文は一回も実行されないことになります。


そういうことなの。


では


for(a=1; ; )の場合はどうでしょうか?


#include <stdio.h>


int main(void){

int a;

for(a=1; ; ){

printf("このprintfは%d回目です\n",a);

}

return 0;

}


コンパイル結果


このprintfは1回目です

このprintfは1回目です

このprintfは1回目です

の繰り返しです。


こちらは😊!簡単でした。


初期化式はa=1で


継続処理方法a++もないので


aの値は増加しません。


ですので


aに格納されている数値はa=1のままで


printf("このprintfは%d回目です\n",1);


の命令文は繰り返し実行されます😊。


さらに


条件式も書かれていないので


繰り返しをとめる制限も加わりません。



for(; a<=3; a++)の場合 (Visual Studioでは実行できません)


こちらは


もうお分かりになられますね😊


変数aは初期化されていないので


変数aには初期化されていない時の数値4198543が格納されていて


変数aの格納している値は3以下ではないので


この命令文は一回も実行されないことになります。


ですので


for(; a<=3; )の場合と同様に


コンパイル結果は表示なしです。


うふふ


それでは


for(a=1; a<=3; )の場合はどうなるのでしょうか。


#include <stdio.h>


int main(void){

int a;

for(a=1; a<=3; ){

printf("このprintfは%d回目です\n",a);

}

return 0;

}


コンパイル結果


このprintfは1回目です

このprintfは1回目です

このprintfは1回目です

このように


このprintfは1回目です


が繰り返しprintf出力表示されます


初期化式a=1により


aの値は


a++が記述されていないのでa<=3をずっとみたしています。


ですので


printf("このprintfは%d回目です\n",a);


のaに1が代入された


printf("このprintfは%d回目です\n",1);


の繰り返し実行が止まることはなく


このprintfは1回目です


が、ずっと繰り返される、というわけなのですね。


では では・・・  🐤🐤🐤・・・ 


for(a=1;; a++)の場合は?


#include <stdio.h>


int main(void){

int a;

for(a=1;; a++){

printf("このprintfは%d回目です\n",a);

}

return 0;

}


コンパイル結果


このprintfは1回目です

このprintfは2回目です

このprintfは3回目です


初期化式a=1によりa=1から


命令文printf("このprintfは%d回目です\n",a);


の繰り返しが始まります。


そして


継続処理方法a++により1回命令文を実行するごとに


aの数値は1ずつ増加していきます。


こちらも条件式の記述がないので繰り返しが止まることはありません。



そして いよいよ😊


こちら 


一般的な


初期化式、条件式、継続処理方法


すべてかかれている


for(a=1; a<=3; a++)の場合です。


楽しみですね。


コンパイル結果は


このprintfは1回目です

このprintfは2回目です

このprintfは3回目です


となります。


初期化式a=1より

a=1の場合から命令文は実行され


継続処理方法a++によって

命令文内のaの値が1ずつ増加しながら


条件式a<=3によりa=3のときまで


printf("このprintfは%d回目です\n",a);


が繰り返し実行されて


命令文の実行が終了します。


みなさん、いかがでしたでしょうか?


8つのfor文のパターンのうち


一回も繰り返しが実行されないのは


for(;; )

for(; ; a++)

for(; a<=3;)

for(a=1; ; )

for(; a<=3; a++)

for(a=1; a<=3; )

for(a=1;; a++)

for(a=1; a<=3; a++)


のなかの


for(; a<=3;)

for(; a<=3; a++)


2つのパターンでした。




1768年  フランス



             ミルシーズが御贈りいたしました。


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます