🙇‍♀️Chapter 01


🪐문제 01-1 [C++ 기반의 데이터 입출력]


문제 1

사용자로부터 총 5개의 정수를 입력 받아서, 그 합을 출력하는 프로그램을 작성해 보자. 단, 프로그램의 실행은 다음뫄 같이 이뤄져야한다

1번쨰 정수입력:1
2번쨰 정수입력:2
3번쨰 정수입력:3
4번쨰 정수입력:4
5번쨰 정수입력:5
합계: 15


풀이

int main()
{
	int input = 0;
	int ret = 0;
	for (int i = 0; i < 5; i++)
	{
		cout << i + 1 <<"번째 정수 입력: ";
		cin >> input;
		ret += input;
	}

	cout << "합계:" << ret << endl;
}


문제 2

프로그램 사용자로부터 이름과 전화번호를 문자열의 형태로 입력 받아서, 입력 받은 데이터를 그래도 출려하는 프로그램을 작성해 보자.


풀이

int main()
{
	char name[100];
	char callNum[100];

	cin >> name;
	cin >> callNum;

	cout << "이름: " << name << endl;
	cout << "전화번호: " << callNum << endl;

}


문제 3

숫자를 하나 입력 받아서 그 숫자에 해당하는 구구단을 출력하는 프로그램을 작성해 보자. 예를 들어서 사용자가 5를 입력한다면 구구단에서 5단을 출력해야 한다.


풀이

int main()
{
	int N;
	cin >> N;

	for (int i = 1; i < 10; i++)
	{
		cout << N << "*" << i << "=" << N * i << endl;
	}
}


문제 4

판매원들의 급여 계산 프로그램을 작성해 보자. 이 회사는 모든 판매원에게 매달 50만원의 기본 급여와 물품 판매 가격의 12%에 해당하는 돈을 지급한다. 예를 들어서 민수라는 친구의 이번 달 물품 판매 금액이 100만원이라면, 50+100*0.12=62, 따라서 62만원을 급여로 지급 받는다. 단, 아래의 실행의 예에서 보이듯이 이러한 급여의 계산은 -1이 입력될 때까지 계속 되어야 한다.

판매 금액을 만원 단위로 입력(-1 to end): 100
이번 달 급여: 62만원
판매 금액을 만원 단위로 입력(-1 to end): 200
이번 달 급여: 74만원
판매 금액을 만원 단위로 입력(-1 to end): -1
프로그램을 종료합니다.


풀이

int main()
{

	while (true)
	{
		int N;
		cout << "판매 금액을 만원 단위로 입력(-1 to end): ";
		cin >> N;

		if (N == -1)
		{
			cout << "프로그램을 종료합니다." << endl;
			break;
		}

		int ret = 50 + N * 0.12;

		cout << "이번 달 급여: " << ret << "만원" << endl;
		
	}

}


🪐문제 01-2 [함수 오버로딩]


문제

다음 main 함수에서 필요로 하는 swap 함수를 오버로딩 해서 구현해보자.

int main(void)
{
  int num1 = 20, num2 = 30;
  swap(&num1, &num2);
  std::cout << num1 << ' ' << num2 << std::endl;

  char ch1 = 'A', ch2 = 'Z';
  swap(&ch1, &ch2);
  std::cout << ch1 << ' ' <<ch2 << std::endl;

  double dbl1 = 1.111, dbl2 = 5.555;
  swap(&dbl1, &dbl2);
  std::cout << dbl1 << ' ' << dbl2 << std::endl;

  return 0;
}

실행의 예

30 20
Z A
5.555 1.111


풀이

void swap(int* num1, int* num2)
{
	int temp;
	temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}

void swap(char* ch1, char* ch2)
{
	char temp;
	temp = *ch1;
	*ch1 = *ch2;
	*ch2 = temp;
}

void swap(double* dbl1, double* dbl2)
{
	double temp;
	temp = *dbl1;
	*dbl1 = *dbl2;
	*dbl2 = temp;
}


🪐문제 01-3 [매개변수의 디폴트 값]


문제 1

