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

【C言語】六角形パターンを出力するプログラムの作成方法


本記事では、整数「n」が与えられたとき、その値をもとにアスタリスク(*)で構成された六角形パターンを生成し、画面に出力するC言語プログラムを解説します。ループと条件分岐を組み合わせることで、きれいな六角形の図形をテキストベースで描くことができます。

実行例

入力:n = 5 の場合の出力は以下のようになります。

【C言語】六角形パターンを出力するプログラムの作成方法

入力:n = 4 の場合の出力は以下のようになります。

【C言語】六角形パターンを出力するプログラムの作成方法

プログラムの基本的なアプローチ

このプログラムでは、六角形パターンを以下の手順で作成しています。

  • ユーザーから整数「n」を入力として受け取ります。
  • パターン全体を「上部」「中央部」「下部」の3つの部分に分割して考えます。
  • 上部を出力するため、ループ変数 i を 0 から n 未満まで1ずつ増やしながら処理します。
  • 中央部を出力するため、ループ変数 m を 0 から n-2 未満まで1ずつ増やしながら処理します。
  • 下部を出力するため、ループ変数 h を res から始めて h が 0 以上である間、1ずつ減らしながら処理します。
  • 各行において、星印「*」を表示すべき位置には「*」を、それ以外の位置には空白を出力していきます。

アルゴリズム

開始
ステップ1 → 六角形パターンを出力する関数を定義する
  void pattern(int n)
  int len = 2 * n - 1 を宣言・設定する
  繰り返し For int i = 0、i < n、i++ の間
    int temp = i + n を宣言・設定する
    繰り返し For int k = 0、k < temp、k++ の間
      IF ((k == n + i - 1) || (k == n - i - 1))
        「*」を出力する
      終了
      ELSE
        空白を出力する
      終了
      改行を出力する
    終了
    繰り返し For int m = 0、m < n - 2、m++ の間
      繰り返し For int j = 0、j < len、j++ の間
        if (j == 0 || j == len - 1)
          「*」を出力する
        終了
        ELSE
          空白を出力する
        終了
      終了
      改行を出力する
    終了
    int res = n - 1 を宣言・設定する
    繰り返し For int h = res、h >= 0、h-- の間
      int temp2 = h + n を宣言・設定する
      繰り返し For int k = 0、k < temp2、k++ の間
        if ((k == n + h - 1) || (k == n - h - 1))
          「*」を出力する
        終了
        ELSE
          空白を出力する
        終了
      終了
      改行を出力する
    終了
  終了
ステップ2 → main() 内での処理
  変数 int n = 5 を宣言する
  pattern(n) を呼び出す
終了

サンプルコード

#include <stdio.h>
// 六角形パターンを出力するプログラム
void pattern(int n) {
    int len = 2 * n - 1;
    // パターンの上部を出力するforループ
    for (int i = 0; i < n; i++) {
        int temp = i + n;
        for (int k = 0; k < temp; k++) {
            if ((k == n + i - 1) || (k == n - i - 1))
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    // パターンの中央部を出力するforループ
    for (int m = 0; m < n - 2; m++) {
        for (int j = 0; j < len; j++) {
            if (j == 0 || j == len - 1)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    // パターンの下部を出力するforループ
    int res = n - 1;
    for (int h = res; h >= 0; h--) {
        int temp2 = h + n;
        for (int k = 0; k < temp2; k++) {
            if ((k == n + h - 1) || (k == n - h - 1))
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
}
int main() {
    int n = 5;
    pattern(n);
    return 0;
}

出力結果

上記のコードを実行すると、入力した値 n に対応した大きさの六角形パターンがコンソールに出力されます。たとえば n = 5 の場合は、次のような六角形が表示されます。

【C言語】六角形パターンを出力するプログラムの作成方法

このように、パターンを「上部」「中央部」「下部」の3つの領域に分けて考えることで、複雑な図形の出力処理もシンプルなロジックで実装できます。ぜひ n の値を変更して、さまざまなサイズの六角形パターンを試してみてください。


  1. 【初心者向け】平行四辺形の外周(周長)を計算するC言語プログラム

    本記事では、2つの辺の長さが与えられた平行四辺形の外周(周囲の長さ)を計算し、その結果を表示するC言語プログラムを紹介します。数式の考え方からアルゴリズム、実際のコードまで順を追って解説していきます。 平行四辺形とは? 平行四辺形とは、次のような性質を持つ四角形の一種です。 向かい合う2組の辺がそれぞれ平行である 向かい合う角の大きさが互いに等しい 2本の対角線が互いの中点で交わる 下の図では、「a」と「b」が平行四辺形の隣り合う2つの辺の長さを表しています。 平行四辺形の外周の求め方 平行四辺形の外周(周長)は、次の式で定義されます。 外周 = 2 × (a + b)   = 2 ×

  2. C言語で作る!キラキラ点滅するクリスマスツリー表示プログラム

    今回は少しユニークなプログラミング課題を紹介します。C言語を使って、クリスマスツリーをランダムに表示する方法です。完成したツリーは、本物のクリスマスイルミネーションのようにキラキラと点滅して見えます。 クリスマスツリーの表示の仕組み クリスマスツリーを描くには、大きさの異なる三角形(ピラミッド)をいくつも縦に積み重ねて出力します。装飾的な葉っぱの部分には、あらかじめ用意した文字リスト(.・*・+・o・O)の中からランダムに1文字を選んで表示します。 ツリーの高さやランダム性の度合いは、ソースコード冒頭のマクロ定数を書き換えるだけで自由に調整できます。 点滅が実現される仕組み このプログラムのポ