[11.1]
/*
int형 값 하나와 double형 값 하나를 입력받은 후 int 값은 10진수, 8진수, 16진수로 출력하고
double 값은 과학적 표기법과 부동소수점 표기법으로 출력해 본다
*/
#include <iostream>
using namespace std;
int main(void)
{
int i;
double d;
cout << "10진수 입력: ";
cin >> i;
cout << "10진수: " << i << endl;
cout.unsetf(ios_base::dec); //10진수 해제
cout.setf(ios_base::hex); //16진수 설정
cout << "16진수: " << i << endl;
cout.unsetf(ios_base::hex); //16진수 해제
cout.setf(ios_base::oct); //8진수 설정
cout << "8진수: " << i << endl;
cout << "실수 입력: ";
cin >> d;
cout.setf(ios_base::scientific, ios_base::floatfield); //과학적표기법
cout << "과학적 표기법: " << d << endl;
cout.setf(ios_base::fixed, ios_base::floatfield); //부동소수점 표기법
cout << "부동 소수점 표기법: " << d << endl;
return 0;
}
[11.2]
/*
다음 프로그램에서 5라인의 unsetf 함수를 추가했을 때와 추가하지 않았을 때의 실행 결과를 확인하고
skipws 플래그의 의미에 대해 설명해 본다.
6라인에서 입력을 받아들이고 있다. 여기서 입력은 "a b c"로 한다
*/
#include <iostream>
using namespace std;
int main(void)
{
char ch1, ch2, ch3;
//cin.unsetf(ios_base::skipws);
//5행을 주석처리해야 정상적인 출력값인 a b c가 출력이 된다.
//skipws(공백 무시)를 unsetf로 끄게 되면 공백도 하나의 데이터로 입력되어진다.
//따라서 a, 공백, b가 각각 ch1 ch2 ch3에 입력이 되는 것이다.
//즉, skipws를 설정해야지만 공백이 데이터로 간주되지 않아 a, b, c가 출력이 된다
cin >> ch1 >> ch2 >> ch3;
cout << ch1 << endl;
cout << ch2 << endl;
cout << ch3 << endl;
return 0;
}
[11.3]
/*
연습문제 1.2와 동일한 문제이다.
당시에는 printf와 scanf를 사용하였다.
이번에는 cin과 cout을 사용해서 프로그램을 작성해 본다.
2개의 int형 값(x, y)을 입력받고 x와 y 사이의 값들에 대한 제곱값과 나누기 3을 한 값을 각각
출력해 본다. 각 출력값들에 대해 적절한 크기의 필드를 지정하고 오른쪽 정렬로 출력하도록 한다.
나누기 3을 한 값의 결과는 실수로 처리될 수 있어야 하며, 소수점 이하 첫번째 자리까지만 출력하도록 한다.
*/
#include <iostream>
using namespace std;
int main(void)
{
int x, y;
int square;
double divide;
cout << "2개의 정수 입력: ";
cin >> x >> y;
for (int i = x; i <= y; i++)
{
square = i*i;
divide = i / 3.0;
cout.width(10);
cout.setf(ios_base::fixed, ios_base::floatfield); //부동소수점 표시
cout.precision(1); //소숫점 한자리
cout << i << "\t" << square << "\t" << divide << endl;
}
return 0;
}
[11.4]
/*
연습문제 11.3의 프로그램을 입출력 조작자를 사용하여 구현해 본다
*/
#include <iostream>
#include <iomanip>
using namespace std;
int main(void)
{
int x, y;
int square;
double divide;
cout << "2개의 정수 입력: ";
cin >> x >> y;
for (int i = x; i <= y; i++)
{
square = i*i;
divide = i / 3.0;
cout.setf(ios_base::fixed, ios_base::floatfield); //부동소수점 표시
cout.precision(1); //소숫점 한자리
cout << "\t"<< i << setw(3) << "\t"; //필드 설정
cout << square << setw(3) << "\t";
cout << divide << setw(3) << endl;
}
return 0;
}
[11.5]
/*
키보드로 입력받은 각 알파벳 대문자들의 개수를 세는 프로그램을 작성해 본다.
알파벳 대문자가 아니라면 skip해야 한다.
다음 실행화면을 참고한다.
*/
#include <iostream>
using namespace std;
int main(void)
{
char ch;
int alphabet[26] = { 0, };
while (cin.get(ch)) //문자를 입력받는다(CTRL+Z 전까지)
{
if (ch >= 65 && ch <= 90)
{
alphabet[ch - 65]++;
}
}
for (int i = 0; i < 26; i++)
{
char character = i + 65;
cout << character << ": "<< alphabet[i] << " ";
if (i!=0 && i % 10 == 0)
cout << endl;
}
cout << endl;
return 0;
}
[11.6]
/*
getline 함수를 사용하여 한 줄을 한꺼번에 입력받은 후 단어 단위로 한 줄씩 출력하는 프로그램을 작성한다
한 줄은 80자를 넘지 않는다고 가정한다. 다음 실행 결과를 참고한다
*/
#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
char str[80], result[80], space_flag = 0;
int idx = 0;
cout << "문자열 입력: ";
cin.getline(str, 80);
for (int i = 0; i < (int)strlen(str); i++)
{
if (space_flag == 0 && str[i] == ' '|| str[i] == '\t') //flag가 꺼져있고 공백이나 tab일 경우
{
result[idx++] = '\n';
space_flag = 1;
}
else if (space_flag == 1 && str[i] == ' ' || str[i] == '\t') //flag가 켜져있는 상태에서 공백이나 tab일 경우
{
continue;
}
else // 공백이나 tab이 아닐 경우
{
space_flag = 0;
result[idx++] = str[i];
}
}
result[idx] = 0; //끝 널문자
cout << result << endl; //출력
return 0;
}
[11.7]
/*
int형 변수로 정수값 하나를 읽어 들이려고 한다.
만약 숫자가 입력되지 않으면 숫자가 입력될 때까지 재입력을 요구하도록 한다.
숫자는 공백을 사이에 두고 나타난다고 가정한다
*/
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string str;
string result;
string token = " ";
bool check = false;
int At;
int index = 0;
while (!check)
{
cout << "숫자 입력: ";
fflush(stdin);
getline(cin, str);
while ((At = str.find_first_of(token)) != str.npos)
{
if (At > 0)
{
result = str.substr(0, At);
const char *temp = result.c_str();
if (atoi(temp))
{
check = true;
break;
}
str = str.substr(At + 1);
}
}
if (str.length() > 0)
{
result = str.substr(0, At);
const char *temp = result.c_str();
if (atoi(temp))
{
check = true;
break;
}
str = str.substr(At + 1);
}
}
cout << "입력값: " << result << endl;
return 0;
}
[11.8]
/*
사용하고 있는 컴파일러의 도움말(VC++의 경우 MSDN)을 참고하여 string 클래스의 replace
멤버 함수와 erase 멤버 함수에 대한 예제를 직접 만들고 테스트 해본다.
C언어도 마찬가지지만 프로그램을 작성하기 위해서는 MSDN의 도움이 절대적으로 필요하다
*/
#include <iostream>
#include <string>
using namespace std;
void Print(string &s1, string title)
{
cout << title << endl;
cout << "str1: " << s1 << endl;
}
int main(void)
{
string str1 = "Hello! Programming";
string str2 = "C++";
string str3;
Print(str1, "<< 적용 전 >>");
str3 = str1.replace(5, 1, "C"); //5번째 index에 있는 글자를 대체한다
Print(str3, "<< replace >>");
str1.erase(0, 7); //index 0부터 7까지의 글자를 지운다
Print(str1, "<< erase >>");
return 0;
}
[11.9]
/*
C++ 표준 라이브러리에서 제공하는 complex를 사용하지 않고 (예제 11.12)가 수행될 수 있도록 직접
CComplex라는 클래스를 만들어 보도록 한다.
실수부와 허수부는 double 값으로 가정하고 템플릿으로 만들 필요는 없다.
complex<double> 부분만 CComplex로 대체하면 바로 수행될 수 있도록 만들어본다
*/
#include <iostream>
using namespace std;
class CComplex
{
private:
double num1;
double num2;
public:
CComplex(double a, double b) :num1(a), num2(b)
{
}
CComplex operator+(CComplex copy)
{
return CComplex(num1 + copy.num1, num2 + copy.num2);
}
CComplex operator-(CComplex copy)
{
return CComplex(num1 - copy.num1, num2 - copy.num2);
}
CComplex operator*(CComplex copy)
{
return CComplex(num1*copy.num1-num2*copy.num2, num1*copy.num2+num2*copy.num1);
}
CComplex operator/(CComplex copy)
{
return CComplex((num1*copy.num1+num2*copy.num2)/(copy.num1*copy.num1+copy.num2*copy.num2), ((copy.num1*num2-num1*copy.num2)/(copy.num1*copy.num1+copy.num2*copy.num2)));
}
friend ostream &operator<<(ostream &out, CComplex Co);
};
ostream &operator<<(ostream &out, CComplex Co)
{
out << "(" << Co.num1 << ", " << Co.num2 << ")";
return out;
}
int main(void)
{
CComplex comp1(1.0, 2.0);
CComplex comp2(3.0, 4.0);
cout << "+: " << comp1 + comp2 << endl;
cout << "-: " << comp1 - comp2 << endl;
cout << "*: " << comp1*comp2 << endl;;
cout << "/: " << comp1 / comp2 << endl;
return 0;
}
개발 환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 기초를 탄탄히 세워주는 C++ 프로그래밍 입문 황준하 저
6번 문제
7번 문제
생소한 함수이다 보니 지식인을 참고 많이했습니다
'C++ > 기초를 탄탄히 세워주는 C++ 프로그래밍 입문(황준하 저)' 카테고리의 다른 글
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 13장 연습문제 (0) | 2017.07.14 |
---|---|
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 12장 연습문제 (3) | 2017.07.12 |
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 10장 연습문제 (0) | 2017.07.07 |
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 9장 연습문제 (0) | 2017.07.06 |
기초를 탄탄히 세워주는 C++ 프로그래밍 입문 8장 연습문제 (0) | 2017.07.04 |