- ベストアンサー
for文
forを使って九九の表を作るのですが、 フローチャートすら書けないでいます。 そもそものfor文の意味もわかりません。 誰か分かりやすく説明してください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
下のお二方の解説を参考に穴埋めでやってみましょう。 □のところに変数、△に演算子、○に数字を入れて適当に実行してみて その動作を確認して下さい。 #include <stdio.h> void main() { int i,j; printf(" 1 2 3 4 5 6 7 8 9\n\n"); /* 外側のfor文 iが1~9まで */ for(i=1;i△9;□++){ printf("%2d ",i); /*内側のfor文 jが1~9まで */ for(j=○;j<=○;j△){ printf(" %2d",i□j);/* i×j の答えを表示 */ } printf("\n"); } } よけい分かりにくかったらすいません。 2重のfor文って最初は頭がこんがらがっちゃうんですよね。
その他の回答 (2)
- kokucho81
- ベストアンサー率61% (157/255)
::::::::::::::::::::::::::: for (★; △; ▲) { ■ } □ ::::::::::::::::::::::::::: 以下の順番で実行が繰り返されます。 (1)はじめに一回★が実行されます。 (2)△の条件判定に合格したら■が順に実行されます。不合格だとFOR文の繰り返しは終わりです。 (3)■が実行し終えたら▲が実行されます。そして、(2)へ再び移ります。 こうやって、(2)で条件判定が不合格になるまで繰り返されます。 §九九を考える 九九の表をいきなり考えると難しいかもしれません。 ここは、九九の表ではなくて、1~9だけの表を考えましょう。 1 2 3 4 5 6 7 8 9 全ては書きませんが、(1)のはじめに★が「1」になるようにして、 (2)の条件判定のところでは、「9以下」という判定文にすると、 うまくいきますね、(3)の▲のところは1増やす、という感じでしょうか? ここまでできれば、簡単かもしれません。 次に九九とは、さきほどの1~9のそれぞれの「中」に、さらに1~9がある と考えれば良いですね。 一番左の数時と、それぞれの行の中から1つとったものの一覧表が九九だといえます。 1 -- 1 2 3 4 5 6 7 8 9 2 -- 1 2 3 4 5 6 7 8 9 3 -- 1 2 3 4 5 6 7 8 9 4 -- 1 2 3 4 5 6 7 8 9 5 -- 1 2 3 4 5 6 7 8 9 6 -- 1 2 3 4 5 6 7 8 9 7 -- 1 2 3 4 5 6 7 8 9 8 -- 1 2 3 4 5 6 7 8 9 9 -- 1 2 3 4 5 6 7 8 9 ということは、FOR文のなかに、FOR文があるという感じになるでしょうか。。。 :::::::::::::::::::::::::::::::::::::::::::: 外側のFOR文、、、上の一番左の数値の1~9を担当する for (~){ 内側のFOR文、、、上の各行の横に並んだ1~9を担当する for (~){ } } という感じです。 これだけわかれば、あとはプログラムをちょろちょろ直感で書いていても そのうち動くときが来そうです。
お礼
これを元にして、展開していきたいと思います。ありがとうございました。
- a-kuma
- ベストアンサー率50% (1122/2211)
for は繰返しの処理をするための構文で、以下のような形を取ります。 for (最初にすること ; ループの継続条件 ; ループの最後にすること) 繰り返すこと 変数i を1~10まで繰り返すのであれば int i; for (i = 1 ; i <= 10 ; ++i) { printf("i=%d\n", i); /* i を使った処理 */ } という感じ。 九九の表ですから、1の段について1~9を、2の段について…、と 9の段まで行なうのですから、ループが二重になりますね。 要は 「何とか」×「何とか」のふたつの「何とか」を1~9まで、 それぞれ繰り返すということですよね。 # もう少し書いた方が良いですか?
お礼
forについての説明、ありがとうございました。先生よりも分かりやすかったです。
お礼
おかげでプログラムが作れそうです。これで実際にやってみたいと思います。 ありがとうございました