티스토리 뷰

반응형

2021.02.07 - [코딩 공부/C 언어] - C 언어 기초 : scanf 로 원하는 데이터 입력 받기

 

C 언어 기초 : scanf 로 원하는 데이터 입력 받기

이전 글 2021/02/06 - [코딩 공부/C 언어] - C언어 기초 : 암시적 형변환과 명시적 형변환 C언어 기초 : 암시적 형변환과 명시적 형변환 이전 글 2021/01/24 - [코딩 공부/C 언어] - C언어 기초 : 자료형 C언어

hgu-can.tistory.com

 

저번 포스트에서 프로그램 실행 중에 데이터를 실시간으로 입력받을 수 있는 함수인 scanf() 까지 배워봤습니다. 

 

그럼 이번 포스트에는 연산자에 대해 배워봅시다.


 

0. 연산자란?

연산을 수행하는 기호로써 

옛날 수학시간에 배웠던 더하기 빼기 등등의 사칙연산같은 계산을 하라고 컴퓨터에게 알려주는 기호라고 할 수 있습니다. 

 

여기서 피연산자라는 표현도 쓰는데 

피연산자는 연산에 참여하는 값을 말합니다. 

 

1 + 1 = ?

에서 숫자들은 피연산자이고 +는 연산자이지요. 

 

분류 연산자
대입 연산자 =
산술 연산자 +, -, *, /, %
복합대입 연산자 +=, -=, *=, /=, %=
증감 연산자 ++, --
관계 연산자 ==, !=, >, <, >=, <=
논리 연산자 &&, ||, !
조건 연산자 ? :
비트논리 연산자 &, |, ^, ~
비트시프트 연산자 <<, >>

 

연산자의 종류에는 위와 같은 것들이 있는데 지금 당장 외우지 않으셔도 사용하다보면 자연스럽게 외워집니다. 

그럼 어떤 상황에서 쓰는지 하나씩 알아보겠습니다. 

 

1. 대입 연산자  =

오른쪽에 있는 상수값 피연산자를 왼쪽의 공간에 저장하는 연산자.

 

#include<stdio.h>

void main()
{
	int Num;
	Num = 10;
}

간단한 코드죠?

먼저 int형 변수 Num을 만든 다음에

Num = 10 이라고 쓰면 대입 연산자 = 를 기준으로

오른쪽에 있는 Num에 숫자 10을 저장하는 것이죠. 

그동안 계속 쓰던 것이라 쉬우실 것입니다. 

 

 

2. 산술 연산자

사칙연산을 수행하는 연산자.

연산자 의미
+ 두 수의 합 (더하기)
- 두 수의 차 (빼기)
* 두 수의 곱 (곱하기)
/ 두 수를 나눈 몫 (나누기의 몫)
% 두 수를 나눈 값의 나머지 (나누기의 나머지)

산술 연산자에는 다섯가지가 있는데 더하기 빼기 곱하기 나누기는 쉬울 것입니다. 

근데 프로그래밍을 처음 접하시는 분이라면 마지막에 있는 %가 좀 낯설게 느껴지실 수 있습니다. 

제가 그랬거든요...

나눌 때 몫만 있으면 되지 나머지가 왜 필요해?

였는데 코딩을 공부하다보면 두 수를 나눈 값의 나머지가 필요한 경우가 참 많습니다. 

 

일단 아래 예제를 써 봅시다. 

#include<stdio.h>

void main()
{
	int Num1, Num2;
	printf("두 정수를 입력하시오 : ");
	scanf("%d%d", &Num1, &Num2);

	printf("%d + %d = %d\n", Num1, Num2, Num1 + Num2);
	printf("%d - %d = %d\n", Num1, Num2, Num1 - Num2);
	printf("%d * %d = %d\n", Num1, Num2, Num1 * Num2);
	printf("%d / %d = %d\n", Num1, Num2, Num1 / Num2);
	printf("%d %% %d = %d\n", Num1, Num2, Num1 % Num2);
}

맨 마지막 줄에서 %%를 두 번 쓰는 이유는 % 하나만 쓰면 연산자로 인식되어서 출력이 되지 않기 때문에 두 번 쓰는 것입니다. 

 

코드를 실행하고 숫자 두 개를 입력하면 위와 같이 연산한 결과를 출력해줍니다. 

2 / 5 에서 결과값이 0.4가 아닌 이유는 정수를 저장하는 int형 변수를 썼기 때문입니다. 

정수 부분인 0만 남고 나머진 날아갔네요 ㅎㅎ

 

그리고 마지막줄에서 2 % 5 의 결과는 2가 나왔는데 

2를 5로 나누면 바로 윗줄처럼 몫은 0이 되고 나머지 2가 남습니다. 

그 나머지가 % 연산의 결과값으로 출력된 것입니다. 

% 연산을 하면 몫에 소숫점 자리가 생기기 전까지 나눈 후 남는 나머지를 저장합니다. 

 

그러면 저 % 연산을 언제 사용하느냐?

% 연산자의 활용

1. 짝, 홀수의 구분

10 % 2 = 0 -> 나머지가 0이므로 짝수!

