본문 바로가기

컴퓨터 일반/프로그래밍언어론

프로그래밍언어 문제(1)

https://www.youtube.com/watch?v=FPrqX5Eg8G4&t=1190s

  1. main 함수가 어디에 있는지 본다
  2. 변수를 정리한다. a는 정수를, c와 d는 실수를 담는 변수이다
  3. 3.5를 3에 대입하면, a는 정수형 변수이기에 3이 된다
  4. 3을 c에 대입하면, c는 실수형 변수이기에 3.0이 된다.
  5. d는 연산자 우선순위에 따라 a/2를 먼저 하고 (3/2=1) 3+1+3.0 = 7.0이 된다
a c d
3 3.0 7.0

 

https://www.youtube.com/watch?v=FPrqX5Eg8G4&t=1190s

  1. main 함수가 어디에 있는지 본다, main에서 func(i)를 호출하는 문제이다.
  2. main에서 i를 선언했고, 5부터 시작해서 0이상일 때까지 반복한다 i는 1씩 감소한다.
  3. 2로 나눴을때 나머지가 1이라면 func(i) 함수를 호출한다.
  4. 함수 func(5)는 num이 1이 아니니까 return 5 * func(4)
  5. func(4)는 num이 1이 아니니까 return 4 * func(3)  .... 를 반복한다
  6. func(1)이 되었을때 num이 1이므로 return=1; 해서 값을 호출한 곳으로 돌아간다.
  7. 즉, 5 * 4 * 3 * 2 = 120이 된다.
i  
5 func(5) : 120

 

i 값을 하나 감소시켜서 4가 된다.

4는 2로 나누면 나머지가 0이 되므로 함수를 다시 수행한다

i  값을 하나 감소시켜서 3이 된다

func(3) 함수를 호출하면 위와 같은 방식으로 func(3) = 3*2 = 6이 된다.

이렇게 세번째 줄을 출력하면 func(1) : 1 을 출력한다.

 

i  
5 func(5) : 120
4  
3 func(3) : 6
2  
1 func(1) : 1

 

https://www.youtube.com/watch?v=FPrqX5Eg8G4&t=1190s

 

배열의 특성

int a[ ] 

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
10 20 30 40 50 +0 70 80 90 100
a a+1 a+2 a+3 a+4 a+5 a+6 a+7 a+8 a+9

 

ptr 이란 포인터 변수로 주소를 기억하는 변수이다.

a+3이므로 a[3]을 기억한다 = 40

i는 0부터 5보다 작을때까지 1씩 증가한다.

i *(ptr + i) -3 출력
0 40-3 37
1 50-3 47
2 60-3 57
3 70-3 67
4 80-3 77

 

https://www.youtube.com/watch?v=FPrqX5Eg8G4&t=1190s

  1. 정수/정수 = 정수이다.
  2. 1/2 = 0.5이므로 0이다. 따라서 a = 4 * 0 = 0이다
  3. a++는 대입을 하고 1을 증가시킨다. 따라서 b = 0이고 그 다음에 1이 증가한다.
  4. b를 출력하면 0이 된다

https://www.youtube.com/watch?v=FPrqX5Eg8G4&t=1190s

a b
12 4

 

  1. return b? -> 0을 제외한 숫자는 참이된다 b는 4이므로 f(4, 12%4)를 출력한다
  2. f(4, 0)을 호출하면 새로운 int 4와 0이 되어서 b는 0이 되므로 거짓이다
  3. a의 값인 4를 호출하고 함수는 종료된다.

https://www.youtube.com/watch?v=FPrqX5Eg8G4&t=1190s

 

main 함수가 어디에 있는지 본다.

i sum
0 0 + foo()

 

foo() 함수는 정수형 변수 var1과 값을 보존하는 정적변수 var2로 구성된다.

var1 var2 (정적변수)
1 1

 

return (var1++ ) + (var2++) //리턴을 하고나서 1을 증가시킨다. 1+1=2를 함수를 호출한 곳으로 돌려준다

sum = sum + foo() //0 + 2가 된다.

i값을 하나 증가시키고 함수를 다시 반복한다

foo() 함수를 다시 호출시킨다

var1 var2 (정적변수)
1 1
  2

 

var1은 초기화 되었지만 var2는 값을 보존하는 정적변수이기 때문에

값이 1이 증가한 2가 된다. 1+2를 함수를 호출한 곳으로 돌려준다

sum 값은 기존의 2에 3을 더하여 5가 된다.

i를 1 증가시키고 foo()를 호출하면?

var1 var2 (정적변수)
1 1
1 2
1 3

 

i sum
0 0 + 2
1 2 + 3
2 5 + 4

 

즉 sum = 9를 출력한다