条件が真である限り処理を繰り返す while 文を学ぶ。
繰り返し処理はプログラムの真骨頂で、コンピュータが最も得意なことのひとつ。
while (条件式) {
/* 条件が真の間、繰り返される処理 */
}
条件式が真(0以外)の間、ブロック内の処理を繰り返す。
条件式が偽(0)になった時点でループを抜ける。
#include <stdio.h>
int main(void)
{
int i = 1; /* ① 初期化 */
while (i <= 3) { /* ② 条件式 */
printf("%d回目\n", i);
i++; /* ③ 更新 */
}
return 0;
}
1回目 2回目 3回目
③の更新処理を忘れると、条件式が永遠に真のままになり無限ループになる。
int i = 1;
while (i < 3) {
printf("%d\n", i);
/* i++ を忘れた → 永遠に 1 を出力し続ける */
}
#include <stdio.h>
int main(void)
{
int i = 1;
while (i <= 5) {
printf("%d ", i);
i++;
}
printf("\n");
return 0;
}
1 2 3 4 5
#include <stdio.h>
int main(void)
{
int i = 5;
while (i >= 1) {
printf("%d ", i);
i--;
}
printf("\n");
return 0;
}
5 4 3 2 1
#include <stdio.h>
int main(void)
{
int i = 1;
int sum = 0; /* 合計を入れる変数は必ず 0 で初期化 */
while (i <= 10) {
sum += i; /* sum = sum + i と同じ */
i++;
}
printf("1〜10の合計 = %d\n", sum);
return 0;
}
1〜10の合計 = 55
ループの中に if 文を入れることで、条件を満たすものだけを処理できる。
#include <stdio.h>
int main(void)
{
int i = 1;
while (i <= 10) {
if (i % 2 == 0) { /* 偶数のときだけ表示 */
printf("%d ", i);
}
i++;
}
printf("\n");
return 0;
}
2 4 6 8 10
整数 N を入力して、1 から N までの整数を1行ずつ表示するプログラムを作れ。
#include <stdio.h>
int main(void)
{
int n, i;
printf("N を入力してください: ");
scanf("%d", &n);
/* ここに while 文を書く */
return 0;
}
#include <stdio.h>
int main(void)
{
int n, i;
printf("N を入力してください: ");
scanf("%d", &n);
i = 1;
while (i <= n) {
printf("%d\n", i);
i++;
}
return 0;
}
整数 N を入力して、1 から N までの合計を表示するプログラムを作れ。
#include <stdio.h>
int main(void)
{
int n, i, sum;
printf("N を入力してください: ");
scanf("%d", &n);
/* ここに while 文を書く */
return 0;
}
#include <stdio.h>
int main(void)
{
int n, i, sum;
printf("N を入力してください: ");
scanf("%d", &n);
i = 1;
sum = 0;
while (i <= n) {
sum += i;
i++;
}
printf("1〜%d の合計 = %d\n", n, sum);
return 0;
}
Q1. 次のコードの出力として正しいものはどれか。
int i = 0;
while (i < 3) {
printf("Hello\n");
i++;
}
正解:ウ
i = 0, 1, 2 の3回、条件 i < 3 が真になる。
Q2. 次のコードはどうなるか。
int i = 1;
while (i < 3) {
printf("%d\n", i);
/* i の更新なし */
}
正解:エ
i が変化しないため条件が常に真のまま。無限ループになる。
Q3. 次のコードで sum の最終値はどれか。
int i = 1, sum = 0;
while (i <= 4) {
sum += i;
i++;
}
正解:ウ
1 + 2 + 3 + 4 = 10
Q4. 次のコードで最初に表示される数はどれか。
int i = 5;
while (i < 3) {
printf("%d\n", i);
i++;
}
正解:エ
i = 5 は最初から条件 i < 3 を満たさないので、1回も実行されない。