[C++] 명품 C++ Programming 개정판 2장 실습문제 풀이



Chapter 2. C++ 프로그래밍의 기본

1번

cout과 « 연산자를 이용하여, 1에서 100까지 정수를 다음과 같이 한 줄에 10개씩 출력하라. 각 정수를 탭으로 분리하여 출력하라.

소스 코드

#include <iostream>

int main() {

	for (int i = 1; i <= 100; i++)
	{
		std::cout << i <<'\t';

		if (i % 10 == 0)
			std::cout << '\n';
	}

	return 0;
}


2번

cout과 « 연산자를 이용하여 다음과 같이 구구단을 출력하는 프로그램을 작성하라.

소스 코드

#include <iostream>

int main() {

	for (int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <= 9; j++)
		{
			std::cout << j << "X" << i << "=" << i * j << "\t";
		}
		std::cout << "\n";
	}

	return 0;
}


3번

키보드로부터 두 개의 정수를 읽어 큰 수를 화면에 출력하라.

소스 코드

#include <iostream>

int main() {
	int a, b;

	std::cout << "두 수를 입력하라>>";
	std::cin >> a >> b;

	std::cout << "큰 수 = ";
	if (a > b)
	{
		std::cout << a;
	}
	else
	{
		std::cout << b;
	}
	return 0;
}


4번

소수점을 가지는 5개의 실수를 입력 받아 제일 큰 수를 화면에 출력하라.

소스 코드

#include <iostream>

int main() {
	float a, b, c, d, e;
	float max = 0;

	std::cout << "5개의 실수를 입력하라>>";
	std::cin >> a >> b >> c >> d >> e;

	if (max < a)
	{
		max = a;
	}
	if (max < b)
	{
		max = b;
	}
	if (max < c)
	{
		max = c;
	}
	if (max < d)
	{
		max = d;
	}
	if (max < e)
	{
		max = e;
	}

	std::cout << "제일 큰 수 = " << max;

	return 0;
}


5번

<Enter> 키가 입력될 때까지 문자들을 읽고, 입력된 문자 ‘x’의 개수를 화면에 출력하라.

소스 코드

#include <iostream>
#include <string>

using namespace std;

int main() {
	char str[100];
	int cnt = 0;

	cout << "문자들을 입력하라(100개 미만)\n";
	cin.getline(str, 100, '\n');

	for (int i = 0; i < 100; i++)
	{
		if (str[i] == 'x')
		{
			cnt++;
		}
	}

	cout << "x의 개수는 " << cnt;

	return 0;
}


6번

문자열을 두 개 입력받고 두 개의 문자열이 같은지 검사하는 프로그램을 작성하라. 만일 같으면 “같습니다”, 아니면 “같지 않습니다”를 출력하라.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	char pwd[100], pwd2[100];

	cout << "새 암호를 입력하세요>>";
	cin >> pwd;

	cout << "새 암호를 다시 한 번 입력하세요>>";
	cin >> pwd2;

	if (strcmp(pwd, pwd2) == 0)
	{
		cout << "같습니다\n";
	}
	else
	{
		cout << "같지 않습니다\n";

	}

	return 0;
}


7번

다음과 같이 “yes”가 입력될 때까지 종료하지 않는 프로그램을 작성하라. 사용자로부터의 입력은 cin.getline() 함수를 사용하라.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	char str[100];

	while (true)
	{
		cout << "종료하고 싶으면 yes를 입력하세요>>";
		cin.getline(str, 100, '\n');

		if (strcmp(str, "yes") == 0)
		{
			cout << "종료합니다...";
			break;
		}
	}
	return 0;
}


8번

한 라인에 ‘;’으로 5개의 이름을 구분하여 입력받아, 각 이름을 끊어내어 화면에 출력하고 가장 긴 이름을 판별하라.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	char str[100], max[100];
	int max_cnt = 0;

	for (int i = 0; i < 5; i++)
	{
		cin.getline(str, 100, ';');
		cout << i + 1 << " : " << str << "\n";

		if (strlen(str) > max_cnt)
		{
			strcpy(max, str);
			max_cnt = strlen(str);
		}
	}

	cout << "가장 긴 이름은 " << max << '\n';

	return 0;
}


9번

이름, 주소, 나이를 입력받아 다시 출력하는 프로그램을 작성하라. 실행 예시는 다음과 같다.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	string name;
	string address;
	int age;

	cout << "이름은?";
	getline(cin, name);

	cout << "주소는?";
	getline(cin, address);

	cout << "나이는?";
	cin >> age;

	cout << name << ", " << address << ", " << age;

	return 0;
}


10번

문자열을 하나 입력받고 문자열의 부분 문자열을 다음과 같이 출력하는 프로그램을 작성하라. 예시는 다음과 같다.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	char str[100];

	cout << "문자열 입력>>";
	cin >> str;

	for (int i = 0; i < strlen(str); i++)
	{
		for (int j = 0; j <= i; j++)
		{
			cout << str[j];
		}
		cout << '\n';
	}

	return 0;
}


11번

