問題の解説. #################### 問題 以下の各プログラム実行後の最終的な変数kの値を応えよ 01 #include 02 03 void main() 04 { 05 int i,k=0; 06 for( i=1; i<10; i++) 07 { 08 switch(k%4) 09 { 10 case 1: 11 k = k + 3; 12 case 2: 13 k = k + 2; 14 break; 15 default: 16 k = k+3; 17 } 18 } 19 } #################### << point 1 >> Q. 以下の for 文は 中身を何回実行するか? それぞれのとき,iはいくつか? for( i=1; i<10; i++) { : } A. 9回実行. for文は「i=1から始まり,毎回iは1増えて(i++で),10未満なら 受け入れる」なので, i=1 にて1回実行, i=2 にて1回実行, i=3 にて1回実行, : i=8 にて1回実行, i=9 にて1回実行, の合計 9回. (この問題を解くのに iの値は 関係ないのですが,重要なので 理解してください) << point 2 >> Q. for文の中身である以下の文はどの様に動くか? switch(k%4) { case 1: k = k + 3; case 2: k = k + 2; break; default: k = k+3; } A. switch の中身である k%4 が 1 であったら, caes 1: に移動して,break; まで実行.つまり k = k + 3; k = k + 2; を実行. switch の中身である k%4 が 2 であったら, caes 2: に移動して,break; まで実行.つまり k = k + 2; を実行. switch の中身である k%4 が その他(1,2以外)であったら default: に移動して,break; まで実行.つまり k = k+3; を実行. 実際の動きは 以下の様になる. 05行目を実行 k = 0 となる. 06行目の for文を実行. 前述の通り,i=1で実行,i=2で実行,i=3で実行,...,i=9で実行と9回実行. i=1 にてfor文の中身の以下を実行する. switch(k%4) { case 1: k = k + 3; case 2: k = k + 2; break; default: k = k+3; } kは0 であるので,k%4 は 0 であり, switch文は default: に移動して k = k+3; を実行. 現在 k は 0 であるので, k = k+3; は,「k に k+3を代入する」であり,「k に 0+3=3を代入する」という意味になる. 単純に「kの値が3増える」と理解してよい. よって k = 0 → 3 となる. i=2 にてfor文の中身を実行する. kは3であるので,k%4 は 3 であり, switch文は default: に移動して, k = k+3; を実行. k = 3 → 6 となる. i=3 にてfor文の中身を実行する. kは6であるので,k%4 は 2 であり, switch文は case 2: に移動して, k = k+2; を実行. k = 6 → 8 となる. i=4 にてfor文の中身を実行する. kは8であるので,k%4 は 0 であり, switch文は default: に移動して, k = k+3; を実行. k = 8 → 11 となる. i=5 にてfor文の中身を実行する. kは11であるので,k%4 は 3 であり, switch文は default: に移動して, k = k+3; を実行. k = 11 → 14 となる. i=6 にてfor文の中身を実行する. kは14であるので,k%4 は 2 であり, switch文は case 2: に移動して, k = k+2; を実行. k = 14 → 16 となる. i=7 にてfor文の中身を実行する. kは16であるので,k%4 は 0 であり, switch文は default: に移動して, k = k+3; を実行. k = 16 → 19 となる. i=8 にてfor文の中身を実行する. kは19であるので,k%4 は 3 であり, switch文は default: に移動して, k = k+3; を実行. k = 19 → 22 となる. i=9 にてfor文の中身を実行する. kは22であるので,k%4 は 2 であり, switch文は case 2: に移動して, k = k+2; を実行. k = 22 → 24 となる. 結論 : k が 24 の状態で終了する.