클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

데이터 처리 3 : 단원 연습문제 풀기 본문

프로그래밍 언어/C++

데이터 처리 3 : 단원 연습문제 풀기

huenuri 2024. 8. 25. 11:14

3장의 연습문제를 풀어볼 시간이 되었다. 얼마나 잘 학습했는지 테스트도 하며 문제를 풀어보자!

문제를 푸는 것보다 문제의 본문을 쓰는 것이 더 귀찮기는 하다. 그래도 제대로 공부하려면 이런 것도 시간을 투자하며 감수해야 한다.

이번에 블로그에 학습일지를 남기면서 내가 얼마나 한글도 영문도 타자가 오타가 많은지 알게 되었다. 조만간 타자연습도 시작해야 할 것 같다~


 

 

연습문제 풀기

 

1. C++은 왜 여러 개의 정수형을 제공하는가?

서로 다른 크기의 메모리를 사용해야 불필요한 공간을 절약할 수 있다.

메모리를 절약할 수 있고 충분한 저장 용량이 확보된다. 또한 특정 데이터형을 사용하면 계산 속도가 한층 빨라질 수 있다.

 

2. 다음 서술과 일치하는 변수들을 선언하라.

  1. 값이 80인 short형 정수
  2. 값이 42,110인 unsigned int형 정수
  3. 값이 3,000,000,000인 정수
short num1 = 80;
unsigned int num2 = 42110;
int num2 = 3000000000;
  • 정수라고 해서 int로 선언했는데 이 수는 long long 형의 크기라고 한다. 해당 수가 어떤 범위에 들어가는지 알기 위해서 어디까지 포함되는지 어느 정도 암기하고 있어야 할 것 같다.
  • 코딩테스트에서도 이런 문제가 나오면 자주 틀리곤 했었다.
 

3. 정수형의 한계를 벗어나지 않도록 C++가 제공하는 안전장치는 무엇인가?

한계를 벗어난다는 말이 무슨 말인지 잘 감이 잡히지 않는다. 여러 가지의 자료형을 제공하는 것일까?

  • C++은 사용자를 보호하는 안전 장치를 제공하지 않는다. 정수값의 한계가 얼마인지 알려면 climits 헤더 파일을 살펴봐야 한다.

4. 33L과 33의 차이는 무엇인가?

33L은 long형이고, 33은 int형 상수이다.

 

 

5. 다음 두 구문은 같은 것인가?

char grade = 65;
char grade = 'A';

 

서로 같은 구문이다. 65를 정수와 문자로 표현한 것이다.

  • 서로 같지 않다고 한다. 첫번째 문장은 아스키 코드를 사용하는 시스템에서만 grade에 A라는 문자를 저장한다. 두번째 문장은 어떠한 시스템에서도 grade에 A라는 문자를 저장할 수 있다.
  • 65는 int형 상수이고, 'A'는 char형 상수이다.
 

6. 코드 88에 해당하는 문자를 C++에게 어떻게 알려줄 수 있는가? 최소한 두 가지 방법으로 보여라.

char c = 88;
char ch = 'X';

 

이 문제는 정답과 완전히 빗겨갔다. 이 수를 출력하라는 말이었는데 난 88을 나타내기만 하면 되는 줄 알았다. 한국말이 참 어려운 것 같다.

char c = 88;
cout << c << endl;		// cout은 char형을 문자로 출력한다
cout.put(char(88));		// put()은 char형을 문자로 출력한다
cout << char(88) << endl;	// char형으로 데이터 변환

 

이렇게 데에터를 출력하는 방법은 3가지가 있다.

 
 

7. long형 값을 float형에 대입하면 우수리 버림에러가 발생할 수 있다. long형 값을 double형에 대입하면 어떤 일이 발생할까? 또는 long long형 값을 double에 대입하면 어떤 일이 발생할까?

소수점이 날라가고 버려진다.

  • 답은 두 데이터형이 얼마나 크냐에 달려있다. long형이 4바이트면 데이터 손실이 일어나지 않는다. 4바이트는 10자리 수까지 저장할 수 있다. double형은 유효 숫자를 13자리까지 허용하므로 long형을 double형에 대입할 때 우수리 버림이 일어나지 않는다.
  • 반면 long long형은 19자리수까지 도달할 수 있어 double에게 보증된 13자리 범위를 초과한다.
 

8. 다음과 같은 수식의 값을 C++ 방식으로 계산하라.

a. 8 * 9 + 2
b. 6 * 3 / 4
c. 3 / 4 * 6
d. 6.0 * 3 / 4
e. 15 % 4

a. 72 + 2 = 74
b. 6 3 = 18, 18 / 4 = 4
c. 3 / 4 = 0, 0 6 = 0
d. 6.0 * 3 = 18.0, 18.0 / 4 = 4.5
e. 15 % 4 = 3

#include <iostream>

int main()
{
	using namespace std;
	cout << 8 * 9 + 2 << endl;
	cout << 6 * 3 / 4 << endl;
	cout << 3 / 4 * 6 << endl;
	cout << 6.0 * 3 / 4 << endl;
	cout << 15 % 4 << endl;
}

 

9. x1과 x2는 두 개의 double형 변수이다. 이 변수들을 정수로써 서로 더하여 정수형 변수에 대입하려 한다. 적절한 C++ 구문을 작성하라.

double x1;
double x2;
int a = (int)x1 + (int)x2;

 

난 이렇게 썼는데 실제 답은 조금 달랐다.

	double x1;
	double x2;
	int pos = (int)x1 + (int)x2;
	int pos = int(x1) + int(x2);
	
	int pos = (int)(x1 + x2);
	int pos = int(x1 + x2);

 

둘 중의 하나를 사용하면 되는데 아래 문장은 int를 double로 전환하는 것이다.



 

학습을 마치고

 

마지막 문제는 auto에 관한 건데 지금 굳이 공부하지 않아도 될 것 같아 건너뛰었다.
9문제를 푸는데 1시간 반은 걸린 것 같다. 그래도 무척 뿌듯하고 기쁘다. 이제 C++이 무엇인지 조금은 알 것 같다.

내가 작성한 모든 코드들이 색깔이 지정되지 않고 모두 검은색으로 표기되어 이걸 어떻게 고쳐야 하는지 찾아보고 수정하느라 시간이 많이 소모되었다. 그래도 방법을 찾았다!