상세 컨텐츠

본문 제목

[객체지향언어1] 명품 C++ Programming 2장 실습 문제

C++/문제 풀이

by uzichoi 2025. 4. 6. 15:07

본문

[C++] 명품 C++ Programming 2장 연습, 실습 문제풀이

 
1. cout과 << 연산자를 이용하여, 1에서 100까지 정수를 다음과 같이 한 줄에 10개씩 출력하라. 각 정수는챕으로 분리하여 출력하라.  
<실행화면>

<소스코드>

#include <iostream>
using namespace std;

int main() {
	int i;
	for (i = 1; i <= 100; i++) {
		cout << i << '\t';
		if (i % 10 == 0)
			cout << '\n';
	}

	return 0;
}

 

 

2. cout과 << 연산자를 이용하여 다음과 같이 구구단을 출력하는 프로그램을 작성하라.
<실행화면>

<소스코드>

#include <iostream>
using namespace std;

int main() {
	int i, j;
	for (i = 1; i <= 9; i++) {
		for (j = 1; j <= 9; j++)
			cout << j << "x" << i << "=" << i * j << '\t';
		cout << endl;
	}

	return 0;
}

 

 

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

<소스코드>

#include <iostream>
using namespace std;

int main() {
	int a, b;
	cout << "두 수를 입력하라>>";
	cin >> a >> b;
	cout << "큰 수 = " << (a > b ? a : b);


	return 0;
}

 

 

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

<소스코드>

#include <iostream>
using namespace std;

int main() {
	double arr[5], max;
	int i;

	cout << "5 개의 실수를 입력하라>>";
	cin >> arr[0] >> arr[1] >> arr[2] >> arr[3] >> arr[4];

	max = arr[0];
	for (i = 1; i <= 4; i++) {
		if (max < arr[i])
			max = arr[i];
	}
	cout << "제일 큰 수 = " << max;

	return 0;
}

 

 

5. <enter> 키가 입력될 때까지 문자들을 읽고, 입력된 문자 'x'의 개수를 화면에 출력하라.
<실행화면>

<소스코드>

#include <iostream>
#include <cstring>
using namespace std;

int main() {

	char text[100];
	int countX = 0;
	int len, i;

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

	for (i = 0; i < len; i++) {
		if (text[i] == 'x')		//문자 단위(한 글자씩) 비교이므로 if 사용
			countX++;
	}
	
	cout << "x의 개수는 " << countX << endl;

	return 0;
}

 

 

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

<소스코드>

#include <iostream>
using namespace std;

int main() {
	string pass1, pass2;
	cout << "새 암호를 입력하세요>>";
	cin >> pass1;
	cout << "새 암호를 다시 한 번 입력하세요>>";
	cin >> pass2;
	(pass1 == pass2) ? cout << "같습니다" << endl : cout << "같지 않습니다" << endl;

	return 0;
}

 

 

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

<소스코드>

#include <iostream>
#include <cstring>
using namespace std;

int main() {

	char str[100];
	do {
		cout << "종료하고싶으면 yes를 입력하세요>>";
		cin.getline(str, 100);
	} while (strcmp(str, "yes") != 0);	//str=="yes" 이면 탈출
	cout << "종료합니다..." << endl;

	return 0;
}
cin.getline(str, 100, '\n')과 getline(cin, str)의 차이
cin.getline() getline()
C 스타일 문자 배열 C++ 스트링 객체
 strcmp()로 '주소' 비교해야 함 if로 직접 비교 가능
<cstring> 헤더에 위치 <string> 헤더에 위치
'\n' (default)이 입력되거나 버퍼가 끝날 때까지 한 글자씩 읽어 배열에 저장 "공백 입력 가능" 크기 제한 없으며 객체에 자동 할당 "공백 입력 가능"

 

 

8. 한 라인에 ';'으로 5개의 이름을 구분하여 입력받아, 각 이름을 끊어내어 화면에  
<실행화면>

<소스코드>

#include <iostream>
#include <cstring>
using namespace std;

int main() {
	char name[100];
	string longest;
	int i, max = 0, len = 0;

	cout << "5 명의 이름을 ';'으로 구분하여 입력하세요" << endl << ">>";

	for (i = 1; i <= 5; i++) {
		cin.getline(name, 100, ';');

		cout << i << " : " << name << endl;
		if (max < strlen(name)) {
			max = strlen(name);
			longest = name;
		}
	}
	cout << "가장 긴 이름은 " << longest << endl;

	return 0;
}

 

 

9. 이름, 주소, 나이를 입력받아 다시 출력하는 프로그램을 작성하라.
<실행화면>

<소스코드>

#include <iostream>
#include <string>
using namespace std;

int main() {
	string name, add, age;
	cout << "이름은?";
	getline(cin, name, '\n');
	cout << "주소는?";
	getline(cin, add, '\n');
	cout << "나이는?";
	getline(cin, age, '\n');
	
	cout << name << ", " << add << ", " << age <<"세" << endl;

	return 0;
}

 

 

10. 문자열을 하나 입력받고 문자열의 부분 문자열을 다음과 같이 출력하는 프로그램을 작성하라.
<실행화면>

