C++/Accelerated C++

Accelerated C++ 2장 연습문제

꾸준함. 2019. 6. 23. 12:10

2-0. 이 장에서 살펴본 프로그램을 컴파일하고 실행해보세요.

#include <iostream>
#include <string>
// 표준 라이브러리에서 가져와서 사용할 이름을 언급
using std::cin;
using std::endl;
using std::cout;
using std::string;
int main(void)
{
// 사용자의 이름을 물음
cout << "Please enter your first name: ";
// 이름을 읽음
string name;
cin >> name;
// 출력하려는 메시지 구성
const string greeting = "Hello, " + name + "!";
// 인사말을 둘러싼 공백의 개수
const int pad = 1;
// 출력할 행과 열 개수
const int rows = pad * 2 + 3;
const string::size_type cols = greeting.size() + pad * 2 + 2;
// 입력 부분과 출력 부분을 구분하려고 한 행을 건너뜀
cout << endl;
// rows개 행을 출력합니다
// 불변성: 지금까지 r개 행을 출력
for (int r = 0; r != rows; r++)
{
string::size_type c = 0;
// 불변성: 현재 행에서 c개 문자를 출력
while (c != cols)
{
// 인사말 출력 여부를 판별
if (r == pad + 1 && c == pad + 1)
{
cout << greeting;
c += greeting.size();
}
else
{
// 테두리 출력 여부를 판별
if (r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
cout << "*";
else
cout << " ";
++c;
}
}
cout << endl;
}
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

2-1. 이 장에서 소개한 예제 프로그램을 인사말과 테두리를 따로 출력하지 않는 상태로 테두리로 둘러싸인 인사말을 출력하도록 바꿔보세요.

#include <iostream>
#include <string>
// 표준 라이브러리에서 가져와서 사용할 이름을 언급
using std::cin;
using std::endl;
using std::cout;
using std::string;
int main(void)
{
// 사용자의 이름을 물음
cout << "Please enter your first name: ";
// 이름을 읽음
string name;
cin >> name;
// 출력하려는 메시지 구성
const string greeting = "Hello, " + name + "!";
// 인사말을 둘러싼 공백의 개수
const int pad = 1;
// 출력할 행과 열 개수
const int rows = pad * 2 + 3;
const string::size_type cols = greeting.size() + pad * 2 + 2;
// 입력 부분과 출력 부분을 구분하려고 한 행을 건너뜀
cout << endl;
string result = ""; // 한 번에 출력할 문자열
// rows개 행을 출력합니다
// 불변성: 지금까지 r개 행을 출력
for (int r = 0; r != rows; r++)
{
string::size_type c = 0;
// 불변성: 현재 행에서 c개 문자를 출력
while (c != cols)
{
// 인사말 출력 여부를 판별
if (r == pad + 1 && c == pad + 1)
{
result += greeting;
c += greeting.size();
}
else
{
// 테두리 출력 여부를 판별
if (r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
result += "*";
else
result += " ";
++c;
}
}
result += "\n";
}
cout << result << endl;
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

2-2. 이 장에서 소개한 예제 프로그램에서 테두리로 둘러싸인 인사말을 출려할 때 상하 공백과 좌우 공백의 크기가 다르도록 바꿔보세요.

#include <iostream>
#include <string>
// 표준 라이브러리에서 가져와서 사용할 이름을 언급
using std::cin;
using std::endl;
using std::cout;
using std::string;
int main(void)
{
// 사용자의 이름을 물음
cout << "Please enter your first name: ";
// 이름을 읽음
string name;
cin >> name;
// 출력하려는 메시지 구성
const string greeting = "Hello, " + name + "!";
// 인사말을 둘러싼 공백의 개수
// 좌우 공백
const int xPad = 3;
// 상하 공백
const int yPad = 2;
// 출력할 행과 열 개수
const int rows = xPad * 2 + 3;
const string::size_type cols = greeting.size() + yPad * 2 + 2;
// 입력 부분과 출력 부분을 구분하려고 한 행을 건너뜀
cout << endl;
// rows개 행을 출력합니다
// 불변성: 지금까지 r개 행을 출력
for (int r = 0; r != rows; r++)
{
string::size_type c = 0;
// 불변성: 현재 행에서 c개 문자를 출력
while (c != cols)
{
// 인사말 출력 여부를 판별
if (r == xPad + 1 && c == yPad + 1)
{
cout << greeting;
c += greeting.size();
}
else
{
// 테두리 출력 여부를 판별
if (r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
cout << "*";
else
cout << " ";
++c;
}
}
cout << endl;
}
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

2-3. 이 장에서 소개한 예제 프로그램에서 테두리로 둘러싸인 인사말을 출력할 때 사용자가 테두리와 인사말 사이의 공백을 입력하도록 다시 만들어보세요.

#include <iostream>
#include <string>
// 표준 라이브러리에서 가져와서 사용할 이름을 언급
using std::cin;
using std::endl;
using std::cout;
using std::string;
int main(void)
{
// 사용자의 이름을 물음
cout << "Please enter your first name: ";
// 이름을 읽음
string name;
cin >> name;
// 출력하려는 메시지 구성
const string greeting = "Hello, " + name + "!";
int pad;
// 인사말을 둘러싼 공백의 개수
cout << "Please enter the pad size: ";
cin >> pad;
// 출력할 행과 열 개수
const int rows = pad * 2 + 3;
const string::size_type cols = greeting.size() + pad * 2 + 2;
// 입력 부분과 출력 부분을 구분하려고 한 행을 건너뜀
cout << endl;
// rows개 행을 출력합니다
// 불변성: 지금까지 r개 행을 출력
for (int r = 0; r != rows; r++)
{
string::size_type c = 0;
// 불변성: 현재 행에서 c개 문자를 출력
while (c != cols)
{
// 인사말 출력 여부를 판별
if (r == pad + 1 && c == pad + 1)
{
cout << greeting;
c += greeting.size();
}
else
{
// 테두리 출력 여부를 판별
if (r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
cout << "*";
else
cout << " ";
++c;
}
}
cout << endl;
}
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

2-4. 이 장에서 소개한 예제 프로그램은 테두리와 인사말을 구분하는 공백을 한 번에 하나씩 출력합니다. 단일 출력 표현식을 사용하여 필요한 모든 공백을 출력하도록 바꿔보세요.

#include <iostream>
#include <string>
// 표준 라이브러리에서 가져와서 사용할 이름을 언급
using std::cin;
using std::endl;
using std::cout;
using std::string;
int main(void)
{
// 사용자의 이름을 물음
cout << "Please enter your first name: ";
// 이름을 읽음
string name;
cin >> name;
// 출력하려는 메시지 구성
const string greeting = "Hello, " + name + "!";
// 인사말을 둘러싼 공백의 개수
const int pad = 1;
// 출력할 행과 열 개수
const int rows = pad * 2 + 3;
const string::size_type cols = greeting.size() + pad * 2 + 2;
// 단일 출력 표현식으로 공백
const string space = string(greeting.size() + pad * 2, ' ');
// 입력 부분과 출력 부분을 구분하려고 한 행을 건너뜀
cout << endl;
// rows개 행을 출력합니다
// 불변성: 지금까지 r개 행을 출력
for (int r = 0; r != rows; r++)
{
string::size_type c = 0;
// 불변성: 현재 행에서 c개 문자를 출력
while (c != cols)
{
// 인사말 출력 여부를 판별
if (r == pad + 1 && c == pad + 1)
{
cout << greeting;
c += greeting.size();
}
else
{
// 테두리 출력 여부를 판별
if (r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
{
cout << "*";
++c;
}
else if (r == pad + 1)
{
cout << " ";
++c;
}
else
{
cout << space;
c += space.size();
}
}
}
cout << endl;
}
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

2-5. '*' 문자로 정사각형, 직사각형, 삼각형의 형태를 출력해보세요.

 

#include <iostream>
#include <string>
// 표준 라이브러리에서 가져와서 사용할 이름을 언급
using std::cin;
using std::endl;
using std::cout;
using std::string;
int main(void)
{
int len;
cout << "한 변의 길이 입력: ";
cin >> len;
cout << "정사각형 출력" << endl;
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
cout << "*";
cout << endl;
}
cout << endl;
cout << "직사각형 출력" << endl;
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len; j++)
cout << "*";
cout << endl;
}
cout << endl;
cout << "삼각형 출력" << endl;
for (int i = 0; i < len; i++)
{
for (int j = 0; j <= i; j++)
cout << "*";
cout << endl;
}
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

 

2-7. 10에서 -5까지 카운트다운하는 프로그램을 작성해보세요.

#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
int num = 10;
for (int i = 0; i < 16; i++)
{
cout << num << endl;
num -= 1;
}
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

2-8. [1, 10) 범위에 있는 숫자들의 곱을 만드는 프로그램을 작성해보세요.

#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
int result = 1; // 곱하기이기 때문에 1로 초기화
for (int i = 1; i < 10; i++)
result *= i;
cout << result << endl;
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

2-9. 사용자가 입력한 2개의 숫자 중 어떤 것이 더 큰지 알려주는 프로그램을 작성해보세요.

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main(void)
{
int num1, num2;
cout << "첫 번째 숫자를 입력하세요: ";
cin >> num1;
cout << "두 번째 숫자를 입력하세요: ";
cin >> num2;
if (num1 > num2)
cout << num1 << "가 " << num2 << "보다 큽니다" << endl;
else if (num1 < num2)
cout << num2 << "가 " << num1 << "보다 큽니다" << endl;
else
cout << num1 << "과 " << num2 << "는 같은 숫자입니다" << endl;
return 0;
}
view raw .cpp hosted with ❤ by GitHub

 

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

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

Accelerated C++ 4장 연습문제  (5) 2019.10.08
Accelerated C++ 3장 연습문제  (0) 2019.10.07