C++/Chapter02. 제어구조와 배열

lullaby ·2025년 10월 1일

C++

목록 보기
2/4
post-thumbnail

제어에서 가장 중요한 건 조건

시퀀스가 있기 때문에 루프가 가능함

stream manipulator boolalpha


1. 관계연산자와 논리연산자

핵심 개념

  • 관계연산자: ==, !=, <, >, <=, >=
  • 논리연산자: &&(AND), ||(OR), !(NOT)
  • bool 타입: true/false 값을 저장

중요 문법

#include <iostream>
using namespace std;

int main() {
    bool b = (1 == 2);  // false
    cout << boolalpha;  // bool 값을 true/false로 출력
    cout << b << endl;  // false 출력
    return 0;
}

2. if-else 문

핵심 구조

if (조건) {
    // 조건이 참일 때 실행
} else {
    // 조건이 거짓일 때 실행
}

실전 예제

// 두 수 중 큰 값 찾기
int x, y;
cin >> x >> y;
if (x > y)
    cout << "x가 y보다 큽니다." << endl;
else
    cout << "y가 x보다 큽니다." << endl;

3. 중첩 if-else 문

핵심 구조

if (조건1) {
    // 조건1이 참
} else if (조건2) {
    // 조건1은 거짓, 조건2는 참
} else {
    // 모든 조건이 거짓
}

실전 예제 - 나이별 구분

int age;
cin >> age;
if (age <= 12)
    cout << "어린이입니다." << endl;
else if (age <= 19)
    cout << "청소년입니다." << endl;
else
    cout << "성인입니다." << endl;

4. switch 문

핵심 구조

switch (변수) {
    case1:
        문장1;
        break;
    case2:
        문장2;
        break;
    default:
        기본문장;
        break;
}

주의사항

  • break 문 필수: break가 없으면 다음 case로 넘어감
  • 정수형/문자형만 가능: 실수형은 사용 불가

5. 반복문

5.1 while 문

int n = 10;
while (n > 0) {
    cout << n << " ";
    n--;
}

5.2 do-while 문

string str;
do {
    cout << "문자열을 입력하시오: ";
    getline(cin, str);
    cout << "사용자의 입력: " << str << endl;
} while (str != "종료");

5.3 for 문

// 1부터 10까지 합계
int sum = 0;
for (int i = 1; i <= 10; i++) {
    sum += i;
}
cout << "합계: " << sum << endl;

차이점 정리

  • while: 조건을 먼저 확인 (0번 실행 가능)
  • do-while: 최소 1번은 실행
  • for: 초기값, 조건, 증감식이 명확할 때 사용

6. break와 continue

break 문

for (int i = 1; i < 10; i++) {
    cout << i << " ";
    if (i == 4)
        break;  // 루프 종료
}
// 출력: 1 2 3 4

continue 문

for (int i = 1; i <= 5; i++) {
    if (i == 3)
        continue;  // 3일 때 건너뛰기
    cout << i << " ";
}
// 출력: 1 2 4 5

7. 배열

7.1 배열 선언과 초기화

// 선언
int scores[10];

// 초기화
int sales[5] = {100, 200, 300, 400, 500};
int sales[] = {100, 200, 300};  // 크기 자동 결정

// 보편적 초기화 (C++11)
int scores[]{10, 20, 30};

7.2 범위 기반 for 루프

int list[] = {1, 2, 3, 4, 5};

// 읽기만
for (int i : list) {
    cout << i << " ";
}

// 수정 가능
for (int& i : list) {
    i = i * 2;  // 값 변경
}

// 자동 타입 추론
for (auto& i : list) {
    cout << i << " ";
}

8. 2차원 배열

8.1 선언과 초기화

// 선언
int s[3][5];

// 초기화
int table[3][5] = {
    {1, 2, 3, 4, 5},
    {2, 4, 6, 8, 10},
    {3, 6, 9, 12, 15}
};

8.2 접근 방법

// 이중 반복문으로 접근
for (int r = 0; r < 3; r++) {
    for (int c = 0; c < 5; c++) {
        cout << table[r][c] << " ";
    }
    cout << endl;
}

9. 예상 문제 및 해답

🔥 예상문제 1: 조건문 (난이도: ★★☆)

문제: 사용자로부터 점수를 입력받아 학점을 출력하는 프로그램을 작성하시오.

  • 90점 이상: A
  • 80점 이상: B
  • 70점 이상: C
  • 60점 이상: D
  • 60점 미만: F

해답:

#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "점수를 입력하세요: ";
    cin >> score;

    if (score >= 90)
        cout << "학점: A" << endl;
    else if (score >= 80)
        cout << "학점: B" << endl;
    else if (score >= 70)
        cout << "학점: C" << endl;
    else if (score >= 60)
        cout << "학점: D" << endl;
    else
        cout << "학점: F" << endl;

    return 0;
}

🔥 예상문제 2: 반복문 (난이도: ★★☆)

문제: 1부터 n까지의 수 중에서 홀수만의 합을 구하는 프로그램을 작성하시오.

