[← 演習のページへ戻る]
サンプルプログラム 3 の内容掛け算九九の表を表示する.1: #include <stdio.h> 2: 3: int main(void){ 4: int i, j; 5: 6: for ( i = 1; i <= 9; i++ ){ 7: for ( j = 1; j <= 9; j++ ){ 8: printf("%3d", i*j); 9: } 10: printf("\n"); 11: } 12: 13: return 0; 14: } プログラムの基本的な考え方掛け算九九の表は,1 から 9 までの自然数の掛け算の組合せをすべて表示したものです.このサンプルプログラムの場合は,特に入力は必要なく,9 行 9 列のかたちで二つの自然数の積を表示するだけになっています. ここでは,i と j という二つの変数(int 型)を用意しておき,i と j の値をそれぞれ 1 から 9 まで変化させながら i*j の値を printf で表示しています. ポイントとしては,i を制御変数とした for 文の内側に別の for 文(j を制御変数としたもの)が入っているというところです. まず,外側の i を使った for 文での 1 回目のターン(i=1)の中で内側の j を使った for 文が動作しますので, i = 1 の状態で j = 1, 2, ...., 9 と変化しながら i*j の値を printf で表示します. つまり,1*1, 1*2, 1*3, ..., 1*9 が計算され,結果が表示されます.
1 2 3 4 5 6 7 8 9
その後,改行文字を出力し,i の for 文での次のターン(i=2)に入ります. そこでも同様の処理を行います. つまり,2*1, 2*2, 2*3, ..., 2*9 が計算され,結果が表示されます.
1 2 3 4 5 6 7 8 9 (改行\n)
2 4 6 8 10 12 14 16 18
以下同様です.
8 行目: printf("%3d", i*j);6: for ( i = 1; i <= 9; i++ ){ 7: for ( j = 1; j <= 9; j++ ){ 8: printf("%3d", i*j); 9: } 10: printf("\n"); 11: }単純に計算結果を表示するだけであれば printf("%d", i*j); でも構わないのですが, 表のかたちで列を揃えて表示させるため,表示幅をあえて指定して printf("%3d", i*j); としています. 掛け算九九の場合,最大値は 81 であるため,3 桁分の幅をとるようにすれば全ての出力位置が揃います. ※もしも 2 桁分しかとらなかったとすると,隣り合う数字がくっついてしまいます("16 18" ではなく "1618" 等になる). 10 行目: printf("\n");6: for ( i = 1; i <= 9; i++ ){ 7: for ( j = 1; j <= 9; j++ ){ 8: printf("%3d", i*j); 9: } 10: printf("\n"); 11: }既に説明したように,内側の j を使った for 文で 1 行文(9 個の計算結果)の出力が作られますが,そのままでは次のターンで右に出力が続いてしまい表のかたちになりません. 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 ...内側の j を使った for 文が終わるたびに,いったん改行文字を出力する必要があります. 1 2 3 4 5 6 7 8 9(改行\n) 2 4 6 8 10 12 14 16 18(改行\n) 3 6 ... |