안녕하세요, 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 프로그래밍 언어 네번째 강의입니다.

오늘은 세번째 강의에서 실행보았던 Hello.c 파일을 살펴보겠습니다.

프로그래밍 언어를 학습하기 위해서는 기본적인 용어들을 알아야하는데요.

이번 시간에는 기본 용어에 대한 간략한 소개를 하겠습니다.


물론 어떤 단어를 설명하기 위해, 또다른 어려운 단어를 사용해야할 때가 있습니다.

그럴때에는 이해를 못하여도 좋습니다.

이번 강의는 '프로그램은 이런 구성이구나'까지만 생각해도 좋습니다.



지난 시간에 작성을 완료했던 Hello.c 소스 파일입니다.



프로그래밍은 함수에서 시작해서 함수로 끝납니다.

크고 복잡한 문제를 해결하기 위해서는 수많은 작은 함수들을 이용해야합니다.

기본적으로 사람은 완벽한 천재가 아니기 때문에, 복잡한 문제를 하나의 함수로 해결하지 못합니다.

그렇기에 "Divide and Conquer"라는 말이 프로그래밍의 기초가 되었습니다.


해결하고자하는 문제를 수많은 함수로 쪼개여 문제를 풀어나갑니다.


함수란 중고등학교 수학 시간에 배웠듯이, x라는 입력(Input)이 주어지고 일련의 과정을 거쳐 y라는 출력(Output)이 생성됩니다.

물론 프로그래밍에서의 함수에는 입력과 출력이 존재하지 않을 수 있지만, 우선 기본적인 이해도를 위해 설명하겠습니다.


함수란 음료수 자판기와 같습니다. 자판기에 동전을 넣으면, 우리는 볼수 없지만 자판기 내부에서 여러가지 과정을 거쳐 결국 우리가 원하는 음료수를 내보냅니다.

따라서 우리는 얼마나 자판기, 즉 함수를 이용하느냐는 프로그램을 잘 구현하는가에 대한 문제와 이어집니다.



Hello.c 소스 파일을 살펴볼까요.

'int main(void)'를 찾으셨나요?

여기서 'main'이란 함수의 이름을 나타내고, 이 함수를 'main함수'라고 부를 수 있습니다.

함수이름 앞에 존재하는 것은 해당 함수의 출력형태입니다.

'main함수'의 출력형태는 'int'라는 것입니다.

지금은 'int'가 무엇인지 아직 알 필요가 없습니다.

그리고 함수이름 뒤 소괄호 안에 있는 것이 입력형태입니다.

'main함수'의 입력형태는 'void'라는 것입니다.

물론 'void'가 무엇인지 아직 알 필요가 없습니다.


어렵지요? 다음 슬라이드 보겠습니다.



함수를 구성하는 요소, 출력형태, 함수이름, 입력형태 이외에 마지막으로 함수의 몸체가 있습니다.

'{', '}'와 같은 중괄호는 함수 몸체의 시작과 끝을 나타냅니다.


**함수는 출력형태 함수이름(입력형태) 함수의 몸체로 구성되어 있습니다.

함수의 몸체는 반드시 중괄호 '{', '}'로 시작과 끝을 나타냅니다. **



함수의 몸체 내부를 살펴보겠습니다.

C언어에서는 각 문장의 마지막은 세미클론 ';'으로 끝나야합니다.

한 행이 끝났음을 나타냅니다.

반드시 한 문장이 끝났다면, 곧바로 엔터(Enter)가 아닌 세미클론을 작성하시고 줄바꿈을 하세요.



다시 Hello.c 소스파일을 들여다보시면, main함수 상단에 #include <stdio.h>라는 문장이 있습니다.

이것이 바로 헤더파일인데요. #include라는 것은 뒤에 나오는 헤더파일을 불러오겠다고 선언을 하는 것입니다.

그렇다면 헤더파일이란 무엇일까요?



간단하게, 헤더파일이란 컴파일러(Visual Studio)가 자주 사용되는 기본적인 함수들을 모아둔 소스파일이라고 생각하시면 됩니다.

