プロが教えるわが家の防犯対策術!

c言語の問題を教えてください。 キーボードから正の整数 n (ただし 10 未満) を一つ入力し、1 から n までの整数を次のように n 行表示 するプログラムを作成せよ。ただし、各行の表示も for 文を用いて行うこと。という問題です。プログラムは書けてますが、再度見たらfor文のところが分からなくってしまい理解できていないので解説していただきたいです。また、この問題に限らず"n行表示させる"とか"文字で正三角形を表示させる"といったようなfor文を使う問題の考え方を教えていただきたいです。理解できなくて困ってます。
#include <stdio.h>

int main()

{
int i,j,n;

scanf("%d", &n);

for(i=0;i<n;i++) {
for(j=0;j<n;j++){
printf("%d",(i+j)%n+1);
} printf( "\n" );
}
return(0);
}

A 回答 (2件)

>次のように n 行表示 するプログラムを作成せよ


次の部分がわからないからムリ
    • good
    • 0

> 再度見たらfor文のところが分からなくってしまい理解できていないので解説していただきたいです。



困ったね。
何が分からんか分からん、ってカンジの質問だし・・・。
基礎的過ぎる、って言えば基礎的過ぎるんだよなぁ。

逆に考えましょう。
実は逆に

(i+j)%n+1

って式が先にあるんです。
「これが成立するが為に」for文があるんです。
従って、もし「理解してない」とすれば、そっちの式を理解出来てない、って事ですよ。

あと、forの性質としては、forを二重重ね(まぁ、別に三重でも四重でもいいんですが簡単の為)しても繰り返しは「並列」では起きない、と言う事です。
例えば

for(i=0;i<n;i++) {
 for(j=0;j<n;j++){
  何らかの処理
 }
}

ってあった場合、iとjは「同時には」更新されません。
これの意味は外側のforのiに着目した時、

i = 0 の時:
for(j=0;j<n;j++){
  何らかの処理
} が実行される

i = 1 の時:
for(j=0;j<n;j++){
  何らかの処理
} が実行

i = 2 の時:
for(j=0;j<n;j++){
  何らかの処理
} が実行

.
.
.

i = n の時:
for(j=0;j<n;j++){
  何らかの処理
} が実行

と言うカンジで、iがある値で固定されてる最中に内側のforが実行されるようになっています。
そこさえ分かってればコードを読み解くのはそこまで難しくは無い筈なんですけどねぇ。

> この問題に限らず"n行表示させる"とか"文字で正三角形を表示させる"といったようなfor文を使う問題の考え方を教えていただきたい

特にねぇんじゃねぇかなぁ。
実際あんま必要ないし(苦笑)。

と言うかね。ぶっちゃけた話。
C言語の初心者用の問題って「☓☓と表示せよ」って問題ばっか多くて、結果どうやってprintfで表示させるか悩ませる問題だらけなの。
でも実際のプログラミングじゃそういうのってあんま意味ないんですよ。
っつーか、そういう問題ばっかやらせるから表示ばっかにこだわったおかしなクセが身につく。
実際では、大体のパターンでも配列扱って、行列的な二次元の配列操作でforが二重になります、とか割と当たり前のシチュの方が多いんじゃないかな。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!