プログラムの構造

文は主に宣言文実行文に分類されます。宣言文は、型と変数名に対応したメモリ領域の確保を行い、実行文は計算式などの処理を行います。実行文は以下の3つの文に分類されます。

  • 単純文は;(セミコロン)で終了する1つの命令文です。
  • 複合文は中に複数の文を含む{ }で定義され、ブロックとも呼ばれます。
  • 構造文はif文、for文などの制御構造です。条件式などが書かれる( )の直後の文には1つの実行文を含めることができます。

ある実行文の中に別のを"入れ子構造"で含めることができます。たとえば、if文の中にさらにif文やfor文などを含めたり、for文の中にさらにif文やwhile文などを含めることができます。

アルゴリズム(問題を解く手順)を組み立てることを考えると、プログラムは以下の構造を持つブロックで構成されます。

  1. 連結. 順番に実行される文やメソッドの並び
  2. 選択. 条件によって異なる処理を行う分岐構造(if文など)
  3. 反復. 条件によって処理を反復する繰返し構造(for文など)
  4. 1. 2. 3. の組み合わせと入れ子構造

たとえば、次のプログラムはfor文による2重ループにより九九の表を出力します。

for (let i = 1; i <= 9; i++) {
    for (let j = 1; j <= 9; j++) {        // i の段を横1列に出力する
        let val = i * j;
        if (val < 10) {                   // 1桁の場合は空白を入れて調整
            process.stdout.write(" ");
        }
        process.stdout.write(" " + val);
    }
    console.log();                        // i の段の出力を終えて改行
}

出力結果:

  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  

出力にprocess.stdout.writeを用いていますが、これは感覚的にはconsole.logの出力から改行を抜いたものです。 しかし、console.logは デバッグやコンソールへの出力に対し、process.stdout.writeは標準出力への出力という大きな違いがあります。 この違いを意識しながら出力するようにしましょう。 また、process.stdout.writeで出力できるのは文字列で、数値では出力できない点に注意しましょう。(今回の出力の" " + valで考えると、valは数値ですが、空白文字との連結なのでvalは自動で文字列に変更されています。)


Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。