既に皆さんが適切な回答をしているので重複になりますが、
簡単にコメントを入れてみました。
コード:
#include <stdio.h>
void main(void)
{
int n,i,j;
printf("input:");
scanf("%d",&n);
for(i=0; i<n; i++)//(1)何行出力するか。0,1,・・・n-1までn行出力する
{
for(j=0; j<n; j++)//(2)各行ごとに何個*を出力するか。常に0~n-1まで繰り返すので四角形になる
{
printf("* ");
}
printf("\n");
}
printf("\n");
}
三角形、逆三角形については行(iの値)と*の個数の関係を見ていくと分かりやすいと思います。
三角形の場合(入力が5の場合)
iの値(行) *の個数(2の繰り返し回数)
0 5個(回)
1 4個(回)
2 3個(回)
3 2個(回)
4 1個(回)
逆三角形の場合(入力が5の場合)
iの値(行) *の個数(2の繰り返し回数)
0 1個(回)
1 2個(回)
2 3個(回)
3 4個(回)
4 5個(回)
iの値に応じて(2)の繰り返し回数が変わるので、nonさんの回答にあるように
iの値を使って(2)のfor文を書いてあげる必要があります。
続いて三角旗の場合は先の2つの組み合わせであることに気がつけば簡単に実現できます。
例えば入力が5の場合、
*
**
***
****
*****
****
***
**
*
となりますがこれは、入力が5の逆三角形と入力が4(つまり5-1)の三角形の組み合わせです。
(入力が4(5-1)の逆三角形と入力が5の三角形の組み合わせでもOKです)
一般式に置き換えると入力がnの逆三角形と入力がn-1の三角形を出力すればOKです。
なので単純に書くとこんな流れになります。
コード:
#include <stdio.h>
void main(void)
{
int n,i,j;
printf("input:");
scanf("%d",&n);
//入力nの逆三角形を出力
for(i=0; i<n; i++)
{
for()//条件式は考えてみてください
{
printf("* ");
}
printf("\n");
}
//引き続き入力n-1の三角形を出力
for(i=0; i<n-1; i++)
{
for()//条件式は考えてみてください
{
printf("* ");
}
printf("\n");
}
printf("\n");
}
こんな流れになろうと思います。
やってみてわからないことがあれば遠慮せず聞いてくださいね。
無事三角旗までできることをお祈りしております。