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

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

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

指定されたかたちの等差数列(初項,公差,項数を指定)を表示する.
 1:   #include <stdio.h>
 2:  	
 3:   int main(void){
 4:      int a, d, k, n, x;
 5: 
 6:      printf("初項:");
 7:      scanf("%d", &a);
 8:
 9:      printf("公差:");
10:      scanf("%d", &d);
11:
12:      printf("項数:");
13:      scanf("%d", &n);
14:
15:      x = a;
16:      for ( k = 1; k <= n; k++ ){
17:         printf("第 %d 項 = %d\n", k, x);
18:         x += d;
19:      }
20:  
21:      return 0;
22:   }

プログラムの基本的な考え方

ここでは, 初項が a,公差が d,項数が n の等差数列を単純に表示させることを考えています.
そこでまずは,scanf を使ってこれら三つの情報(整数)を入力します.

次に,「これから出力する(次の)項」を変数 x で表すことにし, for 文を使って出力を n 回繰り返すということを行います.

ただし,1 回出力するたびに,次に出力する項を(公差が d なので) d だけプラスした値にしておく必要があります.

例えば,a = 5, d = 3, n = 4 の場合:
第 1 項 第 2 項 第 3 項 第 4 項
x = 5 (=a) 8 11 14
+3 +3 +3

15 行目: x = a;

15:      x = a;
16:      for ( k = 1; k <= n; k++ ){
17:         printf("第 %d 項 = %d\n", k, x);
18:         x += d;
19:      }
20:

この時点ではまだ何も出力していません.
つまり,「これから(次に)出力する項」 x は初項(第 1 項)ということになりますので, ひとまず x = a; としておきます.

16-19 行目: for ( k = 1; k <= n; k++ ){ ... }

15:      x = a;
16:      for ( k = 1; k <= n; k++ ){
17:         printf("第 %d 項 = %d\n", k, x);
18:         x += d;
19:      }
20:

これから n 個の項を出力することになりますので, k を制御変数(「これから k 番目の項を出力する」という意味に対応)とした for 文による繰り返し構造を用意します.

17, 18 行目: printf("第 %d 項 = %d\n", k, x); x += d;

15:      x = a;
16:      for ( k = 1; k <= n; k++ ){
17:         printf("第 %d 項 = %d\n", k, x);
18:         x += d;
19:      }
20:

第 k 項の値として x を出力します.
1 回目は k = 1 であり,x = a ですので,単純に初項が出力されます.
その後, x += d が実行されますので,x の値が +d されます.これが次の項(第 2 項)の値になります.

後は同じことの繰り返しになりますので,k = 2 のターンでは,その時点で用意されていた x の値が出力され, k = 3 のターンに備えて x の値がさらに +d されるということになります.