• 締切済み

forループ

C語課題で出されたのですが forをつかって正の整数nをキーボードから入力し, nに応じて「*」で模様を描くプログラムを作成せよ。 (nは50まで対応させる) n=1 n=2 n=3  ・・・n=50 *   **  ***      **  ***           *** といったように表示させたいのですが、 50まで対応するようにする方法がわかりません。 教えてください。

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

#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)
回答No.3

>これをもとに、nの値が51以上のときは改行し終了する。 >というプログラムにしたいです。 そのソースが、もともとの仕様を満たしていないことにはお気づきですか? 四角形を描かないですよね。

  • euwai
  • ベストアンサー率57% (4/7)
回答No.2

書くだけならこんな感じですかね? どのような事を想定されているか、もう少し情報が欲しいです。 (私は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; }

回答No.1

・入力値により「*」を描く部分はできているけど、 51以上の値が入力されたときに、どうすれば良いか 判らないということですか? (質問を読むとこうとれる) もしそうだとするならば、一般には何もせずに終了するか、 メッセージを表示して再入力を促すかだと思います。 多分こんなことではないと思うので、もっと判らない部分の 詳細を書いた方が良いと思います。 いまできている途中のソースでもあれば なお回答しやすいと思います。

arugadayo
質問者

補足

説明不足ですいません; #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以上のときは改行し終了する。 というプログラムにしたいです。

関連するQ&A