1 / 24

13 주 강의

13 주 강의. Structures and Unions. Structures. Structure 기본 자료형들로 구성된 새로운 자료형 예 ) struct card { int pips; char suit; };. Structures.  struct card { int pips; char suit; }; struct card c1, c2;  struct card { int pips; char suit;

vangie
Download Presentation

13 주 강의

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 13주 강의 Structures and Unions

  2. Structures • Structure • 기본 자료형들로 구성된 새로운 자료형 • 예) struct card { int pips; char suit; };

  3. Structures  struct card { int pips; char suit; }; struct card c1, c2;  struct card { int pips; char suit; } c1, c2; ※ pips,suit를 멤버로 가지는 card Type의 c1,c2 선언

  4. 값 저장 • c1.pips = 3; • c1.suit = ‘s’; • c2=c1; /* structure 전체를 복사 */ • typedef struct card card; • card c3, c4, c5;

  5. 다른 예 • struct fruit { char *name; int calories; } • struct vegetable { char *name; int calories; } • struct fruit a; • struct vegetable b;

  6. • struct card { int pips; char suit; } deck[52]; • struct date { int day, month, year; char day_name[4]; /* Mon, Tue, .. */ char month_name[4]; /* Jan, … */ } yesterday, today, tomorrow;

  7. Complex number • typedef struct { float re; float im; } complex; • complex a, b, c[100];

  8. Accessing members • #define CLASS_SIZE 100 struct student { char *last name; int student_id; char grade; }; struct student tmp, class[CLASS_SIZE]; • tmp.grade = ‘A’; • tmp.last_name = “Casanova”; • tmp.student_id = 910017; • class[i].grade = ‘F’;

  9. 예제 설명 및 -> • Page 412 프로그램 설명 • -> • pointer_to_structure->member_name  (*pointer_to_structure).member_name /* ()가 없으면 오류 */ • complex *a, *b, *c; • a->re = b-> re + c -> re;

  10. Structures • structure_declaration::=struct_specifier declarator_list; • struct_specifier::=structtag_name struct tag_nameopt {{member_declaration}1+} • tag_name::=identifier • member_declaration::=type_specifier declarator_list; • declarator_list::=declarator{,declarator}0+

  11. Member access operators

  12. Operator Precedence and Associativity

  13. Using structures with functions • typedef struct { char name[25]; int employee_id; struct dept deparment; struct home_address *a_ptr; double salary; …. } employee_data;

  14. Cont. • struct dept { char dept_name[25]; int dept_no; }; • e.department.dept_no  (e.department).dept_no • employee_data e; e = update(e);

  15. Initialization of Structures • card c={13,’h’}; • struct fruit frt={“plum”, 150); • struct home_address { char *street; char *city_and_state; long zip_code; } address = {“87 West Street”,”Aspen, Colorado”, 80526}; • struct home_address previous_address = {0};

  16. Cont. • complex[3][3] = { {{1.0, -0.1}, {2.0, 0.2}, {3.0,0.3}} {{4.0,-0.4}, {5.0,0.5}, {60.,0.6}} }; • Poker game 설명

  17. UNION • 구조체와 같은 구문 형식이지만, 각 멤버들은 같은 기억 장소를 공유 • union int_ot_float { int i; float f; }; union int_or_float a,b,c;

  18. • union int_or_float n; n.i = 4444; n.f = 444.0;  n.i 4444  n.f 0.6227370375e-41 n.f 4444.0  n.i 116672921

  19. 다른 예 • struct flower { char *name; enum{red, white, blue} color; }; • struct fruit { char *name; int calories; }; • struct vegetable { • char *name; • int calories; • int cooking_time; • }; • struct flower_fruit_or_vegetable { • struct flower flw; • struct fruit frt; • struct vegetable veg; • }; • union flower_fruit_or_vegetable ffv; • ffv.veg.cooking_time = 7;

  20. p.425 예 /*In file numbers.x */ typedef union int_or_float { int i; float f; } number; int main() { number n; n.i = 4444; printf(“i:%10d f:16.10e\n”, n.i, n.f); n.f = 4444.0; printf(“i:%10d f:16.10e\n”, n.i, n.f); return 0; }

  21. Bit Field • struct pcard { unsigned pips : 4; unsigned suit : 2; } • bit_field_number::={int|unsigned}1{identifier}opt:expr • expr ::=constant_integral_expression

  22. Bit Field의 예 • struct abc { int a : 1, b : 16, c : 16; } x; • struct small_integers { unsigned i1:7, i2:7, i3:7, :11, /*align to next word*/ i4:7, i5:7, i6:7; } • struct abc { unsigned a:1, :0, b:1, :0, c:1; };

  23. p.429 예 /* in file check_bits.x */ #include <stdio.h> typedef struct { unsigned b0:8, b1:8, b2:8, b3:8; } word_bytes; typedef struct { unsigned b0:1, b1:1, b2:1, b3:1, b4:1, b6:1, b7:1, b8:1, b9:1, b10:1,b11:1,b12:1, b13:1, b14:1, b15:1, b16:1, b17:1, b18:1, b19:1,b20:1, b21:1,b22:1, b23:1, b24:1, b25:1, b26:1, b27:1, b28:1,b29:1, b30:1,b31: } word_bits; typedef union { int I; word_bits bit; word_bytes byte; } word; void main() { word w = {0}; void bit_print(int)l w.bit.b8 = 1; w.byte.b0 = ‘a’; printf(“w.I = %d\n”, w.I); bit_print(w.I); }

  24. ADT Stack • ADT(Abstract Data Type) • Stack • last-in-first-out(LIFO) • push,pop,top,empty,full,reset 등 • Stack의 구현(p.431) • 문제 • 교재의 Stack을 사용하여 아래의 식을 계산하라 • (13 + 16) * 8 = ??? • 단, 위 식은 키보드에서 “( )”를 포함한 수식을 입력받으며, 반드시 “( )”에 대한 Error 처리가 되어야 한다. • (11 + 3 )) => ERROR!!! • 사칙연산이 가능해야 한다

More Related