パソコン日記

気づいたこと まとめてみる

C言語でいろいろな形の図を"*"で表示してみる(for文を入れ子にしてみる)

C言語で"*“を使って図を書いてみる

C言語で、"*“の記号を使っていろいろな図を書くことに挑戦してみたいと思います。また、図を書くにために、for文を入れ子(ネスト)にしてみたいと思います。

for文の入れ子

まずfor文の入れ子の動作を確認してみたいと思います。次のプログラムを実行してみます。

int main(void){
    int i,j;

    for(i=0; i<5; i++) {
        for(j=0; j<3; j++) {
            printf("i:%d, j:%d\n", i, j);
        }
    }
}

結果↓

i:0, j:0
i:0, j:1
i:0, j:2
i:1, j:0
i:1, j:1
i:1, j:2
i:2, j:0
i:2, j:1
i:2, j:2
i:3, j:0
i:3, j:1
i:3, j:2
i:4, j:0
i:4, j:1
i:4, j:2

iとjがどのように変わっているのか確認するプログラムです。結果を見てみると、外側のループが実行され、次に中のループが実行され、終了すると再び外側のループに戻り、そして再び中のループが実行されていることが分かります。

四角形を"*“で書いてみる

次にfor文の入れ子を使って四角を書いてみます。

int main(void){
    int i,j;

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

結果↓

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

このプログラムでは内側のループで改行なしで"*“を打ちます。そうすると

*****

が表示されます。内側のループを抜け、外側のループに戻るときに改行"\n"します。そうすることによって"*****“を繰り返し書くことができ、四角になります。

三角形を"*“で書いてみる

次に、三角形を描いてみます。プログラムを次のように書いてみました。

#include <stdio.h>

int main(void){
    int i,j;

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

結果↓

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

たぶんできました!printf()のところは変えていません。内側のfor文の条件のところを変えました。

j<=i;

とすることによって、jがiと同じ数より大きくなったときだけfor文が実行されます。つまり、iと同じ数だけ内側のfor文のループが回ります。

次に、三角形の上の頂点が右になったものをif文を使いならが書いてみます。 プログラムを次のようにしてみました。

#include <stdio.h>

int main(void){
    int i,j;

    for(i=0; i<5; i++) {
        for(j=5; j>0; j--) {
            if (j-i > 1) {
                printf(" ");
            } else {
                printf("*");
            }
        }
        printf("\n");
    }
}

結果↓

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

まぁできました。外側のループは一緒ですが、内側のループでjが5,4,3,2,1となるようにしました。 するとj-iの値が、次のようになります。

i:0, j-i: 5,  4,  3,  2,  1
i:1, j-i: 4,  3,  2,  1,  0
i:2, j-i: 3,  2,  1,  0, -1
i:3, j-i: 2,  1,  0, -1,  1
i:4, j-i: 1,  0, -1, -2, -3

なので、j-1の値が1より大きいときに" “を、1以下のときに”*“を書くようにするとできました!

もっと別な図形を書くことに挑戦してみたいですね。