1. while文の記述方法
while文は、繰り返し構造を実現するための基本的な制御文です。ループに入る前に条件をチェックする前判定で条件を評価し、条件が満たされている間だけ処理を繰り返します。条件が満たされなくなると、繰り返しを終了し、次の処理に進みます。
【書き方】
while (継続条件式) {
文;
}
- 継続条件が真である間、文を繰り返し実行。
- 継続条件式がはじめから偽の場合は一度も実行されない。
- 文は複合文({}で囲んだ文の集合)も可。
- 単文の場合には { } は省略可能。

while文の使用例 サンプルプログラム
// 配列要素を-1まで表示する
#include <stdio.h>
int main(void)
{
int i;
int a[] = {1300, 4320, 985, 2130, -1}; // -1でループ終了
i = 0;
while (a[i] != -1) { // a[i]が-1でない間ループ
printf("%d\n", a[i]);
i++;
}
return 0;
}
【実行結果例】
1300
4320
985
2130
2. while文とfor文の比較
- for文も while文も共に反復制御を行うが、一般に for文は「○回処理を繰り返す」ときに使用し、while文は「~の間処理を繰り返す」ときに使用する。
- ただし、while文を用いても「○回処理を繰り返す」という制御は可能である。(以下の例を参考のこと)
while文の例
// while文を用いて10回処理を繰り返す
#include <stdio.h>
int main(void)
{
int a = 0; // 初期設定式
while (a < 10) { // 継続条件式
printf("%2d ", a);
a++; // 再設定式
}
printf("\n");
return 0;
}
for文の例
// for文を用いて10回処理を繰り返す
#include <stdio.h>
int main(void)
{
// 初期設定式; 継続条件式; 再設定式
for (int a = 0; a < 10; a++) {
printf("%2d ", a);
}
printf("\n");
return 0;
}
【実行結果例】
0 1 2 3 4 5 6 7 8 9
〇 演習問題
問1
while 文を用いてプログラムを作成しなさい。

【実行結果例】
総和 = 5050
問2
while 文を用いてプログラムを作成しなさい。

【実行結果例】
整数値入力 > 3
wa = 3
整数値入力 > 5
wa = 8
整数値入力 > 8
wa = 16
整数値入力 > 0
※ 水色文字はキーボードからの入力
問3
scanf関数を用いて同じ長さの文字列を2つ入力しなさい。
この2つの文字列が同じ文字列ならば、「等しい文字列を入力」と画面表示し、 異なるならば、「異なる文字列を入力」と画面表示しなさい。
【実行結果例】
同じ長さの文字列を2つ入力しなさい
abcde
abcde
等しい文字列を入力
※ 水色文字はキーボードからの入力
問4
0~9 までの数字を、0 から1個ずつ増やしながら 10行表示しなさい。
【実行結果例】
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
解答例
// 問1
#include <stdio.h>
int main(void)
{
int wa, i;
wa = 0;
i = 1;
while (i <= 100) {
wa = wa + i;
i++;
}
printf("総和 = %d\n", wa);
return 0;
}
// 問2
#include <stdio.h>
int main(void)
{
int wa, data;
wa = 0;
printf("整数値入力 > ");
scanf("%d", &data);
while (data != 0) {
wa = wa + data;
printf("wa = %d\n", wa);
printf("整数値入力 > ");
scanf("%d", &data);
}
return 0;
}
// 問3
#include <stdio.h>
int main(void)
{
char str1[100], str2[100];
int flg = 0;
int i = 0;
printf("同じ長さの文字列を2つ入力しなさい\n");
scanf("%99s", str1 );
scanf("%99s", str2 );
while (str1[i] != '\0') {
if (str1[i] != str2[i]) {
flg++; // 異なる場合チェック
}
i++;
}
if (flg == 0) {
printf("等しい文字列を入力\n");
}
else {
printf("異なる文字列を入力\n");
}
return 0;
}
// ※このプログラムは、同じ長さの文字列を入力しないと正しい判定はできません。
// 問4
#include <stdio.h>
int main(void)
{
int n = 0;
while (n < 10) {
int i = 0;
while (i <= n) {
printf("%d", i);
i++;
}
printf("\n");
n++;
}
return 0;
}
コメント