自作関数には引数にif文やfor文などの条件式で使用される変数をもつものがあります。 その2 for文の条件式内の変数を引数に持つ場合

ソーラー「よ~し、こぉ~~い~~~


次は 


自作関数には引数にif文やfor文などの条件式で使用される変数をもつものがあります。 その2 for文の条件式内の変数を引数に持つ場合


だ。


アレサッ 


準備はいいかな。😊」


ソーラーのさわやかな笑顔が光に照らされ きらめく。


きらきらっ きらきらっ


アレサ「っ! 今、夏真っ盛り なのですね。 


ここには太陽が訪れている・・・


太陽の季節が・・・


では 私も元気にまいります。


自作関数の引数に for文の条件式内の変数を持つ場合ですか・・・


プログラムを構成すると


#include <stdio.h>


void Forprintf (int x,int y){


int a;

for(a=0;a<x;a++)

printf("%d\n",a);

int b;

for(b=y;b<7;b++)

printf("%d\n",b);

return;}


int main(void){

Forprintf (1,2);

return 0;

}


コンパイル結果

0

2

3

4

5

6


ソーラー「いい感じ~さっぱりわからないじゃないか~


これは いったいどういうことなんだい?」


笑顔が光に照らされ きらめく。



きらきらっ きらきらっ




アレサ「ま、眩しい!


で、では説明にまいりますの



void Forprintf (int x,int y){


int a;

for(a=0;a<x;a++)

printf("%d\n",a);

int b;

for(b=y;b<7;b++)

printf("%d\n",b);

return;}

この自作関数の定義内の


まず

int a;

for(a=0;a<x;a++)

printf("%d\n",a);


の部分から始めたいと思います。


for文とは


for文につづいて記述された命令文を


(この場合 printf("%d\n",a);を)


何回か繰り返して実行する


というものでした。


そして どのように命令文を繰り返し実行ていくのかを


制御しているのが 


for(a=0;a<x;a++)内の変数aというわけです。


そして aが変数として機能するには


aの変数宣言が必要となるので


int a;が


for文の前に記述されているわけです。


イコール


int a; aの変数宣言が


for文の前に記述されていなければ


aはコンピュータに変数として認識されないということですの。


そして


for文の条件式(a=0;a<x;a++)より


変数aは


a=0,1,2,3,4,5,・・・x-1までの値を順次とっていくのが


わかります。


そして aの値に対応した命令文が次のように順次実行されていきます。


a=0のとき

printf("%d\n",0);が実行

a=1のとき

printf("%d\n",1);が実行

a=2のとき

printf("%d\n",2);が実行

a=3のとき

printf("%d\n",3);が実行

a=x-1のとき

printf("%d\n",x-1);が実行されていくので


コンパイル結果は

0

1

2

3

.

.

.

x-1

となります。


このプログラムでは自作関数の引数であるxに1が代入されるので


for(a=0;a<x;a++)⇨for(a=0;a<1;a++)となり


a=0のときの

printf("%d\n",0);だけが実行されて


コンパイル結果は

1

となります。


int xに 代入される値によって


int a;

for(a=0;a<x;a++)

printf("%d\n",a);


は制御を受けているわけですの。」


ソーラー「次は僕の番だね。


お次は


int b;

for(b=y;b<7;b++)

printf("%d\n",b);


の部分だね。


先程と同様に


bが変数として機能するには


bの変数宣言が必要なので


int b;が


for文の前に記述されているね。


やっぱり 変数を使用する際は変数宣言はかかせないね。


そして


int b;

for(b=y;b<7;b++)

printf("%d\n",b);

このfor文内の変数bは


b=y,y+1,y+2,y+3,・・・6までの値を順次とっていくのが


for文の条件式(b=y;b<7;b++)よりわかります。


そのbの値に応じて


b=yのとき

printf("%d\n",y);

b=y+1のとき

printf("%d\n",y+1);

b=y+2のとき

printf("%d\n",y+2);

b=y+3のとき

printf("%d\n",y+3);

b=6のとき

printf("%d\n",6);が実行されるので


コンパイル結果は

y

y+1

y+2

y+3

.

.

.

6

となるんだね😊


ひゃっほ~い


そして


このプログラムでは自作関数の引数であるyに2が代入されるので


for(b=y;b<7;b++)

for(b=2;b<7;b++)となります


for(b=2;b<7;b++)なので


bは2,3,4,5,6の値をとることになり


bの値に応じて


b=2のとき

printf("%d\n",2);が実行

