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

C言語で数字をスパイラル(蛇行)パターンで表示するプログラム

はじめに

本記事では、C言語を使って数字をスパイラル(蛇行)パターンで表示する方法を解説します。このパターンの特徴は、行ごとに数字の並び順が交互に入れ替わり、蛇が這うように数字が連なっていく点です。

出力イメージ

作成するパターンは以下のようになります。

 1  2
 4  3
 5  6
 8  7
 9 10
12 11

ロジックの解説

数字をスパイラルパターンで表示するために使用するロジックは以下の通りです。

for(i=1;i<=rows*2;i+=2){
    if(k%2==1){
        printf("%3d %3d",i,i+1);
        k++;
    }else{
        printf("%3d %3d",i+1,i);
        k++;
    }
    printf("\n");
}

このロジックのポイントは以下の2つです。

・ループ変数 i は 1 から始まり、2 ずつ増加させることで、各行に連続する2つの数字を割り当てます。
・カウンタ変数 k の奇偶を判定し、奇数行では「小さい数字 → 大きい数字」の順に、偶数行では「大きい数字 → 小さい数字」の順に表示することで、蛇行するパターンを実現しています。

プログラム全体

以下が、数字をスパイラルパターンで表示するCプログラムの全体です。

#include<stdio.h>
int main(void){
    int i,rows,k=1;
    printf("Enter number of Rows for Spiral Pattern\n");
    scanf("%d",&rows);
    for(i=1;i<=rows*2;i+=2){
        if(k%2==1){
            printf("%3d %3d",i,i+1);
            k++;
        }else{
            printf("%3d %3d",i+1,i);
            k++;
        }
        printf("\n");
    }
    return 0;
}

まず行数をユーザーから入力として受け取り、その行数に応じてループを回しながらパターンを出力します。書式指定子「%3d」を使用することで、数字が3桁分の幅で右揃えに表示され、出力がきれいに整います。

実行結果

上記のプログラムをコンパイルして実行すると、以下のような結果が出力されます。

Enter number of Rows for Spiral Pattern
10
  1   2
  4   3
  5   6
  8   7
  9  10
 12  11
 13  14
 16  15
 17  18
 20  19

まとめ

このように、カウンタ変数の奇偶を利用して数字の並び順を交互に入れ替えるだけで、シンプルな蛇行パターンを簡単に実装できます。ループと条件分岐の基礎的な組み合わせで実現できるため、C言語の制御構文を学ぶ練習問題としても最適です。ぜひ行数を変えて、さまざまなパターン出力を試してみてください。

  1. C言語で正方行列をZ字形に表示するプログラム

    プログラムの概要本記事では、C言語を使って正方行列の要素を「Z」の字形に沿って出力するプログラムを解説します。正方行列とは、行数と列数が等しい行列のことです。n行n列の行列は「n次の正方行列」と呼ばれ、2×2、3×3、4×4などの行列が該当します。Z字形出力のアルゴリズム行列の要素をZ字形で表示するには、次の3つの部分を順番に出力します。最上行(1行目):左端から右端までのすべての要素対角成分:右上から左下へ向かう斜めの要素(両端の角は除く)最下行(最終行):すべての要素これらを順につなげると、アルファベットの「Z」の形が完成します。3×3の行列の場合: a00 a01 a02

  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 の行列を生成し、それを対角方向に走査しながら別の行列へ値を格納する」というアプローチが思い浮かびます