• 미리 정의된 작업을 원하는 만큼(지정된 횟수, 조건을 만족할 때 까지 등) 실행하기 위해 사용하는 구문
• 말 그대로 반복을 위해 사용
1-1. do-while 문
• 우선 반복 실행할 구문을 1번 실행 시킨 뒤, 주어진 조건이 false가 되기 전 까지 반복을 실행
• 구조
do
{
반복 실행할 구문
(조건의 결과를 변화시킬 수 있는 구문이 필요)
} while(조건);
1-2. for 문
• 반복문의 제어변수와 반복문의 제어변수를 조절하는 구문을 한 줄에 처리하는 반복문
• 구조
1-3. nested loop
• 중첩 반복문의 수행 순서
2. 배열
• 동일한 자료형의 연속적인 항목들이 같은 크기로 메모리에 저장되는 구조
• 선언 방법
• 자료형 배열이름[배열크기] →int arr[10]
• 배열의 초기화 방식
• 초기화 리스트 이용
• 반복문 이용
• 배열의 각 원소에 접근하기 위해 index를 사용
• 예) int arr[5] = {10, 20, 30, 40, 50}; 에서 배열의 두 번째 값에 접근하기 위하여 arr[1]과 같이 사용
• n차원 배열도 생성 가능
• 예) int arr[3][4][5];
3. 2차원 배열
• 우리가 아는 n x m 행렬과 유사
• 선언 방법
• 자료형 배열이름[n][m] → 예) int arr[3][4][5];
• 인덱스 변수를 2개 사용
• 배열의 초기화
• 순차적인 접근이나, 초기화를 위해 중첩 반복문 사용
4. 함수
• 특정한 연산만을 수행하게 하여 재사용을 가능하게 하고 프로그램의 가독성을 높이는 목적으로 사용
• 모든 프로그램은 함수의 집합
• 기본 구조
• 반환하고 싶은 값이 없을 경우에는 함수의 반환형에 void를 이용
• 함수 사용 시, 인자를 전달하고 싶지 않은 경우 디폴트 매개변수를 이용하는 방법이 있으며, 디폴트 매개변수는 뒤에서 앞쪽으로만 정의 가능
• 프로그램의 윗부분에는 함수의 prototype만 작성하고, main문 아래에 함수를 정의 하여 사용하면 프로그램의 가독성이 높아짐
4-1. 함수의 오버로딩
• 같은 이름의 함수를 여러 개 중복하여 정의하는 것
• 이 때, 함수 매개변수나 반환형이 달라야 중복정의가 가능
• 매개변수의 자료형이 다름
• 매개변수의 수가 다름
• 함수의 반환형이 다름
4-2. 함수의 호출 방식
• call by value
• call by reference
#include <iostream>
using namespace std;
void swap(int &rx, int &ry)
{
int tmp;
tmp = rx;
rx = ry;
ry = tmp;
}
int main()
{
int a = 100, b = 200;
cout << "swap() 호출전: a = " << a << ", b = " << b << endl;
swap(a, b);
cout << "swap() 호출후: a = " << a << ", b = " << b << endl;
return 0;
}
4-3. 함수의 호출
• 절차지향 프로그래밍 언어라는 것은 프로그램이 순서대로 실행 된다는 것을 의미
• 함수를 사용하는 것을 “함수를 호출한다.” 라고 함
• 함수를 호출할 경우, 함수를 호출한 위치에서 함수로 이동하여 함수의 내용을 수행하고, 함수의 수행이 끝나면 수행결과를 가지고 호출한 위치로 복귀
• 함수가 호출 될 때는 함수가 끝난 뒤 돌아올 위치와 인자 값(argument), 반환 값을 메모리에 저장
• 호출 과정
•
•
•
•
•
•
4-4. 재귀 함수
• 함수 내에서 자기 자신을 호출하는 함수를 의미
• 재귀함수에는 함수자체를 멈추게 하는 base case와 base case에 도달할 때까지 자기 자신을 호출하는 recursive case가 존재
• 재귀함수를 작성하는 요령은 base case를 잘 정의하는 것이고, base case를 잘못 정의하였을 경우에 프로그램의 문제를 초래
• 재귀함수 내에서 다른 연산을 하지 않고, 자기 자신을 호출하는 구문 만을 이용하는 특수한 형태를 tail-recursion 함수라 함
4-5. 재귀 함수의 예시
• factorial 함수
• factorial의 정의를 수학적으로 표현하면 아래와 같이 표현가능
• 위의 수학적 표현을 함수로 아래와 같이 작성 가능
• 호출 과정
•
•
•
•
•
•
•
• 이전의 factorial 재귀함수를 tail-recursion 으로 표현하면 아래와 같이 표현가능
5. 변수의 범위
• 변수를 사용할 수 있는 범위에 따라 변수는 전역변수, 지역변수, 정적변수로 구분
5-1. 지역변수
• 지역변수는 { }(블록)으로 지정된 범위 내에서만 사용할 수 있는 변수를 의미
• 지역변수를 사용할 수 있는 범위를 벗어나서 사용하고자 할 경우, 에러가 발생
• 범위를 벗어나서 사용할 수 없기 때문에, 함수에서 반환 값으로 함수의 계산 결과를 전달한 것
5-2. 전역변수
• 전역변수는 범위에 제약을 받지 않고 사용할 수 있는 변수를 의미
• 전역변수가 존재하는 해당 파일의 어디에서나 사용 가능
• 전역변수를 이용하면 함수에 인자를 넘기거나 반환 값을 받아오지 않아도 함수에 값을 넘겨주는 것과 반환 값을 받아오는 것 같은 효과를 줄 수 있지만, 많이 사용하는 것은 코드의 가독성이나 메모리 관리 측면에 좋지 못함
5-3. 정적변수
• 정적변수는 변수의 범위를 벗어나도 메모리에서 사라지지 않고 남아있는 변수를 의미
• 한 번 선언이 되면 선언된 위치에서는 계속 사용이 가능하며 사라지지 않기 때문에 이전에 가지고 있었던 값을 계속 유지
• 정적변수는 딱 한 번만 초기화 된다는 특징이 있어, 함수의 호출 횟수를 세고자 하는 경우 많이 사용