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

C言語でforループを使ってハート型パターンの中央に名前を出力するプログラム


C言語のforループを活用すれば、星印(*)だけでハート型の図形を描き、その中央に好きな名前を表示することができます。この記事では、その仕組みと実装方法を順を追ってわかりやすく解説します。

課題

forループを使用して、星印(*)で描いたハート型のパターンの中に、名前を中央に表示するプログラムを作成します。

解決方法

まずユーザーに、中央に表示したい名前と、星印を表示する行数を入力してもらいます。プログラムはこれらの入力値をもとに、星印でハートの輪郭を描きながら、その中心部分に指定された名前を組み込んで出力します。

アルゴリズム

forループを使ってハートパターン内に名前を表示する際は、以下のアルゴリズムを参考にしてください。

ステップ1 − 必要な変数を宣言します。

ステップ2 − 実行時に入力を受け付け、中央に表示する名前を読み込みます。

ステップ3 − 表示する行数を読み込みます。

ステップ4 − 入力された名前の文字列長を求めます。

ステップ5 − ハートの上半分(2つのふくらみ)を星印で出力します。

ステップ6 − ハートの下半分(逆三角形)を星印で出力します。

ステップ7 − 下半分の出力時に、画面の中央へ名前を表示します。

サンプルコード

以下は、forループを使用してハートパターン内に名前を表示するCプログラムの例です。

#include <stdio.h>
#include <string.h>
int main(){
    int i, j, n;
    char name[50];
    int len;
    printf("Enter your name: ");
    gets(name);
    printf("Enter no of rows: ");
    scanf("%d", &n);
    len = strlen(name);
    // 星印でハートの上半分を出力
    for(i=n/2; i<=n; i+=2){
        for(j=1; j<n-i; j+=2){
            printf(" ");
        }
        for(j=1; j<=i; j++){
            printf("*");
        }
        for(j=1; j<=n-i; j++){
            printf(" ");
        }
        for(j=1; j<=i; j++){
            printf("*");
        }
        printf("\n");
    }
    // 星印で下半分(逆三角形)を出力
    for(i=n; i>=1; i--){
        for(j=i; j<n; j++){
            printf(" ");
        }
        // 画面に名前を出力
        if(i == n){
            for(j=1; j<=(n * 2-len)/2; j++){
                printf("*");
            }
            printf("%s", name);
            for(j=1; j<(n*2-len)/2; j++){
                printf("*");
            }
        }else{
            for(j=1; j<=(i*2)-1; j++){
                printf("*");
            }
        }
        printf("\n");
    }
    return 0;
}

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

Enter your name: Tutorials POint
Enter no of rows: 10
      ***** *****
     ******* *******
    ********* *********
    **Tutorials POint*
    *****************
     ***************
      *************
       ***********
        *********
         *******
          *****
           ***
            *

なお、サンプルコードで使用しているgets()関数にはバッファオーバーフローなどのセキュリティ上の危険があるため、実際の開発ではfgets()など安全な代替関数を使用することが推奨されています。


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

    本記事では、整数「n」が与えられたとき、その値をもとにアスタリスク(*)で構成された六角形パターンを生成し、画面に出力するC言語プログラムを解説します。ループと条件分岐を組み合わせることで、きれいな六角形の図形をテキストベースで描くことができます。 実行例 入力:n = 5 の場合の出力は以下のようになります。 入力:n = 4 の場合の出力は以下のようになります。 プログラムの基本的なアプローチ このプログラムでは、六角形パターンを以下の手順で作成しています。 ユーザーから整数「n」を入力として受け取ります。 パターン全体を「上部」「中央部」「下部」の3つの部分に分割して考えます。

  2. ループを使わずに数列を出力するPythonプログラム|再帰とフラグで実現する方法

    本記事では、for文やwhile文などのループ構文を一切使わずに数列を表示するという問題の解法について解説します。問題の定義問題: 2つの数値 N と K が与えられます。まずNが0より大きい間はNからKを繰り返し引き、Nが0以下(ゼロまたは負)になったら、今度は逆にKを足していきます。そして値が元の数値Nに戻った時点で処理を終了します。実行例N = 10K = 4出力: 10 6 2 -2 2 6 10アルゴリズムNが0より大きい間、関数を再帰的に呼び出し続けます。各呼び出しのたびにNからKを減算します。数値が0以下になったら加算モードに切り替え、各呼び出しごとにKを加算します。元の数値Nに