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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- Visual Basic(VBA) VBAに関する質問です 2 2022/03/30 22:44
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
C言語 数字以外を入力させない...
-
c言語for文
-
#if 1 #elseの意味について
-
c言語で平均をだす
-
n個からm個を取り出すプログ...
-
行列をべき乗させるプログラム
-
scanf関数を用いての加減乗除%...
-
C言語で電卓を作成する。
-
c言語プログラミングで1から100...
-
配列を使って魔方陣
-
C言語 偶数判定
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
C言語 重複しない4ケタの乱数...
-
C言語プログラムが理解できなくて…
-
C言語の二分法のプログラムにつ...
-
C言語階乗の総和を求める
-
scanfが実行されません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
scanf関数を用いての加減乗除%...
-
c言語プログラミングで1から100...
-
getcの改行判定
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
VHDLで、case文とwhen文のどち...
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
プログラミングに関して
-
C言語についてですfor ifをつか...
おすすめ情報