해답:

#include <iostream>
using namespace std;

int main() {
    int n, sum = 0;
    cout << "n을 입력하세요: ";
    cin >> n;

    for (int i = 1; i <= n; i++) {
        if (i % 2 == 1) {  // 홀수일 때
            sum += i;
        }
    }

    cout << "1부터 " << n << "까지 홀수의 합: " << sum << endl;
    return 0;
}

🔥 예상문제 3: 배열 (난이도: ★★★)

문제: 10개의 정수를 배열에 저장하고, 배열에서 최댓값과 최솟값을 찾아 출력하는 프로그램을 작성하시오.

해답:

#include <iostream>
using namespace std;

int main() {
    int numbers[10];

    // 배열에 값 입력
    cout << "10개의 정수를 입력하세요: ";
    for (int i = 0; i < 10; i++) {
        cin >> numbers[i];
    }

    // 최댓값과 최솟값 찾기
    int max = numbers[0];
    int min = numbers[0];

    for (int i = 1; i < 10; i++) {
        if (numbers[i] > max)
            max = numbers[i];
        if (numbers[i] < min)
            min = numbers[i];
    }

    cout << "최댓값: " << max << endl;
    cout << "최솟값: " << min << endl;

    return 0;
}

🔥 예상문제 4: 2차원 배열 (난이도: ★★★)

문제: 3×3 행렬의 각 행의 합을 구하는 프로그램을 작성하시오.

해답:

#include <iostream>
using namespace std;

int main() {
    int matrix[3][3];

    // 행렬 입력
    cout << "3x3 행렬을 입력하세요:" << endl;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> matrix[i][j];
        }
    }

    // 각 행의 합 계산
    for (int i = 0; i < 3; i++) {
        int rowSum = 0;
        for (int j = 0; j < 3; j++) {
            rowSum += matrix[i][j];
        }
        cout << "행 " << (i+1) << "의 합: " << rowSum << endl;
    }

    return 0;
}

🔥 예상문제 5: 종합 문제 (난이도: ★★★)

문제: 학생 5명의 3과목 점수를 2차원 배열에 저장하고, 각 학생의 평균과 전체 평균을 구하는 프로그램을 작성하시오.

해답:

#include <iostream>
using namespace std;

int main() {
    int scores[5][3];  // 5명의 학생, 3과목

    // 점수 입력
    for (int i = 0; i < 5; i++) {
        cout << "학생 " << (i+1) << "의 3과목 점수를 입력하세요: ";
        for (int j = 0; j < 3; j++) {
            cin >> scores[i][j];
        }
    }

    int totalSum = 0;

    // 각 학생의 평균 계산
    for (int i = 0; i < 5; i++) {
        int studentSum = 0;
        for (int j = 0; j < 3; j++) {
            studentSum += scores[i][j];
        }
        totalSum += studentSum;
        double average = studentSum / 3.0;
        cout << "학생 " << (i+1) << "의 평균: " << average << endl;
    }

    // 전체 평균
    double totalAverage = totalSum / 15.0;  // 5명 × 3과목 = 15
    cout << "전체 평균: " << totalAverage << endl;

    return 0;
}

📝 시험 대비 체크리스트

꼭 암기해야 할 것들

  • if-else 문의 기본 구조
  • for 문의 3가지 구성요소 (초기화; 조건; 증감)
  • 배열 선언과 초기화 문법
  • 2차원 배열 접근 방법
  • break와 continue의 차이점
  • 범위 기반 for 루프 문법

자주 나오는 실수들

  1. 세미콜론 빠뜨리기: if문 뒤에 세미콜론 사용 금지
  2. 배열 인덱스: 0부터 시작, 크기-1까지
  3. break 누락: switch문에서 break 빠뜨리기
  4. 초기화 안함: 변수 사용 전 반드시 초기화
  5. 참조자 사용: 배열 요소 수정할 때 int& 사용
    int&은 참조를 의미, 이미 존재하는 변수나 객체에 대한 별명 역할

시험장에서 주의사항

  • 문제를 정확히 읽고 요구사항 파악
  • 변수명과 출력 형식 정확히 따르기
  • 컴파일 에러가 나지 않도록 문법 확인
  • 논리 오류가 없는지 간단한 값으로 검증

🎯 최종 점검 문제

문제: 다음 코드의 출력 결과를 예측하시오.

#include <iostream>
using namespace std;

int main() {
    int arr[] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; i++) {
        if (i % 2 == 0)
            continue;
        cout << arr[i] << " ";
    }

    cout << endl;

    for (auto& x : arr) {
        x *= 2;
    }

    for (int x : arr) {
        cout << x << " ";
    }

    return 0;
}

정답:

2 4
2 4 6 8 10

해설:

  • 첫 번째 루프: i가 짝수일 때 continue하므로 홀수 인덱스(1, 3)의 값인 2, 4 출력
  • 두 번째 루프: 모든 배열 요소를 2배로 변경
  • 세 번째 루프: 변경된 배열 전체 출력

0개의 댓글