[C言語] アスタリスクで任意の大きさの三角形を描く方法

C言語でアスタリスクを使って任意の大きさの三角形を描くには、ループ構造を活用します。

一般的には、forループを使用して行ごとにアスタリスクを出力します。

外側のループは行数を制御し、内側のループは各行に出力するアスタリスクの数を制御します。

例えば、forループの中でprintf関数を用いてアスタリスクを出力し、\\nで改行を行います。

この方法により、ユーザーが指定した高さの三角形を簡単に描画できます。

この記事でわかること
  • 標準入力を用いた三角形のサイズ取得方法
  • forループやwhileループを使った三角形の描画方法
  • 直角三角形、二等辺三角形、正三角形、逆向き三角形の描画
  • 三角形の中を塗りつぶす方法や複数の三角形を組み合わせる方法
  • 三角形のサイズを動的に変更する方法と他の図形の描画可能性

目次から探す

C言語での三角形描画の実装

C言語を使ってアスタリスクで任意の大きさの三角形を描く方法を解説します。

ここでは、標準入力からサイズを取得し、forループやwhileループを用いて三角形を描画する方法を紹介します。

また、ネストされたループを活用することで、より複雑な図形を描くことも可能です。

標準入力からのサイズ取得

三角形のサイズをユーザーから入力してもらうために、標準入力を使用します。

以下のコードは、ユーザーに三角形の高さを入力してもらう例です。

#include <stdio.h>
int main() {
    int height;
    printf("三角形の高さを入力してください: ");
    scanf("%d", &height); // ユーザーから高さを取得
    return 0;
}

このコードでは、scanf関数を使ってユーザーから整数値を取得し、変数heightに格納しています。

forループを使った三角形の描画

forループを用いることで、簡単に三角形を描画することができます。

以下のコードは、forループを使って直角三角形を描く例です。

#include <stdio.h>
int main() {
    int height;
    printf("三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = 1; i <= height; i++) { // 行数を制御
        for (int j = 0; j < i; j++) { // 各行のアスタリスク数を制御
            printf("*");
        }
        printf("\n"); // 行の終わりで改行
    }
    return 0;
}
三角形の高さを入力してください: 5
*
**
***
****
*****

このプログラムは、ユーザーが入力した高さに応じて、左下が直角の三角形を描画します。

whileループを使った三角形の描画

whileループを使っても同様に三角形を描くことができます。

以下はwhileループを用いた例です。

#include <stdio.h>
int main() {
    int height;
    printf("三角形の高さを入力してください: ");
    scanf("%d", &height);
    int i = 1;
    while (i <= height) { // 行数を制御
        int j = 0;
        while (j < i) { // 各行のアスタリスク数を制御
            printf("*");
            j++;
        }
        printf("\n"); // 行の終わりで改行
        i++;
    }
    return 0;
}
三角形の高さを入力してください: 4
*
**
***
****

このプログラムも、forループを使った場合と同様に、ユーザーが指定した高さの三角形を描画します。

ネストされたループの活用

ネストされたループを活用することで、より複雑な図形を描くことができます。

例えば、逆向きの三角形を描くことも可能です。

#include <stdio.h>
int main() {
    int height;
    printf("三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = height; i > 0; i--) { // 行数を制御
        for (int j = 0; j < i; j++) { // 各行のアスタリスク数を制御
            printf("*");
        }
        printf("\n"); // 行の終わりで改行
    }
    return 0;
}
三角形の高さを入力してください: 3
***
**
*

このプログラムでは、上から下に向かってアスタリスクの数が減少する逆向きの三角形を描画します。

ネストされたループを使うことで、さまざまな形状の三角形を描くことができます。

三角形のバリエーション

C言語を用いて描画できる三角形にはさまざまなバリエーションがあります。

ここでは、直角三角形、二等辺三角形、正三角形、逆向き三角形の描画方法を紹介します。

それぞれの三角形は、異なるループの使い方や条件設定によって描画されます。

直角三角形の描画

直角三角形は、一般的に左下が直角になる形状です。

以下のコードは、直角三角形を描画する例です。

