안녕하세요, C 프로그래밍 언어 열번째 강의입니다.

오늘은 Chapter 9에서 배운 연산자를 실습하겠습니다.

이번 시간만큼은 직접 코드를 작성하고, 컴파일 해보시길 바랍니다. 반드시!



일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.


가장 먼저 Chapter 7에서 배운 변수 선언을 대입 연산자를 이용해 변수 초기화와 동시에 했습니다.

변수 x에는 7이 대입되었고, 변수 y에는 4가 대입되었습니다.


그리고 Chapter 6에서 배운 printf 함수입니다. 잠깐 복습 겸 우리가 작성한 첫번째 printf 함수를 살펴볼까요.

첫 번째 전달인자는 겹따옴표 ""안의 내용입니다. 이 전달인자는 실제 화면에 출력하고자 하는 내용입니다.

그 중 %d은 서식 지정자이며, ""안에서 첫번째로 나타난 서식 지정자 %d는 printf 함수의 두 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

그리고 ""안에서 두번째로 나타난 서식 지정자 %d는 printf 함수의 세 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

마찬가지로 ""안에서 마지막으로 나타난 서식 지정자 %d는 printf 함수의 네 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

그리고 ""안에서 /n은 줄바꿈을 의미합니다. 이에 대해서는 추후에 다시 언급하겠습니다.

지금은 ""안에 \n을 넣는다면 줄바꿈이 된다고 이해하시면 충분합니다.


일단 슬라이드의 코드를 직접 작성하고 컴파일 (ctrl+F5)를 해볼까요.



컴파일 결과가 출력되었습니다.

첫번째 printf 함수는 덧셈 연산자입니다. 마지막 전달인자에서 x+y가 계산이 되고, 세번째 서식 지정자 위치에서 해당 값이 출력이 되었습니다.

7+4=11이 정상적으로 출력되었습니다.

뺄셈, 곱셈 연산자도 정상적으로 출력되었습니다.

하지만 네번째 printf 함수에서는 무엇이 출력이 되었나요?

실제 7/4는 1.75입니다. 하지만 모종의 이유로 소수점 이하는 생략된채 1만 출력이 되었습니다.

이는 변수의 자료형, 서식 지정자와 연관이 있으며, 조만간 설명해드리겠습니다.

마지막 연산자는 나머지 연산자입니다.

나머지 연산자는 말 그대로 나눗셈을 하고 나머지를 계산하여 출력합니다.

7/4를 계산하였을 때, 7=4*1+3, 즉 몫은 1이며 나머지는 3으로 계산할 수 있습니다.

따라서 3을 정상 출력하였습니다.


이때, 코드를 다시한번 보실까요? 마지막 printf 함수에 "%d%%%d=%d\n"라고 작성하였습니다.

%가 과도하게 많죠? printf 함수의 ""안에서 %를 마주치면 뭔가 특별한 것이 있을 것이라고 컴파일러는 판단합니다.

이로인해 %d가 문자 그대로의 %d가 아닌 서식 지정자로 인식이 됩니다.

하지만 문자 그대로의 %를 입력하고 싶다면, %%을 작성하시면 실제 출력화면에서는 %만 출력됩니다.

이러한 과정도 추후에 다시 설명하겠습니다. 지금은 연산자 실습시간이죠.



일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



후위 증감 연산자와 전위 증감 연산자는 주의깊게 사용해야합니다.


후위 증가 연산자의 경우, 모든 계산이 끝나고 다음 줄로 넘어갈 때 계산이 이루어집니다.

예를 들어, 현재 x=7이라고 변수 선언과 동시에 초기화를 하였습니다.

이를 후위 증가 연산자를 이용해, printf("%d\n", x++);라고 작성하였습니다.

이 때, x는 증가하지 않은채 수식이 진행됩니다. x는 그대로 숫자 7인 채로 진행됩니다.

따라서 printf 함수가 끝날 때까지도 x는 7이며 실제 컴파일 화면에서도 7을 출력합니다.

하지만 printf 함수가 끝나고 다음 줄로 넘어갈때 후위 증가 연산자는 작동합니다.

이 순간에 후위 증가 연산자가 x를 1 증가시켜 x=7+1=8로 만듭니다.

그렇기때문에 두번째 printf("%d\n", x)에서 x는 8이 되어 있었고, 실제 컴파일 화면에서도 8이 출력됩니다.


