C言語で学ぶ!図形の塗りつぶし方法5選 – Japanシーモア

C言語で学ぶ!図形の塗りつぶし方法5選

C言語を使った図形の塗りつぶし手法の図解C言語
この記事は約13分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

プログラミングの世界で描画と言えば、3Dモデルを構築したり、ゲームの背景を描いたり、ユーザーインターフェースをデザインしたりすることが思い浮かぶかもしれません。

しかし、その根底にはいつも「図形」が存在しています。

今回は、C言語を使った図形の塗りつぶし方法を5つ紹介します。

初心者でも理解できるよう、サンプルコードと詳細な解説を交えて説明していきます。

●C言語とは

C言語は、1972年にAT&Tベル研究所のデニス・リッチーによって開発されたプログラミング言語で、その汎用性とパワフルな機能により、現在でも広く使用されています。

システムプログラミングや組み込みシステムの開発に優れており、また多くの現代のプログラミング言語の祖先とも言えます。

●C言語で図形を作成する基本

C言語で図形を作成する際には、いくつかの基本的な概念を理解する必要があります。

○基本構文の理解

C言語で図形を描くための基本構文は、主にループ構造と条件分岐です。

ループ構造(forやwhile)を使うことで、一連の処理を繰り返し実行することができます。

一方、条件分岐(ifやswitch)を使うと、特定の条件下で異なる処理を行うことができます。

○描画の流れ

図形を描くためには、通常、以下の手順でプログラムを書きます。

まず、図形の大きさや位置を決めるための変数を宣言します。

次に、図形を描くためのループを書きます。

ループの中では、一行ごと、または一列ごとに描画を行います。

最後に、各行または列で塗りつぶすべき位置には特定の文字を、それ以外の位置には空白文字を出力します。

●C言語で図形を塗りつぶす方法5選

ここからは、具体的なサンプルコードを交えながら、C言語で図形を塗りつぶす5つの方法を解説します。

○サンプルコード1:直角三角形の塗りつぶし

このコードでは、ループを用いて直角三角形を描く方法を紹介します。

この例では、行の数に応じてその行に印刷する”*”の数を増やすことで三角形を作ります。

#include<stdio.h>
void main() {
    int i, j;
    for(i=1; i<=5; i++) {
        for(j=1; j<=i; j++) {
            printf("*");
        }
        printf("\n");
    }
}

このコードを実行すると、次のような直角三角形が出力されます。

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

○サンプルコード2:正方形の塗りつぶし

次に、正方形を描くためのコードを見てみましょう。

このコードでは、一定数の行と列を持つ正方形を描きます。

#include<stdio.h>
void main() {
    int i, j;
    for(i=1; i<=5; i++) {
        for(j=1; j<=5; j++) {
            printf("*");
        }
        printf("\n");
    }
}

このコードを実行すると、次のような5×5の正方形が出力されます。

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

それぞれのサンプルコードとその出力結果について、詳しく解説していきます。

○サンプルコード3:長方形の塗りつぶし

長方形を塗りつぶすための手法を紹介します。

ここでは、長方形の縦と横の長さを指定することで任意の大きさの長方形を塗りつぶすことができます。

まずは次のコードをご覧ください。

#include<stdio.h>

void main() {
  int width = 5;
  int height = 3;
  int i, j;

  // 長方形の描画
  for(i = 0; i < height; i++) {
    for(j = 0; j < width; j++) {
      printf("*");
    }
    printf("\n");
  }
}

このコードでは、widthheightという二つの変数を用いて長方形の幅と高さを定義しています。

その後、二つのforループを用いて長方形の塗りつぶしを行っています。

外側のforループは長方形の高さに対応し、内側のforループは長方形の幅に対応しています。

このコードを実行すると、次のような出力が得られます。

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

この出力は、幅が5、高さが3の長方形を表現しています。

次に、塗りつぶしを行うための方法を掘り下げてみましょう。

このコードでは、””を使用して長方形を描画しています。

この””は塗りつぶしを行うための文字となります。

長方形の形状を生成するために、高さの数だけ行を出力し(外側のforループ)、各行に対して幅の数だけ”*”を出力しています(内側のforループ)。

これにより、長方形の形状が塗りつぶされ、出力されます。

○サンプルコード4:円形の塗りつぶし

次に、円形の塗りつぶしを行う方法を見てみましょう。

円形の塗りつぶしは、少し複雑になりますが、基本的な考え方は同じです。

#include<stdio.h>
#include<math.h>

void main() {
    int radius = 5;
    int i, j;

    // 円形の描画
    for(i = -radius; i <= radius; i++) {
        for(j = -radius; j <= radius; j++) {
            if(sqrt(i * i + j * j) <= radius) {
                printf("*");
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
}

このコードでは、まずradiusという変数を用いて円の半径を定義しています。

そして、二つのforループを使って、円形の塗りつぶしを行います。

ここで注意すべきなのは、座標(i, j)が円の半径内にあるかどうかを判断しています。

これは、sqrt(i * i + j * j) <= radiusという条件式で行われます。

ここでは、座標(i, j)と原点(0, 0)との距離が半径以下かどうかを判断しています。

距離はピタゴラスの定理を用いて計算します。

このコードを実行すると、半径が5の円形が塗りつぶされて表示されます。

また、このコードでは円の半径を5に設定していますが、これは自由に変更することができます。

半径を大きくすると、より大きな円が描画されます。

また、半径を小さくすると、より小さな円が描画されます。

○サンプルコード5:自由形状の塗りつぶし

これまでに直角三角形、正方形、長方形、円形といった基本的な図形の塗りつぶし方法を見てきました。

しかし、これらの図形以外にも、自由な形状の図形を描きたいという場合もあるでしょう。

そこで、この節では自由形状の塗りつぶしを行う方法について解説します。

自由形状の図形を描くためには、図形の形状を定義する何らかの手段が必要となります。

その一つの方法として、次のようなマップを用いる方法が考えられます。

#include <stdio.h>

void main() {
    char shape[10][10] = {
        "##########",
        "#        #",
        "#        #",
        "#        #",
        "#        #",
        "#        #",
        "#        #",
        "#        #",
        "##########"
    };
    int i, j;

    for(i = 0; i < 9; i++) {
        for(j = 0; j < 10; j++) {
            printf("%c", shape[i][j]);
        }
        printf("\n");
    }
}

このコードでは、shapeという2次元配列を用いて、図形の形状を定義しています。

shapeの各要素には、#または空白が代入されており、これにより図形の形状が定義されています。

そして、二つのforループを用いて、これを表示します。結果として、画面上に自由な形状の図形が表示されます。

この方法では、任意の形状の図形を簡単に描くことができます。

ただし、図形の詳細な形状を定義するには、shapeの各要素を適切に設定する必要があります。

●注意点と対処法

図形の塗りつぶしをC言語で行う際には、いくつかの注意点や一般的なエラーが存在します。

その多くは初心者の間でよく見られるもので、適切な理解と対処法を知っていれば避けることができます。

ここでは、C言語で図形を塗りつぶす際の注意点やよくあるエラー、そしてその対処法を取り上げます。

○エラーの例とその対処法

エラーはコーディング過程で避けて通れないものです。

しかし、適切なエラーメッセージの解読と理解をすることで、問題解決への道筋が見えてきます。

ここでは、C言語で図形を塗りつぶす際によく遭遇するエラーを幾つか紹介します。

❶配列のインデックスを超える

このエラーは、配列のサイズを超えた位置にアクセスしようとしたときに発生します。

例えば、配列のサイズが10の場合、0から9までのインデックスにアクセスすることが可能ですが、10以上のインデックスにアクセスしようとすると、エラーが発生します。

このエラーを避けるためには、常に配列のサイズを意識してアクセスすることが重要です。

配列にアクセスする前に、アクセスしようとするインデックスが配列のサイズを超えていないかを確認することが有効な対策となります。

❷初期化されていない変数を使用する

初期化されていない変数を使用すると、その変数の値は予測不可能となり、予期せぬ動作を引き起こす可能性があります。

例えば、ループカウンタとして使う変数を初期化せずにループを開始すると、予期せぬ結果を引き起こす可能性があります。

このエラーを避けるためには、変数を使用する前に必ず初期化することが重要です。

また、特にループカウンタなどはループの開始時に初期化することを忘れないようにしましょう。

○よくある落とし穴

図形の塗りつぶしを行う際には、プログラミング上の落とし穴も存在します。

ここでは、そのような一般的な落とし穴をいくつか紹介します。

❶描画順序の誤り

図形を描く際には、各部分の描画順序が重要となります。

順序が誤っていると、意図しない形状が表示されることがあります。

この落とし穴を避けるためには、全体の描画フローを予め計画しておくことが重要です。

また、必要に応じて描画の順序を変更し、意図した形状が表示されるようにしましょう。

❷構文の理解不足

C言語は構文が多いため、それぞれの構文が何をするものなのか、どのように使うのかを理解しておくことが重要です。

特に、ループや条件分岐といった基本的な構文は頻繁に使われるため、これらの構文を深く理解しておくことが重要です。

この落とし穴を避けるためには、各構文の役割や使い方をしっかりと理解し、適切に使用することが求められます。

●図形塗りつぶしの応用例

C言語での図形の塗りつぶしは、単純な図形だけでなく、複雑な図形や色彩を用いた塗りつぶしにも応用可能です。

具体的な応用例として、複数の図形の組み合わせや色彩の適用について見ていきましょう。

○サンプルコード6:複数の図形の組み合わせ

最初の応用例として、複数の図形を組み合わせた塗りつぶしを紹介します。

このコードでは、二つの直角三角形を組み合わせて一つの長方形を作成し、塗りつぶすプログラムを紹介します。

この例では、二つのforループを使って二つの直角三角形をそれぞれ描き、塗りつぶしています。

#include <stdio.h>

int main() {
    int i, j;

    // 上半部分の直角三角形を描く
    for (i = 0; i < 5; i++) {
        for (j = 0; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }

    // 下半部分の直角三角形を描く
    for (i = 5; i > 0; i--) {
        for (j = 0; j < i; j++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

上記のコードを実行すると、次のような出力結果が得られます。

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

このように、複数の図形を組み合わせることで、より複雑な形状の図形を作成・塗りつぶすことが可能です。

○サンプルコード7:色彩の適用

次に、色彩を適用した塗りつぶしの応用例を紹介します。

C言語では、特殊なエスケープシーケンスを用いてコンソール上で文字色を変更することができます。

下記のコードでは、正方形を描きつつ、それを赤色で塗りつぶす例を紹介します。

この例では、”\033[31m”というエスケープシーケンスを使用して文字色を赤色に変更し、”\033[0m”で色設定をリセットしています。

#include <stdio.h>

int main() {
    int i, j;

    // 赤色で正方形を描く
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++) {
            printf("\033[31m*");  // 赤色に設定
        }
        printf("\033[0m\n");  // 色設定をリセット
    }

    return 0;
}

このコードを実行すると、赤色で塗りつぶされた正方形がコンソール上に表示されます。

ただし、色彩の対応はターミナルやコンソールの種類、設定に依存するため、全ての環境で同じ色が表示されるわけではないことに注意してください。

これらの応用例を通じて、基本的な図形の塗りつぶしを越えて、より豊かな表現が可能であることがわかります。

様々な応用例を試して、自分だけのオリジナルな図形の塗りつぶしを楽しんでみてください。

まとめ

以上、C言語での図形の塗りつぶし方法について5つの具体的な例を通じて解説してまいりました。

初心者の方でも、我々の詳細な説明と具体的なサンプルコードを見れば、C言語による図形塗りつぶしの基本を理解し、自分自身でコードを書くことが可能になることでしょう。

それぞれのコードには、独特な思考とプログラミングの理論が備わっています。

直角三角形、正方形、長方形、円形、そして自由形状と、さまざまな形状の塗りつぶし方を学んで、これらの知識を組み合わせて、自分だけのオリジナルな図形を生み出すことができます。

さらに、エラーへの対処法やよくある落とし穴を説明しました。

これらの情報は、あなたがコードを書いていく中で遭遇する可能性のある問題を解決するのに非常に役立つはずです。

特に、色彩の適用や複数の図形の組み合わせといった応用例を通じて、更に高度な技術を紹介しました。

C言語を用いた図形の塗りつぶしは、プログラミングの基本を理解し、独自の視覚表現を開発するための重要なスキルです。

今回紹介した方法を参考に、自分自身のプロジェクトに活かしてみてください。

この記事が、C言語を使用した図形の塗りつぶし方法を学ぶ皆さんの一助となれば幸いです。