다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	int k, n = 0;
	int sum = 0;

	cout << "끝 수를 입력하세요>>";
	cin >> n;

	for (k = 1; k <= n; k++)
	{
		sum += k;
	}
	cout << "1에서 " << n << "까지의 합은 " << sum << " 입니다.\n";

	return 0;
}


12번

다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라. 이 프로그램의 실행 결과는 연습문제 11과 같다.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int sum(int a, int b);

int main() {
	int n = 0;
	cout << "끝 수를 입력하세요>>";
	cin >> n;
	cout << "1에서 " << n << "까지의 합은 " << sum(1, n) << " 입니다.\n";

	return 0;
}

int sum(int a, int b)
{
	int k, res = 0;
	for (k = a; k <= b; k++)
	{
		res += k;
	}
	return res;
}


13번

중식당의 주문 과정을 C++ 프로그램으로 작성해보자. 다음 실행 결과와 같이 메뉴와 사람 수를 입력받고 이를 출력하면 된다. 잘못된 입력을 가려내는 부분도 코드에 추가하라.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	int a, b;

	cout << "***** 승리장에 오신 것을 환영합니다. *****\n";

	while (true)
	{
		cout << "짬뽕:1, 짜장:2, 군만두:3, 종료:4>>";
		cin >> a;

		if (a < 0 || a > 4)
		{
			cout << "다시 주문하세요!!\n";
			continue;
		}
		if (a == 4)
		{
			cout << "오늘 영업은 끝났습니다.\n";
			break;
		}

		cout << "몇인분?";
		cin >> b;

		switch (a)
		{
		case 1:
			cout << "짬뽕 " << b << "인분 나왔습니다\n";
			break;
		case 2:
			cout << "짜장 " << b << "인분 나왔습니다\n";
			break;
		case 3:
			cout << "군만두 " << b << "인분 나왔습니다\n";
			break;
		default:
			break;
		}
	}

	return 0;
}


14번

커피를 주문하는 간단한 C++ 프로그램을 작성해보자. 커피 종류는 “에스프레소”, “아메리카노”, “카푸치노”의 3가지이며 가격은 각각 2000원, 2300원, 2500원이다. 하루에 20000원 이상 벌게 되면 카페를 닫는다. 실행 결과와 같이 작동하는 프로그램을 작성하라.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	char menu[100];
	int num, total=0;

	cout << "에스프레소 2000원, 아메리카노 2300원, 카푸치노 2500원입니다.\n";

	while (true)
	{
		cout << "주문>>";
		cin >> menu >> num;

		if (strcmp(menu, "에스프레소") == 0)
		{
			cout << 2000 * num << "원입니다. 맛있게 드세요\n";
			total += 2000 * num;
		}
		else if (strcmp(menu, "아메리카노") == 0)
		{
			cout << 2300 * num << "원입니다. 맛있게 드세요\n";
			total += 2300 * num;
		}
		else if (strcmp(menu, "카푸치노") == 0)
		{
			cout << 2500 * num << "원입니다. 맛있게 드세요\n";
			total += 2500 * num;
		}
		else { }

		if (total >= 20000)
		{
			cout << "오늘 " << total << "원을 판매하여 카페를 닫습니다. 내일 봐요~~~";
			break;
		}
	}

	return 0;
}


15번

덧셈, 뺄셈, 곱셈, 나눗셈, 나머지의 정수 5칙 연산을 할 수 있는 프로그램을 작성하라. 식은 다음과 같은 형식으로 입력된다. 정수와 연산자는 하나의 빈칸으로 분리된다.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	char op;
	int a, b, res;

	while (true)
	{
		cout << "? ";
		cin >> a >> op >> b;

		switch (op)
		{
		case '+':
			res = a + b;
			break;
		case '-':
			res = a - b;
			break;
		case '*':
			res = a * b;
			break;
		case '%':
			res = a % b;
			break;
		case '/':
			res = a / b;
			break;
		default:
			break;
		}

		cout << a << " " << op << " " << b << " = " << res << '\n';
	}

	return 0;
}


16번

영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 프로그램을 작성하라. 대문자는 모두 소문자로 집계하며, 텍스트 입력의 끝은 ‘;’ 문자로 한다.

소스 코드

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	char str[10000];
	int alphabet[26] = { 0 }, ind;

	cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다. 텍스트의 끝은 ;입니다. 10000개까지 가능합니다.\n";
	cin.getline(str, 10000, ';');
	cout << "총 알파벳 수 " << strlen(str) << '\n';

	for (int i = 0; i < strlen(str); i++)
	{
		if (str[i] >= 'A' && str[i] <= 'Z')
		{
			ind = (int)(str[i] - 'A');
			alphabet[ind]++;
		}
		else if (str[i] >= 'a' && str[i] <= 'z')
		{
			ind = (int)(str[i] - 'a');
			alphabet[ind]++;
		}
		else { }
	}

	for (int i = 0; i < 26; i++)
	{
		cout << (char)('a' + i) << " ("<<alphabet[i]<<")\t : ";
		for (int j = 0; j < alphabet[i]; j++)
		{
			cout << "*";
		}
		cout<<"\n";
	}
	return 0;
}



:bookmark: REFERENCE
명품 C++ Programming [개정판], 황기태