
C言語で中抜きの正方形を作れという問題だったのですが 解答を見ても解説は無く
ちんぷんかんぷんで
どこでどういう処理をして、こういった解答になるのかが分からないのです
特に教えていただきたいのが何故この文で白抜きの部分ができるのかという事です
初歩的な所だと思うのですがお恥ずかしながら質問させていただきます
ちなみに解答はこうありました
#include<stdio.h>
void main()
{
int hen,i,j;
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++)
{
for(j=1;j<=hen;j++)
{
if(i==1||i==hen)
putchar('*');
else
{
if(j==1||j==hen)
putchar('*');
else
putchar(' ');
}
}
putchar('\n');
}
}
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'); /* 各行に分けるために末尾に改行を入れる */
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初心者です。for文、if文を使っ...
-
最早開始時間と最遅完了時刻を...
-
C言語 エラーの原因がわからな...
-
信頼区間の1.96や1.65ってどこ...
-
「Aに対するBの割合」と「Aに対...
-
For文の終了値を関数にしても問...
-
配列をnビットシフトする
-
数学 一次関数 関数 y=-3/4x+k(...
-
std::set<int> で、ある値が何...
-
Enterキーを押されたら次の処理...
-
sscanfとscanfの違いがよくわか...
-
main.c:7:43: warning: implici...
-
#define _CRT_SECURE_NO_WARNIN...
-
InvokeMemberメソッドとは何を...
-
【#define】 defineで定義した...
-
2の補数を計算するプログラム
-
a^2の√=a が成り立たない場合
-
2÷3などの余りについて
-
PICで小数点の演算
-
iTRONプログラミング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
10進数からN進数に変換するプロ...
-
配列を関数に渡す方法
-
scanfが実行されません
-
C言語で電卓を作成する。
-
C言語・最大値を算出するプロ...
-
C言語階乗の総和を求める
-
実行すると if文 に矛盾
-
計算結果がlong型以上になる場...
-
C言語プログラム
-
C言語。どうしてコンパイルでき...
-
c言語for文
-
getcの改行判定
-
C言語で勉強中(max,min)の出し方
-
C言語 プログラム
-
SIGALRMでプロセス終了
おすすめ情報