SECTION 005. 제어문

1. 제어문의 개념

  • 컴퓨터 프로그램은 명령어가 서술된 순서에 따라 무조건 위에서 아래로 실행되는데, 조건을 지정해서 진행 순서를 변경할 수 있다. 이렇게 프로그램의 순서를 변경할 때 사용하는 명령문을 제어문이라고 한다.
    – 제어문의 종류 : if문, 다중 if문, switch문, goto, 반복문 등이 있다.

2. 단순 if문

1) 개념

  • if문은 조건에 따라서 실행할 문장을 달리하는 제어문이며, 단순 if문은 조건이 한 개 일 때 사용하는 제어문이다.
    – 조건이 참일 때만 실행할 문장을 지정할 수도 있고, 참과 거짓에 대해 각각 다른 실행문을 지정할 수도 있다.

2) 형식 1

(1) 조건이 참일 때만 실행한다.

  if (조건)  
    실행할 문장;

(2) 조건이 참일 때 실행할 문장이 하나인 경우

– 참(1) 또는 거짓(0)이 결과로 나올 수 있는 수식을 조건에 입력한다.
– 조건이 참일 경우 실행할 문장을 입력한다.

  if (조건) {  
    실행할 문장 1;  
    실행할 문장 2;  
    ...  
  }
  • 조건이 참일 때 실행할 문장이 두 문장 이상인 경우
    – { } 사이에 조건이 참일 경우 실행할 문장을 입력한다.

3) 형식 2

  • 조건이 참일 때과 거짓일 때 실행할 문장이 다르다.
  if (조건)
    실행할 문장 1;
  else
    실행할 문장 2;

– 조건이 참일 경우 실행할 문장을 문장 1에 입력한다. 실행할 문장이 두 문장 이상인 경우 { } 사이에 문장을 입력한다.
– 조건이 거짓일 경우 실행할 문장을 문장 2에 입력한다.

3. 다중 if문

1) 개념

  • 다중 if문은 조건이 여러 개 일 때 사용하는 제어문이다.

2) 형식 1

  if (조건 1)
    실행할 문장 1;
  else if (조건 2)
    실행할 문장 2;
  else if (조건 3)
    실행할 문장 3;
    ...
  else
    실행할 문장 4;

– 조건이 참일 경우 실행할 문장을 입력한다.
– else 문에는 앞의 조건이 모두 거짓일 경우 실행할 문장을 입력한다.

3) 형식 2

  • if문 안에 if문이 포함된다.
  if (조건 1)
  {
    if (조건 2)
      실행할 문장 1;
    else
      실행할 문장 2;
  }
  else
    실행할 문장 3;

4. switch문

1) 개념

  • switch문은 조건에 따라 분기할 곳이 여러 곳인 경우 간단하게 처리할 수 있는 제어문이다.

2) 형식

  switch(수식)
  {
    case 레이블 1 :
      실행할 문장 1;
      break;
    case 레이블 2 :
      실행할 문장 2;
      break;
      ...
    default :
      실행할 문장 3;
  }
  • 수식에는 ‘레이블1’ ~ ‘레이블n’ 의 값 중 하나를 도출하는 변수 또는 수식을 입력한다.
  • 수식의 결과가 레이블n 과 일치할 때 실행할 문장n 을 입력한다.
  • 수식의 결과가 ‘레이블1’ ~ ‘레이블n’ 에 해당하지 않는 경우 default 문장을 실행한다.

3) 규칙

  • case 문의 레이블에는 한 개의 상수만 지정할 수 있으며, int, char, enum 형의 상수만 가능하다.
  • case 문의 레이블에는 변수를 지정할 수 없다.
  • break 문은 생략이 가능하지만, break 문이 생략되면 수식과 레이블이 일치할 때 실행할 문장부터 break 문 또는 switch 문이 종료될 때 까지 모든 문장이 실행된다.
    – default 는 가장 마지막에 사용되어 다음 문장에서 바로 종료되기 때문에 break 를 사용하지 않아도 된다.

5. goto문

1) 개념

  • goto 문은 프로그램 실행 중 현재 위치에서 원하는 다른 문장으로 건너뛰어 수행을 계속 하기 위해 사용하는 제어문이다.
    – goto 문은 원하는 문장으로 쉽게 이동할 수 있지만, 많이 사용하면 프로그램의 이해와 유지보수가 어려워져 거의 사용하지 않는다.

2) 형식

  goto 레이블;
    ...
  레이블 :
    실행할 문장
  • 레이블명은 사용자가 원하는 이름을 임의로 지정할 수 있다.

3) 예제

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
main() {
  int a;
again:
  scanf("%d", &a);
  if (a <= 10)
    goto again;
  else
    printf("%d 는 10 보다 큽니다.", a);
}
  • 4 : ‘again’ 이라는 레이블의 goto 주소이다.
  • 7 : if 문의 조건이 참일 경우 ‘again’ 레이블로 이동한다.

SECTION 006. 반복문

1. 반복문의 개요

  • 반복문은 제어문의 한 종류로 일정한 횟수를 반복하는 명령문을 말한다. 보통 변수의 값을 일정하게 증가시키면서 정해진 수가 될 때 까지 명령이나 명령 그룹을 반복 수행한다.
    – 반복문의 종류 : for, while, do~while 문이 있다.

2. for문

1) 개념

  • for문은 초기값, 최종값, 증가값을 지정하는 수식을 이용해 정해진 횟수를 반복하는 제어문이다.
    – 초기값을 정한 후 최종값에 대한 조건이 참이면 실행할 문장을 실행한 후, 초기값을 증가값 만큼 증가시키면서 최종값에 대한 조건이 참인 동안 실행할 문장을 반복 수행한다.

