본문 바로가기

C++ 공부

C++ 공부 2일차 (조건문, 계산기 추가 기능 구현하기, 반복문)

조건문

조건문은 3가지가 있다. if / if-else / if-else if-else와 같은 표현이 가능하다.

 

if 문

나이가 18세 이상인 경우에만 특정 코드가 실행되게 하려면 아래 그림과 같이 로직을 구현할 수 있습니다.

if( 조건식 )
{
code;
}

해당 조건식이 참인 경우에 코드가 실행됩니다. 거짓인 경우 아무것도 실행되지 않는다.

 

if-else 문

특정수가 짝수인지 / 홀수인지 구분해서 동작해야 하는 경우 아래 그림과 같이 로직을 구현할 수 있습니다.

if( 조건식 )
{
code;
} else
{
code;
}

if문의 조건식이 참이 아니면 else문의 코드가 실행 됩니다.
if-else문에서 주의할 점if문의 조건식이 참이 아니면 else문이 수행되므로 else문에는 조건식이 필요 없다는 것입니다.

 

if-else if-else 문

점수별로 성적 등급을 출력하는 프로그램이 있습니다. 90점 이상일 경우 A, 80점 이상일 경우 B, 70점 이상일 경우 C, 60점 이상일 경우 D 그렇지 않으면 F를 출력해야 하는 경우 아래 그림과 같이 로직을 구현할 수 있습니다.

if( 조건식 )
{
code;
} else if ( 조건식 )
{
code;
} else
{
code;
}

 

이분법적 논리(yes or no)로 표현할 수 있는 것은 if-else 문으로 하면 되지만 조건문을 좀 더 세분화해야 하는 경우가 있습니다.

위 설명에서 80점 이상일 경우라는 것은 90점 이상이 아닌 점수 중에서 80점 이상을 말합니다. 즉 80~89점을 의미합니다.

이럴 경우 if-else if-else 문으로 표현하면 됩니다. 중간에 있는 else if는 여러 개가 올 수 있다.

마지막에 오는 else는 필수가 아니다. else 생략시 마지막 조건에서 거짓이면 아무것도 실행되지 않는다.

 

계산기 추가 기능 구현하기

이전에 만든 계산기는 합산만 가능했는데 사칙연산 기능을 추가하고 0으로 나눌 시 에러 문자를 출력해보자.

결과

 

복합 조건(&&, ||)

&&는 A && B와 같이 사용하며 A, B에는 조건이 옵니다. A와 B에는 참(true) 또는 거짓(false)을 반환하는 조건이 옵니다.

연결된 모든 조건이 참(true)일 때만 전체 조건식의 결과가 참이 됩니다.

//점수가 0점이상, 100점 이하일 때 등급이 출력
#include <iostream>
using namespace std;

int main() {
    int score;

    cout << "Enter your score: ";
    cin >> score;

    // 조건: 0 <= score <= 100
    if (score >= 0 && score <= 100)
    {
        if (score >= 90)
        {
            cout << "Grade: A\n";
        }
        else if (score >= 80)
        {
            cout << "Grade: B\n";
        }
        else if (score >= 70)
        {
            cout << "Grade: C\n";
        }
        else if (score >= 60)
        {
            cout << "Grade: D\n";
        }
        else
        {
            cout << "Grade: F\n";
        }
    }
    else
    {
        cout << "Invalid score. Please enter a value between 0 and 100.\n";
    }

    return 0;
}

0에서 100 사이의 점수가 아니면 Invalid score. Please enter a value between 0 and 100. 이 출력되도록 작성함.

 

||A || B와 같이 사용하며 A, B에는 조건이 옵니다. A와 B에는 참(true) 또는 거짓(false)을 반환하는 조건이 옵니다.

둘 중 하나만 참(true)이면 전체 조건식의 결과가 참이 됩니다.

//날씨와 온도에 따른 외출 여부
#include <iostream>
using namespace std;

int main()
{
    string weather;
    int temperature;

    cout << "Enter weather (sunny/rainy): ";
    cin >> weather;
    cout << "Enter temperature: ";
    cin >> temperature;

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

    return 0;
}

반복문

반복문에는 크게 for문while문이 있다.

for문

반복의 범위가 명확하게 주어지는 상황에 사용하기 좋다.

예를 들어, 5번 반복해라 혹은 i 라는 변수를 선언하고 i가 0부터 시작해서 5가 되기 전까지 반복하는 경우가 있습니다.

이때 for문을 많이 사용한다.

 

for문의 동작은 초기화 과정은 한 번만 하고 이후에 종료 조건 확인 -> 동작 -> 사후 동작 -> 종료 조건확인 순으로 반복된다.

반복은 종료 조건을 만족할 때 까지 계속된다. for(초기화;종료조건;사후 동작)

 

예시 1. 1부터 10까지의 합을 구해보기

for문을 활용해서 i를 1로 초기화 한 후, 10 이하일 경우 1씩 증가시키면서 이 값을 sum에 모두 더한다.

