C言語で、繰り返しの処理を行う時の文法を学びます。例えば、1から100までの数字を出力する、というプログラムを書く場合、printf文で100行のプログラムを書く必要があります。これを繰り返し文を使えば、3行で表現することが可能になります。こういった単純な繰り返しを行う場合に有効です。
繰り返しには、①for文、②while文、③do~while文の3通りの使い方があります。似ていますが、使いたい時の条件が異なるので文法を見て覚えてください。
コンテンツ
for文
for文の規則
for ( "初期化を行う条件式"; "繰り返し判定を行う条件式"; "繰り返し時に行う処理" )
{
"繰り返し行いたい処理(複数行)"
}
Lesson4のサンプルプログラム問題<Lesson4.c>
1から100までの数字を足していき、
“足した数の合計は xxx です。”
と出力するプログラムを作ろう。
1から100までの数字を代入する変数を「int型のnumber」、足した数の合計を代入する変数を「int型のTotal」としてください。
#include <stdio.h>
void main(void)
{
int number = 0;
int Total = 0;
for(number=1; number<=100; number++)
{
Total += number;
}
printf("足した数の合計は %d です。\n", Total);
return;
}
Lesson4のサンプルプログラム問題<Lesson4.c>の実行結果
PS C:\Cprogram> gcc lesson4.c -o lesson4.exe
PS C:\Cprogram> .\Lesson4.exe
足した数の合計は 5050 です。
初期化を行う条件式(for文)
プログラムの8行目 “number=1” が初期化を行う条件式です。変数”number”に初期値として、”1″の値を代入します。初期化の処理なので、for文へ突入時の初回のみ1度だけ実行します。
繰り返し判定を行う条件式(for文)
プログラムの8行目 “number<=100” が繰り返し判定を行う条件式です。変数”number”の値が、”100以下の場合”繰り返しの処理を行います。for文の処理が1度実行されたあと、繰り返し処理の判定を行います。
繰り返し処理のあとに行う処理(for文)
プログラムの8行目 “number++” が繰り返し処理のあとに行う処理です。変数”number”の値に、”1を加算”します。繰り返し処理が1度行われるたびに、実行します。
for文の実行イメージ①
for文へ突入時、①のnumber=1の初期化のみ実行します。
次に②のfor文の中にある処理すべてを実行します。
②の処理が終了後に、③の”number++”を行います。そのあとに、”number<=100″の判定を行います。
for文の実行イメージ②
[1] number = 1 で初期化処理を行います。
[2] Total = Total(=0) + number(=1) の処理が行われ、Total = 1になります。
[3] for文の繰り返し処理が終了します。
[4] number++が行われ、number = 1 + 1 = 2になります。
[5] for文の繰り返し判定を行います。
[6] numberが2のときに、条件判定 number<=100 が行われます。
[7] numberが100以下なので、もう一度繰り返しの処理を行います。
[8] Total = Total(=1) + number(=2) の処理が行われ、Total = 3になります。
[9] for文の繰り返し処理が終了します。
[10] number++が行われ、number = 2 + 1 = 3になります。
※以降続く。
[重要]for文は必ず1度、処理を実行する
while文
while文の規則
while ( "条件" )
{
"繰り返し行いたい処理"
}
while文は、”条件”が満たされる間は、処理を繰り返し行います。そのため、”条件”の値が変化しない場合は、ずっと処理が繰り返されてしまいますので注意してください。(同じ処理を繰り返し、条件式から抜けられないため、無限ループと呼びます。)
Lesson4-2のサンプルプログラム問題<Lesson4_2.c>
次のプログラム<Lesson4_2.c>の実行結果はどうなりますか?実行結果を予想してみよう。
#include <stdio.h>
void main(void)
{
int number = 1;
while ( number <10 )
{
printf("numberの値は、 %d です。\n", number);
}
return;
}
while ( number <10 )の条件式のあとに、numberの値が増えるような処理がありませんので、while文の中の処理がずっと繰り返されます(無限ループ)
Lesson4-3のサンプルプログラム問題<Lesson4_3.c>
#include <stdio.h>
void main(void)
{
int number = 5;
while ( number > 0 )
{
printf("numberの値は、 %d です。\n", number);
number--;
}
return;
}
Lesson4-3のサンプルプログラム問題<Lesson4_3.c>の実行結果
PS C:\Cprogram> gcc lesson4_3.c -o lesson4_3.exe
PS C:\Cprogram> .\Lesson4_3.exe
numberの値は、 5 です。
numberの値は、 4 です。
numberの値は、 3 です。
numberの値は、 2 です。
numberの値は、 1 です。
Lesson4-3のサンプルプログラム問題<Lesson4_3.c>を使って、while文の実行イメージについて説明します。
while文の実行イメージ①
① while文へ突入時、”number > 0″ の判定をはじめに行います。
もし、”number > 0″ ではない場合、while文の中の処理②は実行しません。
② “number > 0” の場合、while文の中の処理を実行します。
③ ②処理を実行中に、”number–“を行います。
④ ②の処理すべてが終わったら繰り返し処理の判定で、”number > 0″を判定します。
while文の実行イメージ②
[1] while文の繰り返し判定を行います。
[2] number > 0 でnumberの値の判定処理(5 > 0)を行います。
[3] 真だったのでwhile文の中の処理を実行します。printfでnumberの値を出力します。
[4] number--が行われ、number = 5 - 1 = 4になります。
[5] while文の繰り返し判定を行います。
[6] number > 0 でnumberの値の判定処理(4 > 0)を行います。
※以降続く。
[重要]while文は最初に条件判定。処理を一度も実行しないときがある。
do~while文
do~while文の規則
do
{
"繰り返し行いたい処理"
}
while ( "条件" ) ;
do~while文は、while文の変形タイプです。while文と同様に”条件”が満たされる間は、処理を繰り返し行います。while文との違いは、doの中で繰り返す処理が、最初に必ず1度実行されてから条件判定を行います。※while文の末尾にセミコロンが入りますが間違えやすい(忘れやすい)ので注意。
Lesson4-4のサンプルプログラム問題<Lesson4_4.c>
#include <stdio.h>
void main(void)
{
int number = 7;
do
{
printf("numberの値は、 %d です。\n", number);
number = number - 2;
}
while ( number > 0 );
}
Lesson4-4のサンプルプログラム問題<Lesson4_4.c>の実行結果
PS C:\Cprogram> gcc lesson4_4.c -o lesson4_4.exe
PS C:\Cprogram> .\Lesson4_4.exe
numberの値は、 7 です。
numberの値は、 5 です。
numberの値は、 3 です。
numberの値は、 1 です。