C++ 프로그래밍 기초 3

김여울·2025년 5월 30일

내일배움캠프

목록 보기
11/139

오늘은 짝수의 합을 풀었다.

#include <iostream>
using namespace std;

int solution(int n)
{
	int answer = 0; // 아무 것도 더하지 않은 상태, 합은 0부터 시작
	for (int i = 2; i <= n; i += 2)
	{
		answer += i;   // 현재까지 더한 합에 i를 더함
	}
	return answer;
}

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

	int result = solution(n);
	cout << n << " 이하의 짝수 합: " << result << endl;

	return 0;
}

2, 4, 6, ... n
2부터 시작해서 입력한 정수 n까지 2씩 증가하고 더하기

강의는 어제까지 재밌었다가 오늘 어려워졌다...

📎강의 자료 + 필기

조건문

1️⃣ if

조건문이 true이면 코드 실행

if (조건식) 
{
    code;
}

2️⃣ if / else

if 가 참이 아니면 else 의 코드 실행
else 에는 조건문 필요 없음
Yes or No

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

3️⃣ if / else if / else

조건이 여러 개일 때, 순서대로 검사해서 맞는 조건에 해당하는 코드만 실행
else if 여러 개 가능
else 는 필수 ❌

if (조건1) 
{
  // 조건1이 참일 때 실행
} 
else if (조건2) 
{
    // 조건1은 거짓이고 조건2가 참일 때 실행
} 
lse if (조건3) 
{
    // 조건1, 조건2 모두 거짓이고 조건3이 참일 때 실행
} 
else 
{
    // 위 조건들 모두 거짓일 때 실행
}
조건1 검사 → 참 → 실행 끝
       ↓
      거짓
       ↓
조건2 검사 → 참 → 실행 끝
       ↓
      거짓
       ↓
조건3 검사 → 참 → 실행 끝
       ↓
      거짓
       ↓
else 실행

각 조건들은 서로 겹치지 않고 분리됨
상위 조건이 하위 조건에 포함되지 않음 (비포함성)

if (score >= 90) 
{
    // 90 이상
} 
else if (score >= 80) 
{
    // 80 이상 90 미만 (겹치지 않음)
} 
else if (score >= 70) 
{
    // 70 이상 80 미만 (겹치지 않음)
} 
else 
{
    // 나머지
}

계산기 추가 기능

에러 → 예외 처리

  • 나누기 0
    • 나누기 else ifif 문에 " Division by zero is not allowed."
  • 연산자 잘못 입력
    • else Invalid operator.
#include <iostream>
using namespace std;

int main() 
{
    char op;
    double num1, num2;

    cout << "Enter first number: ";
    cin >> num1;
    cout << "Enter an operator (+, -, *, /): ";
    cin >> op;
    cout << "Enter second number: ";
    cin >> num2;

    if (op == '+') 
    {
        cout << "Result: " << num1 + num2 << endl;
    }
    else if (op == '-') 
    {
        cout << "Result: " << num1 - num2 << endl;
    }
    else if (op == '*') 
    {
        cout << "Result: " << num1 * num2 << endl;
    }
    else if (op == '/') 
    {
        if (num2 == 0) 
        {    // 나누기 0 
            cout << "Division by zero is not allowed." << endl;
        } 
        else 
        {
            cout << "Result: " << num1 / num2 << endl;
        }
    }
    else 
    {
        cout << "Invalid operator." << endl;  // 연산자 입력 오류
    }

    return 0;
}

4️⃣ 복합조건

&& (AND 조건)

A&&B → A와 B 모두 true

|| (OR 조건)

A || B → A와 B 둘 중 하나라도 참이면 참

if (x > 0 && y > 0) 
{
    // x와 y가 모두 양수일 때 실행
}

if (x == 0 || y == 0) 
{
    // x 또는 y 중 하나라도 0이면 실행
}
 // 조건: 맑은 날씨(sunny)이고 온도가 20도 이상일 때 외출
    if (weather == "sunny" && temperature >= 20) 
    {
        cout << "It's a nice day to go out!\n";
    } 
    // 조건: 비가 오거나 너무 추운 날씨
    else if (weather == "rainy" || temperature < 10) 
    {
        cout << "Better stay indoors.\n";
    } 
    // 나머지 경우
    else 
    {
        cout << "You can go out, but dress appropriately.\n";
    }

