- 締切済み
forループ
C語課題で出されたのですが forをつかって正の整数nをキーボードから入力し, nに応じて「*」で模様を描くプログラムを作成せよ。 (nは50まで対応させる) n=1 n=2 n=3 ・・・n=50 * ** *** ** *** *** といったように表示させたいのですが、 50まで対応するようにする方法がわかりません。 教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yama5140
- ベストアンサー率54% (136/250)
#1 「補足」 >これをもとに、nの値が51以上のときは改行し終了する。 >というプログラムにしたいです。 ☆単純に、50を超えたら for 文を終了すればよいのでは・・。 でも、これでは「質問本文」とは、全然違う???よね・・。 #include <stdio.h> int main() { int n, i, j; printf( "seisu=" ); scanf( "%d", &n ); for( i = 1; ( i <= n ) && ( i <= 50 ); i++ ){ for( j = 1; ( j <= i ) && ( j <= 50 ); j++ ){ printf( "*" ); } printf( " " ); } printf( "\n" ); return( 0 ); } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ☆質問本文では、複数行、しかも1字ずらしで、次項以降を出力している。 このとおりに出力するには、紙に書いて、行頭の空白数えて・・(たかだか6まで ← 「DOS窓」はみ出さないように。n = 99; とかにするなら、ファイルにリダイレクトして・・)。 参考 http://www.bohyoh.com/CandCPP/FAQ/FAQ00093.html #include <stdio.h> int main() { int n, i, j, iTop = 3, iZou = 4; n = 6; // 質問主旨とは離れます for( i = 1; ( i <= n ) && ( i <= 50 ); i++, iZou++ ){ for( j = i; ( j <= n ) && ( j <= 50 ); j++ ){ printf( "%.*s ", j, "***************************************************" ); } printf( "\n" ); printf( "%*s", iTop, "" ); // 次の行の先頭空白 iTop += iZou; } printf( "\n" ); return( 0 ); } 注:共に、インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
- asuncion
- ベストアンサー率33% (2127/6289)
>これをもとに、nの値が51以上のときは改行し終了する。 >というプログラムにしたいです。 そのソースが、もともとの仕様を満たしていないことにはお気づきですか? 四角形を描かないですよね。
- euwai
- ベストアンサー率57% (4/7)
書くだけならこんな感じですかね? どのような事を想定されているか、もう少し情報が欲しいです。 (私はC言語は初心者なので微妙なソースですが) ------ #include <stdio.h> #include <string.h> int main(void) { int data; /* 入力変数 */ int i, ii; /* ループ用変数 */ char s[51]; /* 文字出力用変数 */ scanf("%d",&data); /* 文字入力の受付 */ if ((data > 0) && (data < 51)) { /* 入力された数字の確認 */ printf("%d\n",data); for (i = 1; i <= data; i++) { /* 縦のループ */ strcpy(s , ""); for (ii = 1; ii <= data; ii++) strncat(s, "*", 1); /* 横のループ */ printf("%s\n",s); } } else { /* 範囲外の数字の時 */ printf("Buffer Over\n"); } return 0; }
- toshih2000
- ベストアンサー率22% (120/541)
・入力値により「*」を描く部分はできているけど、 51以上の値が入力されたときに、どうすれば良いか 判らないということですか? (質問を読むとこうとれる) もしそうだとするならば、一般には何もせずに終了するか、 メッセージを表示して再入力を促すかだと思います。 多分こんなことではないと思うので、もっと判らない部分の 詳細を書いた方が良いと思います。 いまできている途中のソースでもあれば なお回答しやすいと思います。
補足
説明不足ですいません; #include <stdio.h> int main() { int n,i,j; printf("seisu="); scanf("%d",&n); for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("*"); } } printf("\n"); return 0; } これをもとに、nの値が51以上のときは改行し終了する。 というプログラムにしたいです。