Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

【C言語】中空のピラミッドとダイヤモンド模様を出力するプログラム

C言語では、塗りつぶし型(ソリッド)のピラミッドパターンは比較的簡単に生成できますが、中空(輪郭のみ)のパターンにするには少し工夫が必要です。この記事では、中空ピラミッドと中空ダイヤモンドの2種類のパターンを生成する方法を、サンプルコードと実行結果とあわせてわかりやすく解説します。

中空ピラミッドのパターン

中空ピラミッドでは、最初の行に星(*)を1つだけ表示し、最後の行(n行目)にはn個の星を連続して表示します。それ以外の行では、行の先頭と末尾にちょうど2つの星を配置し、その間はすべて空白で埋めます。

サンプルコード

#include <stdio.h>
int main() {
    int n, i, j;
    printf("Enter number of lines: ");
    scanf("%d", &n);
    for(i = 1; i<=n; i++) {
        for(j = 1; j<=(n-i); j++) { // 星の前に空白を出力
            printf(" ");
        }
        if(i == 1 || i == n) { // 最初と最後の行は星を連続出力
            for(j = 1; j<=i; j++) {
                printf("* ");
            }
        } else {
            printf("*"); // 各行の先頭と末尾に星を出力
            for(j = 1; j<=2*i-3; j++) { // 中空にするための空白を出力
                printf(" ");
            }
            printf("*");
        }
        printf("\n");
    }
}

実行結果

Enter number of lines: 20
                   *
                  * *
                 *   *
                *     *
               *       *
              *         *
             *           *
            *             *
           *               *
          *                 *
         *                   *
        *                     *
       *                       *
      *                         *
     *                           *
    *                             *
   *                               *
  *                                 *
 *                                   *
* * * * * * * * * * * * * * * * * * * *

中空ダイヤモンドのパターン

中空ダイヤモンドでは、最初の行と最後の行に星を1つずつ表示します。それ以外の行では、行の先頭と末尾に2つの星を配置し、その間を空白で埋めます。ダイヤモンドは上半分下半分の2つの部分で構成されており、上半分では空白の数を増やしながら幅を広げ、下半分では逆に空白の数を減らしながら幅を狭めていきます。プログラムでは、midという補助変数を使って行番号を上下の2つの部分に分割して処理します。なお、入力された行数nが奇数だった場合は、1を加えて偶数に調整しています。

サンプルコード

#include <stdio.h>
int main() {
    int n, i, j, mid;
    printf("Enter number of lines: ");
    scanf("%d", &n);
    if(n % 2 == 1) { // nが奇数の場合は1を加えて偶数にする
        n++;
    }
    mid = (n / 2);
    for(i = 1; i<= mid; i++) { // ダイヤモンドの上半分
        for(j = 1; j<=(mid-i); j++) { // 星の前に空白を出力
            printf(" ");
        }
        if(i == 1) {
            printf("*");
        } else {
            printf("*"); // 各行の先頭と末尾に星を出力
            for(j = 1; j<=2*i-3; j++) { // 中空にするための空白を出力
                printf(" ");
            }
            printf("*");
        }
        printf("\n");
    }
    for(i = mid+1; i<n; i++) { // ダイヤモンドの下半分
        for(j = 1; j<=i-mid; j++) { // 星の前に空白を出力
            printf(" ");
        }
        if(i == n-1) {
            printf("*");
        } else {
            printf("*"); // 各行の先頭と末尾に星を出力
            for(j = 1; j<=2*(n-i)-3; j++) { // 中空にするための空白を出力
                printf(" ");
            }
            printf("*");
        }
        printf("\n");
    }
}

実行結果

Enter number of lines: 15
       *
      * *
     *   *
    *     *
   *       *
  *         *
 *           *
*             *
 *           *
  *         *
   *       *
    *     *
     *   *
      * *
       *

このように、ループの範囲と空白の出力個数を制御するだけで、さまざまな中空パターンを自由に描くことができます。行数を変えて実行し、動作の仕組みをぜひ確認してみてください。

  1. Cプログラムで行列を対角パターンに沿って数値出力する方法

    この課題は、n×nの行列を対角パターンで出力することです。 例えば n が 3 の場合、対角パターンに従って行列を出力すると、次のような配置になります。 そして、実際の出力結果は以下の通りです。 実行例 Input: 3 Output: 1 2 4 3 5 7 6 8 9 Input: 4 Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 考え方 一見すると、「数値 n を受け取り n×n の行列を生成し、それを対角方向に走査しながら別の行列へ値を格納する」というアプローチが思い浮かびます

  2. C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方

    この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &