• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:直角三角形を表示するプログラム)

プログラムで直角三角形を表示する方法

このQ&Aのポイント
  • 下記のプログラムを実行するとコマンドプロントになにも表示されず、強制終了しなければならなくなってしまいます。初歩的な質問で申し訳ありませんが、回答していただけると有難いです。
  • プログラム中のwhile文の書き方が間違っているため、直角三角形が表示されない原因です。修正することで正常に動作するようになります。
  • while文の条件式(i-- > 0)が問題で、iの値をデクリメントしながら判定しているためループが永遠に続くことになります。結果としてプログラムが正常に終了しないため、強制終了する必要が生じます。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

変数 i を段数のカウント用に使っているようですが、 for文の中にあるwhile文のループで i が0になるまで減らしてしまっているため、 いつまでたってもfor文のループを抜けることができません。 下記のように別の変数を導入すれば、うまくいくと思います。 なお、改行を入れる場所がまずかったので修正してあります。 #include <stdio.h> int main(void) { int count, n, i; printf("何段ですか?"); scanf("%d", &count); for (i = 1; i <= count; i++) { n = i; while (n-- > 0) { putchar('*'); } putchar('\n'); } return 0; }

zakki1206
質問者

お礼

そういうことだったんですね!ようやく理解できました。 ご回答ありがとうございました。

その他の回答 (3)

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.4

ループのための変数は別々に管理すべきでしょう。 あとこの場合なら while より for 構文のほうが適しているかと思います。 int i,j; for (i = 1; i <= count; i++) {  for (j = 0; j < i; j++) {   putchar('*');  }  putchar('\n'); }

zakki1206
質問者

お礼

>ループのための変数は別々に管理すべきでしょう。 そういうものなんですね!大変勉強になります。 ご回答ありがとうございます。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

【別解】 このコードは、出力画面をxy平面と見立てて、 不等式が表わす領域に対して'*'を出力することによって 直角三角形を書くようになっています。 この考え方を応用すると、正方形・長方形・ひし形などの 比較的単純な図形が、不等式の部分を修正するだけで 書けるようになります。 #include <stdio.h> int main(void) { int count, x, y; printf("何段ですか?"); scanf("%d", &count); for (y = count - 1; y >= 0; y--) { for (x = 0; x < count; x++) { putchar((y <= -x + count - 1) ? '*' : ' '); } putchar('\n'); } return 0; }

zakki1206
質問者

お礼

>出力画面をxy平面と見立てて こういう方法もあるんですね。これならいろいろ表示させられそうです。 参考にさせていただきます。ありがとうございます。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

失礼しました。 >なお、改行を入れる場所がまずかったので修正してあります。 このくだりは無視してください。

関連するQ&A