画像(logo)

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

広告

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

広告

↓2016年02月29日発売↓

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

目次へ戻る

ピラミッド

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

ピラミッドその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□

広告

↓2017年06月16日発売↓

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

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

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

新品価格
¥2,700から
(2017/5/1 13:15時点)