라이브러리(library)는 자주 쓰는 기능을 함수·클래스로 미리 만들어 모아 둔 꾸러미이고, 서식 출력은 printf나 f-문자열에 너비와 정밀도를 적어 값이 찍히는 칸 수와 자릿수를 정하는 일입니다.
글자를 찍는 일까지 새로 만들지 않고, 언어가 함께 주는 표준 라이브러리를 불러와 씁니다. 실기는 출력을 빈칸까지 그대로 쓰게 하므로, 서식 하나가 칸을 몇 개 잡는지 셀 수 있어야 합니다. 아래 그림은 C의 printf가 같은 42와 3.14159를 서식마다 다른 칸 수와 자릿수로 찍는 장면입니다.
1라이브러리: 헤더·패키지·모듈
언어와 함께 오는 것을 표준 라이브러리, 따로 받아 설치하는 것을 외부 라이브러리라고 합니다. 불러오는 단위와 줄은 언어마다 다릅니다.
| 언어 | 단위 | 불러오는 줄 |
|---|---|---|
| C | 헤더 파일 | #include <stdio.h> |
| Java | 패키지 | import java.util.Scanner; |
| Python | 모듈 | import math |
Java의 String·System이 든 java.lang은 import 없이 씁니다. Python은 math.sqrt(16)처럼 씁니다.
C 헤더는 맡은 일로 고릅니다. 빼면 그 함수를 모른다는 컴파일 오류가 납니다.
| 헤더 | 맡은 일 | 대표 함수 |
|---|---|---|
| stdio.h | 표준 입출력 | printf · scanf |
| stdlib.h | 메모리 할당 · 문자열을 수로 · 난수 | malloc · free · atoi · rand |
| string.h | 문자열 다루기 | strlen · strcpy · strcmp · strcat |
| math.h | 수학 계산 | sqrt · pow |
2printf 서식: 너비와 정밀도
서식 지정자(format specifier)는 %[플래그][너비][.정밀도]변환 문자 차례로 적습니다. %d·%c·%s와 \n은 '출력과 변수' 레슨에서 배웠고, 여기서는 그 사이에 끼는 플래그·너비·정밀도를 봅니다.
그림의 코드입니다. 대괄호는 칸의 끝을 보이려고 찍었습니다.
#include <stdio.h>
int main(void) {
int n = 42;
double pi = 3.14159;
printf("[%5d]\n", n);
printf("[%-5d]\n", n);
printf("[%05d]\n", n);
printf("[%.2f]\n", pi);
printf("[%5.2f]\n", pi);
return 0;
}
[ 42]
[42 ]
[00042]
[3.14]
[ 3.14]- 너비는 칸 수입니다. 값이 짧으면 오른쪽에 붙고 왼쪽이 빈칸입니다.
- 플래그
-는 왼쪽에 붙이고,0은 빈칸 대신 0을 채웁니다. - 정밀도
.2는 소수점 아래 두 자리까지 반올림합니다. 정밀도가 없으면%f는 여섯 자리(3.141590)를 찍습니다. - 너비에는 소수점도 한 칸으로 들어갑니다. 3.14는 네 칸이라
%5.2f에서 빈칸이 하나 붙습니다. - 너비보다 긴 값은 자르지 않고 다 찍습니다.
변환 문자는 값을 어떤 꼴의 글자로 바꿀지 정합니다.
| 변환 문자 | 꼴 | 값 → 찍히는 글자 |
|---|---|---|
%d | 10진 정수 | 255 → 255 |
%o · %x | 8진 · 16진 정수 | 8 → 10 · 255 → ff |
%f · %e | 실수 · 지수 꼴 | 314.159 → 314.159000 · 3.141590e+02 |
%c · %s | 글자 하나 · 문자열 | 65 → A · "ab" → ab |
3Python의 print와 f-문자열
Python의 print는 값 사이에 sep을, 끝에 end를 붙입니다. sep의 기본은 빈칸 하나, end의 기본은 줄바꿈입니다.
f-문자열(f-string)은 중괄호 안 콜론 뒤에 printf와 같은 꼴로 너비·정밀도를 적고, 정렬은 <(왼쪽)·>(오른쪽)·^(가운데)로 정합니다.
pi = 3.14159
print('A', 'B', 'C')
print('A', 'B', 'C', sep='-')
print('A', end='')
print('B')
print(f'[{pi:5.2f}]')
print(f'[{42:<5}]')
print(f'[{42:^5}]')
A B C
A-B-C
AB
[ 3.14]
[42 ]
[ 42 ]end=''로 두면 줄을 바꾸지 않아 다음 print가 같은 줄에 이어 찍습니다.- 너비만 적으면 수는 오른쪽, 문자열은 왼쪽에 붙습니다. 가운데에서 남는 칸이 홀수면 오른쪽이 한 칸 더 많습니다.
'[%5.2f]' % pi처럼 C 꼴 서식도 쓸 수 있고, 결과는 같습니다.
예제
같은 서식을 Java로 찍습니다. print는 줄을 바꾸지 않고 println은 바꿉니다. printf의 서식은 C와 같고, 줄바꿈은 %n으로 씁니다.
폰 화면에 맞추려고 main 머리와 printf 줄을 둘로 나눴습니다. 한 줄로 쓴 것과 같습니다. 무엇이 찍힐까요?
public class Main {
public static void main(
String[] args) {
double pi = 3.14159;
System.out.print("A");
System.out.println("B");
System.out.println("C");
System.out.printf(
"[%5.2f]%n", pi);
}
}
실행 결과 보기
AB
C
[ 3.14]A 뒤에 줄이 바뀌지 않아 B가 같은 줄에 붙고, println이 줄을 바꿔 C는 다음 줄에 찍힙니다.
시험 포인트
- 필기: 함수와 헤더를 짝짓게 합니다 — 입출력 printf·scanf는 stdio.h, 메모리 할당 malloc·free는 stdlib.h, 문자열 strlen·strcmp는 string.h, sqrt·pow는 math.h입니다. 서식 지정자의 변환 문자는
%d(10진)·%o(8진)·%x(16진)·%f(실수)·%e(지수)·%c(글자)·%s(문자열)입니다. 너비는 소수점까지 센 칸 수이고, 값이 길면 자르지 않습니다.-는 왼쪽 붙임,0은 0 채움입니다. Java의 java.lang은 import 없이 쓰입니다. - 실기: 출력을 빈칸·자릿수까지 글자 그대로 씁니다(f-string·출력 형식 출제 주제). 빈칸 채우기로 묻는 이름은 print의 sep·end와 f-문자열(f-string)입니다.
확인 문제
1. 두 문자열이 같은지 strcmp로 견주는 C 프로그램을 씁니다. 맨 위에 꼭 두어야 할 줄을 고르세요.
- ①
#include <stdlib.h> - ②
#include <string.h> - ③
#include <math.h> - ④
#include <time.h>
정답
②입니다. strlen·strcpy·strcmp 같은 문자열 함수는 string.h에 들어 있습니다.
- ① stdlib.h는 메모리 할당(malloc·free)과 문자열을 수로 바꾸는 atoi 같은 함수의 헤더입니다.
- ③ math.h는 sqrt·pow 같은 수학 함수의 헤더입니다.
- ④ time.h는 시각을 다루는 헤더입니다. 문자열을 견주는 함수는 없습니다.
2. 다음 (가)~(다)에 맞는 이름을 쓰세요. (가)·(나)는 Python print에 넘기는 이름으로, (다)는 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가)
print(2026, 10, 15, ___='.')가 2026.10.15를 찍게 하는 이름입니다. - (나) 반복문 안에서 숫자를 한 줄에 이어 찍으려고, 줄을 바꾸는 대신 붙일 글자를 정하는 이름입니다.
- (다) 따옴표 앞에 f를 붙이고, 중괄호 안에 값과
:5.2f같은 모양을 적어 값을 끼워 넣는 꼴입니다.
정답
받는 답: (가) sep · (나) end · (다) f-문자열(f-string)
(가)의 실마리는 '값 사이에 들어가는 글자', (나)는 '끝에 붙는 글자 — 기본은 줄바꿈', (다)는 '따옴표 앞의 f와 중괄호'입니다.
- 틀리는 꼴 end — (가)에: 마지막 값 뒤에 한 번 붙습니다. 2026.10.15처럼 값 사이마다 들어가는 것은 sep입니다.
- 틀리는 꼴 sep — (나)에: 한 print 안의 값 사이에만 들어갑니다. 다음 print와 이어 주는 것은 end입니다.
- 틀리는 꼴 format — (다)에:
'{:5.2f}'.format(pi)처럼 문자열 뒤에 붙여 부르는 메서드입니다. 따옴표 앞에 f를 붙이는 꼴의 이름은 f-문자열입니다.
3. 위 2절 C 코드에서 4번 줄만 int n = 123456;으로 바꿨습니다. 6~8번 줄이 찍는 세 줄을 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
정답
받는 답:
[123456]
[123456]
[123456]
세 줄이 모두 같습니다. 123456은 여섯 칸이라 너비 5보다 깁니다. 너비보다 긴 값은 자르지 않고 다 찍으므로 붙일 쪽(-)도 채울 칸(0)도 남지 않습니다.
- 틀리는 꼴
[12345]·[23456]: 다섯 칸에 맞춰 자른다고 봤습니다. 너비는 가장 적은 칸 수일 뿐입니다.
4. 다음 코드의 실행 결과를 빈칸까지 그대로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
a = 7
b = 2.5
print(a, b, sep='|', end='')
x = f'[{a:03d}]'
y = f'[{b:>6.2f}]'
print(x, y, sep='')
정답
받는 답:
7|2.5[007][ 2.50]첫 print는 end가 빈 문자열이라 줄을 바꾸지 않아 두 print가 한 줄이 됩니다. 03d는 세 칸을 0으로 채워 007, >6.2f는 2.50 네 칸을 여섯 칸 오른쪽에 붙여 빈칸 둘이 앞에 섭니다. 마지막 print는 sep이 빈 문자열이라 두 대괄호가 붙습니다.
- 틀리는 꼴
7|2.5와 두 대괄호를 두 줄로 나눠 쓴 답: 첫 print의end=''을 놓쳤습니다. - 틀리는 꼴 두 대괄호 사이에 빈칸 하나를 넣은 답: 마지막 print의
sep=''을 놓쳤습니다. - 틀리는 꼴 7 앞을 0 대신 빈칸 둘로 채운 답: 너비 앞의 0을 놓쳤습니다. 0은 빈칸 대신 0을 채웁니다.