【C言語】数字パターンを出力するプログラムの作り方
プログラムの概要
数値パターンとは、「パターンルール」と呼ばれる規則に基づいて生成された数列のことです。パターンルールでは、1つまたは複数の数学的操作を用いて、数列内の連続する数値同士の関係を表現します。
C言語では、for文による繰り返し処理を組み合わせることで、このような規則性のある数字パターンを簡単に出力できます。本記事では、代表的な2種類のパターン(三角形型とひし形型)を出力するプログラムを紹介します。
パターンの例
パターン1(三角形型)
1 2 6 3 7 10 4 8 11 13 5 9 12 14 15
パターン1では、各行の先頭の数字が行番号と一致し、隣の要素は直前の値に「(5 − 列番号)」を加えたものになります。たとえば2行目は「2, 6」(2 + (5−1) = 6)、3行目は「3, 7, 10」(7 + (5−2) = 10)という規則で構成されています。
パターン2(ひし形型)
1
1 2 3
1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7
1 2 3 4 5
1 2 3
1
アルゴリズム
パターン1のロジック
- i は行(Row)、j は列(Column)を表します。
- 「5」は5行×5列のパターンを作成することを意味します。
- 各行(i)ごとにループ処理を行います。
- 変数 k を i の値で初期化します。
- 各列(j)ごとにループ処理を行います。
- 現在の列(j)に対応する値を計算して表示します。
- k を「k + 5 − j」で更新し、次の列へ進みます。
パターン2のロジック
- 1行目:「1」を表示
- 2行目:「1 2 3」を表示
- 3行目:「1 2 3 4 5」を表示
- 4行目:「1 2 3 4 5 6 7」を表示
- 5行目:「1 2 3 4 5 6 7 8 9」を表示
- その後、5行目の下に4行目から1行目までと同じ内容を逆順に表示し、ひし形を完成させます。
サンプルコード
/* 数字パターンを出力するCプログラム */
#include<stdio.h>
int main(){
int i,j,k;
printf("Numeric Pattern 1");
printf("\n");
printf("\n");
for(i=1;i<=5;i++){
k = i;
for(j=1;j<=i;j++){
printf("%d ", k);
k += 5-j;
}
printf("\n");
}
printf("\n");
printf("Numeric Pattern 2");
printf("\n");
printf("\n");
for(i = 1;i<=5;i++){
for(j = i;j<5;j++){
printf(" ");
}
for(k = 1;k<(i*2);k++){
printf("%d",k);
}
printf("\n");
}
for(i = 4;i>=1;i--){
for(j = 5;j>i;j--){
printf(" ");
}
for(k = 1;k<(i*2);k++){
printf("%d",k);
}
printf("\n");
}
getch();
return 0;
}
※ getch() は古いコンパイラ(Turbo C など)専用の関数です。GCC などの最近の開発環境では、getch() を getchar() に置き換えるか、該当行を削除して実行してください。
出力結果

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