どうもサンチョです!
前回はループ処理のfor文について学びました。
今回はもう一つのループ処理であるwhile文について触れていきましょう!
前回の練習問題の解答例
まずは前回の練習問題の解答例から説明していきます。
※前回の記事はこちら ⇒C言語入門(ループ処理その1:for文)の練習問題
問題の内容は「テストの点数を配列に登録して、全体の平均点を計算するプログラム」でしたね。
#include<stdio.h>
int main() {
int array[5] = {92, 83, 71, 40, 57};
int i, sum;
sum = 0;
for (i = 0; i < 5; i++) {
sum = sum + array[i]; // 点数の合計値を計算
}
printf("平均点は%0.2f\n", sum / 5.0);
}
この問題のポイントは、for文のカウント変数を用いて配列の要素を取り出す点です。
ちなみに修正前のプログラムはこちら↓
double average = (array[0] + array[1] + array[2] + array[3] + array[4])/5.0;
これだと生徒数(配列の要素数)が増えたら修正が大変ですよね?
for文のカウント変数を用いれば、要素番号を変更しながら処理できるので
生徒数が増えても、修正箇所が少なくて済みます。
ループ処理にはこういった利点があるんですね。
while文
さて、ここからようやく本題に入っていきます。
while文とは
C言語におけるもうひとつのループ処理です。
前回のfor文が繰り返す回数が決まっている場合に使用するループ処理だったのに対し、
繰り返す回数が決まっていないor不明なときに使用するループ処理です。
まずは以下のプログラムをコピペ&実行してイメージをつかんでください。
#include<stdio.h>
int main() {
int i = 0;
while(i < 5) {
printf("iの値は %d です。\n", i);
i++;
}
}
なんとなくfor文と似た点がありますね。
では、もう少し詳しく説明していきます。
whileの構成要素
while文は次の要素で構成されています。
カウント変数
while( 条件式 ){
処理内容
カウント変数の更新
}
あれ?for文と同じじゃね?
そう感じたアナタ…ほぼ正解です!
実はwhile文を構成する要素はfor文とほぼ同じで
for文でできることはwhile文でもできます。
ただし、用途に少し違いがあります。
forとwhileの用途の違い
先ほど挙げた例を見て、forとwhileの違いが分からないと感じたのは、
「繰り返す回数が決まっている処理」を例として挙げたためです。
「繰り返す回数が不明な処理」の例をみると、用途の違いを認識できると思います。
以下のプログラムは、1から順に数値を2倍する処理を繰り返したときに
何回目で「128」に到達するかを調べるプログラムです。
#include<stdio.h>
int main() {
int count = 0;
int binary = 1;
while ( binary <= 128 ) {
binary = binary * 2;
count++;
}
printf("128まで%d回", count);
}
一応、for文でもできないワケではないですが難しいです。
このようなプログラムをつくる場合はwhile文を使いましょう。
練習問題
【問1】前回の練習問題で作成したfor文のプログラムをwhile文に修正してください。
※前回の練習問題はこちら⇒C言語入門(ループ処理その1:for文)の練習問題
【問2】任意の自然数を2つ用意して、その最大公約数を求めるプログラムを作成してください。
考え方のヒント:最大公約数はユークリッド互除法で計算できます。
【ユークリッド互除法で計算した場合】
仮に2つの自然数を「81」と「12」と定義した場合
・81 / 12 あまり 9
・12 / 9 あまり 3
・9 / 3 あまり 0
最大公約数は 3 という結果が求められる。
まとめ
今回はwhile文について学びました。
while文は
①繰り返す回数が決まっていないときに使用するループ処理。
②構成要素はforとほぼ同じ。
③forでできることはwhileでもできる。
練習問題は少し歯ごたえのあるものを用意したので
じっくり考えてみてください!
次回も、もう少しだけループ処理に触れていこうと思います。
では、お疲れ様でした!
コメント