• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語プログラムが理解できなくて…)

C言語で中抜きの正方形を作る方法

このQ&Aのポイント
  • C言語で中抜きの正方形を作る方法について解説します。
  • 解答例をご紹介します。プログラムを実行すると、2から9までの数字を入力できます。数字が範囲外の場合はエラーメッセージが表示されます。正常な数字を入力すると、中抜きの正方形が表示されます。
  • 解答例のプログラムでは、2重のループを利用して正方形を作成しています。外側のループでは、縦の行数を制御し、内側のループでは、各行の横の文字を制御しています。条件分岐を使用して、上下の辺をアスタリスク(*)で、それ以外の箇所をスペースで埋めています。

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

  • ベストアンサー
回答No.1

コメントを書いてみますね。 #include<stdio.h> void main() { int hen,i,j; /* ユーザーから辺の長さをもらう (2 - 9の範囲内の値をもらえるまで繰り返し) */ do { printf("2~9の数字を入力"); scanf("%d",&hen); if(hen<2||hen>9) printf("エラー\n"); } while(hen<2||hen>9); /* 各行を描画 */ for(i=1;i<=hen;i++) { /* 1行を描画 */ for(j=1;j<=hen;j++) { if(i==1||i==hen) /* 最初の行 あるいは 最後の行の場合 (a) */ putchar('*'); else { if(j==1||j==hen) /* 各行の最初あるいは最後の文字の場合 (b) */ putchar('*'); else putchar(' '); /* それ以外 */ } } putchar('\n'); } } というのでなんとなくわかりますか? まず"最初の行 あるいは 最後の行の場合 (a)"は、*で囲わないといけないのですべて*を表示します。 そして、各行の最初あるいは最後の文字の場合 (b)の条件で各行についても最初の要素と最後の要素に*を表示することで1行として * 間の空白 *<改行> を表示します。 ループのところをこう書くとまだわかりやすいかもしれません。 for(line = 1; line <= hen; line++) { for(character =1; character <= hen; character++) { if((line == 1 || line == hen) /* 先頭行か最後の行 */ || (character == 1 || character == hen) /* 先頭文字か最後の文字 */) putchar('*'); else putchar(' '); } putchar('\n'); /* 各行に分けるために末尾に改行を入れる */ }

その他の回答 (1)

  • bajutsu
  • ベストアンサー率20% (139/693)
回答No.2

とりあえず、scanf のところから、hen に適当な値を仮定して トレースするんだ! それすらせずに質問するのは甘い。

littbus
質問者

お礼

おっしゃる通りですね…もう少しあれこれ考えてみてから今後は質問させていただこうと思います

関連するQ&A

専門家に質問してみよう