<소스코드>

#include <iostream>
#include <string>
using namespace std;

int main() {
	string str;
	int len;
	cout << "문자열 입력>>";
	cin >> str;
	len = str.length();
	for (int i = 0; i < len; i++) {
		for (int j = 0; j <= i; j++) {
			cout << str[j];
		}
		cout << endl;
	}

	return 0;
}

 

 

11. 다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라.
<실행화면>

<소스코드>

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

int main() {
	int k, n = 0, sum = 0;
	cout << "끝 수를 입력하세요>>";
	cin >> n;
	for (k = 1; k <= n; k++) 
		sum += k;
	cout << "1부터 " << n << "까지의 합은 " << sum <<  "입니다." << endl;

	return 0;
}

 

 

12. 다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라.
<실행화면>

<소스코드>

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

int sum(int a, int b);

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

	return 0;
}

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

 

 

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

<소스코드>

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

int main() {
	int menu=0, howMany=0;
	cout << "***** 승리장에 오신 것을 환영합니다. *****" << endl;
	while (true) {
		cout << "짬뽕:1, 짜장:2, 군만두:3, 종료:4>> ";
		cin >> menu;
		if (menu == 4) {
			cout << "오늘 영업은 끝났습니다." << endl;
			break;
		}
		else if (menu < 1 || menu>4) {
			cout << "다시 주문하세요!!" << endl;
			continue;
		}
		cout << "몇인분?";
		cin >> howMany;
		switch (menu)
		{
		case 1:
			cout << "짜장 ";
			break;
		case 2:
			cout << "짬뽕 ";
			break;
		case 3:
			cout << "군만두 ";
			break;
		}
		cout << howMany << "인분 나왔습니다" << endl;
	}
	return 0;
}

 

 

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

<실행화면>

<소스코드>

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
//#include <string>
using namespace std;

int main() {
	string coffee;
	int num, price, sum = 0;

	cout << "에스프레소 2000원, 아메리카노 2300원, 카푸치노 2500원입니다." << endl;
	
	while (sum < 20000) {
		price = 0;
		cout << "주문>> ";
		cin >> coffee >> num;

		if (num <= 1) {
			cout << "수량은 1개 이상이어야 합니다." << endl;	//예외 처리(수량)
			continue;
		}

		if (coffee == "에스프레소")
			price = 2000 * num;
		else if (coffee == "아메리카노")
			price = 2300 * num;
		else if (coffee == "카푸치노")
			price = 2500 * num;
		else {
			cout << "없는 메뉴입니다. 다시 입력해 주세요" << endl;
			continue;
		}
		cout << price << "원입니다. 맛있게 드세요" << endl;
		sum += price;
	}

	cout << "오늘 " << sum << "원을 판매하여 카페를 닫습니다. 내일 봐요~~~" << endl;

	return 0;
}

 

 

15. 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)의 정수 5칙 연산을 할 수 있는 프로그램을 작성하라. 식은 다음과 같은 형식으로 입력된다. 정수와 연산자는 하나의 빈칸으로 분리된다.
<실행화면>

<소스코드>

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;

int main() {
	char f[100];
	int a, b;
	char* op;
	int result = 0;

	while (true) {
		cout << "? ";
		cin.getline(f, 100, '\n');
		cout << f << " = ";
		
		a = atoi(strtok(f, " "));
		op = strtok(NULL, " ");
		b = atoi(strtok(NULL, " "));

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

		cout << result << endl;
	}

	return 0;
}
  • atoi(): char * → int 형변환 함수
  • char* strrok(char* str, const char* delimiters); → strtok() 함수는 구분자를 찾아 구분자 자리를 NULL 문자로 변환한다(이는 원본이 변경된다는 의미로도 해석 가능하다). 분리된 문자열의 끝('\0')이 어디인지를 알려 주어야 하기 때문이며, 분리된 문자열의 첫 번째 주소를 리턴하게 된다. 따라서 strtok()를 반복 사용하기 위해서는 두 번째 사용부터 분리하고자 하는 기준 문자열 매개변수를 NULL로 주어야 정상 작동한다.

 

 

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

<소스코드>

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;

int main() {
	int alpha[26] = { 0 };
	char text[10000];
	int i, j, len, count = 0;
	char ch; 

	cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다" << endl;
	cout << "텍스트의 끝은 ; 입니다. 10000개까지 가능합니다." << endl;

	cin.getline(text, 10000, ';');
	len = strlen(text);

	for (i = 0; i < len; i++) {	
		if (isalpha(text[i])) {		//영문자일 경우에만
			ch = tolower(text[i]);	//소문자로 변환
			alpha[ch - 'a']++;		//'a': 97
			count++;				//총 알파벳 수 카운트
		}
	}

	cout << "총 알파벳 수 " << count << endl << endl;

	//출력
	for (i = 0; i < 26; i++) {
		cout << (char)(i + 97) << " (" << alpha[i] << ")\t:";
		for (j = 0; j < alpha[i]; j ++) {
			cout << '*';
		}
		cout << endl;
	}

	return 0;
}

 

관련글 더보기