본문 바로가기
학부공부/C_Basic

1. Quiz[C Basic]

by sonpang 2021. 11. 7.
반응형

다음 프로그램을 실행할 경우 출력 결과를 작성하라.(오류가 나면 오류도 함께 작성할 것.)

1.1.

#include <stdio.h>
#define PR(X,Y,Z) printf("X=%d, Y=%d, Z=%d\n", X, Y, Z)
int x=1, y=3, z=7;
int sum(int *x, int y){
  PR(z,*x,y);
  *x = 4;
  y = -y;
  return (*x+y+z);
}
int main(){
  int x=2, z;
  z=sum(&y, x);
  PR(x,y,z);
  z=sum(&x, z);
  PR(y,z,x);
  return 0;
}

 

1.2.

#include <stdio.h>
int x = 10;
void f( ){
  x++;
  printf("%d, ", x);
}
void g( ){
  static int x = 30;
  printf("%d, ", x++);
  printf("%d, ", x++);
}
int main( ){
  int x = 8;
  printf("%d, ", ++x);
  {
    int x = 7;
    printf("%d, ", ++x);
  }
  g( );
  f( );
  g( );
  return 0;
}

 


Solution

1.1.

① z=sum(&y, x);

여기서 y는 global 변수의 y이고, (global::y의 주소)

x는 main함수의 x입니다. (main::x의 값 = 2)

 

①-1 PR(z, *x, y);

여기서 z는 global 변수의 z이고, (global::z의 값 = 7)

*x는 main 함수에서 데려온 &y가 가르키는 값, (global::y의 값 = 3)

y는 main 함수에서 데려온 x가 가르키는 값입니다. (main::x의 값 = 2)

따라서 X=7, Y=3, Z=2 가 출력됩니다.

 

①-2 *x=4;

*x는 main 함수에서 데려온 &y(global::y의 주소)입니다.

&y가 가르키는 값을 변경하면 되므로, global 변수의 y 값은 4로 변하게 됩니다.

 

①-3 y=-y;

y에 –y를 넣었습니다. 즉, sum함수의 y가 –2가 되었습니다.

(global 변수에도 y가 있지만, sum 함수에도 y가 있으므로, 함수 내의 변수가 우선순위를 갖게 됩니다.)

 

①-4 return (*x+y+z);

*x는 아까 global변수 y의 주소이므로, 이 주소가 가르키는 값은 4입니다.

y는 sum함수의 y 변수이므로, -2가 됩니다.

z는 sum 함수에 z 변수가 없으므로, global 변수의 z 값을 가져와 7이 됩니다.

따라서 이 값이 return되는 main 함수의 z는 4-2+7=9 가 됩니다.

--------------------------------------------------------------------------

② PR(x, y, z);

x는 main 함수의 x 값인 2가 됩니다.

y는 main 함수에 y가 없으므로, global 변수 y의 값인 4가 됩니다.

z는 ①-4에서 9로 바뀌었으므로, 9가 됩니다.

따라서 X=2, Y=4, Z=9 가 출력됩니다.

-------------------------------------------------------------------------

③ z=sum(&x, z);

여기서 x는 main 함수의 x이고, (main::x의 주소)

z는 main 함수의 z입니다. (main::z의 값 = 9)

 

③-1 PR(z, *x, y);

여기서 z는 global 변수의 z이고, (global::z의 값 = 7)

*x는 main 함수에서 데려온 &x가 가르키는 값, (main::x의 값 = 2)

y는 main 함수에서 데려온 z가 가르키는 값입니다. (main::x의 값 = 9)

따라서 X=7, Y=2, Z=9 가 출력됩니다.

 

③-2 *x=4;

*x는 main 함수에서 데려온 &x(main::x의 주소)입니다.

&x가 가르키는 값을 변경하면 되므로, main 함수의 x 값은 4로 변하게 됩니다.

 

③-3 y=-y;

y에 –y를 넣었습니다. 즉, sum함수의 y가 –9가 되었습니다.

