[C言語] アスタリスクで任意の大きさの三角形を描く方法
C言語でアスタリスクを使って任意の大きさの三角形を描くには、ループ構造を活用します。
一般的には、for
ループを使用して行ごとにアスタリスクを出力します。
外側のループは行数を制御し、内側のループは各行に出力するアスタリスクの数を制御します。
例えば、for
ループの中でprintf
関数を用いてアスタリスクを出力し、\\n
で改行を行います。
この方法により、ユーザーが指定した高さの三角形を簡単に描画できます。
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言語を用いてアスタリスクで三角形を描画する方法を学びました。
基本的な直角三角形から、二等辺三角形、正三角形、逆向き三角形まで、さまざまなバリエーションを描くことができます。
また、応用例として、三角形の中を塗りつぶしたり、複数の三角形を組み合わせたりする方法も紹介しました。
これらの知識を活用して、さらに複雑な図形を描画することに挑戦してみてください。