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

C言語で中実・中空の菱形(ひし形)パターンを出力するプログラム

プログラムの概要

本記事では、C言語を使用して、下図のような中実(塗りつぶし)の菱形中空(外枠のみ)の菱形の星形パターンをコンソールに出力する方法を解説します。

C言語で中実・中空の菱形(ひし形)パターンを出力するプログラム

アルゴリズム

中空の菱形(Hollow Rhombus)の場合

1. ユーザーから中空菱形の行数を入力してもらう
2. 入力された行数と同じ行数を持つ中空の菱形を作成する
3. 1行目は、行数と同じ個数のアスタリスク(*)をすべて出力する
4. 2行目以降は、各行の先頭と末尾のみ「*」を出力し、その間は空白のままにする
5. 最終行に達するまで手順4を繰り返す
6. 最終行は、行数と同じ個数の「*」をすべて出力する

中実の菱形(Solid Rhombus)の場合

1. ユーザーから中実菱形の行数を入力してもらう
2. 入力された行数と同じ行数を持つ中実の菱形を作成する
3. 各行とも、行数と同じ個数の「*」をすべて出力する
4. 最終行に達するまで同じ処理を繰り返す

サンプルコード

/* 中空・中実の菱形スター パターンを出力するプログラム */
#include <stdio.h>

int main() {
    int r, c, rows;     /* 中空の菱形用 */
    int r1, c1, rows1;  /* 中実の菱形用 */

    printf("中空の菱形パターンの行数を入力してください: ");
    scanf("%d", &rows);
    printf("\n");

    for (r = 1; r <= rows; r++) {
        /* 左側に空白を出力して、行ごとに開始位置をずらす */
        for (c = 1; c <= rows - r; c++) {
            printf(" ");
        }
        /* 外周のみ「*」、内側は空白を出力 */
        for (c = 1; c <= rows; c++) {
            if (r == 1 || r == rows || c == 1 || c == rows)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }

    printf("\n");
    printf("中実の菱形パターンの行数を入力してください: ");
    scanf("%d", &rows1);
    printf("\n");

    for (r1 = 1; r1 <= rows1; r1++) {
        for (c1 = 1; c1 <= rows1 - r1; c1++) {
            printf(" ");
        }
        for (c1 = 1; c1 <= rows1; c1++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

補足: 元のコードに含まれていた clrscr()getch() は、古いTurbo Cなど一部の環境でしか使えない非標準関数です。GCCやClangなどの一般的なコンパイラではビルドできないため、上記のコードでは削除しています。実行終了直前に画面を一時停止したい場合は、getch() の代わりに標準の getchar() を使用してください。

実行結果

C言語で中実・中空の菱形(ひし形)パターンを出力するプログラム

中空の菱形(行数5の場合)

    *****
   *   *
  *   *
 *   *
*****

中実の菱形(行数5の場合)

    *****
   *****
  *****
 *****
*****

コードのポイント

  • 二重ループの構造: 外側のループが行(縦方向)を、内側のループが列(横方向)を制御しています。
  • 傾きの表現: まず rows - r 個の半角スペースを出力することで、行が下に進むほど開始位置が左へ寄り、菱形特有の斜めの傾きが生まれます。
  • 中空の判定: 条件 r == 1 || r == rows || c == 1 || c == rows が成立するとき(1行目・最終行・各行の1列目・最終列)だけ「*」を出力し、それ以外は空白にすることで、外枠だけの中空菱形になります。
  • 中実の出力: 判定を行わずにすべての列で「*」を出力するため、塗りつぶされた中実の菱形が完成します。
  1. C言語で配列の下三角行列と上三角行列を出力するプログラム

    プログラムの説明 本記事では、入力された配列(行列)から下三角行列と上三角行列を出力するC言語のプログラムを紹介します。 三角行列とは 三角行列とは、下三角行列または上三角行列のいずれかに該当する行列の総称です。 下三角行列 正方行列において、主対角線より上側のすべての要素が0である行列を「下三角行列」と呼びます。 上三角行列 正方行列において、主対角線より下側のすべての要素が0である行列を「上三角行列」と呼びます。 次のような形状を持つ行列は下三角行列(左三角行列)と呼ばれます。 $${\displaystyle L={\begin{bmatrix}\ell _{1,1}&&&&0\\\e

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

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