1. 基本的な for文
for文は、繰り返し回数があらかじめ決まっている場合に便利な制御文です。初期設定式、継続条件式、再設定式を1つの行にまとめて記述できるため、コードがすっきりと読みやすくなります。
(1) for文の記述方法
【書き方】
for (初期設定式; 継続条件式; 再設定式) {
文;
}
- 文は複合文も可。
- 複数行の文の場合には { } で囲み複合文に。単文の場合には{ }は省略可能。
- 再設定式の後に「;」は入れてはいけない。
【フローチャート】

// 例
for (int i = 1; i <= 5; i++) {
printf("i = %d\n", i);
}
【実行結果例】
i = 1
i = 2
i = 3
i = 4
i = 5

- 初期設定式は通常の代入文を記述。
- 継続条件式はこの式が真の間、ループを続けるという意味。「~の間」であって、「~まで」ではないので注意。
- 再設定式には「i++」ばかりではなく、 「i–」や「i = i + 2」などいろいろな値をとることが可能。
- ループ変数(使用例では i)は int型以外にも char型や double型なども可能。
(2) for文のいろいろなパターン
// 複合文の例
int sum = 0;
int mul = 1;
for(int i = 1; i <= 10; i++) {
sum = sum + i;
mul = mul * i;
printf("sum = %d, mul = %d\n", sum, mul);
}
【実行結果例】
sum = 1, mul = 1
sum = 3, mul = 2
sum = 6, mul = 6
sum = 10, mul = 24
sum = 15, mul = 120
sum = 21, mul = 720
sum = 28, mul = 5040
sum = 36, mul = 40320
sum = 45, mul = 362880
sum = 55, mul = 3628800
10 から 20 まで 2刻み
int sum = 0;
int mul = 1;
for(int i = 10; i <= 20; i += 2) {
sum = sum + i;
mul = mul * i;
printf("sum = %d, mul = %d\n", sum, mul);
}
【実行結果例】
sum = 10, mul = 10
sum = 22, mul = 120
sum = 36, mul = 1680
sum = 52, mul = 26880
sum = 70, mul = 483840
sum = 90, mul = 9676800
20 から 10 まで -2刻み
int sum = 0;
int mul = 1;
for(int i = 20; i >= 10; i -= 2) {
sum = sum + i;
mul = mul * i;
printf("sum = %d, mul = %d\n", sum, mul);
}
【実行結果例】
sum = 20, mul = 20
sum = 38, mul = 360
sum = 54, mul = 5760
sum = 68, mul = 80640
sum = 80, mul = 967680
sum = 90, mul = 9676800
ループ変数が浮動小数点数の例
for (double x = 0.1; x <= 2.0; x += 0.1)
printf("%.1f\n", x);
【実行結果例】
0.1
0.2
0.3
(中略)
1.7
1.8
1.9 <— 演算誤差のため x = 2.0 が表示されない
// 改良例
for (int i = 1; i <= 20; i++) // ループ変数を整数型にする
printf("%.1f\n", i / 10.0); // 出力時にxを10.0で割る
【実行結果例】
0.1
0.2
0.3
(中略)
1.7
1.8
1.9
2.0 <— 2.0 も表示される
ループ変数が文字の場合
for(char ch = 'A'; ch <= 'Z'; ch++)
printf("%c ", ch);
printf("\n");
【実行結果例】
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
※ 文字コードはASCIIとする
配列の添字をカウントアップする例
int data1[10], data2[10];
for(int i = 0; i < 10; i++) {
data1[i] = i;
data2[i] = data1[i] * 2;
printf("data1[%d] = %d, data2[%d] = %d\n", i, data1[i], i, data2[i]);
}
【実行結果例】
data1[0] = 0, data2[0] = 0
data1[1] = 1, data2[1] = 2
data1[2] = 2, data2[2] = 4
data1[3] = 3, data2[3] = 6
data1[4] = 4, data2[4] = 8
data1[5] = 5, data2[5] = 10
data1[6] = 6, data2[6] = 12
data1[7] = 7, data2[7] = 14
data1[8] = 8, data2[8] = 16
data1[9] = 9, data2[9] = 18
〇 演習問題
次のフローチャートに基づいてプログラムを作成しなさい。
問1

【実行結果例】
総和=5050
問2

【実行結果例】
a[]= 0 2 4 6 8
問3

【実行結果例】
100 は 100 で割り切れる
100 は 50 で割り切れる
100 は 25 で割り切れる
100 は 20 で割り切れる
100 は 10 で割り切れる
100 は 5 で割り切れる
100 は 4 で割り切れる
100 は 2 で割り切れる
100 は 1 で割り切れる
解答例
// 問1
#include <stdio.h>
int main(void)
{
int wa = 0;
for (int i = 1; i <= 100; i++) {
wa = wa + i;
}
printf("総和 = %d\n", wa);
return 0;
}
// 問2
#include <stdio.h>
int main(void)
{
int a[5];
printf("a[]=");
for (int i = 0; i < 5; i++) {
a[i] = i * 2;
printf(" %d", a[i]);
}
printf("\n");
return 0;
}
// 問3
#include <stdio.h>
int main( void )
{
int amari;
for (int i = 100; i >= 1; i--) {
amari = 100 % i;
if (amari == 0) {
printf("100は%dで割り切れる\n", i);
}
}
return 0;
}
2. for文の多重ループ
forループの中に複数の forループが入る形です。特に、forループの中に1つのforループが入るものを「for文の二重ループ」と呼びます。
(1) for文の二重ループの記述方法
【書き方】
for (初期設定式1; 継続条件式1; 再設定式1) {
for (初期設定式2; 継続条件式2; 再設定式2) {
文;
}
}
- forループ1 の中で forループ2 が繰り返されることに注意。
- つまり、forループ1 の 1回の処理に対して、forループ2 は最後まで回りきる。
【フローチャート】

// *10個を5回表示する例
#include <stdio.h>
int main(void)
{
// <ループ1> 改行しながらループ2を5回繰り返す
for (int n = 1; n <= 5; n++) {
// <ループ2> *を10個横方向に表示
for (int i = 1; i <= 10; i++) {
printf("*");
}
printf("\n");
}
return 0;
}
【実行結果例】
********** ********** ********** ********** **********
〇 演習問題
問1
次のフローチャートに基づいてプログラムを作成しなさい。

【実行結果例】
* ** *** **** ***** ****** ******* ******** ********* **********
問2
0~9 までの数字を、0 から1個ずつ増やしながら 10行表示しなさい。
ただし、for文を二重に用いて表示すること。
【実行結果例】
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
問3
実行結果例のようになるように、九九の表を for文の二重ループを用いて作成しなさい。
【実行結果例】
* * * 九九 * * * | 1 2 3 4 5 6 7 8 9 -------------------------------- 1 | 1 2 3 4 5 6 7 8 9 2 | 2 4 6 8 10 12 14 16 18 3 | 3 6 9 12 15 18 21 24 27 4 | 4 8 12 16 20 24 28 32 36 5 | 5 10 15 20 25 30 35 40 45 6 | 6 12 18 24 30 36 42 48 54 7 | 7 14 21 28 35 42 49 56 63 8 | 8 16 24 32 40 48 56 64 72 9 | 9 18 27 36 45 54 63 72 81
解答例
// 問1
#include <stdio.h>
int main(void)
{
for (int n = 0; n < 10; n++) {
for (int i = 0; i <= n; i++) {
printf("*");
}
printf("\n");
}
return 0;
}
// 問2
#include <stdio.h>
int main(void)
{
for (int n = 0; n < 10; n++) {
for (int i = 0; i <= n; i++) {
printf("%d", i);
}
printf("\n");
}
return 0;
}
// 問3
#include <stdio.h>
int main(void)
{
// タイトル出力
printf("\n * * * 九九 * * *\n");
printf(" |");
for (int i = 1; i <= 9; i++) { // 上部の数字
printf("%3d", i);
}
printf("\n--------------------------------\n");
// 九九の出力
for (int x = 1; x <= 9; x++) {
printf("%d |", x); // 左の数字
for (int y = 1; y <= 9; y++) {
printf("%3d", x * y); // 九九
}
printf("\n");
}
return 0;
}
コメント