티스토리 뷰
2021.02.07 - [코딩 공부/C 언어] - C 언어 기초 : scanf 로 원하는 데이터 입력 받기
저번 포스트에서 프로그램 실행 중에 데이터를 실시간으로 입력받을 수 있는 함수인 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 이 되었네요.
연산자의 위치에 따른 연산 순서만 달라졌는데 결과값엔 차이가 나죠?
그래서 증감연산자를 쓸 때엔 내가 원하는 연산 과정과 결과값을 정확히 생각하고 써야 합니다.
하지만 쓰다보면 후치로 많이 쓰게 됩니다.
나머지 연산자들은 다음 포스트에서 마저 설명하겠습니다.
그럼 다음 포스트에서 만나요!
도움이 되셨다면 광고 클릭 한 번 부탁드....
'코딩 공부 > C 언어' 카테고리의 다른 글
C 언어 기초 : 연산자 3 - 비트 연산자 (0) | 2021.04.16 |
---|---|
C 언어 기초 : 연산자 2 (0) | 2021.04.16 |
C 언어 기초 : scanf 함수 문제 정답 (0) | 2021.02.14 |
C 언어 기초 : scanf 로 원하는 데이터 입력 받기 (0) | 2021.02.07 |
C언어 기초 : 암시적 형변환과 명시적 형변환 (0) | 2021.02.06 |
- Total
- Today
- Yesterday
- 코딩공부
- c++
- 컴퓨터사이언스
- 그리디
- c언어
- 캐나다생활
- 백준
- 문제풀이
- 컴퓨터
- 애플
- 너비우선탐색
- 아이패드
- hackerrank
- 해커랭크
- 하드웨어
- 영어공부
- 프로그래밍
- C언어기초
- 다이나믹프로그래밍
- 깊이우선탐색
- DFS
- 컴퓨터공부
- 캐나다
- 스위프트플레이그라운드
- BFS
- dp
- 알고리즘
- 프로그래머스
- greedy
- 기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |