while 文の「初期化・条件・更新」を1行でまとめて書ける for 文を学ぶ。
回数が決まっている繰り返しには for 文が適している。
for (初期化; 条件式; 更新処理) {
/* 繰り返したい処理 */
}
| 部分 | 役割 | 例 |
|---|---|---|
| 初期化 | ループ開始前に1回だけ実行 | i = 1 |
| 条件式 | 各ループ開始前に評価。偽になったら終了 | i <= 3 |
| 更新処理 | 各ループの最後に実行 | i++ |
/* while 文で書いた場合 */ /* for 文で書いた場合 */
int i = 1; for (i = 1; i <= 3; i++) {
while (i <= 3) { printf("%d回目\n", i);
printf("%d回目\n", i); }
i++;
}
同じ動作をより簡潔に書けるのが for 文の利点。
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 3; i++) {
printf("%d回目\n", i);
}
return 0;
}
1回目 2回目 3回目
#include <stdio.h>
int main(void)
{
int i, sum = 0;
for (i = 1; i <= 10; i++) {
sum += i;
}
printf("1〜10の合計 = %d\n", sum);
return 0;
}
1〜10の合計 = 55
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 10; i++) {
if (i % 2 != 0) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
1 3 5 7 9
for 文の中に for 文を書くことができる。
外側のループが1回進むたびに、内側のループが最初からすべて実行される。
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 2; i++) {
for (j = 1; j <= 3; j++) {
printf("(%d, %d)\n", i, j);
}
}
return 0;
}
(1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3)
整数 N を入力して、1 から N までの合計を表示するプログラムを作れ。
#include <stdio.h>
int main(void)
{
int n, i, sum = 0;
printf("N を入力してください: ");
scanf("%d", &n);
/* ここに for 文を書く */
printf("1〜%d の合計 = %d\n", n, sum);
return 0;
}
for (i = 1; i <= n; i++) {
sum += i;
}
「2 × 1 = 2」〜「2 × 9 = 18」を表示するプログラムを作れ。
#include <stdio.h>
int main(void)
{
int i;
/* ここに for 文を書く */
return 0;
}
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 9; i++) {
printf("2 × %d = %d\n", i, 2 * i);
}
return 0;
}
1の段〜9の段の九九を全部表示するプログラムを作れ。
表示形式:3 × 4 = 12
#include <stdio.h>
int main(void)
{
int i, j;
/* ここに二重 for 文を書く */
return 0;
}
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
printf("%d × %d = %d\n", i, j, i * j);
}
}
return 0;
}
Q1. 次のコードで「Hello」が出力される回数はどれか。
int i;
for (i = 0; i < 3; i++) {
printf("Hello\n");
}
正解:ウ
i = 0, 1, 2 の3回、条件 i < 3 が真になる。
Q2. 次のコードの出力として正しいものはどれか。
int i;
for (i = 10; i < 3; i++) {
printf("%d\n", i);
}
正解:エ
初期値 i = 10 の時点で条件 i < 3 が偽なので、1回も実行されない。
Q3. 次の二重ループで出力される行数はどれか。
int i, j;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 4; j++) {
printf("(%d,%d)\n", i, j);
}
}
正解:ウ
外側3回 × 内側4回 = 12回出力される。
Q4. for 文と while 文の説明として正しいものはどれか。
正解:イ
for 文は while 文の定番パターン(初期化・条件・更新)を1行にまとめた書き方。速度差はなく、できることも同じ。