はじめに
プログラミング言語C言語について学び始めると、すぐに繰り返し処理に触れることになります。
これは、同じコードを何度も実行するための構文で、効率的なプログラミングには欠かせない要素です。
しかし、初心者にとってはちょっと難しく感じるかもしれません。
そこで、この記事ではC言語の繰り返し処理について、基本的な文法から具体的な使用例まで、10のステップで詳しく解説します。
初心者でも安心して学べる内容になっています。
●C言語の繰り返し処理とは
C言語における繰り返し処理は、特定のコードを一定の条件下で反復して実行することを可能にする機能です。
これにより、手作業で同じコードを何度も書くことなく、コードの実行を自動化することができます。
●基本的な繰り返し処理
C言語には主に3つの繰り返し処理、すなわちfor文、while文、do-while文が存在します。
それぞれの動作と使い方を見てみましょう。
○for文
for文は、指定した回数だけ繰り返し処理を行うための文です。
for文の基本的な構造は次の通りです。
for (初期化; 条件式; 更新) {
処理
}
□サンプルコード1:基本的なfor文
このコードでは、for文を使って1から10までの数を順に表示するコードを紹介しています。
この例では、初期値として変数iに1を設定し、iが10以下の間、繰り返し処理を行います。
各繰り返しでiに1を加えることで、次のループに移行します。
#include<stdio.h>
int main() {
int i;
for(i = 1; i <= 10; i++) {
printf("%d\n", i);
}
return 0;
}
このコードを実行すると、画面上に1から10までの数が順に表示されます。
□サンプルコード2:多重for文
このコードでは、for文を入れ子にすることで行列の各要素を表示するコードを紹介しています。
この例では、外側のfor文が行のインデックスを、内側のfor文が列のインデックスを制御しています。
#include<stdio.h>
int main() {
int i, j;
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++) {
printf("行: %d, 列: %d\n", i, j);
}
}
return 0;
}
このコードを実行すると、3×3の行列の各要素の位置(行と列)が表示されます。
○while文
while文は、指定した条件が真である限り繰り返し処理を行います。
while文の基本的な構造は次の通りです。
while (条件式) {
処理
}
□サンプルコード3:基本的なwhile文
このコードでは、while文を使って10以下のすべての奇数を表示するコードを紹介しています。
この例では、変数iに1を設定し、iが10以下の間、繰り返し処理を行います。
各繰り返しでiに2を加えることで、次のループに移行します。
#include<stdio.h>
int main() {
int i = 1;
while(i <= 10) {
printf("%d\n", i);
i += 2;
}
return 0;
}
このコードを実行すると、画面上に1から10までの奇数が順に表示されます。
□サンプルコード4:無限ループとその対処法
このコードでは、while文を使った無限ループと、その対処法を紹介しています。
この例では、条件式に真を示す1を設定していますが、ループ内で値が変化するコードがないため無限ループとなります。
このような状況を避けるためには、ループ内で条件が偽になるような処理を必ず入れることが重要です。
#include<stdio.h>
int main() {
int i = 1;
while(1) {
printf("%d\n", i);
i++;
if(i > 10) break;
}
return 0;
}
このコードを実行すると、1から10までの数が順に表示された後に、ループが停止します。
○do-while文
do-while文は、while文と似ていますが、最初の一回だけは条件を問わずに処理を行う点が異なります。
do-while文の基本的な構造は次の通りです。
do {
処理
} while (条件式);
□サンプルコード5:基本的なdo-while文
このコードでは、do-while文を使って5以下のすべての自然数を表示するコードを紹介しています。
この例では、変数iに1を設定し、iが5以下の間、繰り返し処理を行います。
各繰り返しでiに1を加えることで、次のループに移行します。
#include<stdio.h>
int main() {
int i = 1;
do {
printf("%d\n", i);
i++;
} while(i <= 5);
return 0;
}
このコードを実行すると、画面上に1から5までの自然数が順に表示されます。
●繰り返し処理の使い方
ここまで基本的な繰り返し処理の文法について見てきました。
しかし、これらをどのように使うか、具体的な使用例を見ていくことでより理解が深まります。
そのために配列との組み合わせやネストしたループ、さらにはbreak文とcontinue文の使用例を見ていきましょう。
○配列との組み合わせ
配列とループを組み合わせることで、配列の全要素に効率よくアクセスしたり、配列をソートしたりすることができます。
□サンプルコード6:配列の各要素にアクセス
このコードでは、for文を使って配列の各要素にアクセスするコードを紹介しています。
この例では、5つの要素を持つ配列を定義し、その全要素を順に表示します。
#include<stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int i;
for(i = 0; i < 5; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
このコードを実行すると、画面上に配列の全要素が順に表示されます。
□サンプルコード7:配列の要素をソート
このコードでは、for文を使って配列の要素を昇順にソートするコードを紹介しています。
この例では、バブルソートのアルゴリズムを用いています。
#include<stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int arr[5] = {5, 3, 4, 1, 2};
int i, j;
for(i = 0; i < 5; i++) {
for(j = i + 1; j < 5; j++) {
if(arr[i] > arr[j]) {
swap(&arr[i], &arr[j]);
}
}
}
for(i = 0; i < 5; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
このコードを実行すると、画面上にソート後の配列の要素が昇順に表示されます。
○ネストしたループ
ループ文を入れ子にすることで、多次元のデータ構造を扱ったり、複雑なパターンを生成したりすることが可能になります。
□サンプルコード8:九九の表を作成
このコードでは、ネストしたfor文を使って九九の表を作成するコードを紹介しています。
この例では、外側のfor文が1から9までの数を制御し、内側のfor文がそれぞれに対する1から9までの乗算を行います。
#include<stdio.h>
int main() {
int i, j;
for(i = 1; i <= 9; i++) {
for(j = 1; j <= 9; j++) {
printf("%d ", i * j);
}
printf("\n");
}
return 0;
}
このコードを実行すると、画面上に九九の表が表示されます。
○break文とcontinue文
ループ中に特定の条件を満たした時にループを中断したり、次のループに移行したりするための文として、break文とcontinue文があります。
□サンプルコード9:break文の使い方
このコードでは、break文を使って特定の条件を満たしたときにループを終了するコードを紹介しています。
この例では、1から始まる整数を順に表示し、その数が5になったときにループを終了します。
#include<stdio.h>
int main() {
int i;
for(i = 1; ; i++) {
if(i > 5) break;
printf("%d\n", i);
}
return 0;
}
このコードを実行すると、画面上に1から5までの数が順に表示された後、ループが終了します。
□サンプルコード10:continue文の使い方
このコードでは、continue文を使って特定の条件を満たしたときに次のループに移行するコードを紹介しています。
この例では、1から10までの整数を順に表示し、その数が5の倍数のときだけ表示をスキップします。
#include<stdio.h>
int main() {
int i;
for(i = 1; i <= 10; i++) {
if(i % 5 == 0) continue;
printf("%d\n", i);
}
return 0;
}
このコードを実行すると、画面上に1から10までの数が順に表示されますが、5と10は表示されません。
●繰り返し処理の注意点と対処法
プログラミングにおける繰り返し処理は非常に強力なツールですが、適切に扱わないとプログラムの動作を阻害する原因になることもあります。
無限ループの発生や配列の範囲外へのアクセスなど、繰り返し処理における一般的なエラーとその対処法を理解することで、効率的で安全なコードを書くことができます。
○無限ループ
一度始まったループが終了しない状態を無限ループといいます。
これは、ループの終了条件が満たされないときに発生します。
この問題を解決するためには、ループの終了条件を明確にし、その条件が必ずいつかは満たされるようにすることが重要です。
○配列の範囲外へのアクセス
配列の範囲外へのアクセスは、プログラムの予期しない終了や誤った動作を引き起こす可能性があります。
この問題を防ぐためには、配列にアクセスする前にその範囲を確認することが重要です。
配列の長さを超えるインデックスを使用してアクセスしようとすると、不適切なメモリ領域にアクセスすることになります。
○複雑なループ条件
ループの条件が複雑すぎると、コードの読みやすさや保守性が低下します。
ループ条件を簡単に保つためには、複雑な条件を小さな部分に分解し、それぞれを独立した関数や変数に格納すると良いでしょう。
まとめ
以上、C言語の繰り返し処理の基本から応用までを見てきました。
これらの知識を身につけることで、より複雑な問題を効率的に解決するための力強いツールを手に入れることができます。
しかし、これらの概念を理解するだけではなく、実際にコードを書き、実行し、結果を確認することが重要です。
プログラミングは、理論だけではなく、実践を通じて最もよく学べるスキルの一つです。