Chapter 13. 구조체

Lab

1. 영화에 대한 정보를 구조체로 표현하여 보자.

#include <stdio.h>

struct movie {	// ①

char title[30];	// 영화

char director[20];	// 감독

float score;	// 평점

};

int main(void)

{

struct movie m1 = { "Spiderman 3", “Sam Raimi”, 8.8 };

printf("%s %s %f\n", m1.title, m1.director, m1.score);

return 0;

}

위의 프로그램을 컴파일하여 실행하고 그 결과를 기록하라.

구조체 변수 m1을 구조체 movie의 선언 문장에서 생성하여 보라. 원상태로 복원한다.

구조체 변수 m1을 초기화를 하지 않고 먼저 생성한 후에 나중에 멤버별로 값들을 대입하여 보라. 원상태로 복원한다.

구조체 movie에 문자 배열 actor와 actress 멤버를 추가하여 보라. 적절하게 초기화시키고 출력에도 포함시켜라.

구조체 movie에 열거형 변수 genre를 추가하여 보라. genre는 DRAMA, ACTION, SF, ANIMATION, THRILLER, COMEDY등의 값을 가진다고 가정하라.

2. 구조체 변수의 대입 연산과 비교 연산에 대하여 실습하여 보자. 앞에서 정의한 movie 구조체를 이용한다.

int main(void)

{

struct movie m1 = { "Spiderman 3", “Sam Raimi”, 8.8 };

struct movie m2 = { "Transformer", “Michael Bay”, 9.9 };

return 0;

}

수식 m1 = m2를 이용하여 m1에 m2를 대입하여 보라. m1과 m2의 멤버들의 값을 출력하여 보라.

수식 m1 == m2를 이용하여 m1과 m2가 같은지 비교하여 보라. 어떤 결과가 얻어지는가?

m1과 m2를 인수로 받아서 구조체 멤버들을 비교하여 m1과 m2가 같은지 다른지를 판단하는 movie_equal()이란 함수를 작성하여 테스트하라.

3. 구조체와 포인터의 관계를 실습하여 보자. 역시 앞에서 정의한 movie 구조체를 이용한다.

int main(void)

{

struct movie m1 = { "Spiderman 3", “Sam Raimi”, 8.8 };

return 0;

}

구조체 movie를 가리키는 포인터 p를 정의하여 보라.

p에 m1의 주소를 대입하여 보라.

포인터 p를 통하여 구조체 m1의 멤버에 접근하여 값을 출력하여보라.

4. 구조체와 배열의 관계를 실습하여 보자. 역시 앞에서 정의한 movie 구조체를 이용한다.

int main(void)

{

struct movie movie_collec[10];

// ①

return 0;

}

배열 movie_collec[]의 처음 3개의 원소를 적절한 값으로 초기화하도록 하라.

배열 movie_collec[]의 모든 구조체의 멤버의 값을 화면에 출력하는 반복 루프를 작성하라.

배열 movie_collec[]에 들어 있는 영화들 중에서 가장 높은 평점을 가진 영화를 출력하는 코드를 작성하고 테스트하라.

배열 movie_collec[]에 들어 있는 영화들 중에서 사용자가 입력한 감독의 작품만을 출력하는 코드를 작성하라.

5. 구조체와 함수와의 관계를 실습하여 보자. 역시 앞에서 정의한 movie 구조체를 이용한다.

void modify(struct movie m)

{

strcpy(m.title, "Transformer");

strcpy(m.director, "Michael Bay");

m.score = 9.9;

return 0;

}

int main(void)

{

struct movie m1 = { "Spiderman 3", “Sam Raimi”, 8.8 };

modify(m1);

// ①

return 0;

}

함수 modify()로 전달된 구조체 변수 m1의 멤버가 변경되었는가? ①의 위치에서 m1의 멤버들을 출력하여 보라.

함수 modify()로 m1의 주소를 전달하게끔 코드를 수정하여 보자. modify() 함수도 매개 변수를 포인터로 하여 수정하라. 이번에는 구조체 안의 데이터가 변경되었는가? ①의 위치에서 m1의 멤버들을 출력하여 보라. 원상태로 복원하라.

함수 modify()가 구조체를 반환하게끔 코드를 수정하여 보자. modify()가 반환하는 값을 m1에 대입하여 보라. 이번에는 구조체 안의 데이터가 변경되었는가? ①의 위치에서 m1의 멤버들을 출력하여 보라. 원상태로 복원하라.

6. 구조체 안에 구조체를 내장 시킬 수 있다. 역시 앞에서 정의한 movie 구조체를 이용한다.

struct rel_date {

int year;

int month;

int day;

};

앞의 movie 구조체 안에 위에 정의된 date 구조체를 멤버로 포함시키도록 하라.

date 구조체가 포함된 movie 구조체를 초기화하도록 하라.

date 구조체가 포함된 movie 구조체의 모든 멤버의 값을 출력하도록 하라.