
実行例を次のようにするにはどうすればいいでしょうか?  

実行例：



```
./a.out
1辺：2
**
*

```

ちなみに、自分は以下のようにプログラムしました。



```
int main(void)
{
    int i,j,n;
    printf("一辺： ");
    scanf("%d",&n);
    for(i=n;i>0;i=i-1){
       for(j=n;i<=j;j=j-1) {
        printf("*");
    }
    printf("\n");
    }
    return 0;
}

```


[*で２等辺三角形を作る](/questions/60865/%e3%81%a7%ef%bc%92%e7%ad%89%e8%be%ba%e4%b8%89%e8%a7%92%e5%bd%a2%e3%82%92%e4%bd%9c%e3%82%8b)
==========================================================================================================================



質問者の 2等辺三角形 (n=5)



```
*
**
***
****
*****

```

回答者 774RR さんの ２等辺三角形 (n=5)



```
*****
****
***
**
*

```

今回の案の ２等辺三角形 (n=5)



```
    *
   ***
  *****
 *******
*********

```

n = 5 の場合  

* の数は上から順番に  

 1 , 3 , 5 , 7 , 9 個なので 式 2 * i - 1 （ i は 1 から n まで )  

* の前のスペースの数は  

 4 , 3 , 2 , 1 , 0 個なので 式 n - i （ i は 1 から n まで )


と まず大まかな、計画を立てて、それから ループを使ってプログラムを書きます。



```
// ２等辺三角形を描画する
void printTriangle(int n)
{
    for(int i = 1; i <= n; i++) {
        int width = i * 2 - 1;
        int prev_space_n = n - i;
        for(int j = 0; j < prev_space_n ; j++) {
            printf(" ");
        }
        for(int j = 0; j < width ; j++) {
            printf("*");
        }
        printf("\n");
    }
}


```

参考までに、円もかけます。



```
void printCircle(int r)
{
    // x^2 + y^2 <= r^2 : 半径 r の 円を描画する
    int r2 = r * r;
    for(int x = -r ; x <= r ; x++) {
        for(int y = -r; y <= r; y++) {
            int d = x * x + y * y;
            if (d <= r2) {
                printf("*");
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
}

```

r=15 の 円



```
               *
          ***********
        ***************
      *******************
     *********************
    ***********************
   *************************
   *************************
  ***************************
  ***************************
 *****************************
 *****************************
 *****************************
 *****************************
 *****************************
*******************************
 *****************************
 *****************************
 *****************************
 *****************************
 *****************************
  ***************************
  ***************************
   *************************
   *************************
    ***********************
     *********************
      *******************
        ***************
          ***********
               *

```



`*` の数からいうと直角二等辺三角形ではありますよね・・・いまどきのコンソール画面上はX軸とY軸でピッチが違うのでそう見えないだけで。で設問は、提示プログラムでは下のほうがX軸が長いんだけど、それを上のほうがX軸が長いにしたい、でしょうか。


とりあえず `for` の条件が一般的プログラマ（っつかオイラ）にとっては難しい（直観的でない）です。合計 `n` 行を出力したいのであれば `for (i=0; i<n; ++i)` のほうが素直、一般的でしょう。 [c](/questions/tagged/c "'c' のタグが付いた質問を表示") や [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") では `n` 個や `n` 回を表現するのに `[0..n)` の半開区間を多用するので今から慣れておくと吉。


で、ご要望の三角形は「左側に `*` がある」「１行目が `n` 個」なわけで、先の `for (i=0; i<n; ++i)` ループを採用するなら `i` 行目の `*` の数は「 `n-i` 個」です (`i` が `0` スタートであることに注意)


ここまで分析できればコード化は簡単で



```
for (i=0; i<n; ++i) {
    for (j=0; j<n-i; ++j) {
        putchar('*');
    }
    putchar('\n');
}

```

