멋쟁이 개발자의 블로그

명품 C++ 프로그래밍 :: 2장 실습 문제 본문

Language/C++

명품 C++ 프로그래밍 :: 2장 실습 문제

y_MIN 2020. 10. 12. 21:23

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

#include <iostream>
using namespace std;

int main(void) {
	for (int i = 0;i <=9;i++) {
		for (int j = 1;j <= 10;j++) {
			cout << j+(10*i) << "\t";
		}
		cout << "\n";
	}
	return 0;
}

 


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

#include <iostream>
using namespace std;

int main(void) {
	for (int i = 1;i <= 9;i++) {
		for (int j = 1;j <= 9;j++) {
			cout << j << "x" << i << "=" << i * j <<"\t";
		}cout << "\n";
	}
	return 0;
}

 


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

#include <iostream>
using namespace std;

int main(void) {
	int a, b;

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

	cout << "큰 수 = ";
	if (a > b) {
		cout << a << endl;
	}
	else cout << b << endl;

	return 0;
}

 


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

#include <iostream>
using namespace std;

int main(void) {
	double a[5], max = 0;

	cout << "5개의 실수를 입력하라 >> ";
	for (int i = 0;i < 5;i++) {
		cin >> a[i];
	}
	for (int i = 0;i < 5;i++) {
		if (a[i] > max) {
			max = a[i];
		}
	}
	cout << "제일 큰 수 = " << max << endl;

	return 0;
}

 


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

#include <iostream>
using namespace std;

int main(void) {
	char a[100];
	int count = 0;
	int i = 0;

	cout << "문자들을 입력하라(100개 미만)." << endl;
	cin.getline(a, 100);

	while (a[i] != 0) {
		if (a[i] == 'x')
			count++;
		i++;
	}

	cout << "x의 개수는 " << count << endl;

	return 0;
}

 


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

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

int main(void) {
	char key[100], check[100];

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

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

	if (strcmp(key, check) == 0)
		cout << "같습니다" << endl;
	else cout << "같지 않습니다" << endl;

	return 0;
}

 


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

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

int main(void) {
	char answer[100];

	while (1){
		cout << "종료하고싶으면 yes를 입력하세요 >> ";
		cin.getline(answer, 100);
		if (strcmp(answer, "yes") == 0) {
			cout << "종료합니다..." << endl;
			break;
		}
	}
	return 0;
}

 


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

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

int main(void) {
	char name[5][100];
	int cmp = 0, index;

	cout << "5명의 이름을 ';'으로 구분하여 입력하세요" << endl;
	for (int i = 0;i < 5;i++) {
		cin.getline(name[i], 100, ';');
	}
	for (int i = 0;i < 5;i++) {
		cout << i + 1 << " : " << name[i] << endl;
		if (strlen(name[i]) > cmp) {
			cmp = strlen(name[i]);
			index = i;
		}
	}
	cout << "가장 긴 이름은 " << name[index] << endl;

	return 0;
}

 


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

#include <iostream>
using namespace std;

int main(void) {
	char name[50], address[100];
	int age;
	
	cout << "이름은? ";
	cin.getline(name, 50);
	cout << "주소는? ";
	cin.getline(address, 100);
	cout << "나이는? ";
	cin >> age;

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

	return 0;
}

 


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

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

int main(void) {
	char str[100];
	cout << "문자열 입력 >> ";
	cin.getline(str, 100);

	for (int i = 0;i < strlen(str);i++) {
		for (int j = 0;j < i+1 ;j++) {
			cout << str[j];
		}
		cout << endl;
	}
	return 0;
}

 


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

#include <iostream>
using namespace std;

int main(void) {
	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++ 프로그램으로 수정하여 실행하라. 이 프로그램의 실행 결과는 연습문제 11과 같다.

#include <iostream>
using namespace std;
int sum(int a, int b);

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

	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>
using namespace std;

int main(void) {
	int menu, people;

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

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

		if (menu == 1) {
			cout << "몇인분? ";
			cin >> people;
			cout << "짬뽕 " << people << "인분 나왔습니다." << endl;
		}
		else if (menu == 2) {
			cout << "몇인분? ";
			cin >> people;
			cout << "짜장" << people << "인분 나왔습니다." << endl;
		}
		else if (menu == 3) {
			cout << "몇인분? ";
			cin >> people;
			cout << "군만두" << people << "인분 나왔습니다." << endl;
		}
		else if (menu == 4) { cout << "오늘 영업은 끝났습니다." << endl; break; }
		else cout << "다시 주문하세요!!" << endl;
	}
	return 0;
}

 


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

#include <iostream>
using namespace std;

int main(void) {
	char coffee[100];
	int num, cost = 0, close = 0;

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

	while (close < 20000) {
		cout << "주문>> ";
		cin >> coffee >> num;

		if (strcmp(coffee, "에스프레소") == 0) {
			cost = 2000 * num;
			cout << cost << "원입니다. 맛있게 드세요" << endl;
		}
		else if (strcmp(coffee, "아메리카노") == 0) {
			cost = 2300 * num;
			cout << cost << "원입니다. 맛있게 드세요" << endl;
		}
		else if (strcmp(coffee, "카푸치노") == 0) {
			cost = 2500 * num;
			cout << cost << "원입니다. 맛있게 드세요" << endl;
		}
		close += cost;
	}
	cout << "오늘 " << close << "원을 판매하여 카페를 닫습니다. 내일 봐요~~~" << endl;

	return 0;
}

 


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

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

int main(void) {
	int x, y;
	char* op;
	
	while (1) {
		cout << "? ";
		char s[50];
		cin.getline(s, 50);

		x = atoi(strtok(s, " "));
		op = strtok(NULL, " ");
		y = atoi(strtok(NULL, " "));

		if (*op == '+') cout << x << " + " << y << " = " << x + y << endl;
		if (*op == '-') cout << x << " - " << y << " = " << x - y << endl;
		if (*op == '*') cout << x << " * " << y << " = " << x * y << endl;
		if (*op == '/') cout << x << " / " << y << " = " << x / y << endl;
		if (*op == '%') cout << x << " % " << y << " = " << x % y << endl;
	}

	return 0;
}

 


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

#include <iostream>
using namespace std;

int main(void) {
	char s[10000];
	int count = 0;

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

	for (int i = 0;i < 10000;i++) {
		if (isalpha(static_cast<unsigned char>(s[i]))) {
			s[i] = tolower(s[i]);
			count++;
		}
	} cout << "총 알파벳 수 " << count << endl << endl;

	for (char c = 'a';c <= 'z';c++) {
		count = 0;
		for (int i = 0;i < 10000;i++)
			if(s[i] == c) count++;
		cout << c << " (" << count << ")	: ";
		for (int i = 0;i < count;i++) cout << "*";
		cout << endl;
	}

	return 0;
}

'Language > C++' 카테고리의 다른 글

[C++] 함수 중복과 static 멤버  (0) 2020.10.23
명품 C++ 프로그래밍 :: 1장 실습 문제  (0) 2020.10.12
[C++ 기초] cout, cin, endl, string  (0) 2020.07.15