画像(logo)

HOME/[C言語]サンプルプログラム集 目次/ピラミッド

広告

[C言語 サンプルプログラム集]
ピラミッド

広告

↓発売日:2018年09月22日↓

たった1日で基本が身に付く! C言語 超入門

新品価格
¥2,225から
(2018/10/8 23:10時点)

目次へ戻る

ピラミッド

入力された段数のピラミッドを表示するプログラムです。

ピラミッドその1

画像(cs_7_1)

ピラミッドその2

画像(cs_7_2)

2種類のピラミッドを作ってみます。

ピラミッドその1

まずは簡単な方の作り方です。

ピラミッドのカタチを観察してみましょう。

1段の場合

*

3段の場合

*
**
***

5段の場合

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

このようになります。

1段目は「*」が1つ、3段目は「*」は3つ、5段目は「*」が5つと段数と同じ数だけ左端から「*」を表示させるという感じですね!

それではプログラムを見てみます。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){
	int i,j,num;

	printf("ピラミッドの段数を入力 > ");
	scanf("%d",&num);

	for(i=1;i<=num;i++){
		for(j=1;j<=i;j++){
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

変数「num」に段数を入力、2重の「for」ループでピラミッドを描いていきます。

外側の「for」ループ

for(i=1;i<=num;i++){
	
	printf("\n");
}

こちらはピラミッドの段数だけ改行をする部分になります。

変数「num」がピラミッドの段数なのでその分だけ改行すれば大丈夫ですね。

そして内側の「for」ループで「*」を描いていきます。

for(j=1;j<=i;j++){
	printf("*");
}

段数イコール「*」の数でしたね。

では現在の段数を表す変数はと言いますと外側の「for」ループの変数「i」がその変数になるので、その時の「i」だけ「*」を出力すれば完成です。

ピラミッドその2

続きまして少し複雑なピラミッドを描いていきます。

同じようにピラミッドのカタチを観察してみましょう。

1段の場合

*

2段の場合

 *
***

3段の場合

  *
 ***
*****

4段の場合

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

5段の場合

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

このようになります。

少し複雑ですね。

一つ一つ整理して見てみましょう。

段数

段数は先ほどと同じなので一つ目のピラミッドと同じプログラムで良いですね。

for(i=1;i<=num;i++){
	
	printf("\n");
}

この内側に空白を出力する処理、「*」を出力する処理を加えていきます。

空白を出力

空白を出力する処理です。

ちょっと面倒ですが空白の個数を数えてみましょう。

ssss*
sss***
ss*****
s*******
*********

5段の場合です。

わかりやすいように空白を「s」に置き換えてみました。

1段目は空白4つ

2段目は空白3つ

3段目は空白2つ

4段目は空白1つ

5段目は空白0つ

となっております。

規則的ですね。

それでは先ほどの「for」ループの内側にこれを実現できそうな処理をくわえます。

for(i=1;i<=num;i++){

	for(s=num - i;s>0;s--){
		printf(" ");
	}

	printf("\n");
}

外側の「for」ループの変数「i」はその時の段数になるのでした。

なのでこの一つずつ増加していく変数を使って元の段数から引いていけば一つずつ減少という処理も実現できますね!

「*」を出力

最後は「*」を出力していきます。

「*」の数に注目してみます。

1段目は「*」が1つ

2段目は「*」が3つ

3段目は「*」が5つ

4段目は「*」が7つ

5段目は「*」が9つ

となっております。

つまりは「(2×段数)-1」という計算をすればその段数での「*」の個数を導く事ができそうです。

なのでこちらをさきほどの「for」ループに加えていきます。

for(i=1;i<=num;i++){

	for(s=num - i;s>0;s--){
		printf(" ");
	}

	for(j=1;j<=(2*i) - 1;j++){
		printf("*");
	}

	printf("\n");
}

内側2つ目の「for」ループ「for(j=1;j<=(2*i) - 1;j++)」の部分ですね。

「j<=(2*i) - 1」と条件の部分がさきほどの「(2×段数)-1」となっているトコロに注目です。

これで完成になります。

ソースになります。

ピラミッドソース1

ピラミッドソース2

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓発売日:2016年02月29日↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2018/10/8 23:25時点)

↓発売日:2018年06月22日↓

スッキリわかるC言語入門

新品価格
¥2,916から
(2018/10/8 23:15時点)

↓発売日:2018年03月09日↓

C言語本格入門 ~基礎知識からコンピュータの本質まで

新品価格
¥3,218から
(2018/10/8 23:16時点)

↓発売日:2017年06月14日↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2018/10/8 23:17時点)

↓発売日:2018年05月21日↓

作って身につく C言語入門

新品価格
¥2,462から
(2018/10/8 23:18時点)

↓発売日:2017年12月07日↓

新・標準プログラマーズライブラリ C言語 ポインタ完全制覇

新品価格
¥2,678から
(2018/10/8 23:19時点)

↓発売日:2017年02月08日↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2018/10/8 23:20時点)

↓発売日:2017年09月26日↓

かんたん C言語 [改訂2版] (プログラミングの教科書)

新品価格
¥2,916から
(2018/10/8 23:22時点)