우리는 프로그래밍을 쉽게 하기 위해서 미리 만들어진 함수를 헤더파일을 불러와 사용하는 것입니다.



연 이어서, main함수의 몸체를 살펴볼까요?

printf("Hello, C world ! \n"); 라는 문장이 있네요.

'printf'도 위에서 설명하였던 함수의 일종입니다.

하지만 우리는 'printf'라는 함수를 만들지 않았는데 어떻게 사용했을까요.



'printf'와 같은 함수를 우리는 표준함수라고 부릅니다.

다시 언급하면, 기본적으로 제공되는 함수 중 하나입니다.

그렇다면 이 함수는 도대체 어디서 왔을까요?



'printf' 함수를 오른쪽 클릭해보세요.

그리고 '정의로 이동(G)'를 선택하세요.

새로운 소스파일 생겼습니다.

우측 상단을 보시면 stdio.h라는 소스파일이 뜨고 printf라는 함수가 보입니다.


방금 전에 설명했던 헤더파일이 생각나시나요?

우리는 Hello.c 소스파일 가장 처음에 #include <stdio.h>라는 헤더파일 선언을 통해 컴파일러에서 기본적으로 제공하는 헤더파일, 'stdio.h'를 불러왔습니다.

그리고 우리가 새롭게 정의한 함수 main함수 몸체에 'printf'라는 표준함수를 사용하였습니다.

'printf'라는 표준함수는 'stdio.h'에서 이미 정의된 함수였습니다.

따라서 우리는 'printf'라는 함수를 직접 정의하지 않고도 사용할 수 있었습니다.


당연하게도, 헤더파일 선언을 하지 않았다면 우리는 'printf'라는 함수를 사용하지 못했을겁니다.


다시 Hello.c 소스파일로 돌아가기 위해 좌측 상단의 'Hello.c'를 눌러주세요. 



앞으로 자주 사용하게될 'printf' 함수를 살펴보겠습니다.

출력(print)와 함수(function)의 복합어인 'printf'는 말 그대로 문자를 출력하는 함수입니다.

'printf' 함수 뒤의 소괄호 안에 ""안에 자신이 원하는 글귀를 넣으면 출력이 가능합니다.



만약 '\n' 대신에 'n'을 넣는다면 어떻게 될까요?

그렇다면 출력은 'Hello, C world ! n'이 되겠죠.

""안에 자신이 원하는 수식을 넣기 위해서는 역슬래시(\)를 넣어야합니다.

'\n' 은 'printf' 함수 내에서 줄바꿈을 의미합니다.

우리는 이러한 문장 내 명령어를 이스케이프 시퀀스라고 명합니다.



마지막으로 main함수 몸체의 'return 0'에 관한 이야기 입니다.

우리는 이를 반환문이라고 말하는데, 이와 관련한 이야기는 추후에 다시 말씀드리겠습니다.


아직은 배워야할 단어들과 문법이 많습니다.

모든 단어가 개별적으로 존재하는 것이 아니라, 얼기설기 얽혀있습니다.

따라서 특정 단어만 이해할 수 없고, 포괄적인 이해가 필요하기 때문에 시간이 걸릴 수 있습니다.


하지만 반복으로 보다보면 눈에 익게 되면서 자연스레 단어의 의미를 체감하시게 될 것입니다.


오늘 강의 중에 많은 부분 이해 못하셨을거라고 예상합니다.

하지만 몇 강의가 지난다면 오늘 나온 설명뿐만 아니라 더 깊은 이해도를 가질 것이라고 예상 또한 합니다.


오늘 이론 부분은 수고많으셨습니다.


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

Chapter 5. 주석 달기  (0) 2018.04.05
Chapter 4_1. 과제  (0) 2018.04.05
Chapter 3. 프로젝트 생성하기  (0) 2018.04.02
Chapter 2. IDE 설치하기  (0) 2018.04.01
Chapter 1. C 언어란  (0) 2018.03.31

+ Recent posts