[← 演習のページへ戻る]
サンプルプログラム 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 の場合:
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 されるということになります. |