반복문

동일한 작업을 효율적으로 처리 가능

1️⃣ for

반복의 범위가 명확하게 주어지는 상황
초기값부터 시작해서 조건 확인하고 반복이 끝날 때마다 증감 처리

for( 초기화; 종료조건; 사후동작 ) 
{
	반복할 코드
}

for(int i = 0; i  < 5; i++) 
{
	sum += i;
}
  1. 초기화 과정 한 번만 → i = 0
  2. 종료조건 확인 → i < 5 (0 < 5)
  3. 조건에 부합하면 코드 실행 → i++ → i = 1
  4. 종료조건 확인 → i < 5 (1 < 5)
  5. 조건에 부합하면 코드 실행 → i++ → i = 2
    ...
    i = 4 일 때까지 총 5번 코드 실행됨

📌 초기화, 종료조건, 사후동작 안 채워도 ; ; 두 개는 꼭 있어야 한다

for (;;)
{
    // 무한 반복 (초기화, 종료조건, 사후동작 모두 생략)
}
부분의미비워두면?
초기화반복 시작 전 실행생략 가능 (이미 변수 선언됨)
종료조건반복 계속할지 조건 검사생략 시 무한 반복
사후동작반복 후 실행 (증가 등)생략 시 반복 중 변경 직접 수행

*로 직각삼각형 만들기
이해가 안돼서 그리면서 풀었다..

#include <iostream>
using namespace std;

int main()	// 함수 시작
{		
	int n = 5;		// n = 줄 번호
	for (int i = 1; i <= n; i++)	// n 사용 위해 i 
    {		
		for (int j = 1; j <= n - i; j++)	// 공백 출력
        {		
			cout << " ";
		}
		
		for (int j = 1; j <= i; j++)	// * 출력 
        {		
			cout << "*";
		}
		cout << endl;		// 개행
	}
	return 0;		//함수 종료
}

/*
     *
    **
   ***
  ****
 *****
*/

안에 있는 for문들은 각각 독립적이므로 j 똑같이 써도 됨

2️⃣ while

반복 횟수가 불확실하거나 조건이 참일 때까지 계속 반복
조건을 먼저 검사하고 참이면 반복

while (반복할 조건) 
{
    // 반복할 코드
}
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() 
{
    srand(time(0)); // 랜덤 시드 초기화
    int secretNumber = rand() % 100 + 1; // 1부터 100 사이의 랜덤 숫자
    int guess;

    cout << "Guess the number (1 to 100): ";
    cin >> guess; // 초기 동작: 첫 번째 추측 입력 받기

    while (guess != secretNumber) 
    { // 종료 조건: 추측이 정답과 다를 경우 반복
        if (guess < secretNumber) 
        {
            cout << "Too low! Try again: ";
        } 
        else 
        {	// 그 외: guess > secretNumber
            cout << "Too high! Try again: ";
        }
        cin >> guess; // 사후 동작: 새로운 추측 입력 받기
    }

    cout << "Congratulations! You guessed the number!" << endl;	// while문 조건이 false -> guess == secreatNumber
   
    return 0;
}

srand()
랜덤 숫자 생성할 때 시작점(seed)를 설정하는 함수
시드를 설정하지 않으면 rand()가 항상 같은 숫자들은 반복해서 만듦

srand(time(0)) 현재 시간을 시드로 넣어서 매번 다른 숫자가 나오도록 함

rand()
설정된 시드를 기반으로 랜덤 숫자를 만듦
호출될 때마다 다음 랜덤 숫자를 리턴함

% 100
100으로 나누면 결과는 0 ~ 99
int secretNumber = rand() % 100 + 1;
+1 해서 secreatNumber 범위를 1 ~ 100으로 정함

정답이 아닐 때 (guess != secretNumber) → while문 계속 반복
정답일 때 (guess == secretNumber) → while문 조건 거짓, 반복 종료 → 축하 메시지 출력

0개의 댓글