일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 더 지니어스 양면포커
- dynamic_cast
- this call
- std::endl
- increment operator
- virtual inheritance
- virtual destructor
- pointer to member data
- c++ multi chatting room
- c++ basic practice
- new&delete
- virtual function table
- virtual function
- std::ostream
- operator overloading
- placement new
- delete function
- std::vector
- base from member
- diamond inheritance
- discord bot
- constructor
- vector capacity
- std::cout
- return by reference
- conversion constructor
- vector size
- C++
- member function pointer
- suffix return type
- Today
- Total
I'm FanJae.
[C++ 기본 연습 문제] Chapter 01. 연습문제 정답 본문
열혈 C++ 프로그래밍(윤성우 저)의 연습문제를 다뤘습니다.
개인의 연습을 위해 다룬 것이며, 예제에 실제 공개된 코드는 첨부하지 않았습니다.
1. Chatper 01. C언어 기반의 C++
1-1. C++ 기반의 데이터 입출력
① 사용자로부터 총 5개의 정수를 입력 받아서, 그 합을 출력하는 프로그램을 작성해 보자, 단 프로그램의 실행은 다음과 같이 이뤄져야 한다.
1번째 정수 입력: 1
2번째 정수 입력: 2
3번째 정수 입력: 3
4번째 정수 입력: 4
5번째 정수 입력: 5
합계: 15
#include <iostream>
int main(void)
{
int n;
int sum = 0;
for (int i = 1; i <= 5; i++)
{
std::cout << i << "번째 정수 입력: ";
std::cin >> n;
sum += n;
}
std::cout << "합계 : " << sum;
}
② 프로그램 사용자로부터 이름과 전화번호를 문자열의 형태로 입력 받아서, 입력 받은 데이터를 그대로 출력하는 프로그램을 작성해보자.
#include <iostream>
int main(void)
{
char name[100];
char number[100];
std::cout << "이름 : ";
std::cin >> name;
std::cout << "전화번호 : ";
std::cin >> number;
std::cout << "이름 : " << name << std::endl;
std::cout << "전화번호 : " << number << std::endl;
}
// B (아래와 같이 처리해도 된다.)
#include <iostream>
#include <string>
int main(void)
{
std::string name;
std::string number;
std::cout << "이름 : ";
std::cin >> name;
std::cout << "전화번호 : ";
std::cin >> number;
std::cout << "이름 : " << name << std::endl;
std::cout << "전화번호 : " << number << std::endl;
}
③ 숫자를 하나 입력 받아서 그 숫자에 해당하는 구구단을 출력하는 프로그램을 작성해 보자. 예를 들어서 사용자가 5를 입력한다면 구구단에서 5단을 출력해야 한다.
#include <iostream>
int main(void)
{
int n;
std::cout << "숫자를 입력하세요 : ";
std::cin >> n;
for (int i = 1; i <= 9; i++)
{
std::cout << n << " x " << i << " = " << n * i << std::endl;
}
}
④ 판매원들의 급여 계산 프로그램을 작성해 보자. 이 회사는 모든 판매원에게 매달 50만원의 기본 급여와 물품 판매 가격의 12%에 해당하는 돈을 지급한다. 예를 들어서 민수라는 친구의 이번 달 물품 판매 금액이 100만원이라면, 500+100*0.12=62, 따라서 62만원을 급여로 지급 받는다. 단, 아래의 실행의 예에서 보이듯이 이러한 급여의 계산은 -1이 입력될 때까지 계속 되어야 한다.
판매 금액을 만원 단위로 입력(-1 to end): 100
이번 달 급여: 62만원
판매 금액을 만원 단위로 입력(-1 to end): 200
이번 달 급여: 74만원
판매 금액을 만원 단위로 입력(-1 to end): -1
프로그램을 종료합니다.
#include <iostream>
int main(void)
{
int n;
while (1)
{
std::cout << "판매 금액을 만원 단위로 입력(-1 to end): ";
std::cin >> n;
if (n == -1)
{
std::cout << "프로그램을 종료합니다." << std::endl;
break;
}
else
{
std::cout << "이번 달 급여: " << 50 + (0.12 * n) << "만원" << std::endl;
}
}
}
1-2. 함수 오버로딩
① 다음 main 함수에서 필요로 하는 swap 함수를 오버로딩 해서 구현해보자. (공개된 예제 코드 미첨부)
#include <iostream>
void swap(int* ptr, int* ptr2)
{
int temp = *ptr;
*ptr = *ptr2;
*ptr2 = temp;
}
void swap(char* ptr, char* ptr2)
{
char temp = *ptr;
*ptr = *ptr2;
*ptr2 = temp;
}
void swap(double* ptr, double* ptr2)
{
double temp = *ptr;
*ptr = *ptr2;
*ptr2 = temp;
}
int main()
{
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;
}
1-3. 매개변수의 디폴트 값(Default Value)
① 예제 DefaultValue3.cpp에 정의된 함수 BoxVolume를 '매개변수의 디폴트 값 지정' 형태가 아닌, '함수 오버로딩'의 형태로 재 구현해보자. 물론 main 함수는 변경하지 않아야 하며, 실행결과도 동일해야 한다.
#include <iostream>
int BoxVolume(int length, int width, int height)
{
return length * width * height;
}
int BoxVolume(int length, int width)
{
return length * width * 1;
}
int BoxVolume(int length)
{
return length * 1 * 1;
}
int BoxVolume(void)
{
return 1 * 1 * 1;
}
int main(void)
{
std::cout << "[3, 3, 3] : " << BoxVolume(3, 3, 3) << std::endl;
std::cout << "[5, 5, D] : " << BoxVolume(5, 5) << std::endl;
std::cout << "[7, D, D] : " << BoxVolume(7) << std::endl;
std::cout << "[D, D, D] : " << BoxVolume() << std::endl;
return 0;
}
- 유의할 점은 함수 인자 전달 순서가 맨왼쪽에서 오른쪽이듯 Default Parameter 값이 결정되어야 함에 유의하자.
② 다음과 같은 형태로의 함수 오버로딩은 문제가 있다. 어떠한 문제가 있는지 설명해보자.
int SimpleFunc(int a = 10)
{
return a + 1;
}
int SimpleFunc(void)
{
return 10;
}
- 이 코드를 보면, 두 개 모두 호출 조건을 만족한다는 문제가 있다.
- 따라서, 이는 어떤 함수를 호출해야할지 모호하다.
1-4. 파일의 분할
- 책의 NameSp2.cpp를 다음과 같이 총 3개의 파일로 분할해서 컴파일 한다.
1) 헤더파일 : main 함수를 제외한 나머지 두 함수의 선언을 삽입한다.
2) 소스파일1 : main 함수를 제외한 나머지 두 함수의 정의를 삽입한다.
3) 소스파일2 : main 함수만 삽입한다.
파일 이름은 임의로 한다.
// nameSp2.h
#pragma once
namespace BestComImpl
{
void SimpleFunc(void);
}
namespace ProgComImpl
{
void SimpleFunc(void);
}
// nameSp2.cpp
#include <iostream>
#include "namesp2.h"
void BestComImpl::SimpleFunc(void)
{
std::cout << "BestCom이 정의한 함수" << std::endl;
}
void ProgComImpl::SimpleFunc(void)
{
std::cout << "ProgCom이 정의한 함수" << std::endl;
}
#include <iostream>
#include "namesp2.h"
int main(void)
{
BestComImpl::SimpleFunc();
ProgComImpl::SimpleFunc();
}
'C++ > Basic Practice' 카테고리의 다른 글
[C++ 기본 연습 문제] Chapter 07. 상속(Inheritance)의 이해 (1) | 2024.09.06 |
---|---|
[C++ 기본 연습 문제] Chapter 05. 복사 생성자(Copy Constructor) (0) | 2024.09.05 |
[C++ 기본 연습 문제] Chapter 04. 클래스의 완성 (0) | 2024.09.04 |
[C++ 기본 연습 문제] Chapter 03. 클래스의 기본 (1) | 2024.09.03 |
[C++ 기본 연습 문제] Chapter 02. 연습문제 정답 (0) | 2024.09.01 |