C プログラミング (C Programming)

[2017/10/18, H.Aman]
[← 演習のページへ戻る]

サンプルプログラム 4 の内容

整数 n を読み込み,* を n 個表示する.
ただし,10 個出力するたびに改行を入れる.
 1:   #include <stdio.h>
 2:  	
 3:   int main(void){
 4: 	 int n, k;
 5:
 6:      printf("整数を一つ入力してください:");
 7:      scanf("%d", &n);
 8:
 9:      k = 1;
10:      while ( k <= n ){
11:         printf("*");
12:         if ( k % 10 == 0 ){
13:            printf("\n");
14:         }
15:         k++;
16:      }         
17:
18:      printf("\n");
19:
20:      return 0;
21:   }

9,10-16 行目: k = 1; while ( k <= n ){ ... }

 7:      scanf("%d", &n);
 8:
 9:      k = 1;
10:      while ( k <= n ){
11:         printf("*");
12:         if ( k % 10 == 0 ){
13:            printf("\n");
14:         }
15:         k++;
16:      }
17:
18:      printf("\n");

サンプルプログラム 4 では,変数 k に「何個目の * を出力しようとしているか」を記録しておき,この値を調べることで繰り返しを行っています.

そのため,
  • 9 行目でまず,初期値として k に 1 を代入しておき,
  • 10 行目で k <= n ならば 11-15 行目の処理を繰り返すということにして,
  • 15 行目(繰り返しの最後)で k の値をインクリメント(+1)しています.

11 行目: printf("*");

 7:      scanf("%d", &n);
 8:
 9:      k = 1;
10:      while ( k <= n ){
11:         printf("*");
12:         if ( k % 10 == 0 ){
13:            printf("\n");
14:         }
15:         k++;
16:      }
17:
18:      printf("\n");

記号 * の出力は単純で,11 行目のように printf で 指定するだけです.
ただし,出力のたびに改行するわけではないので,\n は書きません

12-14 行目: if ( k % 10 == 0 ){ ... }

 7:      scanf("%d", &n);
 8:
 9:      k = 1;
10:      while ( k <= n ){
11:         printf("*");
12:         if ( k % 10 == 0 ){
13:            printf("\n");
14:         }
15:         k++;
16:      }
17:
18:      printf("\n");

このサンプルプログラムでは「10 個ごとに改行」することになっています.
そのため,k が 10 の倍数であるとき,つまり,k が 10 で割り切れるときにのみ改行文字 \n を出力します.

18 行目: printf("\n");

10:      while ( k <= n ){
11:         printf("*");
12:         if ( k % 10 == 0 ){
13:            printf("\n");
14:         }
15:         k++;
16:      }
17:
18:      printf("\n");
19:
20:      return 0;

while 文での繰り返しが終わった後に,再度,改行文字を出力していますが, これは n が 10 の倍数でなかった場合は,改行を行わないままプログラムの実行が終わってしまって表示が見にくくなるのを防ぐためのものです.