2) 형식

  for (초기값; 최종값; 증가값)
    실행할 문장;
  • 초기값, 최종값, 증가값 중 하나 이상을 생략하거나 여러 개의 수식을 지정할 수 있다.
  • for(;;) 와 같이 조건에 참여하는 수식을 모두 생략하면 for문은 무한 반복한다.
  • for문은 처음부터 최종값에 대한 조건식을 만족하지 못하면 한 번도 수행하지 않는다.
  • 문자도 for문을 수행할 수 있다.

3. while문

1) 개념

  • while문은 조건이 참인 동안 실행할 문장을 반복 수행하는 제어문이다.
    – while문은 조건이 참인 동안 실행할 문장을 반복 수행하다가 조건이 거짓이면 while문을 끝낸 후 다음 코드를 실행한다.
    – while문은 조건이 처음부터 거짓이면 한 번도 수행하지 않는다.

2) 형식

  while (조건)
    실행할 문장;

– 조건을 1 (true) 로 지정하면 while문은 무한 반복한다.

4. do~while문

1) 개념

  • do~while문은 조건이 참인 동안 정해진 문장을 반복 수행하다가 조건이 거짓이면 반복문을 벗어나는 while문과 같은 동작을 하는데, 다른 점은 do~while문은 실행할 문장을 무조건 한 번 실행한 다음 조건을 판단하여 탈출 여부를 결정한다.
    – do~while문은 실행할 문장을 우선 실행한 후, 조건을 판별하여 조건이 참이면 실행할 문장을 반복 수행하고, 거짓이면 do~while문을 끝낸 후 다음 코드를 실행한다.

2) 형식

  do {
    실행할 문장;
  } while(조건);

5. break, continue

1) 개념

  • break : switch문이나 반복문 안에서 break가 나오면 블록을 벗어난다.
  • continue : continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮긴다.
    – 반복문에서만 사용된다.

SECTION 007. 배열과 문자열

1. 배열의 개념

  • 배열은 동일한 데이터 유형을 여러 개 사용해야 할 경우 이를 손쉽게 처리하기 위해 여러 개의 변수들을 조합해서 하나의 이름으로 정의해 사용하는 것을 말한다.
  • 배열은 하나의 이름으로 여러 기억장소를 가리키기 때문에 배열에서 개별적인 요소들의 위치는 첨자를 이용하여 지정한다.
  • 배열은 변수명 뒤에 대괄호 [] 를 붙이고, 그 안에 사용할 개수를 지정한다.
  • C언어에서 배열의 위치는 0 부터 시작된다.
  • 배열은 행 우선으로 데이터가 기억장소에 할당된다.
  • C언어에서 배열 위치를 나타내는 첨자 없이 배열 이름을 사용하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같다.

2. 1차원 배열

1) 개념

  • 1차원 배열은 변수들을 일직선상의 개념으로 조합한 배열이다.

2) 형식

(1) C언어

자료형 변수명[개수];

  • 자료형 : 배열에 저장할 자료의 형을 지정한다.
  • 변수명 : 사용할 배열의 이름을 사용자가 임의로 지정한다.
  • 개수 : 배열의 크기를 지정하는 것으로 생략할 수 있다.

(2) Java

자료형 변수명[] = new 자료형[개수];
자료형[] 변수명 = new 자료형[개수];

  • Java 에서 배열은 객체로 취급되며, ‘new’ 명령을 이용하여 생성한다.
  • Java 에서는 ‘자료형[] 변수명’ 의 형식으로도 선언할 수 있다.
    – C언어에서는 이 형식을 사용할 수 없다.

3. 2차원 배열

1) 개념

  • 2차원 배열은 변수들을 평면, 즉 행과 열로 조합한 배열이다.

2) 형식

자료형 변수명[행개수][열개수];

  • 예제) 3행 4열의 숫자 배열 a
  int a[3][4] =
  { 1,  2,  3,  4,
    5,  6,  7,  8,
    9, 10, 11, 12 };

4. 배열의 초기화

1) 개념

  • 배열 선언 시 초기값을 지정할 수 있다.
  • 배열을 선언할 때 배열의 크기를 생략하는 경우, 반드시 초기값을 지정해야 그 개수 만큼의 배열이 선언된다.
  • 배열의 초기 값을 ‘숫자,(콤마)’로 지정하면 배열의 첫 번째 요소에는 지정한 숫자가 입력되고, 나머지 요소에는 0이 입력된다.
    – 예제) int a[5] = {3, } = {3, 0, 0, 0, 0}

5. 배열 형태의 문자열 변수

1) 개념

  • C언어에서는 큰따옴표(““)로 묶인 글자는 글자수에 관계없이 문자열로 처리된다.
  • C언어에는 문자열을 저장하는 자료형이 없기 때문에 배열 또는 포인터를 이용하여 처리한다.

2) 형식

  char 배열이름[크기] = "문자열";
  • 배열에 문자열을 저장할 때는 배열 선언 시 초기값으로 지정해야 하며, 이미 선언된 배열에는 문자열을 저장할 수 없다.
  • 배열에 문자열을 저장하면 문자열의 끝을 알리기 위한 널 문자(‘\0’)가 문자열 끝에 자동으로 삽입된다.
    – 문자열 끝에 자동으로 삽입되는 널 문자(‘\0’)까지 고려하여 배열 크기를 지정해야 한다.