예제 DefaultValue3.cpp에 정의된 함수 BoxVolume를 ‘매개변수의 디폴트 값 지정’ 형태가 아닌, ‘함수 오버로딩’의 형태로 재 구현재보자. 물론 main 함수는 변경하지 않아야 하며, 실행결과도 동일해야 한다.

// DefaultValue3.cpp
#include <iostream>
using namespace std;

int BoxVolume(int length, int width = 1, int height = 1);


int main(void)
{
	cout << "[3, 3, 3] : " << BoxVolume(3, 3, 3) << endl;
	cout << "[3, 3, 3] : " << BoxVolume(5, 5) << endl;
	cout << "[3, 3, 3] : " << BoxVolume(7) << endl;
	//cout << "[3, 3, 3] : " << BoxVolume(0) << endl;

	return 0;
}

int BoxVolume(int length, int width, int height)
{
	return length * width * height;
}


풀이

int BoxVolume(int length, int width, int height);
int BoxVolume(int length, int width);
int BoxVolume(int length);

int BoxVolume(int length, int width, int height)
{
	return length * width * height;
}

int BoxVolume(int length, int width)
{
	return length * width;
}

int BoxVolume(int length)
{
	return length;
}


문제 2

다음과 같은 형태로의 함수 오버로딩은 문제가 있다 어떠한 문제가 있는지 설명해보자.

int SimpleFunc(int a = 10)
{
	return a + 1;
}

int SimpleFunc(void)
{
	return 10;
}


풀이

첫 번째 함수에서 ‘매개변수 디폴트 값 지정’을 해주었기에 두 번째 함수를 호출 할 때는 오버로드도니 함수 호출에 모호함이 발생한다. 해결하기 위해서는 ‘매개변수 디폴트 값 지정’을 없애면 된다.


🪐문제 01-4 [파일의 분할]


문제

C++을 제대로 공부하려면 다음의 내용을 잘 알고 있어야 한다.

  • 헤더파일의 의미와 정의 방법
  • 헤더파일에 삽입할 내용과 소스파일에 삽입할 내용을 구분하는 방법
  • 둘 이상의 헤더파일과 소스파일을 만들어서 하나의 실행파일로 컴파일하는 방법

이와 관련해서 전혀 감이 없다면, C언어 기본서를 참조하여 이 부분을 복습하기 바라며, 감이 좀 있다면, 앞으로 조금씩 그 감을 살려나가기 바란다. 그럼 헤더파일, 그리고 파일분할과 관련된 감을 살리기 위해서 앞서 소개한 예제 NameSp2.cpp를 다음과 같이 총 3개의 파일로 분할해서 컴파일 해보자.

  • 헤더파일 main 함수를 제외한 나머지 두 함수의 선언을 삽입한다.
  • 소스파일1 main 함수를 제외한 나머지 두 함수의 정의를 삽입한다.
  • 소스파일2 main 함수만 삽입한다.

파일의 이름은 여러분이 임의로 정해도 된다. 하지만, 각 파일에 들어갈 내용은 위의 지시대로 진행해야 한다.

// NameSp2.cpp
#include <iostream>
using namespace std;

namespace BestComImp1
{
	void SimpeFunc(void);
}

namespace ProgComImp1
{
	void SimpeFunc(void);
}

int main(void)
{
	BestComImp1::SimpeFunc();
	ProgComImp1::SimpeFunc();
	return 0;
}

void BestComImp1::SimpeFunc(void)
{
	cout << "BestCom이 정의한 함수" << endl;
}

void ProgComImp1::SimpeFunc(void)
{
	cout << "ProgCom이 정의한 함수" << endl;
}


풀이

// 헤더파일
#pragma once


namespace BestComImp1
{
	void SimpeFunc(void);
}

namespace ProgComImp1
{
	void SimpeFunc(void);
}
// 소스파일1
#include <iostream>
#include "test1.h"
using namespace std;

void BestComImp1::SimpeFunc(void)
{
	cout << "BestCom이 정의한 함수" << endl;
}

void ProgComImp1::SimpeFunc(void)
{
	cout << "ProgCom이 정의한 함수" << endl;
}
// 소스파일2
#include <iostream>
#include "test1.h"
using namespace std;

int main(void)
{
	BestComImp1::SimpeFunc();
	ProgComImp1::SimpeFunc();
	return 0;
}