본문 바로가기

Programming/C++ 2

[C++ 연습문제] 4장. 복합데이터형 (1)

반응형

1. 데이터 객체의 선언

 

a. 30개의 char형 원소를 가진 배열 actors

b. 100개의 short형 원소를 가진 배열 betsie

c. 13개의 float형 원소를 가진 배열 chuck

d. 64개의 long double형 원소를 가진 배열 dipsea

 

더보기

char actors[30]

short betsie[100]

float chuck[13]

long double dipsea[64]

2. 1번을 내재된 배열 대신 array 템플릿으로 데이터 객체 선언

더보기

array<char, 30> actors;

array<short, 100> betsie;

array<float, 13> chuck;

array<long double, 64> dipsea;

 

3. 5개의 int형 원소를 가진 배열, 1부터 시작하는 처음 다섯 개의 홀수로 초기화

더보기

int odd[5] = {1, 3, 5, 7, 9}

 

4. 3번의 배열의 첫 원소와 마지막 원소를 더하여 even이라는 새로운 변수에 대입하는 문장

더보기

int even = int odd[0] + int odd[4]

 

5. float형 배열 ideas의 두 번째 원소에 들어있는 값 출력

더보기

cout<<ideas[1]<<endl;

 

6. char 배열 선언, "cheese burger"라는 문자열로 초기화

더보기

char burgerking []="cheese burger";

 

7. string 객체 선언, "Waldorf Salad"라는 문자열로 초기화

더보기

string salad="Waldorf Salad";

 

8. 물고기 구조체 설계. 종류, 정수로된 온스 단위의 무게, 소수부가 있는 인치 단위의 길이로 정의

더보기

struct fish

{

 char kind;

 int weight;

 float length;

};

더보기

struct fish

{

 char kind[20];

 int weight;

 float length;

};

9. 8번에서 정의한 구조체형으로 변수 선언 후 초기화

더보기

fish fish1{ggongchi, 10, 30.35};

 

10. enum을 사용하여 Yes, No, Maybe를 값으로 가지는 Response라는 데이터형 정의. Yes는 1, No는 0, Maybe는 2

더보기

enum Response {No, Yes, Maybe};

 

11. ted를 double형 변수로 가정해, ted를 지시하는 포인터 선언 후 포인터를 사용하여 ted 값을 출력

더보기

double* ptr=&ted;

cout<<*ptr<<endl;

 

12. treacle을 10개의 float형 원소를 가진 배열. treacle의 첫 번째 원소를 지시하는 포인터 선언 후 포인터를 사용하여 배열의 첫 번째 원소와 마지막 원소를 출력

더보기

float* ptr=&treacle[0];

cout<<*ptr<<endl;

cout<<*(ptr+10)<<endl;

 

더보기

float* ptr=treacle;

or

float* ptr=&treacle[0];

 

cout<<ptr[0]<<endl;

cout<<ptr[9]<<endl;

or

cout<<*ptr<<endl;

cout<<*(ptr+9)<<endl;

13. 양의 정수를 하나 입력받고, 입력받은 수만큼의 int형 원소를 가지는 동적 배열을 생성하는 코드를 new와 vector 객체를 이용해 작성

더보기

int i;

cin>>i<<endl;

int* ptr=new arr[i];

 

더보기

unsigned int size;

cout<<"Enter a positive integer: ";

cin>>size;

int* dyn=new int[size];

vector<int> dv(size);

14. 다음과 같은 코드가 올바른지, 올바르다면 어떤 내용이 출력되는지 작성

cout<< (int *) "Home of the jolly bytes";
더보기

데이터형과 내용이 일치하지 않아서 올바르지 않다.

더보기

올바르다.

"Home of the jolly bytes"가 문자열 상수로 그 문자열의 시작 주소를 지시한다.

따라서 (int*)를 사용해 그 주소가 int형을 지시하는 포인터로 변환되어 그 문자열이 시작되는 주소를 출력한다.

 

15. 문제 8에서 정의한 구조체형으로 동적 구조체를 생성하고, 그 구조체의 kind 멤버의 값을 입력받는 코드 작성

더보기

struct fish

{

 char kind[20];

 int weight;

 float length;

};

 

fish* pole=new fish;

cout<<"물고기의 종류를 입력: ";

cin>>pole ->kind;

16. 수치 입력 뒤에 행 단위의 문자열 입력이 오면 문제가 발생

cin.getline(address,80);

다음과 같은 코드로 대체하면 프로그램의 실행은 어떻게 될까?

cin>>address;
더보기

getline은 행 단위의 입력이 가능한 함수이지만 cin은 그렇지 않기 때문에 띄어쓰기로 구분해 한줄에 작성해야한다.

 

더보기

cin>>address를 사용하면 스페이스가 아닌 문자가 나타날 때까지 스페이스를 무시한다.

다음 스페이스가 나올때까지 문자들을 읽는다.

Enter키가 만들어 낸 개행문자를 건너뛰어 문제가 해결된다.

따라서 완전한 행이 아니라 한 단어만 읽는다.

 

17. 10개의 string 객체를 가진 vector 객체와 10개의 string 객체를 가진 array 객체를 선언. header 파일 선언과 using 지시어는 사용 불가능. 또한 const 지시어로 string 객체의 개수를 정해라.

더보기

#include<string>

#include<vector>

#include<array>

const int Str_num{10}; //or =10

...

std::vector<std::string>vstr(Str_num);

std::array<std::string>, Str_num>astr;

반응형