하지만 전위 증가 연산자의 경우는 다릅니다.

전위 증가 연산자의 경우 후위 증가 연산자와 달리 가장 우선적으로 변수를 1 증가시킵니다.

따라서 세번째 printf 함수에서 x는 8이였지만, 전위 증가 연산자로 인하여 곧바로 x=8+1=9가 되었고, 컴파일 화면에서 9가 출력됩니다.

그리고 이미 연산이 끝났기 때문에 세번째 printf 함수가 끝나도 변수 x는 변동이 없습니다.


이와 마찬가지로 후위, 전위 감소 연산자도 진행됩니다.

작성한 코드와 컴파일 화면을 잘 비교하며 공부해보세요.




비교 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



지난 시간에도 말씀드렸이 비교 연산자의 결과값은 참(1) 혹은 거짓(0)입니다.

x=7이고 y=4입니다.

첫번째 수식 7==4(7과 4는 같다)라는 수식은 거짓입니다. 따라서 거짓(0)을 반환하고 실제 컴파일 화면도 0을 출력합니다.

두번째 수식 7!=4(7과 4는 다르다)라는 수식은 참입니다. 따라서 참(1)을 반환합니다.

세번째 수식 7>4(7은 4보다 크다)라는 수식은 참입니다. 따라서 참(1)을 반환합니다.

네번째 수식 7<4(7은 4보다 작다)라는 수식은 거짓입니다. 따라서 거짓(0)을 반환합니다.



논리 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



x = 1, 즉 논리 연산자 입장에서는 참을 뜻합니다.

y = 0, 즉 논리 연산자 입장에서는 거짓을 뜻합니다.

첫번째 수식 !x(x의 반대)는 참의 반대인 거짓(0)입니다.

두번째 수식 x&&y(x와 y 모두 참이다)는 y가 거짓이기 때문에, 거짓(0)입니다.

세번째 수식 x||y(x 혹은 y 중 최소 하나는 참이다)는 x가 참이기 때문에, 참(1)입니다. 



복합 할당 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



복합 할당 연산자는 대입 연산자와 다른 연산자가 합쳐진 연산자입니다.

지난  시간에 설명했듯이 연산과 동시에 대입을 합니다.

첫번째 printf 함수를 보면 가장 초기 x값을 출력합니다. 숫자 7입니다.

덧셈 할당 연산자를 실행합니다.

x += y를 풀어 설명하자면, x와 y를 더하고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 7이고 y는 4이기때문에 7+4=11이 다시 x에 대입되어 x=11이 됩니다.

그렇기에 두번째 printf 함수의 변수 x 출력값이 11이 됩니다.


마찬가지로 x -= y를 풀어 설명하자면, x와 y를 빼고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 현재 11이고 y는 4이기때문에 11-4=7이 다시 x에 대입되어 x=7이 됩니다.

그렇기에 세번째 printf 함수의 변수 x 출력값이 7이 됩니다.



다시 x *= y를 풀어 설명하자면, x와 y를 곱하고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 현재 7이고 y는 4이기때문에 7*4=28이 다시 x에 대입되어 x=28이 됩니다.

그렇기에 세번째 printf 함수의 변수 x 출력값이 28이 됩니다.


이런 식으로 /=와 %= 를 유추할 수 있습니다.


오늘 실습은 여기까지 마무리 짓겠습니다.
반드시 직접 손으로 코드를 작성해보고 컴파일 해보시는 시간을 가지시길 바랍니다.


'Computer Science > C' 카테고리의 다른 글

Chapter 12. 진법  (0) 2018.04.24
Chapter 11. 연산자 우선순위  (0) 2018.04.19
Chapter 9. 연산자  (0) 2018.04.13
Chapter 8. 변수의 자료형  (0) 2018.04.12
Chapter 7. 변수의 선언  (0) 2018.04.12


안녕하세요. C 프로그래밍 언어 여섯번째 강의입니다.

오늘은 Chapter 4에서 잠깐 다루었던 printf 함수를 조금더 깊이 살펴보겠습니다.


오늘도 내용을 100% 이해하실 필요는 없습니다.

어떠한 단어가 사용되지는, 실제 결과값은 무엇인지만 생각해보는 시간이 되세요.



