Taek

4. Exercises 본문

C언어/문제 정리

4. Exercises

Taeky 2018. 7. 11. 11:48

1. a) 1 2

  b) 0

  c) 동일한 계산순서를 가질 경우엔 왼쪽부터가 기준이다. 

17 % 9 / 8이고 다시 8 / 8이니 정수형 출력은 1이 된다.

  d) 6 % 4 / 3으로 변하고 다시 1/3으로 바뀌어 0이 출력된다.


2. 같은 값이 된다. 

  단, i와 j가 양수라는 가정하에 unary 연산자가 적용되어 -로 바뀌니 같은 것이지, 기본적으로 산수와 같다.


3. /와 % 연산자는 C89와 C99가 약간 다르다.

  C89는 /연산에서 피연산자 중 하나가 음수값이면 결과값은 반올림된다.

          %연산에서 피연산자 둘 다가 음수값이면 OS에 따라서 결과값이 바뀐다.(implementation-defined)

  C99는 / 연산에서 결과값이 항상 0으로 잘리게 된다.

          %연산에서 i % j 는 i와 같은 부호로 남는 값이 반환된다.

  a) 1

  b) -2

  c) -2

  d) 2


4. a) 1

   b) -1

   c) -1

   d) 1


5. a) 3

  b) -3이나 2

  c) 3이나 -2

  d) -3이나 2

  C89의 나머지 연산자 공식은 i % j = ( i - ( i / j * j) )이다. 

ex) b)는 -8 / 5 = ( -8 - (-8/5*5)) = -8 - ( -10) = 2


6. a) 3

  b) -3

  c) 3

  d) -3


7. 결과값 자체는 같이 나올 수 있다. 

다만, total값 끝이 0으로 나눠지는 경우, 오류 체크를 위해 존재하는 12번째 숫자와 일치하지 않는 경우가 발생한다. 

예를 들어, total이 90이라 치면 

첫 번째 알고리즘) 9 - ( ( 90-1 ) % 10 ) = 0

두 번째 알고리즘) 10 - ( ( 90 ) % 10 ) = 10

따라서 두 숫자가 나오게 되어 오류가 발생하게 된다.


8. 알고리즘에 따라 계산해보자.

total = 90 ) ( 10 - (0) ) %10 = 0으로 같다. 

total = 88 ) ( 10 - (8) ) % 10 = 2.

원래 알고리즘) 9 - ( (87) % 10 ) = 2

   등... 여러 번 해봤을 경우에 같다. 


9. a) 출력은 '63 8'이다.

할당 연산자 오른쪽부터 계산한 뒤 할당하기 때문에 정리하면 ( i *= (j + 1) )이라고 볼 수 있다. 


  b) i += j += k를 순서대로 계산하기 위해선 오른쪽부터 정리해야 한다.

j += k 에 의해 j는 2, k는 1

나머지 i += j는 i += 2가 되서 3이 된다.

따라서 '3 2 1'이 출력된다.


  c) b)와 계산 방식이 같다.

j -= k에 의해 j는 -1

i -= j에 의해 i는 2가 된다.

따라서 출력은 '2 -1 3'이 된다.


  d) b, c 계산 방식과 같다.

      출력은 '0 0 0'


10. a) i += i 에 의해 i는 12

       j는 i를 할당하니 12

따라서 출력은 '12 12'가 된다.


b) 3 4


c) i는 정수형 변수라 2.5가 2로 바뀌어 할당된다. 

 따라서 출력은 '2 8'이다.


d) 6 9'


11. a) i++는 i를 불러온(fetch) 뒤에 증가시킨다. 

따라서 출력은 '0 2'가 된다.


b) ++j는 j를 증가시킨 뒤 불러온다. 

따라서 출력은 '4 11 6'이다.


c) 0 8 7


d) 3 4 5 4


12. a) 6 16


b) 6 -7


c) 6 23


d) 6 20


13. ++i와 ++i는 풀어보면 i += 1이지만 i값을 증가시키는 과정에서 차이가 있다.

 ++i는 ' i 값을 불러오기 전에 증가'시킨다.

 i++는 ' i 값을 불러온 뒤에 증가'시킨다.


14. a) ( ( a * b) - (c * d) ) + e )

b) ( ( ( a / b) % c) / d )

c) ( ( ( ( -a) - b ) + c ) - (+d) )

d) ( ( ( a * (-b) ) / c ) - d ) 


15. i = 1, j = 2가 초기값이다. 

a) i = 3

b) i = 0, j = 2

c) i = 1, j =2

d) i = 1, j = 3

'C언어 > 문제 정리' 카테고리의 다른 글

5. Exercises  (0) 2018.07.12
4. Programming Projects  (0) 2018.07.12
3. Programming Projects  (0) 2018.07.11
3. Exercise  (0) 2018.07.03
2. Programming Projects  (0) 2018.07.02