2017-04-23 15 views
0

以下のforループを実行すると、最初に表示される行は "2a 2b 2ab"でなければなりません。 aは "2"に初期化されていますが、なぜそれが "4a"で始まるのですか?私はb(2)= b(2)= 4、b ++、b(3)* b(3)としなければならないと思った。 )= 9、事前に感謝forループの初期化がネストされていませんか?

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); 
     } 
    } 

答えて

0

最初にforステートメントのセマンティクスを思い出してください。

for(initialization; condition; step) body 

conditionがチェックされ、conditionはループとstepbodyを実行するマシンが進むtrueの場合にのみされるたびに、次のような意味

initialization 
while condition is true do 
     body 
     step 

を持っています。

a = 2の場合、条件2 * 2 <= 2が保持されないため、マシンは内側のループをトスして、外側のループの次の反復に直接進みます。内部ループ本体は、aの値の場合にのみ少なくとも1回実行されます。ここで、2 * 2 <= aです。この条件が満たされたときの最初の値a4であることを確認するのは簡単です。

a=4bの次の値が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 
関連する問題