平成16年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
W−4
次のC言語のプログラムを実行することを考える。

int a=1; int b=2; int c=3;
void f(int x, int y, int z) {
 int b=0;
 a=a+x; b=b+y; c=c+z;
 printf("%d,%d,%d,", a, b, c);
}
main() {
 int a;
 a=10; b=20; c=30;
 f(100,200,300);
 printf("%d,%d,%d\n", a, b, c);
}

次の出力結果のうち、正しいものを選べ。
@ 101,200,330,10,20,330
A 101,200,330,101,200,330
B 101,202,303,10,20,30
C 110,220,330,10,20,330
D 110,220,330,110,220,330



【正解】 @

main関数で使われる変数は以下の通り。
 a:
main関数
 b:
外部変数
 c:
外部変数

関数 f で使われる変数は以下の通り。
 a:
外部変数
 b:
関数 f
 c:
外部変数

便宜上、
外部変数を
A, B, C
関数 f のローカル変数を 
b
main関数のローカル変数を a
と表すと、以下のように変数の値が変化していく。

まずは外部変数に値が入る。 ・・・ A=1; B=2; C=3;
main:
 
a=10; B=20; C=30;
F:
 
b=0
 
A=A+x; b=b+y; C=C+z;  ・・・A=1+100, b=0+200, C=30+300
 printf("%d,%d,%d,",
A, b, C); ・・・ 101,200,330
main:
 printf("%d,%d,%d\n",
a, B, C); ・・・ 10,20,330

EXCELのマクロのご相談なら ファーストマクロ 



W−3 目次 W−5
ファーストマクロ TOPページ