ネストforについて教えて下さい(入門

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ああああっ

ネストforについて教えて下さい(入門

#1

投稿記事 by ああああっ » 5年前

ネスト構造について今ひとつ読んでる入門書だけじゃ理解できないので教えて下さい
これってどういう順番で実行されてるんですか?

for (int i = 0; i <= 5; i++) {
for (int j = 0; j < i; j++) {
cout << '*';
}
cout << endl;
}

box
記事: 2002
登録日時: 13年前

Re: ネストforについて教えて下さい(入門

#2

投稿記事 by box » 5年前

ループの中で、*のかわりに
iとjの値を出力してみたらどうですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

かずま

Re: ネストforについて教えて下さい(入門

#3

投稿記事 by かずま » 5年前

ああああっ さんが書きました:
5年前
ネスト構造について今ひとつ読んでる入門書だけじゃ理解できないので教えて下さい
これってどういう順番で実行されてるんですか?
フォーラムルールに従って、codeタグを使用してください。

さて、実行順序ですが、次のコードで見てみましょう。

コード:

#include <iostream>

using namespace std;

int k = 0;
void p(const char *s) { cout << "   " << ++k << ": " << s << endl; }

int main()
{
	for (int i = (p("i = 0"), 0); p("i <= 5"), i <= 5; p("i++"), i++) {
		for (int j = (p("j = 0"), 0); p("j < i"), j < i; p("j++"), j++) {
			p("cout << '*'"), cout << '*';
		}
		p("cout << endl"), cout << endl;
	}
}
実行結果

コード:

   1: i = 0
   2: i <= 5
   3: j = 0
   4: j < i
   5: cout << endl

   6: i++
   7: i <= 5
   8: j = 0
   9: j < i
   10: cout << '*'
*   11: j++
   12: j < i
   13: cout << endl

   14: i++
   15: i <= 5
   16: j = 0
   17: j < i
   18: cout << '*'
*   19: j++
   20: j < i
   21: cout << '*'
*   22: j++
   23: j < i
   24: cout << endl

   25: i++
   26: i <= 5
   27: j = 0
   28: j < i
   29: cout << '*'
*   30: j++
   31: j < i
   32: cout << '*'
*   33: j++
   34: j < i
   35: cout << '*'
*   36: j++
   37: j < i
   38: cout << endl

   39: i++
   40: i <= 5
   41: j = 0
   42: j < i
   43: cout << '*'
*   44: j++
   45: j < i
   46: cout << '*'
*   47: j++
   48: j < i
   49: cout << '*'
*   50: j++
   51: j < i
   52: cout << '*'
*   53: j++
   54: j < i
   55: cout << endl

   56: i++
   57: i <= 5
   58: j = 0
   59: j < i
   60: cout << '*'
*   61: j++
   62: j < i
   63: cout << '*'
*   64: j++
   65: j < i
   66: cout << '*'
*   67: j++
   68: j < i
   69: cout << '*'
*   70: j++
   71: j < i
   72: cout << '*'
*   73: j++
   74: j < i
   75: cout << endl

   76: i++
   77: i <= 5

かずま

Re: ネストforについて教えて下さい(入門

#4

投稿記事 by かずま » 5年前

かずま さんが書きました:
5年前
さて、実行順序ですが、次のコードで見てみましょう。
「式」と「式と同じ文字列」を書くのは煩わしいので、
マクロを使って書き直してみました。

コード:

#include <iostream>

using namespace std;

int k = 0;
void p(const char *s) { cout << "   " << ++k << ": " << s << endl; }
#define v(s) (p(#s), (s))

int main()
{
	p("i = 0");
	for (int i = 0; v(i <= 5); v(i++)) {
		p("j = 0");
		for (int j = 0; v(j < i); v(j++)) {
			v(cout << '*');
		}
		v(cout << endl);
	}
}
実行結果は変わりません。

どういう順番で実行されてるのか、まだ分かりませんか?

返信

“C言語何でも質問掲示板” へ戻る