이 페이지의 목차
계산하는 연산자
코드 예제: Python · C · 예상 50분
학습 목표
- 산술 연산자의 기능과 결과를 설명한다.
- 나눗셈과 나머지 연산을 활용한 프로그램을 작성한다.
관련 성취기준
- 프그02-03
산술, 비교, 논리 등의 여러 종류의 연산자 의미를 알고 프로그래밍에 적절하게 사용할 수 있다.
생각 열기 — 3725초는 몇 시간 몇 분 몇 초
3725초를 사람이 읽는 꼴로 바꿔야 한다. 손으로는 이렇게 한다.
3725를 3600으로 나누면 1시간, 남는 게 125초. 125를 60으로 나누면 2분, 남는 게 5초.
산술 연산자
| 하는 일 | Python | C | 보기 |
|---|---|---|---|
| 더하기 | + | + | 7 + 2 → 9 |
| 빼기 | - | - | 7 − 2 → 5 |
| 곱하기 | * | * | 7 × 2 → 14 |
| 나누기(소수까지) | / | (double) 를 붙여야 한다 | 7 / 2 → 3.5 |
| 몫만 | // | 정수끼리 / | 7 // 2 → 3 |
| 나머지 | % | % | 7 % 2 → 1 |
| 거듭제곱 | ** | pow() — <math.h> | 2 ** 10 → 1024 |
2차시에서 본 나눗셈 함정이 여기서도 그대로다. C에서 소수가 필요하면 (double) 을 붙인다.
몫과 나머지 — 자리를 나누는 도구
초 = 3725
시 = 초 // 3600
남은 = 초 % 3600
분 = 남은 // 60
나머지초 = 남은 % 60
print(f"{초}초 = {시}시간 {분}분 {나머지초}초")
n = 10
n += 5
n *= 2
print("복합 대입 결과:", n)3725초 = 1시간 2분 5초 복합 대입 결과: 30
#include <stdio.h>
int main(void)
{
int total = 3725;
int h = total / 3600;
int rest = total % 3600;
int m = rest / 60;
int s = rest % 60;
printf("%d초 = %d시간 %d분 %d초\n", total, h, m, s);
int n = 10;
n += 5;
n *= 2;
printf("복합 대입 결과: %d\n", n);
return 0;
}3725초 = 1시간 2분 5초 복합 대입 결과: 30
왜 이 두 연산이 짝으로 쓰이나
// 는 몇 묶음인지, % 는 묶고 남은 것을 알려 준다. 그래서 큰 단위에서 작은 단위로 내려갈 때 늘 함께 쓰인다.
3725초
├─ // 3600 → 1 (시간)
└─ % 3600 → 125 (남은 초)
├─ // 60 → 2 (분)
└─ % 60 → 5 (초)
같은 얼개가 여러 곳에 나온다.
| 문제 | 몫으로 얻는 것 | 나머지로 얻는 것 |
|---|---|---|
| 초 → 시·분·초 | 큰 단위의 개수 | 아래 단위로 넘길 값 |
| 거스름돈 → 동전 개수 | 500원 몇 개 | 남은 금액 |
| 쪽 나누기 — 100개를 10개씩 | 몇 쪽 | 마지막 쪽에 남는 개수 |
| 짝수·홀수 판정 | — | n % 2 가 0이면 짝수 |
| 배수 판정 | — | n % 3 이 0이면 3의 배수 |
나머지로 배수를 판정하는 것은 8차시의 윤년 판별에서 바로 쓴다.
복합 대입 연산자
n = n + 5 는 자주 쓰는 꼴이라 짧게 적는 방법이 있다.
| 짧게 | 같은 뜻 | 보기 |
|---|---|---|
n += 5 | n = n + 5 | 10 → 15 |
n -= 5 | n = n - 5 | 10 → 5 |
n *= 2 | n = n * 2 | 15 → 30 |
n /= 2 | n = n / 2 | 30 → 15 |
n %= 3 | n = n % 3 | 10 → 1 |
1단원 7차시 순서도의 합계 ← 합계 + i 가 코드에서는 합계 += i 가 된다. 10차시에서 반복문으로 합계를 구할 때 계속 쓴다.
우선순위 — 무엇을 먼저 계산하나
2 + 3 * 4 는 20이 아니라 14다. 수학과 같은 순서를 따른다.
- 괄호
() - 거듭제곱
** - 곱하기 · 나누기 · 몫 · 나머지 (
*///%) - 더하기 · 빼기 (
+-)
같은 순위끼리는 왼쪽부터 계산한다. 100 / 5 / 2 는 (100 / 5) / 2 로 10이다.
활동
초를 입력받아 시·분·초로 바꾸기
약 25분1단계 — 손으로 먼저 (5분)
계산기 없이 표를 채운다. 손으로 낸 값이 나중에 기대 결과가 된다 (3단원 4차시).
| 초 | 시 | 분 | 초 |
|---|---|---|---|
| 3725 | 1 | 2 | 5 |
| 60 | |||
| 59 | |||
| 3600 | |||
| 86399 |
2단계 — 코드로 확인한다 (5분)
실행기의 [고치기]로 초 값을 바꿔 가며 위 표와 대조한다. 다른 값이 나오면 손 계산과 코드 중 어디가 틀렸는지 찾는다.
3단계 — 입력으로 바꾼다 (5분)
값을 코드에 박는 대신 6차시에서 배운 입력으로 받게 고친다.
초 = int(input())으로 바꾸고 「입력」 칸에 값을 넣는다.int()를 빼면 어떤 오류가 나는가?
4단계 — 거스름돈으로 옮긴다 (10분)
같은 얼개를 다른 문제에 써 보자. 금액을 받아 500·100·50·10원 동전 개수를 구한다.
| 금액 | 500원 | 100원 | 50원 | 10원 |
|---|---|---|---|---|
| 3760 | ||||
| 990 |
- 초 → 시·분·초 코드와 구조가 같은가? 무엇만 바뀌었는가?
- 10원으로 나누어떨어지지 않는 금액(예: 3764)을 넣으면 어떻게 되는가? 요구 사항에 무엇을 적어 두어야 하는가? (3단원 2차시)
5단계 — 음수를 넣어 본다 (5분)
-7 // 2 와 -7 % 2 를 Python에서 실행하고, 같은 식을 C에서도 확인한다.
| 식 | Python | C |
|---|---|---|
| 몫 | ||
| 나머지 |
두 언어가 다른 이유를 한 문장으로 적는다.
개념 확인 문제
보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.
3725 // 3600 과 3725 % 3600 의 결과를 바르게 짝지은 것은?프그02-03
어떤 수가 3의 배수인지 판정하려면?프그02-03
n += 5 와 같은 뜻인 것은?프그02-03
2 + 3 * 4 의 결과는?프그02-03
-7 % 2 의 결과가 Python과 C에서 다른 까닭은?프그02-03
더 알아보기
심화0으로 나누면
7 / 0 을 하면 어떻게 될까. Python은 ZeroDivisionError 로 멈추며 무엇이 문제인지 알려 준다. C는 정해진 동작이 없다 — 프로그램이 비정상 종료하거나, 환경에 따라 엉뚱한 값이 나올 수도 있다. 3단원 4차시에서 알고리즘을 적을 때 “나눗셈이 있는 곳마다 나누는 값이 0이 될 길을 막았는가”를 물으라고 한 것이 이 때문이다. 평균을 구하는 코드에서 인원이 0인 경우를 먼저 걸러 냈던 것도 같은 이유다.
심화1씩 늘리는 것만을 위한 연산자
C에는 n++ 와 ++n 이라는 표기가 있다. 둘 다 n 을 1 늘리지만, 식 안에서 쓸 때 값을 언제 돌려주는지가 다르다. n++ 는 늘리기 전의 값을, ++n 은 늘린 뒤의 값을 돌려준다. 4차시와 10차시의 for 문에서 i++ 를 쓴 것이 이것이다. Python에는 이 표기가 없고 n += 1 만 쓴다 — 헷갈릴 자리를 아예 없앤 것이다. 문법이 적은 것이 손해만은 아니다.
실무정수로 계산하면 정확하다
5차시 「더 알아보기」에서 반올림이 까다롭다고 했다. 돈을 다룰 때 특히 문제가 된다. 0.1 을 100번 더해도 정확히 10.0 이 되지 않기 때문이다. 그래서 실무에서는 금액을 원 단위 정수로 다룬다. 1,234원 56전을 다뤄야 하면 123456 전으로 담고, 화면에 찍을 때만 // 100 과 % 100 으로 나눠 1234.56 으로 만든다. 이 차시에서 배운 몫과 나머지가 그 자리에서 쓰인다. 자료를 어떤 모양으로 담을지가 정확도를 정한다 — 3단원 3차시의 이야기와 이어진다.
이어지는 학습
이 차시를 이해하려면 다음을 먼저 알아야 한다.
- 6차시의 입력과 형 변환 — 프로그래밍 프그02-02
교과서에서 찾기
| 교과서 | 해당 위치 | 쪽수 |
|---|---|---|
| 성림출판(Python) | 프로그래밍의 기초 › 03 연산자 | 112쪽 |
| 씨마스커뮤니케이션(Python) | 프로그래밍 기초 › 3 연산자 | 110쪽 |
| 삼양미디어(Python) | 프로그래밍의 기초 › 02 데이터 연산 | 68쪽 |
| 삼양미디어(C) | 프로그래밍의 기초 › 02 데이터 연산 | 74쪽 |
| 씨마스(C) | C 프로그래밍의 기초 › 3 연산자 | 84쪽 |
| 웅보출판사(C) | 프로그래밍의 기초 › Chapter 03 연산자 | 99쪽 |