参考文献:高橋麻奈著『やさしいC第5版』
while文
whileは「~~である限り」という意味。
for文と同じく、指定した文を繰り返す構文。for文との違いは、あらかじめ繰り返す条件を設定し、その条件を満たす限り作業を繰り返すという点(試験に合格するまで試験を受け続ける、といったような)。
10回まで「n回目の繰り返しです。」という文章を繰り返すコード
whileの次の()の中に条件を記述する。
#include
int main(void)
{
int i=1;
while (i<=10)
{
printf("%d回目の繰り返しです。\n",i);
i++;
}
printf("繰り返しが終わりました。\n");
return 0;
}
1~100まで数を足し続けた値を出力するコード
whileのとなりのnを別の値にすれば、1000まででも10000まででも足せる。
#include
int main(void)
{
int n=1, sum=0;
while(n<=100) //100までで繰り返し終了という意味
{
sum+=n++; //※+=は加算した値をsumに代入しろという意味。
}
printf("%d\n",sum);
return 0;
}
do~while文
ブロックの最後に指定した条件を満たす限り、ブロック内の処理を順番通りに繰り返すという繰り返し構文。
do{文1
文2
・・・
}while(条件);
といった感じに記述する。
この構文が普通のwhile文と大きく異なる点は、条件がブロックの最後にあるので、条件を判断する前にとりあえず一度目はブロック内の処理を行うという点である。
1~100までの数字の合計を出力するdo~while文
繰り返しをやめさせる条件は、最後の一回を足したあとに100回行ったか確認させても((++n)<=100)、まだ100回行っていないことを確認してから最後の1回を足させても良い((n++)<100)。
#include
int main(void)
{
int n=1, sum=0;
do{
sum=sum+n;
}while((++n)<=100); //while((n++)<100)でもOK
printf("合計=%d\n",sum);
return 0;
}
0が入力されるまで入力された数を足し続けるdo~while文
!=は≠と同じ意味。
#include
int main(void)
{
int num,sum;
do{
scanf("%d",&num);
sum=sum+num;
}while(num!= 0); //numに0が入力されない限り繰り返し!
printf("合計は%dです\n",sum);
return 0;
}
ネスト文
再び登場。マトリョーシカ構造になっているコードのこと。
これを駆使すると、掛け算九九の9×9の表を表示させることもできる。
#include
int main(void)
{
int tate,yoko;
for(tate=1;tate<=9;tate++) //縦に9段できるまで段を増やせ
{
for(yoko=1;yoko<=9;yoko++) //横に9列できるまで列を増やせ
{printf("%3d ",tate*yoko);} //縦横9×9になるまで縦と横をかけろ
printf("\n");
}
return 0;
}
模様を描くネスト文
掛け算九九の表を作るのと同じ要領。
#include
int main(void)
{
int tate,yoko;
for (tate=0;tate<5;tate++)
{
for (yoko=0;yoko<5;yoko++)
{
if(tate != yoko)printf("*"); //縦と横の値が違う場合は全て*にする!
else
printf("#"); //そうじゃない場合(縦と横の値が同じ)は#にする!
}
printf("\n");
}
return 0;
}
コンパイルすると
#****
*#***
**#**
***#*
****#
break文
繰り返し処理を強制終了し、その繰り返し処理を記述するブロックから脱出する文。
for文でもなんでもいいが、繰り返し処理のブロックにbreakを入れると、その行を読んだ時点で繰り返し処理は中断となる。
continue文
残りの繰り返し処理を割愛し、繰り返し処理の先頭位置にまで処理をリセットしてしまう文。
ただし、for文のiのカウントまではリセットできないのに注意(できたら無限ループだが)。
go to文
処理の手順(逐次処理)を強制変更し、識別子がある場所にまでジャンプする文。
コードがたいへん読みにくくなることから、テキストではあまり使用しないほうがいいと書かれている。
だが、先生によれば、指定したブロックからしか脱出できないbreak文と異なり、go to文はネスト構造の多重ブロックからも一気にワープできるので、便利な場合もあるらしい。リレミトとルーラ的な。