広告
↓発売日:2018年09月22日↓
新品価格 |
入力された段数のピラミッドを表示するプログラムです。
ピラミッドその1
ピラミッドその2
2種類のピラミッドを作ってみます。
まずは簡単な方の作り方です。
ピラミッドのカタチを観察してみましょう。
1段の場合
*
3段の場合
* ** ***
5段の場合
* ** *** **** *****
このようになります。
1段目は「*」が1つ、3段目は「*」は3つ、5段目は「*」が5つと段数と同じ数だけ左端から「*」を表示させるという感じですね!
それではプログラムを見てみます。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(){ int i,j,num; printf("ピラミッドの段数を入力 > "); (void)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」だけ「*」を出力すれば完成です。
続きまして少し複雑なピラミッドを描いていきます。
同じようにピラミッドのカタチを観察してみましょう。
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」となっているトコロに注目です。
これで完成になります。
ソースになります。
広告
↓発売日:2016年02月29日↓
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
新品価格 |
↓発売日:2018年03月09日↓
新品価格 |
↓発売日:2017年06月14日↓
新品価格 |
↓発売日:2018年05月21日↓
新品価格 |
↓発売日:2017年12月07日↓
新品価格 |
↓発売日:2017年02月08日↓
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
新品価格 |