728x90
반응형
본 글은 "황기태"님의 [명품 C++ Programming]의 연습 문제 답을 공유하고자 작성되었으며, 필자가 직접 문제를 풀며 작성한 것이기에 오류가 있을 수 있습니다. 댓글로 알려주시면 반영하도록 하겠습니다.
시리즈 보기
[C++] 명품 C++ Programming 1장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 1장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 2장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 2장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 3장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 4장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 4장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 5장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 6장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 7장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 8장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 8장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 9장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 9장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 10장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 10장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 11장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 11장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 12장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 12장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 13장 연습 문제 풀이 (이론 문제)
💡
int main() {
int x[] = { 1, 10, 100, 5, 4 };
cout << biggest(x, 5) << endl;
}
#include <iostream>
using namespace std;
template <class T>
T biggest(T arr [], int size) {
T big = arr[0];
for (int i = 0; i < size; i++) {
if (big <= arr[i]) big = arr[i];
}
return big;
}
int main() {
int x[] = { 1, 10, 100, 5, 4 };
cout << biggest(x, 5) << endl;
}
💡
int main() {
int x[] = { 1, 10, 100, 5, 4 };
int y[] = { 1, 10, 100, 5, 4 };
if (equalArrays(x, y, 5)) cout << "같다.";
else cout <<"다르다."
}
#include <iostream>
using namespace std;
template <class T>
bool equalArrays(T arr1[], T arr2[], int size) {
for (int i = 0; i < size; i++) {
if (arr1[i] != arr2[i]) return false;
}
return true;
}
int main() {
int x[] = { 1, 10, 100, 5, 4 };
int y[] = { 1, 10, 100, 5, 4 };
if (equalArrays(x, y, 5)) cout << "같다.";
else cout << "다르다.";
double a[] = { 2.1, 5, 4, 9.44, 8.4 };
double b[] = { 2.1, 5, 4, 9.5, 8.7 };
if (equalArrays(a, b, 5)) cout << "같다.";
else cout << "다르다.";
}
💡
#include <iostream>
using namespace std;
template <class T>
void reverseArray(T arr [], int size) {
T tmp;
// 임시 배열을 이용해 따로 저장한 뒤 바꿀 수도 있습니다.
for (int i = 0; i < size/2; i++) {
tmp = arr[i];
arr[i] = arr[size - i - 1];
arr[size - i - 1] = tmp;
}
}
int main() {
int x[] = { 1, 10, 100, 5, 4 };
reverseArray(x, 5);
for (int i = 0; i < 5; i++) cout << x[i] << ' ' << endl;
double y[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
reverseArray(y, 5);
for (int i = 0; i < 5; i++) cout << y[i] << ' ';
}
💡
#include <iostream>
#include <string>
using namespace std;
template <class T>
bool search(T isHere, T arr[], int size) {
for (int i = 0; i < size; i++) {
if (arr[i] == isHere) return true;
}
return false;
}
int main() {
int x[] = { 1, 10, 100, 5, 4 };
if (search(100, x, 5)) cout << "100이 배열 x에 포함되어 있다." << endl;
else cout << "100이 배열 x에 포함되어 있지 않다.";
double y[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
if (search(3.14, y, 5)) cout << "3.14이 배열 y에 포함되어 있다.";
else cout << "3.14이 배열 y에 포함되어 있지 않다.";
}
💡
int* concat(int a[], int sizea, int b[], int sizeb);
#include <iostream>
#include <string>
using namespace std;
template <class T>
T* concat(T a[], int sizea, T b[], int sizeb) {
T* arr = new T[sizea + sizeb];
for (int i = 0; i < sizea; i++) {
arr[i] = a[i];
}
for (int i = sizea; i < sizea + sizeb; i++) {
arr[i] = b[i - sizea];
}
return arr;
}
int main() {
int a[] = { 1, 2, 3, 4, 5 };
int b[] = { 6, 7, 8, 9, 10 };
int* intArr = concat(a, 5, b, 5);
for (int i = 0; i < 10; i++) cout << intArr[i] << " ";
cout << endl;
double x[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
double y[] = { 6.6, 7.7, 8.8, 9.9, 10.1 };
double* doubleArr = concat(x, 5, y, 5);
for (int i = 0; i < 10; i++) cout << doubleArr[i] << " ";
}
💡
int* remove(int src[], int sizeSrc, int minus[], int sizeMinus, int& retSize);
#include <iostream>
#include <string>
using namespace std;
// 배열 src에서 배열 minus에 들어있는 같은 수를 모두 삭제한 새로운 int 배열을 동적으로 할당받아 리턴
// retSize는 remove() 함수의 실행 결과를 리턴하는 배열의 크기를 전달받는다.
template <class T>
T* remove(T src[], int sizeSrc, T minus[], int sizeMinus, int& retSize) {
T* arr = new T[sizeSrc];
int i, j;
bool canCopy = true; // 복사할지를 판단
for (i = 0; i < sizeSrc; i++) {
for (j = 0; j < sizeMinus; j++) {
if (src[i] == minus[j]) {
canCopy = false;
break;
}
}
if (canCopy) {
arr[retSize] = src[i];
retSize++;
}
canCopy = true;
}
return arr;
}
int main() {
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int b[] = { 4, 5, 6, 7 };
int size = 0;
int* p = remove(a, 10, b, 4, size);
for (int i = 0; i < size; i++)
cout << p[i] << ' ';
cout << endl;
delete[] p;
size = 0;
char c[] = { 'a','b','c','d','e','f' };
char d[] = { 'g','h','i','j','k' };
char* q = remove(c, 6, d, 5, size);
for (int i = 0; i < size; i++)
cout << q[i] << ' ';
cout << endl;
delete[] q;
}
💡
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle(int radius = 1) { this->radius = radius; }
int getRadius() { return radius; }
};
template <class T>
T bigger(T a, T b) {
if (a > b) return a;
else return b;
}
int main() {
int a = 20, b = 50, c;
c = bigger(a, b);
cout << "20과 50 중 큰 값은 " << c << endl;
Circle waffle(10), pizza(20), y;
y = bigger(waffle, pizza);
cout << "waffle과 pizza 중 큰 것의 반지름은 " << y.getRadius() << endl;
}
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle(int radius = 1) { this->radius = radius; }
int getRadius() { return radius; }
};
template <class T>
T bigger(T a, T b) {
if (a > b) return a;
else return b;
}
Circle bigger(Circle a, Circle b) {
if (a.getRadius() > b.getRadius()) return a;
else return b;
}
int main() {
int a = 20, b = 50, c;
c = bigger(a, b);
cout << "20과 50 중 큰 값은 " << c << endl;
Circle waffle(10), pizza(20), y;
y = bigger(waffle, pizza);
cout << "waffle과 pizza 중 큰 것의 반지름은 " << y.getRadius() << endl;
}
💡
#include <iostream>
using namespace std;
class Comparable {
public:
// op2는 비교하려는 객체를 받아옴
virtual bool operator > (Comparable& op2) = 0; // 순수 가상 함수
virtual bool operator < (Comparable& op2) = 0; // 순수 가상 함수
virtual bool operator == (Comparable& op2) = 0; // 순수 가상 함수
};
class Circle : public Comparable {
int radius;
public:
Circle(int radius = 1) { this->radius = radius; }
int getRadius() { return radius; }
bool operator > (Comparable& op2) {
// 동적할당으로 객체를 가리키는 포인터 만들기
Circle* c = (Circle*)&op2;
if (this->radius > c->getRadius()) return true;
else return false;
}
bool operator < (Comparable& op2) {
Circle* c = (Circle*)&op2;
if (this->radius < c->getRadius()) return true;
else return false;
}
bool operator == (Comparable& op2) {
Circle* c = (Circle*)&op2;
if (this->radius == c->getRadius()) return true;
else return false;
}
};
template <class T>
T bigger(T a, T b) {
if (a > b) return a;
else return b;
}
int main() {
int a = 20, b = 50, c;
c = bigger(a, b);
cout << "20과 50 중 큰 값은 " << c << endl;
Circle waffle(10), pizza(20), y;
y = bigger(waffle, pizza);
cout << "waffle과 pizza 중 큰 것의 반지름은 " << y.getRadius() << endl;
}
💡
#include <iostream>
#include <vector>
using namespace std;
int main() {
int num, i;
double sum = 0;
vector<int> v;
vector<int>::iterator it;
while (true) {
cout << "정수를 입력하세요(0을 입력하면 종료)>>";
cin >> num;
if (num == 0) break;
v.push_back(num);
sum += num;
for (it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << endl << "평균 = " << sum / v.size() << endl;
}
}
💡
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Nation {
string nation;
string capital;
public:
Nation(string nation = "", string capital = "") {
this->nation = nation;
this->capital = capital;
}
void setNation(string nation) { this->nation = nation; }
void setCapital(string cpital) { this->capital = capital; }
string getNation() { return nation; }
string getCapital() { return capital; }
};
int main() {
string nation, capital;
vector<Nation> nv;
nv.push_back(Nation("Korea", "Seoul"));
nv.push_back(Nation("USA", "Washington D.C."));
nv.push_back(Nation("Japan", "Tokyo"));
nv.push_back(Nation("United Kingdom", "London"));
nv.push_back(Nation("France", "Paris"));
vector<Nation>::iterator it;
int select;
cout << "***** 나라의 수도 맞추기 게임을 시작합니다. *****" << endl;
while (true) {
cout << "정보 입력: 1, 퀴즈: 2, 종료: 3 >> ";
cin >> select;
switch (select) {
case 1: // 정보 입력, 중복을 확인함
cout << "나라와 수도를 입력하세요(no no 이면 입력 끝)" << endl;
cout << "현재 " << nv.size() << "개의 나라가 입력되어 있습니다." << endl;
cout << nv.size() + 1 << ">>";
cin >> nation >> capital;
if (nation == "no" && capital == "no") break;
for (it = nv.begin(); it != nv.end(); it++) {
if (it->getNation() != nation)
nv.push_back(Nation(nation, capital));
else
cout << "already exists !!";
}
break;
case 2: // 랜덤으로 나라 출력
int quiz;
while (true) {
string answer;
quiz = rand() % nv.size();
cout << nv.at(quiz).getNation() << "의 수도는?";
cin >> answer;
if (answer == "exit")
break;
else if (nv.at(quiz).getCapital() == answer)
cout << "Correct !!" << endl;
else
cout << "No !!" << endl;
}
break;
case 3:
return 0;
}
}
}
💡
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Book{
int year;
string name;
string author;
public:
void set(int year, string name, string author){
this->year = year; this->name = name; this->author = author;
}
string getBookName() { return name; }
string getAuthor(){ return author; }
int getYear(){ return year; }
void show(){ cout << year << "년도, " << name << ", " << author << endl; }
};
int main() {
vector<Book> v;
Book b;
int year;
string name;
string author;
cout << "입고할 책을 입력하세요. 년도에 -1을 입력하면 입고를 종료합니다.\n";
while(true){
cout << "년도>>";
cin >> year;
if(year == -1)
break;
fflush(stdin);
cout << "책이름>>";
getline(cin, name);
cout << "저자>>";
getline(cin, author);
b.set(year, name, author);
v.push_back(b);
}
cout << "총 입고된 책은 " << v.size() << "권 입니다.\n";
cout << "검색하고자 하는 저자 이름을 입력하세요>>";
getline(cin, author);
for(int i=0; i<v.size(); i++){
if(v[i].getAuthor() == author)
v[i].show();
}
cout << "검색하고자 하는 년도를 입력하세요>>";
cin >> year;
for(int i=0; i<v.size(); i++){
if(v[i].getYear() == year)
v[i].show();
}
}
💡
// 임시 생략
💡
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
map<string, int> student;
string name;
int score;
cout << "***** 점수 관리 프로그램 HIGH SCORE을 시작합니다." << endl;
int select;
while (true) {
cout << "입력:1, 조회:2, 종료:3 >> ";
cin >> select;
switch (select) {
case 1:
cout << "이름과 점수 >> ";
cin >> name >> score;
student.insert(make_pair(name, score));
break;
case 2:
cout << "이름>> ";
cin >> name;
if (student.find(name) == student.end())
cout << "입력되지 않은 학생입니다." << endl;
else
cout << name << "의 점수는 " << student.at(name) << endl;
break;
case 3:
cout << "프로그램을 종료합니다...";
return 0;
}
}
}
💡
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
cout << "***** 암호 관리 프로그램 WHO를 시작합니다. *****" << endl;
int select;
string name, passwd;
map<string, string> code;
while (true) {
cout << "신입:1, 검사:2, 종료:3>> ";
cin >> select;
switch (select)
{
case 1:
cout << "이름 암호 >>";
cin >> name >> passwd;
code.insert(make_pair(name, passwd));
break;
case 2:
cout << "이름? ";
cin >> name;
do {
cout << "암호? ";
cin >> passwd;
if (passwd == code.at(name)) {
cout << "통과!!" << endl;
break;
}
else {
cout << "실패~~" << endl;
}
} while (true);
break;
case 3:
cout << "프로그램을 종료합니다..." << endl;
return 0;
}
}
}
반응형
'대학교 > 명품 C++programming 문제' 카테고리의 다른 글
[C++] 명품 C++ Programming 11장 연습 문제 풀이 (실습 문제) (0) | 2022.12.08 |
---|---|
[C++] 명품 C++ Programming 11장 연습 문제 풀이 (이론 문제) (0) | 2022.12.07 |
[C++] 명품 C++ Programming 10장 연습 문제 풀이 (이론 문제) (0) | 2022.12.02 |
[C++] 명품 C++ Programming 9장 연습 문제 풀이 (실습 문제) (0) | 2022.12.01 |
[C++] 명품 C++ Programming 9장 연습 문제 풀이 (이론 문제) (0) | 2022.11.30 |