Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 12 구조체와 열거형 구조체 열거형.

Similar presentations


Presentation on theme: "Chapter 12 구조체와 열거형 구조체 열거형."— Presentation transcript:

1 Chapter 12 구조체와 열거형 구조체 열거형

2 구조체 구조체가 필요한 상황: 세 번의 과제 성적, 두 번의 중간고사 성적, 그리고 기말고사 성적을 이용하여 각 학생의 프로젝트 평균 점수, 중간고사 평균 점수, 학기 평균 점수, 그리고 학점을 구하는 응용 프로그램 구조체 선언: struct student_struct { int student_idno; char student_name[31]; int project1_score; int project2_score; int project3_score; int test1_score; int test2_score; int final_exam_score; char letter_grade; }; /* end student_struct */ 구조체의 메모리 구조:

3 구조체형 선언 구조체 : 관련된 데이터인 멤버(구성 요소)의 모임인 유도된 , 사용자 정의, 구조적 데이터형. 멤버는 상이한 데이터형도 가능. 구조체 선언 문법 struct StructureTypeName { StructureMemberDeclarationList }; /* end struct */ 예제 12.1 struct faculty_struct { int faculty_idno; char faculty_name[31]; int age; char gender; float salary; }; /* end faculty_struct */ 예제 12.2 struct class_enrollment_struct { int course_code; int acadmic_year; char semester; int enrollment; }; /* end class_enrollment_struct */

4 구조체 변수의 선언 예제 12.3 예제 12.4 : 구조체형과 구조체 변수를 함께 선언 예제 12.5 : 중첩된 구조체 선언
struct faculty_struct faculty_record; 예제 12.4 : 구조체형과 구조체 변수를 함께 선언 struct faculty_struct { int faculty_idno; char faculty_name[31]; char age; float salary; } faculty_record; 예제 12.5 : 중첩된 구조체 선언 struct name_struct { char last_name[16]; char first_name[16]; }; /* end name_struct */ struct name_struct faculty_name; int age; char gender; }; /* end faculty_struct */

5 구조체 멤버의 참조와 구조체 변수의 초기화 예제 12.7 : 구조체 멤버의 참조 예제 12.8 : 구조체 변수의 초기화
struct faculty_struct faculty_record; faculty_record.faculty_idno = 1200; // 구성요소 선택 연산자 혹은 구조체 멤버 연산자 ‘.’ strcpy(faculty_record .faculty_name .last_name,"Dixon"); strcpy(faculty_record .faculty_name .first_name,"Robert"); faculty_record .age = 35; faculty_record .gender = 'M'; faculty_record .salary = ; 예제 12.8 : 구조체 변수의 초기화 struct faculty_struct faculty_record = {1200, {"Dixon", "Robert“}, 35, 'M', };

6 구조체 변수의 연산 예제 12.9 : 구조체 변수의 연산 : 복사 및 함수 전달
struct faculty_struct faculty_record_1, faculty_record_2; faculty_record_2 = faculty_record_1; //동일한 형의 구조체 변수에 복사 부적절한 연산: 입출력 함수, 산술 연산자, 비교 연산자, … struct faculty_struct f1, f2, f3; scanf("%d", &f1); printf("%d", f2); f1 = f2 + f3; if (f1 == f2) ;

7 함수 매개변수로서의 구조체 임의의 다른 데이터형의 변수와 동일 그림 12.2 : 구조체 변수를 반환하는 함수
함수 선언 : int computed_project_average(struct student_struct s) 함수 호출 : proj_avg = computed_project_average(stu_record); 그림 12.2 : 구조체 변수를 반환하는 함수 struct student_struct student_data(void) { /* Local variables: */ struct student_struct s; char new_line; /* Function body: */ printf("***> Enter student idno : "); scanf("%d", &s.student_idno); scanf("%c", &new_line); printf("***> Enter student name : "); gets(s.student_name); printf("***> Enter final exam score : "); scanf("%d", &s.final_exam_score); return s; } /* end function student_data */;

8 구조체형의 포인터 매개변수 함수의 매개변수로 포인터를 이용하여 구조체 변수를 전달 함수 호출
void input_student_data(struct student_struct *s) { /* Local variables: */ char new_line; /* Function body: */ printf("***> Enter student idno : "); scanf("%d", &s->student_idno); scanf("%c", &new_line); printf("***> Enter student name : "); gets(s->student_name); printf("***> Enter final exam score : "); scanf("%d", &s->final_exam_score); }/* end function input_student_data */ 함수 호출 input_student_data(&stu_record); ‘->’ : 간접 멤버 선택 연산자(indirect member selection operator) s->student_idno와 (*s).student_idno는 동일

9 열거형 (enumerated type) 정의 : 식별자에 의해 표현되는 정수 상수값의 집합
열거형 선언 : 사용자 정의형이므로 형을 반드시 선언!! enum EnumerationTypeName EnumeratorList ; /* end enum */ 열거형 변수 선언 enum EnumerationTypeName EnumeratedVariableList; 예제 12.10 enum month_names_enum { // 열거형 선언 JANUARY, FEBRUARY, MATCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER }; /* end enum montH_names_enum */ enum month_names_enum month; // 열거형 변수 선언

10 열거형 선언의 다른 예와 열거형 변수의 연산 예제 12.11 열거형 변수의 연산
enum department_name_enum { SALES = 1, MIS = SALES + 3, ACCOUNTING = 3, MARKETING }; /* end enum department_name_enum */ enumerator SALES를 1, MIS를 4, ACCOUNTING을 3, MARKETING을 4로 설정 enum month_names_enum { JANUARY = 1, FEBRUARY, MATCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER }; /* end enum montH_names_enum */ JANUARY를 1, FEBRUARY를 2, 그리고 마지막으로 DECEMBER를 12로 설정 열거형 변수의 연산 열거형 상수를 열거형 변수에 지정할 수 있다. 정수값 혹은 열거형 상수가 이용되는 정수식의 값을 열거형 변수에 지정할 수 있다. 열거형 변수에 값을 입력할 수 있다. 그러나, 입력한 값은 열거형 상수가 될 수 없다. 열거형 변수를 출력할 수 있다. 열거형 변수의 값을 정수, 열거형 상수, 혹은 동일한 형의 다른 열거형 변수와 비교할 수 있다. 다른 데이터형처럼, 함수들 간에 열거형 변수를 전달할 수 있다.

11 구조체의 배열과 배열의 구조체 구조체의 배열 배열의 구조체 struct student_struct { int idno;
int year; char status; }; /* end student_struct */ struct student_struct student[ARRAY_SIZE]; 배열의 구조체 struct grades_struct { int list_size; char letter_grades[60]; }; /* end grades__struct */


Download ppt "Chapter 12 구조체와 열거형 구조체 열거형."

Similar presentations


Ads by Google