本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成23年度 秋期 応用情報技術者試験問題と解説

問22

メインプログラムを実行した結果はどれか。ここで、static は静的割当てを、auto は動的割当てを表す。

メインプログラム
 auto int x, y ;
 x = f(2) + f(2) ;
 y = g(2) + g(2) ;

関数 f(u)
 auto int u ;
 auto int v = 1;
 v = v + u ;
 return v ;

関数 g(u)
 auto int u ;
 static int v = 1;
 v = v + u ;
 return v ;

   ┌───┬───┐
   │ x │ y │
 ┌─┼───┼───┤
 │ア│ 6 │ 6 │
 ├─┼───┼───┤
 │イ│ 6 │ 8 │
 ├─┼───┼───┤
 │ウ│ 8 │ 6 │
 ├─┼───┼───┤
 │エ│ 8 │ 8 │
 └─┴───┴───┘


正解


解説

静的割り当ては、関数が一度呼び出されると、メモリが割り当てられ、プログラムが終了するまで、値が保持される。

動的割り当ては、関数が呼び出されるたびに、メモリが割り当てられ、値は保持されない。

【xについて】
1回目の f(2) の呼び出しでは、v = 1 + 2 = 3であり、2回目の f(2)の呼び出しでも vの値は保持されないから、
v = 1 + 2 = 3 となる。

従って、x = f(2) + f(2) = 3 + 3 = 6

【yについて】
1回目の g(2) の呼び出しでは
v = 1 + 2 = 3 であり、
2回目の g(2)の呼び出しでは、1回目の g(2)の呼び出しにより v = 3 が保持されるから、
v = 3 + 2 = 5 となる。

従って、
y = g(2) + g(2) = 3 + 5 = 8

問21 目次 問23