最初にfor
ステートメントのセマンティクスを思い出してください。
for(initialization; condition; step) body
はcondition
がチェックされ、condition
はループとstep
のbody
を実行するマシンが進むtrueの場合にのみされるたびに、次のような意味
initialization
while condition is true do
body
step
を持っています。
a = 2
の場合、条件2 * 2 <= 2
が保持されないため、マシンは内側のループをトスして、外側のループの次の反復に直接進みます。内部ループ本体は、a
の値の場合にのみ少なくとも1回実行されます。ここで、2 * 2 <= a
です。この条件が満たされたときの最初の値a
は4
であることを確認するのは簡単です。
a=4
b
の次の値が3 * 3 > 4
であるため、内側ループは1回だけ実行されます。 a
が外側ループ内で取る最大値は9
です。これは、内部ループが2回実行されるときの最小値であるa
です。すべてのあなたのコードからすべてで
for (int a = 2; a < 10; a++)
{
for (int b = 2; b * b <= a; b++)
{
Console.WriteLine("{0}a {1}b {2}ab", a, b, b * b);
}
}
次のような出力を期待すべきである:
4a 2b 4ab
5a 2b 4ab
6a 2b 4ab
7a 2b 4ab
8a 2b 4ab
9a 2b 4ab
9a 3b 9ab
は、テンプレートに一致するようにa * b
と3列目の番号を交換した場合は、お使いのWriteLine()
コールは
Console.WriteLine("{0}a {1}b {2}ab", a, b, a * b);
となり、出力は
4a 2b 8ab
5a 2b 10ab
6a 2b 12ab
7a 2b 14ab
8a 2b 16ab
9a 2b 18ab
9a 3b 27ab