みなためラボ

【C言語】九九の表(配列)を表示するプログラム

文字サイズ

はじめに

どうも! みなため(@MinatameT)です。

この記事をご覧になっている大半の方は、学校の課題がわからない……という状況だと思います。でも、安心してください。

ここでは、「九九の表(配列)をC言語で表示するための考え方」と、「そのプログラミング例」を紹介します。

それでは、まずは考え方から見ていきます。

配列を使った九九の表の考え方

配列を使いますよ!

まず、九九の表をイメージしてください。ここでは、次のような実行結果を想定します。

   1   2   3   4   5   6   7   8   9
   2   4   6   8  10  12  14  16  18
   3   6   9  12  15  18  21  24  27
   4   8  12  16  20  24  28  32  36
   5  10  15  20  25  30  35  40  45
   6  12  18  24  30  36  42  48  54
   7  14  21  28  35  42  49  56  63
   8  16  24  32  40  48  56  64  72
   9  18  27  36  45  54  63  72  81

読むときは、英文のように「左から右へ(1行ずつ)」読んでいきます。

それでは、ソースコードの設計を考えていきましょう。プログラミングにスムーズに移れるように、掛け算の記号は*(アスタリスク)で表します。

1の段を考えます。

1*1 = 1
1*2 = 2
1*3 = 3
(中略)
1*9 = 9

ここで、変数を使って考えます。a*b = ans[e] としましょう。a*bの結果を配列ansのe番めに代入するイメージです。ただし、配列番号は0番スタートです。1番スタートではないので、注意してください!

1の段で考えると……

a = 1
b = 1
e = 0
ans[e] = ans[0] = a*b = 1*1 = 1

a = 1
b = 2
e = 1
ans[e] = ans[1] = a*b = 1*2 = 2

a = 1
b = 3
e = 2
ans[e] = ans[2] = a*b = 1*3 = 3

(中略)

a = 1
b = 9
e = 8
ans[e] = ans[8] = a*b = 1*9 = 9

となります。ここで、「ある規則性」に気づけるかどうかが重要です。

その答えは、aの値は固定で、bの値とeの値が1ずつ増えていっているということです。

ここまでは大丈夫でしょうか……?

次に、2の段を考えますが、1の段が終わった時点で改行する必要があります。そうしなければ、

   1   2   3   4   5   6   7   8   9   2   4   6   8  10  12  14  16  18   3   6   9  12  15  18  21  24  27   4   8  12  16  20  24  28  32  36   5  10  15  20  25  30  35  40  45   6  12  18  24  30  36  42  48  54   7  14  21  28  35  42  49  56  63   8  16  24  32  40  48  56  64  72   9  18  27  36  45  54  63  72  81

といった感じで、表の機能がなくなってしまいます。ですから、改行させましょう。

改行させたら、2の段を考えます。

a = 2
b = 1
e = 9
ans[e] = ans[9] = a*b = 2*1 = 2

a = 2
b = 2
e = 10
ans[e] = ans[10] = a*b = 2*2 = 4

a = 2
b = 3
e = 11
ans[e] = ans[11] = a*b = 2*3 = 6

(中略)

a = 2
b = 9
e = 17
ans[e] = ans[17] = a*b = 2*9 = 18

ここで「ある規則性」を考えてみてください。

答えは、2の段になったことでaの値が2になり、bの値が1にリセットされたことと、eの値はリセットされていないことです。それと、 aの値は固定で、bの値とeの値が1ずつ増えていっているということです。

こうした規則性が、9の段まで続くわけです。それでは、この規則性をループ文(for文)で考えていければOKです。

ポイント
  • aの値が1から9まで増えていく1つめのfor文(初期値:a = 1)を作る。
  • 1つめのfor文の中に、bとeの値が1から9まで増えていく2つめのfor文(初期値:b = 1)を作る。
  • 2つめのfor文の中に、a*bの結果を配列ansに代入する式と、その結果を表示するprintf文を記述する。
  • 2つめのfor文の直後に、改行文字(\n)を入れる。

上記のことが理解できれば、完成は目前です!

おまたせしました。それでは、ソースコードと実行結果を確認していきます。

九九の表(配列)を表示するプログラムの例

ソースコード

#include<stdio.h>

int main(void)
{
  int ans[81]; //掛け算の結果が入る配列
  int e; //配列ansの要素番号
  int a,b; //a×bのaとb

  e = 0; //初期値(忘れるとエラーの原因になるので注意!)

  for(a=1; a<=9; a=a+1)
  {
    for(b=1; b<=9; b=b+1,e=e+1)
    {
      ans[e] = a*b; //掛け算する。
      printf("%4d",ans[e]); //半角4つ分のスペースに結果表示。
    }
    printf("\n"); //1つの段がすべて終わった後に改行する。
  }
	
  return(0);
}

エラー回避のため、変数には初期値を与えてください。なぜなら、int e; のように変数を宣言したとき、変数にどのような値が入っていてもおかしくないからです。とんでもなく大きな数値が入っている場合もあります。

実は、for文の第3引数には、b=b+1,e=e+1のように、式を複数入れることができます。ループ終了時に+1したい変数が2つあるのなら、カンマ(,)で区切ってまとめて記述すると良いですね。

printf文の「%4d」は、半角4つ分のスペースを確保して整数を表示するということです。ですから、%3dなら半角3つ分、%8dなら半角8つ分になります。よければ、各自でチェックしてみてください。

それでは実行結果を確認していきます。

実行結果

   1   2   3   4   5   6   7   8   9
   2   4   6   8  10  12  14  16  18
   3   6   9  12  15  18  21  24  27
   4   8  12  16  20  24  28  32  36
   5  10  15  20  25  30  35  40  45
   6  12  18  24  30  36  42  48  54
   7  14  21  28  35  42  49  56  63
   8  16  24  32  40  48  56  64  72
   9  18  27  36  45  54  63  72  81

このように、九九の表が見事に表示されました!

ただ、この場合は配列を使う必要がないのですが、配列に1の段から9の段までの積(掛け算の結果)を順番に代入する……という配列の勉強にはなったと思います。

また、while文を使う場合もあるようですが、for文が理解できているのならwhile文をわざわざ使う必要はありません。私はfor文で十分だと思います。

今回は長くなりましたが、理解していただけましたでしょうか? とにかく、皆さん、お疲れ様でした。


 

みなためじゃんけん

このコーナーは、私と擬似的にじゃんけんできるコーナーです。

みなためじゃんけん、じゃんけんぽん!

私が出したのは……





チョキ

チョキでした! グーの勝利です!



この記事をSNSでシェアする

プログラミングカテゴリーの最新記事(5件)

最新記事(10件)

管理人のTwitter

内部リンク集