[C++] 명품C++ Programming 2장 : 실습문제

녹차·2024년 6월 20일
0

C++

목록 보기
3/11

Chapter2 문제 [14/14]

2-1

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

#include<iostream>

int main()
{
	int i = 1;

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

		std::cout << "\n";
	}
}

2-2

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

#include<iostream>

int main()
{
	for (int i = 1; i < 10; i++)
	{
		for (int j = 1; j < 10; j++)
		{
			std::cout << j << "x" << i << "=" << (i * j) << " ";
		}

		std::cout << "\n";
	}
}

2-3

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

#include<iostream>

int main()
{
	int a, b = 0;

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

	std::cin >> a;
	std::cin >> b;

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

2-4

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

5개의 실수를 입력하라>>5.2 -2.5 3.4 9.9 7.7
제일 큰 수 = 9.9
#include<iostream>

int main()
{
	//#선언 부
	float a[5]; //C Style Array
	float max = 0;

	std::cout << "5 개의 실수를 입력하라>>";

	//입력 부
	for (int i = 0; i < 5; i++)
	{
		std::cin >> a[i];
	}

	//#구현 부
	for (int i = 0; i < 5; i++)
	{
		if (a[i] >= max)
			max = a[i];
	}

	//#출력 부
	std::cout << "제일 큰 수 = " << max;
}

2-5

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

문자들을 입력하라(100개 미만)
...
x의 개수는 n
#include<iostream>

int main()
{
	//#선언 부
	char address[100];
	int x_number = 0;

	std::cout << "문자들을 입력하라(100개 미만)";

	//입력 부
		std::cin.getline(address, 100, '\n');

	//#구현 부
	for (int i = 0; i < 100; i++)
	{
		if (address[i] == 'x')
		{
			x_number += 1;
		}
	}

	//#출력 부
	std::cout << "x의 개수는 " << x_number;
}

2-6

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

새 암호를 입력하세요>>파랑새
새 암호를 다시 한번 입력하세요>>파랑새
같습니다.
#include<iostream>
#include<string>

int main()
{
	//#선언 부
	std::string a; 
	std::string b;

	//#구현 부
	std::cout << "새 암호를 입력하세요>>";

	std::cin >> a;

	"\n";

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

	std::cin >> b;

	//#출력 부
	if (a == b)
		std::cout << "같습니다";
	else
		std::cout << "같지 않습니다.";
}

2-7

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

종료하고싶으면 yes를 입력하세요>>OK
종료하고싶으면 yes를 입력하세요>>Yes Sir
종료하고싶으면 yes를 입력하세요>>yes
종료합니다...
#include<iostream>

int main()
{
	//#선언 부
	char a[100];

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

		if(strcmp(a, "yes") == 0)
		{
			std::cout << "종료합니다...";

			return 0;
		}
	}
}

2-8

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

5 명 이름을 ';'으로 구분하여 입력하세요
>>
1 : 
2 :
3 :
4 :
5 :
가장 긴 이름은 
#include<iostream>
#include<cstring>
using namespace std;

int main() {

    int A = 0;
    int i;
    char name[100];
    char longName[100];

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

    for (i = 1; i < 6; i++) {
        cin.getline(name, 100, ';');
        cout << i << " : " << name << endl;
        
        if (A < strlen(name)) {
            A = strlen(name);
            strcpy(longName, name);
        }
    }
    cout << "가장 긴 이름은 " << longName;

    return 0;
}

2-9

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

이름은? 황 기 태
주소는? 서울 시 안녕구 사랑동 해피아파트
나이? 21세
황 기 태, 서울시 안녕구 사랑동 해피아파트, 21세
#include<iostream>

using namespace std;

int main()
{
	char name[50];
	char address[50];
	int age;

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

	"\n";

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

	"\n";

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

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

2-10

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

문자열 입력>>hello
h
he
hel
hell
hello
#include<iostream>

int main()
{
	std::string a;

	std::cout << "문자열 입력>>";
	std::cin >> a;

	for (int i = 0; i < a.size(); i++)
	{
		std::cout << a[i] << "\n";

		for (int j = 0; j < i; j++)
		{
			std::cout << "출력";
		}
	}
}

2-11

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

끝 수를 입력하세요>>10
1에서 10까지의 합은 55입니다
#include<iostream>

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

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

	for (k = 1; k <= n; k++) {
		sum += k;
	}

	std::cout << "1에서 " << n << "까지의 합은" << sum;
	
	return 0;
}

2-12

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

#include<iostream>