(global 변수에도 y가 있지만, sum 함수에도 y가 있으므로, 함수 내의 변수가 우선순위를 갖게 됩니다.)

 

③-4 return (*x+y+z);

*x는 아까 main함수 x의 주소이므로, 이 주소가 가르키는 값은 4입니다.

y는 sum함수의 y 변수이므로, -9가 됩니다.

z는 sum 함수에 z 변수가 없으므로, global 변수의 z 값을 가져와 7이 됩니다.

따라서 이 값이 return되는 main 함수의 z는 4-9+7=2 가 됩니다.

----------------------------------------------------------------------------

④ PR(y, z, x);

y는 main 함수에 y가 없으므로, global 변수의 y값인 4가 됩니다.

z는 ③-4에서 2로 변경되었으므로, 2가 됩니다.

x는 ③-2에서 4로 변경되었으므로, 4가 됩니다.

따라서 출력은 X=4, Y=2, Z=4 가 됩니다.

 

<정답>

X=7, Y=3, Z=2

X=2, Y=4, Z=9

X=7, Y=2, Z=9

X=4, Y=2, Z=4

 

 

 

1.2.

① int x = 8;

main 함수의 x 변수가 8의 값을 갖게 됩니다.

② printf(“%d, ”, ++x);

①번의 x 값이 1이 더해진 후 출력되므로, 9, 가 출력됩니다.

③ int x = 7;

이 x 값은 main 함수 내의 중괄호 안에서 다시 선언되었으므로,

이 중괄호 안에서는 x 값이 7이 됩니다.

④ printf(“%d, ”, ++x);

③번에서 다시 선언된 x 값이 1이 더해진 후 출력되므로, 8, 가 출력됩니다.

------------------------------------------------------------------

⑤ g();

g() 함수를 call 합니다.

⑤-1 static int x = 30;

g() 함수 안에서 정적 변수 x가 선언되었습니다.

static 변수는 함수를 벗어나더라도 변수가 사라지지 않고 계속 유지됩니다.

⑤-2 printf(“%d, ”, x++);

g() 함수 안의 x 값을 출력한 후 1을 더하므로, 30, 이 출력된 후,

g() 함수의 x 값은 31이 됩니다.

⑤-3 printf(“%d, ”, x++);

⑤-2 와 같은 이유로 31, 이 출력된 후, g() 함수의 x값은 32가 됩니다.

------------------------------------------------------------------

⑥ f();

f() 함수를 call 합니다.

⑥-1 x++;

f() 함수는 x 변수를 갖지 않으므로, global 변수 x 값에 1을 더합니다.

따라서 global 변수의 x값은 11이 됩니다.

⑥-2 printf(“%d, ”, x);

⑥-1의 x값을 더하므로, 11, 이 출력됩니다.

------------------------------------------------------------------

⑦ g();

g() 함수를 call 합니다.

⑦-1 static int x = 30;

마치 x 값이 다시 선언된 것 같지만, 이 x는 정적 변수이므로,

⑤에서의 32의 값이 그대로 유지되어있습니다.

⑦-2 printf(“%d, ”, x++);

⑤-2 와 같은 이유로 32, 이 출력된 후, g() 함수의 x값은 33이 됩니다.

⑦-3 printf(“%d, ”, x++);

⑤-2 와 같은 이유로 33, 이 출력된 후, g() 함수의 x값은 34가 됩니다.

 

<정답>

9, 8, 30, 31, 11, 32, 33,

반응형

'학부공부 > C_Basic' 카테고리의 다른 글

2. Project_64 PuyoPuyo[C Basic]  (0) 2021.11.07
1. Project_KU Mobile Phone Bill Calculator[C Basic]  (0) 2021.11.07
10. File[C Basic]  (0) 2021.11.07
9. Struct[C Basic]  (0) 2021.11.07
8. Bit operator[C Basic]  (0) 2021.11.07

댓글