프로그래밍웹 교과서
이 페이지의 목차
2단원 · 7차시

계산하는 연산자

산술 연산자나머지 연산정수 나눗셈복합 대입 연산자

코드 예제: Python · C · 예상 50분

학습 목표

  • 산술 연산자의 기능과 결과를 설명한다.
  • 나눗셈과 나머지 연산을 활용한 프로그램을 작성한다.

관련 성취기준

  • 프그02-03

    산술, 비교, 논리 등의 여러 종류의 연산자 의미를 알고 프로그래밍에 적절하게 사용할 수 있다.

생각 열기 — 3725초는 몇 시간 몇 분 몇 초

3725초를 사람이 읽는 꼴로 바꿔야 한다. 손으로는 이렇게 한다.

3725를 3600으로 나누면 1시간, 남는 게 125초. 125를 60으로 나누면 2분, 남는 게 5초.

산술 연산자

산술 연산자
하는 일PythonC보기
더하기++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) 을 붙인다.

몫과 나머지 — 자리를 나누는 도구

Python초를 시·분·초로 바꾸기
초 = 3725
시 = 초 // 3600
남은 = 초 % 3600
분 = 남은 // 60
나머지초 = 남은 % 60

print(f"{초}초 = {시}시간 {분}분 {나머지초}초")

n = 10
n += 5
n *= 2
print("복합 대입 결과:", n)
확인된 실행 결과
3725초 = 1시간 2분 5초
복합 대입 결과: 30
C초를 시·분·초로 바꾸기확인된 출력
#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 += 5n = n + 510 → 15
n -= 5n = n - 510 → 5
n *= 2n = n * 215 → 30
n /= 2n = n / 230 → 15
n %= 3n = n % 310 → 1

1단원 7차시 순서도의 합계 ← 합계 + i 가 코드에서는 합계 += i 가 된다. 10차시에서 반복문으로 합계를 구할 때 계속 쓴다.

우선순위 — 무엇을 먼저 계산하나

2 + 3 * 4 는 20이 아니라 14다. 수학과 같은 순서를 따른다.

  1. 괄호 ()
  2. 거듭제곱 **
  3. 곱하기 · 나누기 · 몫 · 나머지 (* / // %)
  4. 더하기 · 빼기 (+ -)

같은 순위끼리는 왼쪽부터 계산한다. 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쪽