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

C言語で数字をX字型(Xパターン)に表示するプログラムの作り方

本記事では、C言語を使ってコンソール上に数字をX字型(Xパターン)で表示するプログラムの作成方法を解説します。まず全体の流れを把握できるよう、アルゴリズムから順に見ていきましょう。

アルゴリズム

Xパターンで数字を表示するための手順は以下の通りです。

ステップ1:開始
ステップ2:変数を宣言する
ステップ3:行数を読み込む
ステップ4:forループの条件判定
  • if(i==j || i+j==rows-1) の場合
    • i+1 を出力する
  • それ以外は " "(空白)を出力する
ステップ5:改行を出力する ステップ6:終了

Xパターンを描くロジック

このパターンのポイントは、「行番号と列番号が等しい位置(i==j)」「行番号と列番号の合計が行数-1になる位置(i+j==rows-1)」の2箇所にだけ数字を表示することです。この2つの条件が交差することで、文字通り「X」の形が描かれます。

実際のロジックは次のように記述します。

for(i=0;i<rows;i++){
    for(j=0;j<rows;j++){
        if(i==j || i+j==rows-1){
            printf("%d",i+1);
        }else{
            printf(" ");
        }
    }
    printf("\n");
}

プログラム全文

以下が、数字をXパターンで表示するC言語プログラムの完全なソースコードです。

#include<stdio.h>
main(){
    int i,j,rows;
    printf("Enter number of rows:\n");
    scanf("%d",&rows);
    for(i=0;i<rows;i++){
        for(j=0;j<rows;j++){
            if(i==j || i+j==rows-1){
                printf("%d",i+1);
            }else{
                printf(" ");
            }
        }
        printf("\n");
    }
}

実行結果

上記のプログラムをコンパイルして実行すると、行数として「10」を入力した場合、次のような出力が得られます。

Enter number of rows:10
1         1
  2     2
    3 3
     44
     55
     66
    7 7
  8     8
9         9
10       10

解説のポイント

このプログラムでは、外側のループ(i)が行を、内側のループ(j)が列を制御しています。条件式 i==j は左上から右下への斜め線(\方向)、i+j==rows-1 は右上から左下への斜め線(/方向)に該当します。両方の条件を満たす中央の行では、同じ数字が隣接して表示される点にも注目してください。二重ループと条件分岐を組み合わせることで、さまざまな図形パターンを自由に出力できるようになります。

  1. C言語で数値パターンを出力するプログラムの作り方

    プログラムの概要 このプログラムは、ユーザーから行数を入力してもらい、それに応じた数値パターンを画面に出力するものです。 例として、入力が「5行」の場合、次のようなパターンが出力されます。 1 6 2 10 7 3 13 11 8 4 15 14 12 9 5 一見複雑に見えるこのパターンにも、きちんとした規則性があります。各行の先頭の数値は「1、6、10、13、15」と増加幅が5→4→3→2と1ずつ減っていき、行の中でも右に進むほど差が大きくなる仕組みです。 アルゴリズム ・各行の末尾側から順にパターンを出力する ・まず各行の最後の列を確定させる ・2行目以降は後ろから2番目の列から出力を

  2. Cプログラムで行列を対角パターンに沿って数値出力する方法

    この課題は、n×nの行列を対角パターンで出力することです。 例えば n が 3 の場合、対角パターンに従って行列を出力すると、次のような配置になります。 そして、実際の出力結果は以下の通りです。 実行例 Input: 3 Output: 1 2 4 3 5 7 6 8 9 Input: 4 Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 考え方 一見すると、「数値 n を受け取り n×n の行列を生成し、それを対角方向に走査しながら別の行列へ値を格納する」というアプローチが思い浮かびます