int sum(int a, int b)
{
	int k, res = 0;

	for (k = a; k <= b; k++)
		res += k;

	return res;
}

int main()
{
	int n = 0;

	std::cout << "끝 수를 입력하세요>>";
	std::cin >> n;
	std::cout << "1에서 " << n << "까지의 합은 " << sum(1, n);
}

2-13

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

#include<iostream>

int main()
{
	int vlaue;
	int number;

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

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

		switch (number) 
		{
		case 1:
			std::cout << "몇인분?";
			std::cin >> vlaue;

			std::cout << "짬뽕 " << vlaue << "인분 나왔습니다.\n";
			break;

		case 2:
			std::cout << "몇인분?";
			std::cin >> vlaue;

			std::cout << "짜장면 " << vlaue << "인분 나왔습니다.\n";
			break;

		case 3:
			std::cout << "몇인분?";
			std::cin >> vlaue;
			std::cout << "군만두 " << vlaue << "인분 나왔습니다.\n";
			break;

		case 4:
			std::cout << "오늘 영업은 끝났습니다.";
			return 0;
			break;

		default:
			std::cout << "다시 주문하세요!!\n";
			break;
		}
	}
}

2-14

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

#include<iostream>

int main()
{
	std::string coffee;
	int number;

	int money = 0;

	while (money < 20000)
	{
		std::cout << "에소프레소 2000원, 아메리카노 2300원, 카푸치노 2500원입니다. \n주문>> ";
		std::cin >> coffee;
		std::cin >> number;

		if (coffee == "에소프레소")
		{
			money = 2000 * number;
			
			std::cout << 2000 * number << "입니다. 맛있게 드세요\n";
		}

		if (coffee == "아메리카노")
		{
			money = 2300 * number;

			std::cout << 2300 * number << "입니다. 맛있게 드세요\n";
		}

		if (coffee == "카푸치노")
		{
			money = 2500 * number;

			std::cout << 2500 * number << "입니다. 맛있게 드세요\n";
		}
	}

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

2-15

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

#include<iostream>

int main()
{
	int n1, n2;
	char symbol = NULL;

	while (true)
	{
		std::cout << "? ";
		std::cin >> n1;
		std::cin >> symbol;
		std::cin >> n2;

		switch (symbol)
		{
			case '+':
				std::cout << n1 <<  "+ " << n2 << " = " << n1 + n2 << std::endl;
				break;

			case '-':
				std::cout << n1 << " - " << n2 << " = " << n1 - n2 << std::endl;
				break;

			case '/':
				std::cout << n1 << " / " << n2 << " = " << n1 / n2 << std::endl;
				break;

			case '*':
				std::cout << n1 << " * " << n2 << " = " << n1* n2 << std::endl;
				break;

			case '%':
				std::cout << n1 << " % " << n2 << " = " << n1 % n2 << std::endl;
				break;
		}
	}


}

2-16

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

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

int main() {
    int tot = 0; // 총 알파벳 개수 
    int alpha[27] = { 0 }; // 각각의 알파벳을 나타냄
    char text[10000]; // text를 저장할 배열

    cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다.\n텍스트의 끝은 ; 입니다. 10000개까지 가능합니다.\n";
    cin.getline(text, 10000, ';'); // 최대 10,000개의 영문 텍스트를 ';'전까지 입력받는다

    for (int i = 0; i < strlen(text); i++) 
    { // text[0]부터 text의 끝까지
        if (isalpha(text[i])) 
        { // text[i]가 알파벳이면 참
            if (text[i] < 91) 
                text[i] = tolower(text[i]); // text[i]가 대문자이면 소문자로 변경
            
            tot++;
            alpha[text[i] - 97]++; // 각각의 알파벳이 몇개인지 카운트
        }
    }

    cout << "총 알파벳 수 " << tot << endl << endl;
    for (int i = 0; i < 26; ++i) 
    { // 알파벳의 소문자 총 개수는 26개 (a~z)
        cout << (char)(i + 'a') << "(" << alpha[i] << ")"; // a부터 z까지 출력 후 각 (알파벳의 개수) 출력
        cout << "\t:  "; // 포맷을 출력하기 위해 탭과 ":" 출력
        
        for (int j = 1; j <= alpha[i]; j++) // 각 알파벳의 개수만큼 "*" 출력 
            cout << "*";

        cout << endl;
    }
}

2-16의 경우 풀지 못하였다. 개인적으로 문제 자체가 좋은거 같진 않다.

profile
CK23 Game programmer

0개의 댓글