고급 C 프로그래밍 Advanced C
한밭대학교 • INFO2104 • Aaron Snowberger
중간고사 스터디 가이드
프로그램과 C언어
1
01-1 프로그래밍 기초
01-2 C 언어 소개
01-3 전자계산기 원리와 프로그래밍 개념
01-4 C 언어 서술 형식
01-5 C 프로그램 실행 파일
2
C 언어 기본 문법
p. 16-31
01-2 C 언어 소개
C 언어의 탄생
3
“C 언어는 유닉스 운영체제를 만드는 데 사용한 프로그래밍 언어이다.”
01-2 C 언어 소개
C 언어의 특징 4가지
1. 구조화된 언어
2. 높은 이식성 (Portability)
4
3. 높은 확장성
4. 높은 생산성
01-4 C 언어 서술 형식
C 언어의 기본 서술 형식
단일 서술문
단일 서술문(Single Statement)은 논리적인 최소 명령 실행 단위 입니다. 즉 한 개의 서술문 단위로 작업이 진행됩니다. C 언어는 ;(세미콜론)으로 문장을 구분하기 때문에 한줄에 여러 개의 서술문을 쓸 수도 있습니다.
5
01-4 C 언어 서술 형식
C 언어의 기본 서술 형식
복합 서술문
복합 서술문(Compound Statement)은 여러 단일 서술문을 { } 중괄호를 사용해 하나로 묶은 형태입니다. 중괄호 안의 단일 서술문이 모두 수행되면 이복합 서술 문이 수행된 것으로 처리됩니다. 예를 들어 오른쪽과 같이 적으면 단일 서술 문 2개를 사용한 것이 아니라 복합 서술 문 1 개를 사용한 것입니다.복합 서술 문은 { } 중괄호를 사용하기 때문에 자신의 영역이 구분됩니다.따라서 ;(세미콜론)을 사용할 필요가 없습니다.
6
01-4 C 언어 서술 형식
역할에 따른 서술 형식
수식 서술문
수식 서술문(Expression Statement)은 계산 수식을 표현한 단일 서술문입니다. 앞에서 단일 서술문 설명을 위해 예로 든 내용도 수식 서술문에 해당합니다.
7
01-4 C 언어 서술 형식
역할에 따른 서술 형식
조건 서술문
조건 서술문(Selection Statement)은 조건을 만족하면 지정한 서술문을 수행하도록 작성한 서술문입니다.
8
01-4 C 언어 서술 형식
역할에 따른 서술 형식
반복 서술문
반복 서술문(Iteration Statement)은 단일 서술문 또는 복합 서술문을 반복해서 수행하도록 작성한 서술문입니다.
9
01-4 C 언어 서술 형식
역할에 따른 서술 형식
라벨 서술문
라벨 서술문(Labeled Statement)은 소스 파일의 특정 위치에 라벨을 지정하고 goto문을 사용해 그 위치로 이동할 수 있도록 작성한 서술문입니다. C 언어가 만들어진 초창기에 기존 프로그래밍 언어를 사용하던 프로그래머들이 쉽게 C 언어로 유입 펼 수 있도록 제공한 서술문입니다.
그러나 원칙 없이 프로그래머가 원하는 위치로 실행 지점을 이동하는 것은 구조화된 언어인 C 언어의 소스 코드 구성을 파괴할 수 있는 문법이기 때문에 되도록 사용하지 않는 것이 좋습니다.
10
01-4 C 언어 서술 형식
역할에 따른 서술 형식
분기 서술문
분기 서술문(Jump Statement)은 자신이 소속된 서술문을 벗어나거나 흐름을 바꾸어 놓을 때 사용합니다. break, continue와 같은 문법들이 분기 서술문에 해당하는데 return문, goto문처럼 실행 흐름을 마음대로 조정(서술 문의 범위를 마음대로 벗어날 수 있음)하는 것이 아니라 특정 조건 서술문이나 반복 서술문 안에서만 적용되기 때문에 잘 활용하는 것이 좋습니다.
11
01-4 C 언어 서술 형식
역할에 따른 서술 형식
주석문
프로그래밍을 하다보면 상황을 설명하거나 작업 내용을 기억하기 위해 소스 파일에 메모를 1남겨야 하는 경우가 있습니다. 이럴 때 주석문(Comment)을 사용하면 됩니다. 주석문은 /* 기호로 시작해서 */기호로 끝나고 여러 줄에 걸쳐서 사용할 수 있습니다. 또 이 기호가 표시된 부분은 컴파일러가 번역을 하지 않으므로 어떤 내용을 적어도 상관없습니다.
12
01-4 C 언어 서술 형식
예약어
프로그래밍 언어의 문법에 사용되는 단어들을 예약어 (Reserved Word)라고 합니다. 예약어는 의미나 역할이 정해져 있기 때문에 그 뭇을 바꾸거나 다른 용도로 사용할 수 없습니다. 예약어는 컴파일러와 약속된 단어이기 때문에 이름 짓는 문법 (변수 이름, 함수 이름, 구조체 이름)에서 이 단어를 사용하면 오류가 발생합니다.
13
01-4 C 언어 서술 형식
1분 퀴즈
14
01-5 C 프로그램 실행 파일
프로그램 실행 파일은
이 과정에서 오류가 발견되면 오류 메시지가 출력되고, 실행 파일이 만들어지지 않습니다. 컴파일과 링크를 순차적으로 수행하는 과정을 '빌드'라고 합니다.
15
01-5 C 프로그램 실행 파일
소스 파일 (*.c)
소스 파일(Source File)은 C 언어 문법으로 작성된 텍스트 파일로, 프로그램을 만들기 위해 사용됩니다. 파일 확장자는 일반적으로 .C를 사용하며, 이는 C 언어 소스 파일을 구별하기 위해 많이 쓰입니다. 다른 언어의 경우, C++는 .cpp, Java는 .java, C#은 .cs 확장자를 사용합니다.
16
01-5 C 프로그램 실행 파일
목적 파일 (*.obj)
목적 파일(Object File)은 컴파일러가 소스 파일을 번역한 후 생성되는 파일입니다. 컴파일 시간을 줄이기 위해 사용되며, 사용자가 직접 만들 필요는 없습니다. 목적 파일을 사용하는 이유는 소스 파일의 일부만 수정되었을 때 전체 소스 파일을 다시 번역하는 비효율성을 줄이기 위해서입니다. 개발자는 소스 파일을 여러 개로 나누어 각각 컴파일하는 방식으로 효율성을 높일 수 있으며, 이는 경험이 많은 개발자일수록 더 효과적으로 활용합니다.
17
01-5 C 프로그램 실행 파일
실행 파일 (*.exe)
실행 파일은 컴퓨터에서 바로 실행할 수 있는 파일로, 하나 이상의 목적 파일을 연결자(Linker)가 연결하여 만듭니다. 이 파일은 기계어로 구성된 프로그램이며, 더 이상의 컴파일 작업 없이 실행이 가능합니다. 실행 파일의 확장자와 형식은 운영체제에 따라 다릅니다.
18
01-5 C 프로그램 실행 파일
1분 퀴즈
19
연습 문제
시험 때도 볼 수 있어요~~
20
C 언어로 만드는 첫 번째 프로그램
2
02-1 C 언어 개발 환경 구축하기
02-2 비주얼 스튜디오 프로젝트 만들기
02-3 내가 만든 첫 번째 프로그램
21
C 언어 기본 문법
p. 32-45
02-2 비주얼 스튜디오 프로젝트 만들기
1. 첫 번째 프로젝트 만들기
비주얼 스튜디오의 위쪽 메뉴에서
22
02-2 비주얼 스튜디오 프로젝트 만들기
2. 새 프로젝트
다음 그림과 같이 다양한 프로젝트를 만들 수 있는 대화상자가 나타납니다. 이 대화상자에서 ’Windows 데스크톱 마법사’를 선택하고 [다음(N)] 버튼을 누릅니다.
23
02-2 비주얼 스튜디오 프로젝트 만들기
3. 프로젝트 이름
‘프로젝트 이름’ 항목에 자신이 사용할 프로젝트 이름을 입력하고 ‘위치’ 항목에 자신의 프로젝트가 위치 할 디렉토리 경로를 입력합니다. 그리고 [만들기 (C)] 버튼을 누릅니다.
24
02-2 비주얼 스튜디오 프로젝트 만들기
4. 애플리케이션 종류
Windows 데스크톱 프로젝트 창이 나타납니다. 이 창이 나오면 ‘애플리케이션 종류’에서는 ‘콘솔 애플리케이션 (.exe)’를 선택합니다. 그리고 ‘추가 옵션’에서 ‘빈 프로젝트’에 체크합니다. 선택을 끝냈으면 [확인] 버튼을 눌러 프로젝트를 만듭니다.
25
02-2 비주얼 스튜디오 프로젝트 만들기
5. 빈 프로젝트
정상적으로 프로젝트가 만들어졌다면 다음 그림처럼 솔루션 탐색기에 프로젝트가 표시됩니다. ‘빈 프로젝트’를 선택했기 때문에 프로젝트가 비어 있는 상태로 만들어집니다.
26
02-2 비주얼 스튜디오 프로젝트 만들기
6. 소스 파일 만들기
예제를 작성하기 위해 비어 있는 프로젝트에 소스 파일을 추가합니다.
다음 그림처럼 솔루션 탐색기의 ‘소스 파일’ 항목에서 마우스 오른 쪽 버튼을 클릭합니다. 그러면 팝업 메뉴가 나타냐는 데 [추가→새 항목]을 선택하면 소스 파일을 추가할 수 있습니다.
27
02-2 비주얼 스튜디오 프로젝트 만들기
7. 새 항목 추가
‘새 항목 추가’ 대화 상자가 나오면 ‘Visual C++’ 항목을 선택하고 ‘C++ 파일C.cpp) ’을 선택합니다.
그런데 .cpp는 C++ 파일의 확장자입니다. 우리는 C 언어를 사용할 것이기 때문에 컴파일러가 C 언어 문법을 적용해서 컴파일하도록 확장자를 .c로 입력합니다. 여기에서는 ‘Exam.c’라고 입력했습니다.
28
02-2 비주얼 스튜디오 프로젝트 만들기
8. 소스 파일 작성하기
소스 파일이 정상적으로 추가되면 다음 그림처럼 [소스 파일] 항목에 Exam.c라는 파일이 추가됩니다.
이 파일을 마우스로 더블 클릭하면 소스 코드를 편집할 수 있는 탭이 열리는 데 여기에 소스 코드를 입력하면 됩니다.
29
02-3 내가 만든 첫 번째 프로그램
1. 예제 코드 작성하기
“Hello~ world!!"라는 문구를 출력하는 프로그램을 만들기 위해 소스 파일 편집 창(Exam. c탬)에 예제 코드를 작성해 봅시다.
30
02-3 내가 만든 첫 번째 프로그램
1. 예제 코드 작성하기
#include <stdio.h>
C 언어에서는 #으로 시작하는 문장을 전처리기라고 부릅니다. 전처리기 (Preprocessor)는 ‘미리, 사전’에 처리한다는 뜻입니다. 여기에서는 컴파일러에게 이 예제 소스 코드를 번역하기 위해 stdio.h 파일을 먼저 참조하라고 개발자가 지시하는 것입니다. stdio.h 파일을 참조하라고 지시한 이유는 main 함수에서 사용한 printf 함수를 사용하기 위한 정보가 stdio.h 파일에 기록되어 있기 때문입니다.
31
02-3 내가 만든 첫 번째 프로그램
1. 예제 코드 작성하기
main
C 언어는 명령들을 일정한 작업 단위로 묶어서 코드를 작성하기 위해 함수(Function)라는 문법을 제공합니다. C 언어 프로그램은 사용자가 만든 함수의 집합체로 구성되는 데, 프로그램의 시작을 나타내려면 main 함수를 반드시 정의해야 합니다.
32
02-3 내가 만든 첫 번째 프로그램
1. 예제 코드 작성하기
main
main 함수를 만들지 않거나(시작점이 존재하지 않음), main 함수를 2개 이상 선언(어떤 곳이 시작점인지 판단할 수 없음)하면 링크 할 때 오류가 납니다.
함수는 서술문의 그룹으로 구성되기 때문에 복합 서술문처럼 { } (중괄호)를 사용해서 자신의 영역을 표현합니다.
33
02-3 내가 만든 첫 번째 프로그램
1. 예제 코드 작성하기
void
‘정해지지 않았다’는 의미의 예약어 (Reserved Word) 입니다. 정해지지 않았으므로 ‘없다’라는 의미로도 많이 사용됩니다.
소스 코드에서 main 앞에 있는 void는 ‘함수의 수행 결과값이 정해지지 않았다’라는 뜻이고 main 뒤 () 괄호 안에 있는 void는 ‘main 함수로 전달되는 정보가 정해지지 않았다’라는 뜻입니다.
34
02-3 내가 만든 첫 번째 프로그램
1. 예제 코드 작성하기
printf(“Hello~ world!!”);
printf는 C 언어의 표준출력 함수로, 모니터 등의 콘솔(Console) 화면에 ‘Hello~ world!!’라고 출력합니다.
이때 문장 끝에 ;(세미콜론)을 반드시 입력해야 오류가 나지 않습니다.
35
02-3 내가 만든 첫 번째 프로그램
2. 예제 컴파일 및 링크하기
입력한 예제 소스 코드가 정상으로 동작하는지 확인하려면, 소스 파일을 컴파일한 후 링크 작업을 수행하여 실행 파일을 만들어야 합니다.
비주얼 스튜디오에서는 [빌드 • 솔루션 빌드] 메뉴를 사용하면 검파일과 링크를 함께 수행할 수 있습니다.
36
02-3 내가 만든 첫 번째 프로그램
3. 실행 파일 만들기
빌드에 성공하면 비주얼 스튜디오 아래 쪽에 다음 그림처럼 표시됩니다. 이 프로젝트의 이름이 Exam이기 때문에 다음과 같은 화면이 나왔다면 성공적으로 Exam.exe 실행 파일이 만들어졌을 것입니다.
37
02-3 내가 만든 첫 번째 프로그램
4. 예제 프로그램 실행하기
예제 프로그램을 실행하려면 다음 그림처럼 [디버그 • 디버깅하지 않고 시작] 메뉴를 선택합니다. 단축 키는 [F5]입니다. 이 단축 키는 자주 쓰게 될테니 외워 두는 게 좋습니다.
38
02-3 내가 만든 첫 번째 프로그램
5. 출력 보기
오류 없이 정상적으로 실행되었다면 다음과 같은 출력 결과가 나타납니다. 이 창은 실행 결과를 간단히 볼 수 있는 콘솔 창으로 아무 키나누르면 사라집니다.
39
연습 문제
시험 때도 볼 수 있어요~~
40
자료형
3
01-1 프로그래밍 기초
01-2 C 언어 소개
01-3 전자계산기 원리와 프로그래밍 개념
01-4 C 언어 서술 형식
01-5 C 프로그램 실행 파일
41
C 언어 기본 문법
p. 16-31
03-1 컴퓨터의 자료 기억 방식
데이터(정보)를 저장하는 공간, 메모리
컴퓨터는 주기억 장치로 램 (RAM, Random Access Memory)을 사용하기 때문에 보통 메모리라고 하면 램을 의미합니다.
메모리는 1 바이트 (Byte) 단위로 주소가 매겨져 있으며 운영 체제마다 주소를 관리하는 방법이 조금씩 다릅니다.
예를 들어 32비트(Bit) 기반의 윈도우(Windows) 운영 체제에서는 0번지에서 시작하여 4,294,967,295번지까지 사용할 수 있습니다.
232 개의 번지가 있는 것이죠.
42
03-1 컴퓨터의 자료 기억 방식
데이터(정보)를 저장하는 공간, 메모리
1 비트는 0 또는 1 을저장할수있는공간이다
메모리의 최소 저장 단위는 비트(Bit)입니다. 1 비트는 0, 1 중에서 한 개를 저장할 수 있는 크기입니다.
1 비트가 두 개 모여서 만들어진 2비트는 각 비트에 0, 1 중 한 개를 저장할 수 있으니 00, 01 , 10, 11의 조합 중 한가지 형태를 저장할 수 있습니다. 그런데 이 표현은 각 비트가 0, 1 로 표현되기 때문에 2진수의 표현 방법과 같습니다.
00, 01, 10, 11 값을 10진수로 바꿔보면 0, 1, 2, 3에 해당합니다.
43
03-1 컴퓨터의 자료 기억 방식
데이터(정보)를 저장하는 공간, 메모리
저장 단위가 1 비트 증가할 때마다 저장 단위는 2 배로 늘어 난다
1 비트 증가할 때마다 저장 단위가 2의 배수만큼 늘어납니다.
비트가 8개 모이면 새로운 단위를 사용하며 이 것을 바이트(Byte)라고 합니다. 1바이트는 비트 8개로 이루어지기 때문에 숫자 256개의 (0~255) 중 하나를 저장할 수있는 크기입니다.
44
03-1 컴퓨터의 자료 기억 방식
데이터(정보)를 저장하는 공간, 메모리
부호 비트를 사용하여 양수와 음수를 구별한다
지금까지는 양수만 설명했지만, 음수도 있기 때문에 음수가 포함된 데이터를 저장할 때는 다른 방식이 필요합니다. 1바이트 기준으로 8비트 중 1비트는 음수/양수를 구분하고, 나머지 7비트에 숫자를 저장합니다. 이때 음수와 양수를 구분하는 비트를 '부호 비트'라고 합니다.
45
03-1 컴퓨터의 자료 기억 방식
데이터(정보)를 저장하는 공간, 메모리
부호 비트를 사용하여 양수와 음수를 구별한다
46
03-1 컴퓨터의 자료 기억 방식
데이터(정보)를 저장하는 공간, 메모리
47
03-2 문자를 숫자로 표현하는 약속, 아스키코드
아스키(ASCII)코드란?
컴퓨터에 문자를 저장하려면 문자를 숫자로 변환해야 하며, 이를 위해 아스키(ASCII) 코드를 사용합니다.
아스키는 문자를 숫자로 약속하는 표준으로, 7비트로 128개의 문자를 표현하다가 발전하면서 8비트로 확장되어 총 256개의 문자를 표현하게 되었습니다. 아스키는 1바이트 메모리(0~255 범위)에 저장되므로, 문자를 효율적으로 저장할 수 있는 방식입니다.
48
03-2 문자를 숫자로 표현하는 약속, 아스키코드
아스키(ASCII)코드란?
컴퓨터에 문자를 저장하려면 문자를 숫자로 변환해야 하며, 이를 위해 아스키(ASCII) 코드를 사용합니다. 아스키는 문자를 숫자로 약속하는 표준으로, 7비트로 128개의 문자를 표현하다가 발전하면서 8비트로 확장되어 총 256개의 문자를 표현하게 되었습니다. 아스키는 1바이트 메모리(0~255 범위)에 저장되므로, 문자를 효율적으로 저장할 수 있는 방식입니다.
49
03-3 자료형의 종류
정수를 표현하는 자료형
50
03-3 자료형의 종류
정수를 표현하는 자료형
51
03-3 자료형의 종류
정수를 표현하는 자료형
52
03-3 자료형의 종류
정수를 표현하는 자료형
정리: C 언어의 정수 자료형은 부호 유무(signed/unsigned)와 메모리 크기(short/long)에 따라 다양한 크기와 범위의 데이터를 처리할 수 있습니다.
53
03-3 자료형의 종류
정수를 표현하는 자료형
54
03-3 자료형의 종류
정수 자료형에서 생략 가능한 형태
55
03-3 자료형의 종류
정수 자료형에서 생략 가능한 형태
56
03-3 자료형의 종류
실수를 표현하는 자료형
57
03-3 자료형의 종류
실수를 표현하는 자료형
58
연습 문제
시험 때도 볼 수 있어요~~
59
상수와 변수
4
04-1 항상 같은 수, 상수
04-2 데이터 저장 공간, 변수
04-3 2진수를 16진수로 변환하는 방법
60
C 언어 기본 문법
p. 16-31
04-1 항상 같은 수, 상수
숫자형 상수
상수(Constant)는 프로그램 실행 중에 값이 한 번 결정되면 끝날 때까지 변하지 않는 값을 의미합니다.
상수는 숫자형, 문자형, 문자열형으로 구분할 수 있습니다.
61
04-1 항상 같은 수, 상수
숫자형 상수
다음 표에서 왼쪽처럼 적으면 정수형 상수로 인식되고, 오른쪽처럼 .(소수점)과 소수부를 적으면 실수형 상수로 인식됩니다.
실수형 상수는 다음과 같이 가수부와 지수부 형식으로도 표현할 수 있습니다.
62
04-1 항상 같은 수, 상수
정수형 상수의 다양한 진법 표현
위에서 열거한 정수형 상수는 모두 10진수 형식인데, C 언어에서는 10진수 형식뿐만 아니라 8진수나 16진수 형식으로도 표현할 수 있습니다.
63
04-1 항상 같은 수, 상수
정수형 상수의 다양한 진법 표현
8진수
10진수와 구별하기 위해 8진수를 적을 때는 숫자 앞에 0을 붙입니다. 이때 0은 영문자 O가 아니라 숫자 0입니다. 8진수는 각 자리마다 0부터 7까지의 숫자로 구성되어야 하므로, 091이나 082처럼 8진수로 표현할 수 없는 숫자를 사용하면 오류가 발생할 수 있습니다.
64
04-1 항상 같은 수, 상수
정수형 상수의 다양한 진법 표현
16진수
16진수는 숫자 앞에 0x 또는 0X를 붙여서 표현합니다. 여기서 0은 숫자 0이며, 영문자 O와 혼동하지 않도록 주의해야 합니다. 16진수는 0부터 9까지의 숫자와 A부터 F까지의 문자를 사용합니다. A는 10진수 10, B는 11, C는 12, D는 13, E는 14, F는 15를 의미합니다.
예를 들어, 16진수 0x10은 10진수로 16에 해당합니다. 16진수를 10진수로 변환하는 방법은 C 언어의 기능을 사용해 쉽게 처리할 수 있습니다.
65
04-1 항상 같은 수, 상수
정수형 상수의 다양한 진법 표현
16진수
16진수는 숫자 앞에 0x 또는 0X를 붙여서 표현합니다. 여기서 0은 숫자 0이며, 영문자 O와 혼동하지 않도록 주의해야 합니다. 16진수는 09와 AF로 이루어져 있으며, A는 10진수 10, B는 11, C는 12, D는 13, E는 14, F는 15를 의미합니다. 16진수에서 0x10은 10진수로 16에 해당합니다. 16진수를 10진수로 변환하는 방법은 C 언어의 기능을 사용해 쉽게 처리할 수 있습니다.
66
04-1 항상 같은 수, 상수
정수형 상수의 다양한 진법 표현
16진수
67
04-1 항상 같은 수, 상수
문자형 상수
프로그램에서 문자를 표시할 때 사용하는 문자형 상수(Character Constant)는 작은 따옴표(')를 사용하여 표현하며
68
04-1 항상 같은 수, 상수
문자열형상수
문자열형 상수(Character-string Constant)는 프로그램에서 문자열(한 개 이상의 분자)을 표시할 때 사용하며 “ "(큰 따옴표)로 묶어서 표현합니다.
문자열은 문자들로 이루어진 집합체이며 일반적으로 문자 하나는 1 바이트를 차지하기 때문에 “ Hello~" 라고 적으면 문자 6개이므로 6바이트를 차지할 것이라고 생각하기 쉽습니다.
하지 만 실제로는 7바이트를 차지하게 됩니다. 왜냐하면 문 자열은자신의 끝을표시하기 위해 마지막자리에 ‘비어 있다’를 의미하는 0 값이 추가되기 때문입니다.
69
04-2 데이터 저장 공간, 변수
변수 이름
변수(Variable)는 변하는 값을 의미하며, 프로그래밍에서 두 가지 역할을 합니다.
70
04-2 데이터 저장 공간, 변수
변수 이름
메모리는 1바이트 단위로 주소(Address)가 부여되며, 프로그래머는 이를 일일이 기억하는 대신 변수 이름을 사용해 메모리 공간을 참조합니다. 변수 이름은 컴파일 과정에서 실제 메모리 주소로 변환되어, 프로그램 내에서 변수 이름을 사용하는 것이 실제 메모리 주소를 사용하는 것과 같습니다.
71
04-2 데이터 저장 공간, 변수
변수 이름을 정할 때 기억해야 할 것
72
04-2 데이터 저장 공간, 변수
변수 이름을 정할 때 기억해야 할 것
표기법은 이름을 지울 때 사용하는 규칙입니다.
73
카멜 표기법 (Camel)
스네이크 표기법 (Snake)
헝가리언 표기법 (Hungarian)
04-2 데이터 저장 공간, 변수
변수 선언하기
74
“변수를 선언하는 것은 저장 공간을 할당하는 것이다.”
04-2 데이터 저장 공간, 변수
변수 선언하기
75
04-2 데이터 저장 공간, 변수
변수 초기화하기
76
04-2 데이터 저장 공간, 변수
변수 초기화하기
77
04-3 2진수를 16진수로 변환하는 방법
비트 단위 연산에 유용한 16진수
78
“16진수 한자릿수는 4비트를 의미한다.”
04-3 2진수를 16진수로 변환하는 방법
비트 단위 연산에 유용한 16진수
16진수 13은 2진수로 1과 3을 각각 4비트로 표현하여 8비트로 나타낼 수 있음. BC도 동일하게 B와 C를 4비트씩 표현.
79
04-3 2진수를 16진수로 변환하는 방법
비트 단위 연산에 유용한 16진수
80
“2진수와 16진수는 4비트 단위로 나누어서 쉽게 변환할수 있다.”
04-3 2진수를 16진수로 변환하는 방법
비트 단위 연산에 유용한 16진수
표기법은 이름을 지울 때 사용하는 규칙입니다
컴퓨터는 모든 데이터를 숫자로 저장하기 때문에 문자도 숫자로 변환되어 저장됩니다. 이 숫자는 아스키코드 표에 정의되어 있습니다. 예를 들어, C 언어에서 소문자 'a'는 아스키 값 97로 저장됩니다. 하지만 프로그래머가 직접 숫자를 입력하는 대신, C 언어는 문자형 상수를 제공하여 'a'와 같은 문자를 쉽게 사용할 수 있도록 도와줍니다. 컴파일러는 이를 자동으로 아스키 값으로 변환하여 처리합니다.
81
연습 문제
시험 때도 볼 수 있어요~~
82
함수
5
05-1 C 언어와 함수
05-2 함수 정의하고 호출하기
05-3 main 함수 정리하기
05-4 함수 원형 선언하기
83
C 언어 기본 문법
p. 16-31
05-1 C 언어와 함수
함수란?
특별한 기능을 가진 main 함수
C 언어에서 main 함수는 프로그램의 시작을 알리는 특별한 함수입니다.
C 언어 프로그램은 여러 함수들로 이루어지며, 이 함수들이 서로 호출하여 진행됩니다.
84
컴파일러는 어떤 함수가 처음 실행되는지 알아야 하기 때문에, main 함수가 프로그램의 시작점을 지정하는 역할을 합니다.
05-1 C 언어와 함수
함수란?
물 마시기 함수와 main 함수로 간단한 함수 형태 살펴보기
물 마시기 함수에서 중괄호 {} 안에 적혀 있는 명령문들은 이 함수가 작업할 내용들을 묶어 놓은 것이었습니다.
main 함수와 물 마시기 함수가 완벽하게 같은 형태는 아니지만, 중괄호 { } 안에 적혀 있는 printf(“Hello, World!") 명령문이 main 함수가 작업할 내용이라는 것은 예상할 수 있겠지요?
85
05-1 C 언어와 함수
C 언어 프로그램은 함수의 집합체이다
C 언어 프로그램은 여러 함수로 이루어져 있으며, 그중 main 함수가 프로그램의 시작을 알리는 역할을 합니다. 컴파일러는 이 main 함수를 통해 프로그램이 어디서부터 시작되는지 파악합니다.
C 프로그램은 함수들이 서로 호출하여 진행되며, 이 구조를 간단히 도해하면 함수 간의 호출 관계와 실행 순서를 쉽게 이해할 수 있습니다.
86
05-2 함수 정의하고 호출하기
함수 정의하기
함수의 구성 요소를 더 자세히 살펴보기 위 해 지금부터 ‘더하기 작업’을 하는 함수를 만들어 보겠습니다. 두 정수를 더하는함수 는 어떤 구조로 만들어야 할까요?
더하기 함수는두 개의 정수값을받아더 한후결과값을출력하는작업을합니다.
87
05-2 함수 정의하고 호출하기
함수 정의하기
바로 위의 도해를 함수 문법에 맞추어 표시해 보면 다음과 같습니다.
여기에서 함수 이름, 변수 이름은 모두 프로그래머가 임의로 지은 이름이고 나머지는 예약어입니다.
이렇게 코드를 써서 함수를 실제로 구현하는 행위를 ‘함수를 정의한다’라고 합니다.
88
05-2 함수 정의하고 호출하기
함수 호출하기
C 언어 프로그램은 함수들이 서로 호출하는 구조로 되어 있으며, 이를 '함수 호출'이라고 합니다. 함수가 다른 함수를 호출하는 경우, 호출하는 함수를 '호출자(Caller)'라고 하고, 호출되는 함수를 '피호출자(Callee)'라고 부릅니다.
예를 들어, main 함수가 두 수의 합을 구하기 위해 Sum 함수를 호출하면, main 함수는 호출자가 되고, Sum 함수는 피호출자가 됩니다.
89
05-2 함수 정의하고 호출하기
함수 호출하기
함수 호출 과정 살펴보기
그렇다면 main 함수는 Sum 함수를 어떻게 불러서 사용하는 걸까요? 함수가 어떤 과정을 거쳐 호출되는지 알아야 이후에 코드를 작성할 때도 어려움이 없습니다. 다음 코드를 봅시다.
여기서 main 함수가 Sum 함수를 부른 의미가 있을 테니까요. 이렇게 Sum 함수에서 돌려주는 결과값을 main 함수에서 돌려받은 반환값이라고도 부릅니다.
90
05-2 함수 정의하고 호출하기
함수의 매개변수 자세히 살펴보기
프로그램에서 데이터를 효율적으로 사용하기 위해 함수에서 필요할 때 만들고, 함수가 끝나면 사라지게 합니다. 그러나 함수 간에 데이터를 전달하려면 매개변수를 사용해야 합니다.
예를 들어, main 함수가 Sum 함수를 호출할 때, main의 변수 값을 Sum에서 직접 사용할 수 없으므로 매개변수로 전달해야 합니다.
91
05-2 함수 정의하고 호출하기
함수의 매개변수 자세히 살펴보기
92
05-2 함수 정의하고 호출하기
함수의 반환값 자세히 살펴보기
Sum 함수가 수행한 결과값을 호출자에게 넘겨주면 Sum 함수의 역할은 끝납니다. 함수에서 return 예약어를 사용해 결과값을 반환하며, 반환된 값은 호출자의 변수에 대입됩니다.
따라서 함수의 반환값 자료형을 함수 이름 앞에 명시해야 합니다.
예를 들어, Sum 함수가 int형 결과값을 반환할 경우, 반환형으로 int를 Sum 앞에 적어야 합니다.
93
05-2 함수 정의하고 호출하기
함수의 반환값 자세히 살펴보기
return문은 값을 반환하는 기능 외에도 함수를 종료하는 기능도 가지고 있습니 다. 따라서 단순히 함수를 종결할 목적으로 retum을 사용할 때는 다음처 럼 retum 뒤에 반환 값을적지 않아도오류가발생하지 않습니다.
또 다음과 같이 return문을 두 번 적으변 오류가 발생하지는 않지만 두 번째 return문은 실행되지 않습니다.
94
“return은 함수를 종결하는 역할도 한다.”
05-2 함수 정의하고 호출하기
함수의 반환값 자세히 살펴보기
95
05-2 함수 정의하고 호출하기
함수 이름을 짓는 방법
96
05-3 main 함수 정리하기
main 함수의 반환값
main 함수의 조건
97
“C 언어 프로그램은 main 함수가 시작 시점이다.”
05-3 main 함수 정리하기
main 함수의 반환값
int 반환형
void 반환형
98
05-3 main 함수 정리하기
main 함수의 매개변수
C 프로그램은 명령 프롬프트에서 실행할 수 있으며, 실행 시 실행 인자(Argument)를 전달할 수 있음.
실행 인자는 공백으로 구분되며, 프로그램의 main 함수로 전달됨.
99
05-4 함수 원형 선언하기
함수를 호출할 때 기억해야 할 것
컴파일러는 C 언어 소스 코드를 위에서 아래로 읽으며 번역함.
100
05-4 함수 원형 선언하기
함수 원형이란?
두 함수가 서로를 호출하는 경우: 피호출자가 호출자보다 아래에 있을 수 없음.
해결 방법: 함수 원형(Function Prototype) 사용.
101
05-4 함수 원형 선언하기
함수 원형이란?
함수 원형의 역할: 컴파일러가 함수의 존재를 인식하고, 호출 구조를 올바르게 생성할 수 있게 함.
함수 정의 vs 함수 선언:
102
05-4 함수 원형 선언하기
103
연습 문제
시험 때도 볼 수 있어요~~
104
표준 출력 함수
6
06-1 라이브러리
06-2 라이브러리 사용 설명서, 헤더 파일
06-3 전처리기
06-4 표준 라이브러리와 표준 출력 함수
06-5 문자열 출력 함수 printf
105
C 언어 기본 문법
p. 105-139
06-1 라이브러리
라이브러리 파일(*.lib)이 등장한 이유
C 언어에서 목적 파일(Object File)은 소스 파일을 컴파일해서 생성됩니다. 만약 소스 코드가 변경되지 않았다면, 기존에 만들어진 목적 파일을 그대로 사용하여 실행 파일을 생성할 수 있습니다.
예를 들어, test.exe 프로그램이 여러 소스 파일로 구성되어 있고, 그 중 일부 파일만 변경되었다면, 변경된 파일만 다시 컴파일하여 효율적으로 작업할 수 있습니다.
106
06-1 라이브러리
라이브러리 파일(*.lib)이 등장한 이유
하지만 소스 전체를 다시 컴파일해야 하는 경우, 소스 파일이 많다면 비효율적입니다. 이를 개선하기 위해 변경 가능성이 없는 파일을 목적 파일로 대체하여 작업 효율을 높일 수 있습니다.
그러나 목적 파일은 사용되지 않는 함수까지 모두 실행 파일에 포함시키는 단점이 있습니다.
107
06-1 라이브러리
라이브러리 파일(*.lib)이 등장한 이유
이 문제를 해결하기 위해 라이브러리 파일은 실제로 사용되는 함수만 실행 파일에 포함되도록 구성됩니다. 라이브러리 파일(*.lib)은 필요에 따라 목적 파일을 재구성하여, 사용된 함수의 기계어 코드만 실행 파일에 포함되도록 합니다. 이렇게 하면 더 효율적으로 프로그램을 실행할 수 있습니다.
108
06-1 라이브러리
소스 파일? 목적 파일? 라이브러리 파일?
소스 파일, 목적 파일, 라이브러리 파일에 대한 선택은 프로그래머가 결정할 사항입니다. 초보 프로그래머라면 굳이 라이브러리 파일을 만들 필요 없이 소스 파일을 사용해 프로그램을 빌드하는 것만으로도 충분히 프로그램을 완성할 수 있습니다.
우리가 배운 라이브러리 파일 생성 방법은 과거 방식에 기반한 내용입니다. 예전에는 Visual C++에서 MakeLib.exe 프로그램을 통해 목적 파일을 입력해 라이브러리 파일을 만들었습니다.
109
06-1 라이브러리
소스 파일? 목적 파일? 라이브러리 파일?
일반 프로그래머에게는 이 방식이 크게 불편하지 않았지만, 라이브러리를 자주 개발하는 프로그래머들에게는 번거로웠습니다.
오늘날에는 Visual C++에서 라이브러리 파일을 쉽게 만들 수 있는 프로젝트 형식이 제공되어, 프로그래머가 라이브러리를 직접 개발할 수 있습니다.
110
06-2 라이브러리 사용 설명서, 헤더 파일
헤더 파일의 형태
헤더 파일의 개념이 잘 이해되지 않는다면, 설계도와 제품의 관계로 생각해 볼 수 있습니다. 소스 코드는 설계도, 라이브러리 파일은 그 설계도로 만든 제품입니다. 제품을 만든 사람이 설계도 자체는 주지 않지만, 제품을 올바르게 사용할 수 있도록 사용 설명서를 제공하는 것처럼, 라이브러리의 설명서가 바로 함수 원형을 선언해 둔 헤더 파일입니다.
111
06-2 라이브러리 사용 설명서, 헤더 파일
헤더 파일의 형태
MyMath.h 헤더 파일에 함수 원형을 적어 MyMath.lib와 함께 제공하면, 사용자는 함수의 사용법을 알 수 있습니다. 하지만 main.c 소스 파일에 함수 원형이 선언되어 있지 않다면 오류가 발생합니다. 이를 해결하려면 main.c 파일에서 헤더 파일을 참조하도록 지시해야 합니다. 컴파일러가 MyMath.h 헤더 파일을 먼저 읽으면, 함수 원형을 미리 알 수 있어 오류가 발생하지 않습니다.
112
06-3 전처리기
전처리기(Preprocessor)는 프로그래머가 컴파일러에 직접 지시하는 문법을 말합니다. 전처리기는 # 기호로 시작하며, 기계어로 번역되지 않기 때문에 끝에 세미콜론을 사용하지 않습니다. 다양한 기능을 제공하며, 그중 가장 자주 사용되는 두 가지 문법을 설명합니다.
113
06-3 전처리기
#include 전처리기
#include는 컴파일러에 특정 파일을 읽도록 지시하는 명령어입니다. 주로 헤더 파일을 읽을 때 사용되며, "파일명"의 형식으로 사용합니다. 헤더 파일이 작업 경로에 있으면 단순히 "파일명.h"를 쓰고, 경로가 다르면 전체 경로를 명시해야 합니다.
114
06-3 전처리기
#define 전처리기
#define을 사용하면 특정 단어를 상수로 치환할 수 있습니다. 예를 들어 #define MAX_COUNT 3로 선언하면, 소스 파일에서 MAX_COUNT가 나올 때마다 3으로 치환됩니다. 이렇게 상수를 사용하면 의미 전달이 더 명확해지며, 코드를 이해하기 쉽게 만듭니다. 또한, 여러 곳에서 동일한 상수를 사용했을 때 값이 변경되면, 해당 상수를 한 번만 수정하면 모든 값이 자동으로 바뀌므로 코드 관리가 편리해집니다.
115
#define 전처리기는 상수나 명령문을 치환하는 문법입니다.
06-3 전처리기
#define 전처리기
#define은 상수뿐만 아니라 명령문도 치환할 수 있습니다. 예를 들어 #define POW_VALUE(x) (x * x)로 설정하면, POW_VALUE(3)는 3 * 3으로 치환됩니다. 이러한 방식은 매크로 함수라고 불리며, 자주 사용하는 명령을 하나의 명령으로 묶어 사용하는 것을 의미합니다.
116
06-4 C 표준 라이브러리와 표준 출력 함수
표준 라이브러리는 왜 필요할까?
운영체제는 윈도우뿐만 아니라 리눅스 등 다양한 종류가 있으며, 각각의 운영체제는 컴퓨터 하드웨어를 제어하는 방식이 다릅니다. 예를 들어, 문자 A를 출력하는 방법이 운영체제마다 다를 수 있습니다. 만약 C 언어가 문자 출력 기능을 고정된 문법으로 제공한다면, 새로운 운영체제가 등장할 때마다 C 언어 문법을 변경해야 하는 문제가 발생합니다.
117
06-4 C 표준 라이브러리와 표준 출력 함수
표준 출력 함수 살펴보기
문자 출력 함수 putchar, putc
putchar는 단일 문자를 출력하는 함수로, 출력할 문자의 아스키(ASCII) 값을 매개변수로 받습니다. 예를 들어, 문자 'A'를 출력하려면 아스키 값 65를 사용하거나, 'A'로 문자 상수를 직접 지정할 수 있습니다. putchar는 성공적으로 출력하면 해당 문자의 아스키 값을 반환하고, 오류 시 EOF(-1)를 반환합니다.
118
06-4 C 표준 라이브러리와 표준 출력 함수
표준 출력 함수 살펴보기
문자열 출력 함수 puts
puts는 문자열을 출력하는 함수로, 매개변수에 출력할 문자열을 지정합니다. 이 함수는 줄 바꿈 기능을 포함하고 있어 문자열 출력 후 자동으로 다음 줄로 이동합니다.
119
06-5 문자열 출력 함수 printf
이제 표준 출력 함수 중 가장 많이 사용하는 printf 함수에 대해 알아보겠습니다. printf 함수는 "print"와 "format"을 합친 이름으로, 형식화된 문자열을 출력할 수 있는 기능을 제공합니다. 예를 들어, printf("Hello World!");처럼 문자열을 출력할 수 있지만, 줄 바꿈은 자동으로 일어나지 않습니다.
120
06-5 문자열 출력 함수 printf
printf 함수의 가장 큰 장점은 변수 값을 사용자가 지정한 형식으로 출력할 수 있다는 점입니다. 출력 형식을 지정하기 위해 % 서식 지정자를 사용하며, 자주 사용하는 서식 지정자는 %d(정수 출력) 등입니다.
%d를 사용하면 10진수 형태로 출력됩니다.
121
06-5 문자열 출력 함수 printf
122
06-5 문자열 출력 함수 printf
% 키워드 중심의 출력 특성 확인하기
123
06-5 문자열 출력 함수 printf
% 키워드 중심의 출력 특성 확인하기
%d와 %u는 변수 크기를 4바이트로 변환해 출력하며, 작은 자료형도 4바이트 크기로 맞춘 후 출력하기 때문에 예상치 못한 결과가 나올 수 있습니다.
124
06-5 문자열 출력 함수 printf
% 키워드 중심의 출력 특성 확인하기
또한, %o는 8진수, %x는 16진수로 정수를 출력하며, %e는 실수를 지수 형태로 출력합니다.
125
06-5 문자열 출력 함수 printf
출력 문자열 정렬하기
printf 함수를 사용하면 %와 서식 지정자 사이에 숫자를 넣어 출력할 칸 수를 조절할 수 있습니다. 오른쪽 정렬은 +를, 왼쪽 정렬은 -를 사용하여 조정하며, 숫자 앞의 빈칸을 0으로 채우고 싶다면 숫자 앞에 0을 추가해줍니다.
126
06-5 문자열 출력 함수 printf
실수의 소수점 자릿수 지정하기
실수를 출력할 때는 소수점 이하 자릿수를 지정할 수 있습니다. 기본적으로 %f는 소수점 여섯째 자리까지 출력하지만, 소수점 셋째 자리까지 출력하고 싶다면 %.3f를 사용하면 됩니다.
소수점 자릿수를 변경할 때는 반올림이 적용되며, % 자체를 출력하고 싶다면 %%를 사용하면 됩니다.
127
06-5 문자열 출력 함수 printf
실수의 소수점 자릿수 지정하기
또한, 출력 칸 수를 지정할 때 마침표도 포함되므로 이를 고려해 칸 수를 계산해야 합니다. 예를 들어, %8.4f는 전체 8칸 중 소수점 넷째 자리까지 출력하고, 정수부는 3칸을 차지합니다.
128
06-5 문자열 출력 함수 printf
제어 코드 사용하기
아스키 표에는 알파벳, 숫자, 기호 외에도 캐릿(커서) 위치를 조절하는 제어 코드가 포함되어 있습니다. C 언어에서는 제어 코드를 직접 입력할 수 없으므로, \(백슬래시)와 함께 사용하는 문법을 제공합니다.
129
연습 문제
시험 때도 볼 수 있어요~~
130
연산자
7
07-1 기본연산자
07-2 연산자 우선순위와 연산 방향
131
C 언어 기본 문법
p. 140-150
07-1 기본 연산자
대입 연산자
C 언어에서 대입 연산자는 = 기호로나타내며 변수에 상수값또는다른 변수값을 대입할 때 사용합니다.
수학에서 x =3 이란 두 가지 의미를 나타법니다 첫 번째 의미는
하지만 하나의 예약어에는 하나의 의미만 부여할 수 있습니다. 따라서 컴퓨터에서는= 기호를대입의 의미로만사용합니다.
132
07-1 기본 연산자
산술 연산자
산술 연산자(+,-, *, /, % )는상수또는변수의 값을이용하여 산술연산을하는데 사용됩니다.
프로그래밍 언어에서는*을곱하기 연산자로사용합니다. 나눗셈의 경우에는결과값이 몫과 나머지로나오기 때문에 몫은/ 연산자를이용해서 구하고나머지는% 연산자를사용해서 구 합니다.다음예제를통해 C 언어에서산술연산자를어떻게사용하는지살펴봅시다 .
133
07-1 기본 연산자
증가 연산자
컴퓨터에서 값이 순차적으로 증가하거나 감소하는 경우를 위해, C 언어는 1을 증가시키는 ++ 증가 연산자와 1을 감소시키는 -- 감소 연산자를 제공합니다. + 연산자와 비교했을 때, 증가 연산자는 단항 연산자로 하나의 메모리만 사용하기 때문에 연산 속도가 더 빠르고 코드도 간단해집니다.
134
07-1 기본 연산자
증가 연산자
증감 연산자는 전위형(++i)과 후위형(i++)으로 사용할 수 있으며, 전위형은 값을 먼저 증감한 후 연산을 진행하고, 후위형은 연산을 먼저 하고 나서 값을 증감합니다.
135
07-1 기본 연산자
관계 연산자
산술 연산은 숫자를 결과로 반환하지만, 관계 연산이나 논리 연산은 참(1) 또는 거짓(0)으로 결과를 반환합니다. 예를 들어, "1과 2는 같다"는 관계 연산의 결과는 거짓이 됩니다. 컴퓨터는 연산 속도를 높이기 위해 참은 1, 거짓은 0으로 처리합니다.
136
07-1 기본 연산자
관계 연산자
137
07-1 기본 연산자
논리 연산자
C 언어에서 AND는 &&, OR는 ||, NOT은 !로 표현됩니다. AND 연산자는 두 값이 모두 참일 때만 참이고, OR 연산자는 둘 다 거짓일 때만 거짓입니다. NOT 연산자는 현재 값의 반대를 반환합니다.
138
07-2 연산자 우선순위와 연산 방향
연산자 우선순위란?
다음은 C 언어 연산자들의 우선순위를 정리한 표입니다.
139
07-2 연산자 우선순위와 연산 방향
우선순위가 같은 연산자라면? �연산 방향을 확인하자!
140
연습 문제
시험 때도 볼 수 있어요~~
141
조건문
8
08-1 제어문
08-2 if 조건문
08-3 if ~ else ~ 조건문
08-4 중첩된 if 조건문
08-5 switch 조건문
142
C 언어 기본 문법
p. 151-177
08-1 제어문
제어문이란?
C 언어는 이러한 상황을 처리하기 위해 두 가지 형태의 제어문을 제공합니다:
143
이러한 제어문을 통해 프로그램의 흐름을 더 효율적으로 제어할 수 있습니다.
08-2 if 조건문
if 조건문의 구조
if 조건문은문법 구성이 간단하고 직관적인 표현을사용하기 때문에 다른조건문에 비해 많 이 사용합니다.
()괄호안에 있는조건수식의 결과값이 참으로나오면그뒤에 명시한명령문 1 개를수행하 는문법입니다. 여기에서 참은 0 이 아닌모든값을의미합니다
144
08-2 if 조건문
단일 문장을 수행하는 if 조건문
조건 수식의 결과값이 참 일 때 하나의 단일 명령문 만 수행합니다. 이 경우에 조건 수식의 결과값이
145
08-2 if 조건문
복합 문장을 수행하는 if 조건문
조건 수식의 결과값이 참일 때 {} 로 모아 놓은 명령문들을 모두 수행합니다.
146
08-2 if 조건문
복합 문장을 수행하는 if 조건문
147
08-2 if 조건문
if 조건문을 사용할 때 주의 사항
대입 연산자와 관계 연산자의 혼동
if 조건문을 사용할 때 주의할 점은 대입 연산자(=)와 관계 연산자(==)를 혼동하지 않는 것입니다. 초보 프로그래머들은 종종 == 대신 =를 사용하는 실수를 합니다. ==는 두 값이 같은지를 비교하는 관계 연산자이고, =는 값을 대입하는 대입 연산자입니다.
148
08-2 if 조건문
if 조건문을 사용할 때 주의 사항
세미콜론으로 인한 오류
프로그래머들이 이런 실수를 많이 하는 이유는 문장이 끝날 때 습관적으로 세미콜론을 사용하기 때문입니다. 이러한 버그를 예방하기 위해서는 단일 문장을 사용할 때 세미콜론을 신중하게 사용하거나, 조건문 뒤에 중괄호 {}를 바로 사용하는 습관을 들이는 것이 좋습니다. 이렇게 하면 실수로 인한 버그 발생 가능성을 줄일 수 있습니다.
149
08-3 if ~ else ~ 조건문
단일 if ~ else ~ 문
위와 같은 경우에 조건 수식이 참이변 ‘명령문 1 • 명령문2 • 명령문4’의 순서로 실행되고 조건 수식이 거짓이면 ‘명령문 1 • 명령문3 • 명령문4’의 순서로 실행됩니다. 다음 예제를 통해 실행 과정을살펴보겠습니다.
150
08-3 if ~ else ~ 조건문
단일 if ~ else ~ 문
151
08-3 if ~ else ~ 조건문
복합 if ~ else ~ 문
위와같은경우에 조건 수식이 참이면 ‘명령문 1 • 명령문2 → 명령문3 → 명령문6 ’의 순서로 실행되고 조건 수식이 거짓이면 ‘명령문 1 • 명령문4 • 명령문5 • 명령문6 ’의 순서로 실행됩니다.
152
08-3 if ~ else ~ 조건문
복합 if ~ else ~ 문
153
08-3 if ~ else ~ 조건문
복합 if ~ else ~ 문
그리고 if문이 단일 문장이 면 else문도 반드시 단일 문장이 어야 한다거나, if문이 복합 문장이 면 else문도 반드시 복합 문장일 필요는 없습니 다.
154
08-3 if ~ else ~ 조건문
if '" else '" 조건문과 비슷한 조건 수식 연산자
조건 수식 연산자 (Conditional-expression Operator)는 if ~ else ~ 조건문과 유사하지만, 조건문과 달리 연산자이기 때문에 결과값을 반환하는 형태로 처리됩니다. 조건이 참이면 첫 번째 수식의 결과값을, 거짓이면 두 번째 수식의 결과값을 반환합니다.
155
08-3 if ~ else ~ 조건문
if '" else '" 조건문과 비슷한 조건 수식 연산자
156
08-4 중첩된 if 조건문
중첩된 if문
중첩된 if 조건문은 조건문 내부에 또 다른 조건문이 포함된 구조를 말합니다. 중첩의 개수에 제한은 없지만, 너무 많이 중첩되면 프로그램의 성능이 떨어지고 코드의 가독성이 낮아져서 이해하기 어려워질 수 있습니다. 따라서 효율적인 알고리즘을 설계하는 것이 중요합니다.
알고리즘은 문제를 해결하기 위한 과정이며, 이를 쉽게 표현한 것이 순서도입니다.
157
08-4 중첩된 if 조건문
중첩된 if문
158
08-4 중첩된 if 조건문
if ~ else if ~ else 조건문
159
08-4 중첩된 if 조건문
if ~ else if ~ else 조건문
if ~ else ~문은 하나의 명령문으로 처리할 수 있으며, 중괄호를 생략하고 중첩된 조건문을 간결하게 작성할 수 있습니다. 이러한 방식은 조건문들이 배타적으로 동작하여, 첫 번째 조건이 참이면 나머지 조건은 처리되지 않고 종료됩니다.
이 구조를 if ~ else if ~ else문이라고 하며, 조건을 위에서 아래로 순차적으로 평가합니다. 따라서, 참일 가능성이 높은 조건을 상위에 배치하는 것이 효율적입니다.
160
08-4 중첩된 if 조건문
if ~ else if ~ else 조건문
161
08-4 중첩된 if 조건문
if ~ else if ~ else 조건문
이 구문을 단순히 외우기보다는, 중첩된 if문의 원리를 이해하면 더 쉽게 사용할 수 있습니다.
162
08-5 switch 조건문
switch 조건문의 기본 구조
switch 조건문은 정해진 상수들과 직접적 인비교를할수있는문법구조로되어 있 습니다. switch 조건문은 조건 수식을 포 함한모든수식을사용할수있으며 그수식을처리하여 얻은결과값을각 case문에 있는상 수값과비교하여 명령문을수행합니다.
163
08-5 switch 조건문
switch 조건문의 기본 구조
switch문에서 조건과 일치하는 case가 없을 경우 default문이 실행되며, 이는 if문에서 else의 역할과 유사합니다. 마지막 case에서는 break문을 생략할 수 있으며, default문은 필수는 아니며 필요하지 않으면 생략할 수 있고, 위치도 자유롭게 설정할 수 있습니다.
164
08-5 switch 조건문
switch 조건문과 if ~ else if ~ else문 비교
switch문은 상수와 비교하는 방식으로 작동하며, if문처럼 범위를 비교할 수는 없기 때문에 점수를 10으로 나누어 case문에서 상수와 비교하는 방식으로 구성되었습니다. 또한, 100점도 90점대와 동일하게 처리하기 위해 특별한 처리가 되어 있습니다.
하지만 switch문은 상수와의 비교에만 유리하며, 상수가 아닌 변수를 비교할 수 없다는 단점이 있습니다.
165
연습 문제
시험 때도 볼 수 있어요~~
166
반복문
9
09-1 반복문의 기본 구조와 for 반복문
09-2 while 반복문
09-3 반복문 구성 방법
09-4 중첩 반복문
09-5 break와 continue 제어문
167
C 언어 기본 문법
p. 178-202
09-1 반복문의 기본 구조와 for 반복문
반복 작업에 필요한 세 가지 요소
'1에서 5까지 숫자를 더하라'는 명령에는 반복 작업이 포함되어 있습니다. 이 명령을 수행하려면 덧셈을 5번 반복해야 하기 때문입니다. 반복문은 이러한 반복 작업을 수행하는 문법으로, 세 가지 중요한 요소가 필요합니다:
이 요소 중 하나라도 빠지거나 잘못 사용되면 반복 작업이 제대로 실행되지 않거나 무한히 반복될 수 있습니다.
168
09-1 반복문의 기본 구조와 for 반복문
for 반복문의 기본 구조
for 반복문은 시작 조건, 종결 조건, 조건 변화 수식이라는 3요소를 가장 단순하고 정확하게 표현하는 반복문입니다. 이 구조가 명확해 많이 사용되며, 특히 시작과 끝이 명확한 작업에 적합합니다.
169
09-1 반복문의 기본 구조와 for 반복문
for 반복문의 기본 구조
반복문의 흐름을 시각적으로 이해하기 위해 순서도로 나타낼 수 있습니다.
170
09-1 반복문의 기본 구조와 for 반복문
for 반복문의 기본 구조
171
09-2 while 반복문
while 반복문의 기본 구조
반복문의 또 다른 종류인 while 반복문은 ‘종결 조건’만 형식으로 가지고, 나머지 요소는 프로그래머가 적절하게 배치할 수 있는 문법입니다.
while 반복문은 종결 조건이 거짓이 될 때까지 명령문을 반복하며, 단일문장 또는 복합 문장으로 사용할 수 있습니다.
172
09-2 while 반복문
while 반복문의 기본 구조
173
09-2 while 반복문
while 반복문으로 무한 루프 만들기
while 반복문에서는 ‘종결 조건’을생략할수 없기 때문에 괄호 안에 어떤 상수 값이나수식 을 반드시 적 어야 합니 다. 따라서 while문으로 무한 루프 형식을 만들고 싶다면 괄호 안에 참 을 의미하는 1을 적어서 사용합니다.
174
09-2 while 반복문
do ~ while 반복문
do ~ while 반복문은 while문과 비슷하지만 ‘종결 조건’을 명령문을 실행하기 전이 아니라 후에 체크한다는 점이 다릅니다.
이 문법의 장점은 ‘종결 조건’이 거짓인 상황에도 명령문을한번은수행하고종료할수 있다 는 것입니다.
175
09-3 반복문 구성 방법
for문을 사용해서 구구단 2단 출력 프로그램 만들기
1단계: 필요한 변수를 파악합니다. 2단을 출력하려면 2 * 1부터 2 * 9까지 반복해야 하므로, 반복 횟수를 저장하는 변수가 필요하며, 이를 i로 정할 수 있습니다. 이 변수는 1에서 9까지 증가하며 반복됩니다.
176
09-3 반복문 구성 방법
for문을 사용해서 구구단 2단 출력 프로그램 만들기
2단계: 중복된 변수를 제거합니다. 처음에는 count, i, r이라는 변수를 설정했지만, count와 i는 같은 역할을 하므로 i만 남기고, r 대신 2 * i로 표현할 수 있습니다. 결국 필요한 변수는 i 하나뿐입니다.
177
09-3 반복문 구성 방법
for문을 사용해서 구구단 2단 출력 프로그램 만들기
3단계: 반복문을 구성합니다. 남은 변수 i를 사용해 for 반복문을 구성하고, 2 * i의 결과를 출력하는 프로그램을 작성합니다.
178
09-3 반복문 구성 방법
for문을 사용해서 구구단 2단 출력 프로그램 만들기
179
09-4 중첩 반복문
중첩 반복문의 구조
다음 코드는 중첩 반복문을 이해할 수 있도록 각 반복문에 사용된 변수 값을 출력하는 예제입니다. 출력 결과를 보면, 반복문이 중첩되면 두 반복문의 반복 횟수를 곱한 수(예: 2 × 3 = 6회)만큼 반복하며, 외부 반복문이 1회 반복될 때마다 내부 반복문은 자기 반복 횟수(예: 3회)만큼 반복합니다.
180
09-4 중첩 반복문
중첩 반복문을 사용해서 구구단 만들기
앞에서 사용한 구구단 예제 도 ShowMultiplication 함수를 사용하지 않고 중첩 반복문을 사용하여 구성해봅시다.
이 예제는 총 72 회(외부 반복문 8회 × 내부 반복문 9회) 반복하며, step을 사용하는 외부 반복문이 1씩 증가할 때마다 i를 사용하는 내부 반복문은 9회씩 반복합니다.
181
09-4 중첩 반복문
중첩 반복문을 사용해서 구구단 만들기
182
09-5 break와 continue 제어문
break 제어문
반복 작업이 항상 정해진 횟수로 이루어지지 않으며, 예외 상황이 발생하면 중간에 중단할 수 있습니다.
이를 위해 break 문을 사용하여 반복문을 종료할 수 있습니다. break 문은 자신이 포함된 반복문 하나만 종료시키며, 중첩된 반복문에서도 해당 반복문에만 영향을 줍니다.
183
09-5 break와 continue 제어문
continue 제어문
break문은 반복문을 종료시키지만 continue문은 1 회성 취소를 사용합니다.
반복문이 명령을 실행하다가 continue문을 만나면 이후 명령들을 실행하지 않고 ‘조건 변화 수식’으로 돌 아갑니다. 그러고 나서 ‘종결 조건’을 체크한 뒤 다시 정상적으로 반복을 진행합니다.
184
09-5 break와 continue 제어문
goto 제어문?
goto 제어문은 지정한 레이블로 프로그램의 실행 흐름을 바로 이동시키는 문법입니다.
예를 들어, goto문이 실행되면 지정된 레이블 위치로 이동하여 코드가 실행됩니다.
하지만 goto문은 코드의 구조를 파괴할 수 있어, 사용을 권장하지 않습니다. 대신 break, return, continue 같은 제어문으로 대체할 수 있습니다.
185
연습 문제
시험 때도 볼 수 있어요~~
186
시프트 연산자와 비트 연산자
10
10-1 비트 단위 연산과 비트 패턴
10-2 시프트 연산자
10-3 비트 연산자
187
C 언어 기본 문법
p. 203-225
10-1 비트 단위 연산과 비트 패턴
비트 패턴과 16진법
C 언어는 2진법 상수를 직접 제공하지 않기 때문에 16진법을 사용하여 설명합니다. 16진법을 2진법으로 쉽게 변환할 수 있으며, 이를 통해 메모리의 비트 패턴을 이해할 수 있습니다.
188
10-1 비트 단위 연산과 비트 패턴
비트 패턴과 16진법
예를 들어, 부호 없는 1바이트 변수에 16진수 값을 초기화할 때, 해당 값을 2진법으로 표현할 수 있습니다. 비트를 그림으로 그릴 때는 오른쪽에서 왼쪽으로 비트 번호를 증가시키며 표현합니다.
189
10-1 비트 단위 연산과 비트 패턴
비트 패턴과 16진법
190
10-2 시프트 연산자
시프트 연산자의 기능
시프트 연산자는 변수의 값을 왼쪽 또는 오른쪽으로 지정된 비트 수만큼 이동시키는 기능을 합니다. 이동한 비트가 자료형의 크기를 벗어나면 해당 비트는 사라지고 빈자리는 0으로 채워집니다.
191
10-2 시프트 연산자
시프트 연산자의 기능
왼쪽으로 이동해 사라지는 것을 오버플로우, 오른쪽으로 이동해 사라지는 것을 언더플로우라고 합니다.
192
10-2 시프트 연산자
시프트 연산자의 기능
193
10-2 시프트 연산자
시프트 연산자의 특성 이용하기
시프트 연산을 사용하면 2진수에서 왼쪽으로 1칸 이동할 때마다 2배, 오른쪽으로 1칸 이동할 때마다 2로 나눈 효과가 있습니다. 예를 들어 data << 3은 data * 2^3과 같고, data >> 2는 data / 2^2와 같습니다. 이를 통해 곱셈과 나눗셈을 시프트 연산으로 대체할 수 있습니다.
194
10-2 시프트 연산자
시프트 연산자를 사용할 때 주의할 점
195
10-3 비트 연산자
비트 연산자란?
비트 연산자는 비트 단위로 AND, OR, NOT, XOR 연산을 수행합니다. AND는 두 값이 모두 1일 때 1, OR는 두 값이 모두 0일 때 0, XOR는 두 값이 같으면 0, 다르면 1, NOT은 비트를 반전시킵니다.
196
10-3 비트 연산자
비트 연산자란?
AND(&) 연산
두 값을 비트 단위로 AND 연산하며, 둘 다 1일 때만 1이 됩니다.
197
10-3 비트 연산자
비트 연산자란?
OR(|) 연산
두 값을 비트 단위로 OR 연산하며, 둘 중 하나라도 1이면 1이 됩니다.
198
10-3 비트 연산자
비트 연산자란?
XOR(^) 연산
두 값을 비트 단위로 XOR 연산하며, 두 비트가 다를 때만 1이 됩니다.
199
10-3 비트 연산자
비트 연산자란?
NOT(~) 연산
비트를 반전시켜 0은 1로, 1은 0으로 만듭니다.
200
10-3 비트 연산자
비트 연산자란?
201
10-3 비트 연산자
비트 연산자란?
비트연산자 단축표현
AND(&=), OR(|=) 등으로 표현을 단축할 수 있으며, 이는 연산 결과에 차이가 없지만 우선순위를 주의해야 합니다.
202
10-3 비트 연산자
지정한 비트를 0으로 설정하기
변수의 비트 패턴에서 지정한 비트만 0으로 설정하고 다른 비트는 자신의 값을 유지하려면 비트 AND 연산자 &를 사용합니다.
1단계: 2번 비트를 0으로 설정하기
비트 AND 연산자는 연산하는한쪽비트가 0이변 다른쪽비트값에 상관없이 결과값이 0 이 나오는특징을가지고있습니다.
203
10-3 비트 연산자
지정한 비트를 0으로 설정하기
2단계: 임의의 비트를 0으로 설정하기
2번 비트를 0으로 설정할 때 사용하는 & 0xFB를 직접 명시하지 않고 2 번이라는 정보만 가지고만 들어보겠습니다.
204
10-3 비트 연산자
지정한 비트를 0으로 설정하기
3 단겨1: 함수로 만들어 보기
205
10-3 비트 연산자
지정한 비트를 1로 설정하기
변수의 비트 패턴에서 지정한 비트만 1 로 설정하고 다른 비트는 자신의 값을 유지하려면 비 트 OR 연산자를 사용하면 됩니다.
1단계: 2번 비트를 1로 설정하기
비트 OR 연산자는 연산하는 한쪽 비트가 1이면 다른 쪽 비트 값에 상관없이 결과값이 1이 나오는 특징을 가지고 있습니다.
206
10-3 비트 연산자
지정한 비트를 1으로 설정하기
2단계: 임의의 비트를 1으로 설정하기
2번 비트를 1로 설정할 때 사용하는 | 0xFB를 직접 명시하지 않고 2 번이라는 정보만 가지고만 들어보겠습니다.
207
10-3 비트 연산자
지정한 비트를 1로 설정하기
3 단겨1: 함수로 만들어 보기
208
10-3 비트 연산자
특정 비트의 값 얻기
AND 연산자로 특정 비트 값을 얻을 수 있으며, 원하는 값만 남기고 다른 값은 제거할 수 있습니다.
1단계: 2번 비트 값 얻기
209
비트 AND 연산자는 연산하는 한 쪽 비트 가 1 일 때 다른 쪽 비트 값이 1 이면 1 이 나오고 0이면 0이 나옵니다. 따라서 얻고 싶은 비트 값만 1 로 넣고 나머지 비트는 모두 0을 넣어서 숫자를 만들고 AND 연산을 하면 됩니다.
10-3 비트 연산자
특정 비트의 값 얻기
2 단겨1: 임의의 비트 값 얻기
2번 비트를확인할때 사용하는 &0x04와 >> 2를직접 명시하지 않고 2번이라는 정보만 가지고 만들어보겠습니다.
210
10-3 비트 연산자
특정 비트의 값 얻기
3 단겨1: 함수 만들어 보기
211
10-3 비트 연산자
비트 연산자를 활용하는 방법
보수를 이용해 덧셈으로 밸셈 구현하기
1바이트 메모리(unsigned char)는 0부터 255까지의 값만 저장할 수 있습니다. 그래서 255보다 큰 값이 들어오면 오버플로우가 발생해 값이 손실됩니다. 이를 활용해 덧셈으로 뺄셈을 구현할 수 있는데, 예를 들어 값이 255일 때 255를 빼거나 1을 더해 0을 만들 수 있습니다.
212
10-3 비트 연산자
비트 연산자를 활용하는 방법
보수를 이용해 덧셈으로 밸셈 구현하기
이 방법은 비트 NOT(~) 연산자를 사용해 값을 반전시키고, 그 값에 1을 더해 '2의 보수'를 구한 후 덧셈을 통해 뺄셈과 동일한 결과를 얻는 방식입니다. 이러한 방식은 하드웨어에서 뺄셈 회로를 줄이는 데 도움이 되며, 덧셈만으로도 뺄셈을 처리할 수 있다는 개념을 설명합니다.
213
10-3 비트 연산자
비트 연산자를 활용하는 방법
보수를 이용해 덧셈으로 밸셈 구현하기
이 방법은 비트 NOT(~) 연산자를 사용해 값을 반전시키고, 그 값에 1을 더해 '2의 보수'를 구한 후 덧셈을 통해 뺄셈과 동일한 결과를 얻는 방식입니다. 이러한 방식은 하드웨어에서 뺄셈 회로를 줄이는 데 도움이 되며, 덧셈만으로도 뺄셈을 처리할 수 있다는 개념을 설명합니다.
214
10-3 비트 연산자
비트 연산자를 활용하는 방법
보수를 이용해 덧셈으로 밸셈 구현하기
215
10-3 비트 연산자
비트 연산자를 활용하는 방법
데이터 암호화하기
비트 연산자인 XOR(^) 연산자는 두 비트가 같으면 0, 다르면 1이 되는 특성을 가집니다. 이 특성을 이용해 간단한 암호화를 할 수 있습니다. 예를 들어, Ox56과 Ox37을 XOR 연산하면 Ox61이 되고, Ox61과 Ox37을 다시 XOR 연산하면 처음 값인 Ox56을 복원할 수 있습니다.
216
연습 문제
시험 때도 볼 수 있어요~~
217
지역 변수와 전역 변수
11
11-1 함수 안에서만 사용하는 지역 변수
11-2 프로그램 전체에서 사용하는 전역 변수
11-3 extern 키워드
11 -4 static 키워드
218
C 언어 기본 문법
p. 226-249
11-1 함수 안에서만사용하는지역 변수
지역 변수 살펴보기
변수는 두 종류가 있습니다. 하나는 함수 안에서 사용하는 지역 변수이고, 다른 하나는 프로그램 전체에서 사용할 수 있는 전역 변수입니다.
함수 안에 선언된 변수나 매개변수는 지역 변수(Local Variable)로, 함수가 호출될 때 메모리에 생성되었다가 함수 호출이 끝나면 사라집니다. 즉, 함수와 같은 수명을 갖습니다.
219
11-1 함수 안에서만사용하는지역 변수
지역 변수 살펴보기
220
11-1 함수 안에서만사용하는지역 변수
지역 변수 이름은 중복해서 사용할 수 있다
지역 변수는 스스로 초기화되지 않기 때문에 필요할 때 프로그래머가 직접 초기화해야 합니다.
221
11-2 프로그램 전체에서 사용하는 전역 변수
전역 변수 살펴보기
함수 밖에 선언한 변수를 전역 변수라고 하며, 프로그램이 시작할 때 생성되어 프로그램이 종료될 때 사라집니다. 즉, 전역 변수의 수명은 프로그램의 수명과 동일합니다.
전역 변수는 프로그램 전체에서 사용할 수 있지만, 동일한 이름의 전역 변수가 있으면 오류가 발생하므로 주의해야 합니다.
222
11-2 프로그램 전체에서 사용하는 전역 변수
지역 변수와 전역 변수의 이름이 같다면?
지역 변수와 전역 변수의 이름이 같으면 지역 변수가 우선 처리됩니다. 예를 들어, Sum 함수에서 지역 변수 result와 전역 변수 result가 중복될 경우, 지역 변수가 우선 적용되어 전역 변수는 영향을 받지 않고 0으로 유지됩니다. 이런 문제를 방지하기 위해 전역 변수 이름 앞에 접두어를 붙여 사용하는 것이 좋습니다, 예를 들어 int g_result;와 같이 선언하는 방식입니다.
223
11-3 extern 키워드
소스 파일을 분리할 때 발생하는 오류
앞의 예제에서 result 전역 변수를 사용했습니다. 소스 코드가 길어져 Sum 함수는 Sum.c 파일로, main 함수는 Main.c 파일로 분리했다고 가정해 봅시다. 이 경우, Sum.c에서는 문제가 없지만, Main.c 파일에서는 result 전역 변수를 참조하지 못해 오류가 발생합니다.
224
11-3 extern 키워드
소스 파일을 분리할 때 발생하는 오류
이 문제를 해결하기 위해 Main.c에 int result;라고 전역 변수를 선언하면 컴파일은 되겠지만, 링크 시 같은 이름의 전역 변수가 두 개 있어 링크 오류가 발생합니다. 이를 해결하기 위해서는 extern 키워드를 사용해 Main.c에서 result 변수를 참조한다고 명시해야 합니다.
225
11-3 extern 키워드
extern 키워드를 사용할 때 주의할 점
extern을 사용할 때는 같은 프로젝트 안에서 전역 변수를 참조할 수 있도록 파일 간 참조 관계를 명확히 해야 합니다.
226
11-4 static 키워드
자신이 개발한 코드에서 전역 변수 이름이 중복되는 오류는 이름을 변경해 해결할 수 있지만, 다른 사람이 개발한 라이브러리에 포함된 전역 변수와의 충돌은 더 심각한 문제가 될 수 있습니다. 이런 문제의 원인은 전역 변수의 사용 범위가 프로그램 전체에 미치기 때문입니다. 이를 해결하기 위해 C 언어는 전역 변수의 사용 범위를 제한할 수 있는 static 키워드를 제공합니다.
227
11-4 static 키워드
특정 소스 파일에서만 전역 변수 사용하기
전역 변수를 선언할 때 static 키워드를 사용하면 해당 전역 변수의 사용 범위를 선언한 소스 파일로 제한할 수 있습니다. 이렇게 하면 다른 파일에서 그 전역 변수를 extern으로 참조할 수 없고, 같은 이름의 전역 변수를 다른 파일에서 선언해도 오류가 발생하지 않습니다.
228
11-4 static 키워드
특정 함수에서만 전역 변수 사용하기
특정 함수에서만 전역 변수를 사용하고 싶다면, 해당 함수를 포함하는 파일 내에서 static 키워드를 사용하면 됩니다. 이렇게 하면 static으로 선언된 변수는 함수가 호출될 때마다 값이 유지됩니다.
229
11-4 static 키워드
const 키워드
const는 변수를 상수처럼 사용하고 싶을 때 사용하며, 변수의 값을 변경하지 않겠다는 의미입니다. const 키워드를 사용하면 컴파일 시 값 변경 시도에 대해 오류가 발생하며, 프로그래머의 실수를 방지하고 코드의 의도를 명확히 표현하는 데 도움을 줍니다.
230
연습 문제
시험 때도 볼 수 있어요~~
231
배열과 문자열
12
12-1 배열
12-2 문자열
12-3 2차원 배열
232
C 언어 완성하기
p. 252-288
12-1 배열
배열이란?
학생 20명의 국어 성적을 저장하려면 변수 20개를 선언해야 하지만, C 언어에서는 ‘배열’ 문법을 통해 데이터를 그룹으로 묶어서 관리할 수 있습니다. 예를 들어, short student[20];는 20명의 학생 성적을 저장하는 배열을 선언한 것입니다. 배열을 사용하면 개별 변수 대신 배열의 인덱스를 사용해 데이터를 관리하고, 반복문을 활용해 값 대입을 간편하게 처리할 수 있습니다.
233
12-1 배열
배열 선언하고 사용하기
배열을 선언할 때는 변수 선언과 비슷하게 하되, [ ] 기호를 사용해 저장 공간의 개수를 명시해야 합니다. 예를 들어 short student[20];은 20개의 2바이트 크기의 정수를 저장할 수 있는 배열입니다.
234
12-1 배열
배열 선언하고 사용하기
배열의 특정 요소에 값 대입하기
배열에 값을 저장할 때는 [ ] 안에 인덱스를 명시하여 원하는 요소에 값을 대입합니다. 예를 들어 student[1] = 10;과 같이 배열의 두 번째 요소에 10을 대입할 수 있습니다.
235
12-1 배열
배열 선언하고 사용하기
배열을 선언할 때 주의할 점은 무엇일까요?
배열을 선언할 때 주의할 점은 배열 크기를 결정하는 방식입니다. 일반 변수는 자료형에 따라 크기가 결정되지만, 배열 변수는 자료형과 배열 크기([ ] 안의 숫자)를 곱해서 결정됩니다. 그래서 배열을 선언할 때는 반드시 상수를 사용해 크기를 정해야 합니다. 예를 들어, 아래 코드는 문제없이 작동합니다:
236
12-1 배열
배열 선언하고 사용하기
배열을 선언할 때 주의할 점은 무엇일까요?
그러나 배열 크기를 변수로 지정하면 컴파일 시점에 크기를 알 수 없기 때문에 오류가 발생합니다. 예를 들어, 다음 코드는 오류를 발생시킵니다:
C 언어의 컴파일러는 소스 코드에 선언된 변수가 실행 시 어떤 값을 가지는지 알 수 없기 때문에, 배열 크기는 반드시 컴파일 시점에 결정 가능한 상수로 지정해야 합니다.
237
12-1 배열
배열 선언하고 사용하기
배열 요소에 for문으로 값 대입하기
238
12-1 배열
배열 선언하고 사용하기
쉽표를 사용한 배열 초기화 문법
하지만 배열의 요소가 많아지면 이런 방식은 부담스러울 수 있습니다. C 언어에서는 초깃값을 0으로 사용하는 것이 일반적이므로, 다음과 같이 초기화할 수 있습니다. 이 경우, 첫 번째 값만 지정하고 나머지는 모두 0으로 초기화됩니다:
239
12-1 배열
배열 선언하고 사용하기
쉽표를 사용한 배열 초기화 문법
주의할 점은, 배열의 모든 요소를 특정 값으로 초기화하려고 할 때, 쉽표 뒤를 생략하면 나머지 값은 자동으로 0으로 채워진다는 것입니다. 예를 들어, 배열을 모두 3으로 초기화하고 싶다면:
240
12-1 배열
배열 선언하고 사용하기
배열 크기 생략하기
배열을 선언할 때 요소 개수를 생략할 수 있으며, 초기화 값에 따라 크기가 자동으로 결정됩니다. 예를 들어, short data[] = {1, 2, 1, 2, 1};은 5개의 저장 공간이 생성됩니다.
241
12-1 배열
배열 선언하고 사용하기
242
12-1 배열
배열의요소값사용하기
243
12-1 배열
배열 선언하고 사용하기
배열은 사용자 정의 자료형이다
배열은 같은 크기의 메모리를 그룹으로 묶어 새로운 크기의 변수를 만들기 때문에 ‘사용자 정의 자료형’이라고 부릅니다. C 언어에서 제공하는 기본 자료형 이외의 크기도 배열을 통해 자유롭게 만들 수 있습니다.
244
연습 문제
시험 때도 볼 수 있어요~~
245
Thanks!
246
Please keep this slide for attribution