명품 Cplusplus 프로그래밍 실습 문제
2-16
#include <iostream>
#include <cstring>
using namespace std;
int main() {
// countStack: 알파벳의 빈도수를 저장할 변수
// numCount: 입력받은 문자열에서 알파벳의 개수를 저장할 변수
// buf: 입력받은 문자열을 저장할 배열
int countStack = 0, numCount = 0;
char buf[10000];
// 사용자에게 입력을 요구하는 메시지 출력
cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다." << endl;
cout << "텍스트의 끝은 ; 입니다. 10000개까지 가능합니다." << endl;
// 입력 받은 문자열을 ';'을 기준으로 읽어들임
cin.getline(buf, 10000, ';');
// 입력 받은 문자열에서 알파벳의 개수를 계산함
for (int i = 0; i <= strlen(buf); i++)
{
// isalpha(): 문자가 알파벳인지 검사하는 함수
if (isalpha(buf[i]) != 0)
{
// tolower(): 문자를 소문자로 변환하는 함수
buf[i] = tolower(buf[i]);
numCount++;
}
}
// 총 알파벳 개수 출력
cout << "총 알파벳 수 " << numCount << endl;
// 알파벳 별로 빈도수를 계산하고, 히스토그램을 출력함
for (char i = 'a'; i <= 'z'; i++)
{
for (int j = 0; j <= strlen(buf); j++)
if (buf[j] == i)
countStack++;
// 해당 알파벳과 빈도수 출력
cout << i << "(" << countStack << ")" << " : ";
// 빈도수에 맞게 '*'을 출력함
for (int k = 0; k < countStack; k++)
cout << "*";
cout << endl;
// countStack 초기화
countStack = 0;
}
}
3-9
#include <iostream>
using namespace std;
class Oval{
public:
int width, height;
Oval();
//너비와 높이의 값을 매개변수로 받는 생성자
Oval(int w,int h);
~Oval();
double getWidth();
double getHeight();
void set(int w, int h);
void show();
};
// 매개변수 없는 생성자
Oval::Oval(){
width =1;
height =1;
}
Oval::Oval(int w, int h){
width = w;
height =h;
}
// 소멸자
Oval::~Oval(){
cout << "소멸자 :";
show();
}
double Oval::getWidth(){
return width;
}
double Oval::getHeight(){
return height;
}
void Oval::set(int w, int h){
width =w; height =h;
}
void Oval::show(){
cout <<"widht = "<< width << ", height= " << height <<endl;
}
int main(){
Oval a,b(3,4);
a.set(10,20);
a.show();
cout << b.getWidth() << "," << b.getHeight() << endl;
}
3-10
(1)
#include <iostream>
#include <string>
using namespace std;
int a,b;
int n1,n2;
class Add{
public:
void setValue(int x, int y){
a = x;
b = y;
}
int calculate(){
return a+b;
}
};
class Sub{
public:
void setValue(int x, int y){
a =x ;
b =y;
}
int calculate(){
return a-b;
}
};
class Mul{
public:
void setValue(int x, int y ){
a =x ;
a =y ;
}
int calculate(){
return a*b;
}
};
class Div{
public:
void setValue(int x, int y){
a =x;
b =y;
}
int calculate(){
return a/b;
}
};
int main(){
Add a;
Sub s;
Mul m;
Div d;
// 프로그램은 무한루프를 돌아야함.
while (true){
cout << "두 정수와 연산자를 입력하세요>>\n";
// 산술연산의 부호를 index로 받을예정임.
char index;
cin >> n1 >> n2 >> index;
switch (index){
case '+':
// 각 경우마다 클래스를 세팅해줘야함. (경우의 수 마다 각각 )
a.setValue(n1,n2);
cout << a.calculate() << endl;
break;
case '-':
s.setValue(n1,n2);
cout << s.calculate()<< endl;
case '*':
m.setValue(n1,n2);
cout << m.calculate() <<endl;
case '/':
d.setValue(n1,n2);
cout << d.calculate() <<endl;
default:
break;
}
}
return 0;
}
// 2번 풀이
#include <iostream>
#include <string>
using namespace std;
int a,b;
int n1,n2;
class Add{
public:
void setValue(int x, int y){
a = x;
b = y;
}
int calculate(){
return a+b;
}
};
class Sub{
public:
void setValue(int x, int y){
a =x ;
b =y;
}
int calculate(){
return a-b;
}
};
class Mul{
public:
void setValue(int x, int y ){
a =x ;
b =y ;
}
int calculate(){
return a*b;
}
};
class Div{
public:
void setValue(int x, int y){
a =x;
b =y;
}
int calculate(){
return a/b;
}
};
int main(){
Add a;
Sub s;
Mul m;
Div d;
// 프로그램은 무한루프를 돌아야함.
while (true){
cout << "두 정수와 연산자를 입력하세요>>\n";
// 산술연산의 부호를 index로 받을예정임.
char index;
cin >> n1 >> n2 >> index;
if (index =='+'){
a.setValue(n1,n2);
cout << a.calculate()<< endl;
}else if (index =='-'){
s.setValue (n1,n2);
cout << s.calculate() << endl;
}else if(index=='*'){
m.setValue(n1,n2);
cout << m.calculate() << endl;
}else if(index == '/'){
d.setValue(n1,n2);
cout << d.calculate() << endl;
}else continue;
}
return 0;
}
(2)
//Add.h
#ifndef ADD_H
#define ADD_H
class Add {
int a;
int b;
public:
void setValue(int x, int y);
int calculate();
};
#endif
//Add.cpp
#include "Add.h"
void Add::setValue(int x, int y) {
a = x;
b = y;
}
int Add::calculate() {
return a + b;
}
//Sub.h
#ifndef SUB_H
#define SUB_H
class Sub {
int a;
int b;
public:
void setValue(int x, int y);
int calculate();
};
#endif
//Sub.cpp
#include "Sub.h"
void Sub::setValue(int x, int y) {
a = x;
b = y;
}
int Sub::calculate() {
return a - b;
}
//Mul.h
#ifndef MUL_H
#define MUL_H
class Mul {
int a;
int b;
public:
void setValue(int x, int y);
int calculate();
};
#endif
//Mul.cpp
#include "Mul.h"
void Mul::setValue(int x, int y) {
a = x;
b = y;
}
int Mul::calculate() {
return a * b;
}
//Div.h
#ifndef DEV_H
#define DEV_H
class Div {
int a;
int b;
public:
void setValue(int x, int y);
int calculate();
};
#endif
//Div.cpp
#include "Div.h"
void Div::setValue(int x, int y) {
a = x;
b = y;
}
int Div::calculate() {
return a / b;
}
//main.cpp
#include <iostream>
using namespace std;
#include "Add.h"
#include "Sub.h"
#include "Mul.h"
#include "Div.h"
int main(void) {
Add a;
Sub s;
Mul m;
Div d;
int num1, num2;
char oper;
while (true) {
cout << "두 정수와 연산자를 입력하세요>>";
cin >> num1 >> num2 >> oper;
switch (oper) {
case '+':
a.setValue(num1, num2);
cout << a.calculate() << endl;
break;
case '-':
s.setValue(num1, num2);
cout << s.calculate() << endl;
break;
case '*':
m.setValue(num1, num2);
cout << m.calculate() << endl;
break;
case '/':
d.setValue(num1, num2);
cout << d.calculate() << endl;
break;
}
}
return 0;
}
4-9
#include <iostream>
using namespace std;
// Person 클래스 정의
class Person{
// name과 tel 필드를 private 으로 선언
string name;
string tel;
public:
// 생성자 정의
Person();
// 이름 getter
string getName(){
return name;
}
// 전화번호 getter
string getTel(){
return tel;
}
// 이름과 전화번호 setter
void set(string name, string tel);
};
// 생성자 정의
Person::Person(){
}
// 이름과 전화번호 setter
void Person::set(string name, string tel){
this -> name = name;
this -> tel = tel;
}
// 메인 함수 시작
int main(){
string name, tel;
// Person 객체 배열 생성
Person personArray[3];
// 이름과 전화번호 입력 요청
cout << "이름과 전화 번호를 입력해 주세요\n";
// 3명의 이름과 전화번호를 입력 받음
for (int i = 0; i < 3; i++)
{
cout << "사람" << i +1 << ">>";
cin >> name >> tel;
// Person 객체의 이름과 전화번호를 설정함
personArray[i].set(name,tel);
}
// 모든 사람의 이름 출력
cout << "모든 사람의 이름은";
for (int i = 0; i < 3; i++)
{
cout << personArray[i].getName()<< ' ';
}
cout << endl;
// 전화번호 검색을 위해 이름을 입력 받음
cout << "전화번호 검색합니다. 이름을 입력하세요 >>";
cin >> name;
// 이름을 검색하고, 해당하는 전화번호 출력
for (int i = 0; i < 3; i++)
{
if (name.compare(personArray[i].getName())==0){
cout << "전화 번호는" << personArray[i].getTel()<<endl;
break;
}
}
return 0;
}