60896


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

[code]

    ./a.out
    1辺：2
    **
    *
    
[/code]

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

[code]

    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;
    }
    
[/code]


CC BY-SA 4.0
2019-11-26T13:22:19.160
60865
2019-11-27T16:21:41.923
2019-11-26T13:25:40.387
19110
36412
question
c
*で２等辺三角形を作る


`*`
の数からいうと直角二等辺三角形ではありますよね・・・いまどきのコンソール画面上は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` スタートであることに注意)

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

[code]

    for (i=0; i<n; ++i) {
        for (j=0; j<n-i; ++j) {
            putchar('*');
        }
        putchar('\n');
    }
    
[/code]


CC BY-SA 4.0
2019-11-27T02:48:43.750
60876
2019-11-27T02:48:43.750
8589
60865
answer


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

[code]

    *
    **
    ***
    ****
    *****
    
[/code]

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

[code]

    *****
    ****
    ***
    **
    *
    
[/code]

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

[code]

        *
       ***
      *****
     *******
    *********
    
[/code]

n = 5 の場合  
* の数は上から順番に  
1 , 3 , 5 , 7 , 9 個なので 式 2 * i - 1 （ i は 1 から n まで )  
* の前のスペースの数は  
4 , 3 , 2 , 1 , 0 個なので 式 n - i （ i は 1 から n まで )

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

[code]

    // ２等辺三角形を描画する
    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");
        }
    }
    
    
[/code]

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

[code]

    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");
        }
    }
    
[/code]

r=15 の 円

[code]

                   *
              ***********
            ***************
          *******************
         *********************
        ***********************
       *************************
       *************************
      ***************************
      ***************************
     *****************************
     *****************************
     *****************************
     *****************************
     *****************************
    *******************************
     *****************************
     *****************************
     *****************************
     *****************************
     *****************************
      ***************************
      ***************************
       *************************
       *************************
        ***********************
         *********************
          *******************
            ***************
              ***********
                   *
    
[/code]


CC BY-SA 4.0
2019-11-27T16:12:45.043
60896
2019-11-27T16:21:41.923
2019-11-27T16:21:41.923
18851
18851
60865
answer