はじめに
Incrementsのnara_sakiです。Qiita広告の企画営業をしています。文系ビジネス職ですが「実際に自分でも手を動かしてみたい!」という思いから、プログラミングを勉強しています。
今は、ハーバード大学が無償提供している「CS50 for Japanese: コンピュータサイエンスの入門」を受講しています。
本記事は自分が学んだことの備忘録です。
Week1(C)の課題で、do-while/whileの違いを実際のコードで体感したので、備忘録として残しておきます。
do-while/whileの違い
do-while
- プログラムを実行する
- プログラム実行後、条件をチェックする
do-whileでは、条件をチェックする前にプログラム実行されるため、条件の合致に関わらず最低1回はプログラムが実行される。
while
- 条件をチェックする
- 条件に合致する場合、プログラムを実行する
whileでは最初に条件がチェックされるため、条件に合致する場合のみプログラムが実行される(合致しない場合はプログラムは実行されない)。
実例:do-while/whileの使い方を間違えるとどうなるか
CS50の課題でループ処理をする際、whileではなくdo-whileを使ったところ、期待する結果が得られませんでした。
実際の問題は載せられないため、簡略化した例を残しておきます。
例:実行したいプログラム
- ユーザーに手持ちの現金(yen)を入力させる(0円を入力された場合は、1円以上が入力されるまで繰り返す)
- 100円のりんご(apple)を最大何個買えるか計算し、最大個数を出力する
whileの場合
- yen >= 100 の場合、appleの最大個数が出力される
- yen < 100 の場合、りんごは1個も買えないのでappleの個数は0と出力される
#include <stdio.h>
#include <math.h>
int main(void)
{
// ユーザーに手持ちの現金を入力させる
int yen;
do
{
yen = get_int("yen: ");
}
while (yen < 1);
int apple = 0;
while (yen >= 100)
{
yen = yen - 100;
apple++;
}
// りんごの最大個数を出力する
printf("%i\n", apple);
}
do-whileの場合
- yen >= 100 の場合、appleの最大個数が出力される
- yen < 100 の場合、お金が足りないのでりんごは1個も買えないはずだが、appleの個数が1として出力されてしまう(条件のチェックをする前に処理を行ってしまうため)
#include <stdio.h>
#include <math.h>
int main(void)
{
// ユーザーに手持ちの現金を入力させる
int yen;
do
{
yen = get_int("yen: ");
}
while (yen < 1);
int apple = 0;
do
{
yen = yen - 100;
apple++;
}
while (yen >= 100);
// りんごの最大個数を出力する
printf("%i\n", apple);
}
最後に
実際の問題はこちらです。
実際の開発現場では、do-whileはあまり使われずwhileを使うことが多いようですが、今回の課題を通して両者の違いがよくわかりました。
実際に手を動かしながら勉強すると、理解度も深まる気がします。