최종적으로 sum은 1에서 10까지 모두 더한 값이 된다.

#include <iostream>
using namespace std;

int main()
{
    int sum = 0; // 합을 저장할 변수 초기화
    for (int i = 1; i <= 10; i++)// 초기화: i = 1 실행 조건: i <= 10 사후 동작: i++
    {
        sum += i; // 실제 동작: sum에 i를 더함
    }
    cout << "Sum: " << sum << endl; // 출력: 합계 출력
    
    return 0;
}

예시 1. 결과

 

예시 2. 5부터 1까지 숫자 출력해보기

//5부터 1까지 출력하기
#include <iostream>
using namespace std;

int main()
{
	int i;

	for (i = 5; i >= 1; i--) // 초기화: i = 5, 실행 조건: i >= 1, 사후 동작 : i--
	{
		cout << i << endl;
	}

	return 0;
}

예시 2. 결과

 

예시 3. 1부터 20까지 3의 배수를 출력해보기

3의 배수는 3으로 나눠서 나머지가 0인지 확인하면 된다..

//1부터 20까지 3의 배수 출력해보기
#include <iostream>
using namespace std;

int main()
{
	int i;

	for (i = 1; i <= 20; i++) // 초기화 i = 1, 실행 조건 i >= 20, 사후 동작 i++
	{
		if (i % 3 == 0) // i를 3으로 나눴을 때 나머지가 0이면 출력하기
		{
			cout << i << " ";
		}
	}

	return 0;
}

예시 3. 결과

예시 4. 오른쪽으로 정렬된 높이가 5인 직각삼각형을 출력해보기

//오른쪽으로 정렬된 높이가 5인 직각삼각형을 출력해보기
#include <iostream>
using namespace std;

int main()
{
	int i, j;

	for (i = 1; i <= 5; i++) // 초기화 i = 1 실행 조건 i <= 5 사후 동작 i++
	{
		for (j = 5; j >= 1; j--) // 초기화 j = 5 실행 조건 j >= 1 사후 동작 j--
		{
			if (i >= j)
			{
				cout << "*";
			}
			else
			{
				cout << " ";
			}
		}
		cout << endl;
	}
}

/*
i = 1 j = 5 4 3 2 1
i = 2 j = 5 4 3 2 1
i = 3 j = 5 4 3 2 1
i = 4 j = 5 4 3 2 1
i = 5 j = 5 4 3 2 1
위처럼 메모장에 적어두고 if의 조건을 바꾸거나 i의 초기 값을 5로 시작하면 다양한 삼각형을 그릴 수 있다.
*/

예시 4. 결과

예시 4. 강의에서의 답지

#include <iostream>
using namespace std;

int main() {
    int n = 5; // 삼각형의 높이
    for (int i = 1; i <= n; i++) { // 초기화: i = 1
                                   // 종료 조건: i <= n
                                   // 사후 조건: i++
        for (int j = 1; j <= n - i; j++) { // 초기화: j = 1
                                           // 종료 조건: j <= n - i
                                           // 사후 동작: j++
            cout << " "; // 실제 동작: 공백 출력
        }
        for (int j = 1; j <= i; j++) { // 초기화: j = 1
                                       // 종료 조건: j <= i
                                       // 사후 조건: j++
            cout << "*"; // 실제 동작: 별 출력
        }
        cout << endl; // 줄 바꿈
    }
    
    return 0;
}

while문

반복 범위가 명확한 경우보다, 특정 조건을 확인하며 반복해야 하는 경우가 있습니다.

이럴 때는while문을 사용하면 코드가 깔끔해진다.

 

예시 1. 사용자의 입력을 받아 입력값이 음수가 아니면 계속 입력하기

#include <iostream>
using namespace std;

int main()
{
    int number; // 사용자 입력값을 저장할 변수

    cout << "Enter numbers (negative number to stop): ";
    cin >> number; // 초기 동작: 첫 번째 입력 받기

    while (number >= 0) // 실행 조건: 입력값이 음수가 아니면 반복
    {
        cout << "You entered: " << number << endl; // 실제 동작: 입력값 출력
        cin >> number; // 사후 동작: 다음 입력 받기
    }

    cout << "Program terminated." << endl;
    
    return 0;
}

 

예시 1. 결과

 

예시 2. 랜덤한 값 맞추기 게임

시작할 때 랜덤한 값을 컴퓨터에게 부여하고 사용자가 입력하며 랜덤 값이 몇인지 맞추는 게임이다.(1~100 사이 값)

배우지 않은 내용이 있어서 강의의 답지를 보고 재밌어 보여서 따라 적기만 했다.

#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
        {
            cout << "Too high! Try again: ";
        }
        cin >> guess; // 사후 동작: 새로운 추측 입력 받기
    }

    cout << "Congratulations! You guessed the number!" << endl;
 
    return 0;
}

 

예시 2. 결과

정답은 92였다.

 

숙제 : 사용자로부터 정수를 입력받아 해당 크기에 맞는 다이아몬드 모양을 *로 출력하는 프로그램 작성하기.