#include <stdio.h>
int main() {
    int height;
    printf("直角三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = 1; i <= height; i++) {
        for (int j = 0; j < i; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
直角三角形の高さを入力してください: 4
*
**
***
****

このプログラムは、左下が直角の三角形を描画します。

二等辺三角形の描画

二等辺三角形は、左右対称で頂点が中央に位置する形状です。

以下のコードは、二等辺三角形を描画する例です。

#include <stdio.h>
int main() {
    int height;
    printf("二等辺三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = 1; i <= height; i++) {
        for (int j = 0; j < height - i; j++) {
            printf(" "); // 左側のスペース
        }
        for (int k = 0; k < 2 * i - 1; k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
二等辺三角形の高さを入力してください: 3
  *
 ***
*****

このプログラムは、中央に頂点を持つ二等辺三角形を描画します。

正三角形の描画

正三角形は、すべての辺が等しい長さの三角形です。

以下のコードは、正三角形を描画する例です。

#include <stdio.h>
int main() {
    int height;
    printf("正三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = 1; i <= height; i++) {
        for (int j = 0; j < height - i; j++) {
            printf(" "); // 左側のスペース
        }
        for (int k = 0; k < 2 * i - 1; k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
正三角形の高さを入力してください: 4
   *
  ***
 *****
*******

このプログラムは、二等辺三角形と同様の方法で正三角形を描画しますが、見た目が正三角形に近くなるように調整されています。

逆向き三角形の描画

逆向き三角形は、頂点が下に向いた形状です。

以下のコードは、逆向き三角形を描画する例です。

#include <stdio.h>
int main() {
    int height;
    printf("逆向き三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = height; i > 0; i--) {
        for (int j = 0; j < height - i; j++) {
            printf(" "); // 左側のスペース
        }
        for (int k = 0; k < 2 * i - 1; k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
逆向き三角形の高さを入力してください: 3
*****
 ***
  *

このプログラムは、頂点が下に向いた逆向きの三角形を描画します。

スペースとアスタリスクの数を調整することで、さまざまな形状の三角形を描くことができます。

応用例

C言語で三角形を描画する基本的な方法を学んだ後は、さらに応用的な描画方法を試してみましょう。

ここでは、三角形の中を塗りつぶす方法や、複数の三角形を組み合わせる方法、三角形の周囲のみを描く方法、そして三角形のサイズを動的に変更する方法を紹介します。

三角形の中を塗りつぶす

三角形の中を塗りつぶすには、アスタリスクを使って内部を埋める必要があります。

以下のコードは、二等辺三角形を塗りつぶす例です。

#include <stdio.h>
int main() {
    int height;
    printf("塗りつぶす三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = 1; i <= height; i++) {
        for (int j = 0; j < height - i; j++) {
            printf(" ");
        }
        for (int k = 0; k < 2 * i - 1; k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
塗りつぶす三角形の高さを入力してください: 3
  *
 ***
*****

このプログラムは、二等辺三角形を描画し、その内部をアスタリスクで塗りつぶします。

複数の三角形を組み合わせる

複数の三角形を組み合わせることで、より複雑な図形を描くことができます。

以下のコードは、2つの直角三角形を組み合わせた例です。

#include <stdio.h>

int main() {
    int height, num_triangles;

    // 高さと三角形の数を入力
    printf("三角形の高さを入力してください: ");
    scanf("%d", &height);
    printf("横に並べる三角形の数を入力してください: ");
    scanf("%d", &num_triangles);

    for (int i = 1; i <= height; i++) {
        for (int n = 0; n < num_triangles; n++) { // 三角形の数だけ繰り返す
            // 三角形の星を出力
            for (int j = 0; j < i; j++) {
                printf("*");
            }
            // スペースを追加して次の三角形の位置を調整
            for (int j = i; j < height; j++) {
                printf(" ");
            }
            printf(" "); // 三角形間のスペース
        }
        printf("\n");
    }

    return 0;
}
三角形の高さを入力してください: 5
横に並べる三角形の数を入力してください: 2
*     *     
**    **    
***   ***   
****  ****  
***** ***** 

このプログラムは、2つの直角三角形を横に並べて描画します。

三角形の周囲を描く

三角形の周囲のみを描くには、外枠だけをアスタリスクで描画します。

以下のコードは、二等辺三角形の周囲を描く例です。

#include <stdio.h>
int main() {
    int height;
    printf("周囲を描く三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = 1; i <= height; i++) {
        for (int j = 0; j < height - i; j++) {
            printf(" ");
        }
        for (int k = 0; k < 2 * i - 1; k++) {
            if (k == 0 || k == 2 * i - 2 || i == height) {
                printf("*");
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}
周囲を描く三角形の高さを入力してください: 4
   *
  * *
 *   *
*******

このプログラムは、二等辺三角形の外枠のみを描画します。

三角形のサイズを動的に変更する

三角形のサイズを動的に変更するには、ループ内でサイズを調整するロジックを追加します。

以下のコードは、ユーザーの入力に応じてサイズを変更する例です。

#include <stdio.h>
int main() {
    int height;
    printf("動的に変更する三角形の高さを入力してください: ");
    scanf("%d", &height);
    for (int i = 1; i <= height; i++) {
        for (int j = 0; j < height - i; j++) {
            printf(" ");
        }
        for (int k = 0; k < 2 * i - 1; k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
動的に変更する三角形の高さを入力してください: 5
    *
   ***
  *****
 *******
*********

このプログラムは、ユーザーが入力した高さに応じて、二等辺三角形のサイズを動的に変更して描画します。

よくある質問

なぜアスタリスクを使うのですか?

アスタリスクは、C言語でのテキストベースの描画において、視覚的にわかりやすく、かつ簡単に使用できる文字だからです。

アスタリスクは、星形のような形状を持ち、図形のエッジや塗りつぶしに適しています。

例:printf("*");を使って描画します。

三角形のサイズを変更するにはどうすればいいですか?

三角形のサイズを変更するには、プログラム内で使用する変数に異なる値を設定することで可能です。

具体的には、ユーザーからの入力を受け取るscanf関数を使って、変数heightに新しい値を代入することで、描画される三角形の高さを変更できます。

他の図形も描けますか?

はい、他の図形も描くことができます。

C言語のループや条件分岐を活用することで、四角形や円、菱形など、さまざまな図形を描画することが可能です。

例えば、四角形を描くには、行と列を制御する二重ループを使用します。

例:forループを使って四角形の各辺を描画します。

まとめ

C言語を用いてアスタリスクで三角形を描画する方法を学びました。

基本的な直角三角形から、二等辺三角形、正三角形、逆向き三角形まで、さまざまなバリエーションを描くことができます。

また、応用例として、三角形の中を塗りつぶしたり、複数の三角形を組み合わせたりする方法も紹介しました。

これらの知識を活用して、さらに複雑な図形を描画することに挑戦してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 初学者向け (30)
  • URLをコピーしました!
目次から探す