지난 시간에 이어, Hello.c 소스파일을 열어서 위와 같이 코드를 작성해봅시다.



'ctr+F5' 이용해 실행시킨다면 위와 같은 결과화면이 보입니다.

분명 printf 함수에 %d를 입력하였으나, 전혀 다른 출력물이 보이네요.

왜 그럴까요?



서식 지정자란 컴퓨터에게 데이터를 어떠한 형식으로 출력할 것인가 알려주는 역할을 합니다.

엄연히 정확한 정의는 아니지만, printf 함수에서 이해를 돕기 위한 정의입니다.

자세한 정의는 추후에 다시 하도록 하겠습니다.


일단 여러가지 서식 지정자가 있으며, 각각 다른 출력 형태를 의미하는 것을 알아둡시다.

그 중 %d란 부호가 있는 정수 데이터를 출력할 때 쓰이는 서식 지정자입니다.



전달인자란 함수를 호출할 때 전달되는 실제 값들입니다.

함수의 정의를 기억하시나요. 입력값과 출력값이 존재하였습니다.

여기서 입력값은 항상 하나일 필요는 없습니다.

함수가 어떤 식으로 정의가 되었느냐에 따라 입력값은 두 개 이상일 수 있습니다.

실제로 입력되어 함수로 전달되는 값들을 우리는 전달인자라 부릅니다. 



이제 위에서 우리가 만들었던 소스 코드를 다시 살펴보겠습니다.

가장 첫 번째 printf 함수입니다.

""를 이용하여 printf 함수에게 하나의 전달인자를 전달하였습니다.

printf 함수는 자신이 받은 첫 번째 전달인자를 해석하고 결과화면에 출력합니다.

이것은 헤더함수 'stdio.h'에서 정의된 printf 함수의 약속입니다.



두 번째 printf 함수입니다.

""를 이용하여 printf 함수에게 첫 번째 전달인자를 전달하였습니다.

printf 함수는 자신이 받은 첫 번째 전달인자를 해석합니다.

 


이 때 printf 함수는 첫 번재 전달인자에 %d라는 서식 지정자가 있다는 것을 알게 됩니다.

그렇다면 printf 함수는 자신에게 정해진 약속에 따라, 두 번째 전달인자를 찾습니다.

두 번째 전달인자는 첫 번째 전달인자 뒤 쉼표(,) 다음에 나타나기로 약속되어 있습니다.

따라서 printf 함수는 서식 지정자를 해석하고 두 번째 전달인자를 해당 자리에 넣어 결과화면에 출력합니다.



세 번째 printf 함수입니다.

""를 이용하여 printf 함수에게 첫 번째 전달인자를 전달하였습니다.

printf 함수는 자신이 받은 첫 번째 전달인자를 해석합니다.



이 때 printf 함수는 첫 번재 전달인자에 %d라는 두 개의 서식 지정자가 있다는 것을 알게 됩니다.

그렇다면 printf 함수는 자신에게 정해진 약속에 따라, 두 번째 전달인자를 찾습니다.

두 번째 전달인자는 첫 번째 전달인자 뒤 쉼표(,) 다음에 나타나기로 약속되어 있습니다.

따라서 printf 함수는 첫 번째 서식 지정자를 해석하고 두 번째 전달인자를 해당 자리에 넣어 결과화면에 출력합니다.

마찬가지로 printf 함수는 두 번째 서식 지정자를 해석하고 세 번째 전달인자를 해당 자리에 넣어 결과화면에 출력합니다. 


printf 함수에 대한 이해가 어느정도 되었나요?

갑작스레 서식 지정자와 전달인자에 대해 새롭게 나와 당황하셨나요.

괜찮습니다.


모두 100% 이해하실 필요가 없습니다.

다른 단어들과 함께 천천히 공부해 나가신다면 점점 그 의미를 또렷하게 아시게 될겁니다.

읽어보만 보시지말고 직접 손수 코드를 작성해보시고 결과물을 확인해보세요!

'Computer Science > C' 카테고리의 다른 글

Chapter 7. 변수의 선언  (0) 2018.04.12
Chapter 6_1. 과제  (0) 2018.04.05
Chapter 5. 주석 달기  (0) 2018.04.05
Chapter 4_1. 과제  (0) 2018.04.05
Chapter 4. Hello, C world ! 살펴보기  (0) 2018.04.03

+ Recent posts