11 % 2 = 1 -> 나머지가 1이므로 홀수!

입력받은 수가 짝수인지 홀수인지 알려줘라 같은 코드를 쓸 때 유용합니다. 

 

2. 배수 구분

120 % 3 = 0 -> 나머지가 0이므로 3의 배수

1 ~ 100 까지 수 중에 3의 배수를 구해라 같은 코드를 쓸 때 유용합니다. 

 

3. 숫자의 자리수 구분

123 % 10 = 3

123 / 10 = 12

12 % 10 = 2

12 / 10 = 1

1 % 10 = 1

여기서 % 연산자를 통해 얻은 나머지들만 순서대로 나열하면 321이 됩니다. 

123을 거꾸로 뒤집은 수를 구해라 같은 코드를 쓸 때 유용합니다. 

 

 

3. 복합대입 연산자

오른쪽에 있는 상수값 피연산자를 왼쪽의 공간에 연산 후 저장하는 연산자

연산자 의미 예시
+= 두 수의 합을 저장 a += b; => a = a + b;
-= 두 수의 차를 저장 a -= b; => a = a - b;
*= 두 수의 곱을 저장 a *= b; => a = a * b;
/= 두 수를 나눈값의 몫을 저장 a /= b; => a = a / b;
%= 두 수를 나눈값의 나머지를 저장 a %= b; => a = a % b;

복합대입 연산자에는 이런 것들이 있는데 그냥 

a = a + b 를 쓸 때 a 두 번 쓰기 귀찮으니까 하나로 줄여서 += 라고 쓰는 것이라고 생각하시면 됩니다. 

코드를 쓰다보면 같은 코드 같은 글자 여러번 쓰는게 참 귀찮거든요 ㅋㅋ

 

그럼 아래 예제를 한 번 써 봅시다. 

#include<stdio.h>

void main()
{
	int Num1, Num2;
	printf("두 정수를 입력하시오 : ");
	scanf("%d%d", &Num1, &Num2);

	Num1 += Num2;
	printf("Num1 = %d\nNum2 = %d", Num1, Num2);
}

실행하면 위와같이 연산이 되는 것을 볼 수 있습니다. 

Num1 = Num1 + Num2 라고 쓰지 않았는데도 계산이 잘 되었죠?

나머지 연산자들도 이렇게 사용할 수 있습니다. 

복합대입 연산자도 많이 쓰는 연산자입니다. 

 

 

4. 증감 연산자

해당 변수를 1씩 증가 혹은 감소시키는 연산자

연산자 의미
++ 값을 1 증가
-- 값을 1 감소

이것 또한 a += 1 이라고 쓰기 귀찮을 때 쓸 수 있는 연산자입니다. 

마찬가지로 코드를 쓰다보면 변수를 1씩 증가시키거나 감소시켜야하는 경우가 많기 때문에...

그 때마다 Num1 += 1 이라고 쓰면 귀찮잖아요...

Num1++;

라고만 쓰면 알아서 1이 증가되는 것을 볼 수 있습니다. 

학원 선생님이 프로그래밍의 기본은 귀차니즘이라고 하셨습니다...

 

전치와 후치

전치 : 증감연산자를 먼저 수행한 후 다음 연산을 수행

ex) ++Num1;

후치 : 모든 연산을 마친 후 증감연산자를 수행

ex) Num1--;

 

언뜻 생각할 땐 전치와 후치 연산에 별 차이가 없어 보이는데 코드가 늘어나면 전치와 후치연산의 결과값이 달라집니다. 

 

아래 예제를 쓰고 실행해봅시다. 

#include<stdio.h>

void main()
{
	int Num1, Num2;
	printf("두 정수를 입력하시오 : ");
	scanf("%d%d", &Num1, &Nnum2);

	Num2 = (Num1++) * Num2;
	printf("=====후치=====\n");
	printf("Num1 = %d\nNum2 = %d\n\n", Num1, Num2);
	Num2 = (++Num1) * Num2;
	printf("=====전치=====\n");
	printf("Num1 = %d\nNum2 = %d\n\n", Num1, Num2);
}

실행하면 위와 같은 연산 결과를 볼 수 있습니다. 

첫번째 후치는 모든 연산이 다 끝난 후에 Num1이 1증가되는 것이기 때문에 

2 x 5 = 10 이 된 후에 Num1이 증가되어서 

Num1 = 3

Num2 = 10 이라는 결과값이 나왔습니다. 

 

두번째 전치는 Num1을 가장 먼저 증가시키기 때문에 

Num1 = 4 가 된 후

4 x 10 = 40

Num2 = 40 이 되었네요. 

연산자의 위치에 따른 연산 순서만 달라졌는데 결과값엔 차이가 나죠?

그래서 증감연산자를 쓸 때엔 내가 원하는 연산 과정과 결과값을 정확히 생각하고 써야 합니다. 

하지만 쓰다보면 후치로 많이 쓰게 됩니다. 

 

 

나머지 연산자들은 다음 포스트에서 마저 설명하겠습니다. 

그럼 다음 포스트에서 만나요!

도움이 되셨다면 광고 클릭 한 번 부탁드....

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함