b=3のとき

printf("%d\n",3);が実行

b=4のとき

printf("%d\n",4);が実行

b=5のとき

printf("%d\n",5);が実行されて


コンパイル結果は

となるわけなんだ。


つまり 自作関数の引数であるint yに代入される値によって


このfor文 for(b=y;b<7;b++)は制御を受けてるってわけだね。」


アレサ「以上のことをまとめると


最初に出てきたプログラムは実行されると

  ⇩

#include <stdio.h>


void Forprintf (int x,int y){


int a;

for(a=0;a<x;a++)

printf("%d\n",a);

int b;

for(b=y;b<7;b++)

printf("%d\n",b);

return;}


int main(void){

Forprintf (1,2);

return 0;

}


コンパイル結果

0

2

3

4

5

6


となるわけですの


Forprintf (1,2);

が実行されただけで


コンパイル結果が

0

2

3

4

5

6

となるのですね。」


ソーラー「

Forprintf (1,2);の代わりに

Forprintf (5,6);が実行されると

コンパイル結果

0

1

2

3

4

6


Forprintf (1,2);の代わりに

Forprintf (3,1);が実行されると


コンパイル結果

0

1

2

1

2

3

4

5

6


となるっと」


アレサ 「ではもうひとつ


では もう一つ


自作関数の引数に for文の条件式内の変数を持つ場合


を お示しいたします。


#include <stdio.h>


void ForForprintf (int x,int y){


int a;

int b;

for(a=0;a<x;a++)for(b=0;b<y;b++)

printf("%d\n",a);


return;

}


int main(void){

ForForprintf (2,3);

return 0;

}


コンパイル結果

0

0

0

1

1

1


このプログラムでは


自作関数の引数 int x, int yに

2,3が代入されています


ですので


for(a=0;a<x;a++)for(b=0;b<y;b++)

for(a=0;a<2;a++)for(b=0;b<3;b++)


となり


for(a=0;a<2;a++)for(b=0;b<3;b++)の制御をうけながら


printf("%d\n",a);

が実行されていきますの。


まず

for(b=0;b<3;b++)により


bは0,1,2の値を順次とっていくのがわかります。


b=0のとき

printf("%d\n",a);が実行

b=1のとき

printf("%d\n",a);が実行

b=2のとき

printf("%d\n",a);が実行され


コンピュータ内で


printf("%d\n",a);

printf("%d\n",a);

printf("%d\n",a);

が生成されます。


次に

この

printf("%d\n",a);

printf("%d\n",a);

printf("%d\n",a);

for(a=0;a<2;a++)が作用していきます。


for(a=0;a<2;a++)より

aは0,1の値を順次とっていくのがわかります。


そして


a=0のとき

printf("%d\n",0);

printf("%d\n",0);

printf("%d\n",0);


が実行され


a=1のときは

printf("%d\n",1);

printf("%d\n",1);

printf("%d\n",1);

が実行されるので


最終的にコンパイル結果は


0

0

0

1

1

1

となるわけです。


いかがですか😊ソーラーさん」


ソーラー「これはfor文 2重入れ子構造だね。


これはでてくると思ったよ。


ForForprintf (5,1);なら


プログラム内の


ForForprintf (2,3);を

ForForprintf (5,1);に


打ち直せば


すぐに結果がわかるよね


そのときの


コンパイル結果は


0

1

2

3

4


となります。


🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

まず

for(b=0;b<y;b++)にのyに1を代入した

for(b=0;b<1;b++)により


bは0の値だけをとっていくのがわかります。


b=0のとき

printf("%d\n",a);が実行され


コンピュータ内で


printf("%d\n",a);が生成されます。


次に


この

printf("%d\n",a);に


for(a=0;a<x;a++) のxに5を代入した


for(a=0;a<5;a++)が作用していきます。


for(a=0;a<5;a++)より


aは0,1,2,3,4,の値をとるのがわかります。


そして


a=0のとき

printf("%d\n",0);が実行され

a=1のとき

printf("%d\n",1);が実行され

a=2のとき

printf("%d\n",2);が実行され

a=3のとき

printf("%d\n",3);が実行され

a=4のとき

printf("%d\n",4);が実行され


最終的にコンパイル結果は


0

1

2

3

4

となるわけです。

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳


そして


ForForprintf (2,2);なら


0

0

1

1

となるんだね。


自作関数は 引数の数値の変更が やっぱり容易だね。」


きらっキラキラ☆☆☆





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

作者を応援しよう!

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

応援したユーザー

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