งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

C Programming Lecture no. 9 Structure. Department of Computer Science310322 C Programming 2/26 ข้อมูลแบบโครงสร้าง (Structures)

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "C Programming Lecture no. 9 Structure. Department of Computer Science310322 C Programming 2/26 ข้อมูลแบบโครงสร้าง (Structures)"— ใบสำเนางานนำเสนอ:

1 C Programming Lecture no. 9 Structure

2 Department of Computer Science C Programming 2/26 ข้อมูลแบบโครงสร้าง (Structures)

3 Department of Computer Science C Programming 3/26 รูปแบบโดยทั่วๆ ไปของ structure คือ struct ชื่อข้อมูลแบบโครงสร้าง(structure-name) { ประเภทข้อมูล(field-type) ชื่อข้อมูล(field-name); ประเภทข้อมูล(field-type) ชื่อข้อมูล(field-name); } ชื่อตัวแปรข้อมูลแบบโครงสร้าง (variable-name); 1. ความรู้ทั่วไปเกี่ยวกับโครงสร้าง

4 Department of Computer Science C Programming 4/26 ตัวอย่างเช่น ในการสร้าง structure ชื่อ complab ให้กับ variable ชื่อ com_part struct complab { char name [30]; int quantity; int cost; } comp_part;

5 Department of Computer Science C Programming 5/26 สิ่งที่ได้รับจากการกำหนด ข้อมูลแบบโครงสร้าง การกำหนด structure ข้างต้น ให้ข้อมูล 2 อย่างกับ C นั่นคือ การระบุถึง struct complab ว่ามีโครงสร้างเช่นไร ซึ่งจะใช้ชื่อ structure นี้ เป็นชื่อ data type ชนิด ใหม่ได้ และยังเป็นการประกาศ (declare) ให้รู้จัก variable ชื่อ comp_part ที่มีโครงสร้างเป็นแบบ complab นอกจากนี้ยังสามารถใช้ชื่อ structure ตัวที่ได้รับ การสร้างขึ้นนี้ คือ complab ในการ declareให้กับ variable อื่นๆ ได้เช่น struct complab printer_part;

6 Department of Computer Science C Programming 6/26 ข้อสังเกตุ ในการกำหนด structure ถ้าไม่กำหนดชื่อ structure หมายถึงต้องการ declare ให้กับ variable อย่างเดียว ไม่ได้มีการกำหนด data type ชนิดใหม่ขึ้นมา เช่น struct { char name [30]; int quantity; int cost; } comp_part;

7 Department of Computer Science C Programming 7/26 ข้อสังเกตุ (2) ในทำนองเดียวกัน ถ้าไม่กำหนด variable name ก็คือการกำหนด data type ขึ้นใหม่ โดยไม่มีการ declare ตัว variable เช่น struct complab { char name [30]; int quantity; int cost; };

8 Department of Computer Science C Programming 8/26 ข้อสังเกตุ (3) ในกรณีที่กำหนด structure type ไว้แล้ว สามารถ นำไปใช้ declare กับ variable name ต่างๆ ได้ เช่น structure complab monitor_part; สำหรับ syntax ในการเรียกใช้งาน variable ที่มีการ declare ไว้แล้ว คือ variable.field ดังตัวอย่างการใช้งานต่อไปนี้ เมื่อต้องการกำหนด ราคาของ monnitor สามารถทำได้ดังนี้ monitor_part.cost = 7500;

9 Department of Computer Science C Programming 9/26 การกำหนดค่าเริ่มต้นของตัวแปร ประเภทโครงสร้าง ในการกำหนดค่าเริ่มต้นของตัวแปรประเภทโครงสร้าง (initialize structure variable) สามารถทำได้ในลักษณะดังนี้ /* * Monitor Parts */ struct complab { char name [30]; /* Name of the part */ int quantity; /* How many in the Lab */ int cost; /* The cost of each computer in Baht */ }; struct monitor_part = { "Monitor Samsung", /* Name of the part */ 30, /* There are 30 in the Lab */ 7500 /* The cost 7500 Baht */ };

10 Department of Computer Science C Programming 10/26 การประกาศตัวแปร pointer ไปยัง structure การประกาศตัวแปร pointer ไปยัง structure ก็ สามารถทำได้เช่นกัน ดังตัวอย่างต่อไปนี้ struct address { int home_number; char street_name[50]; char city[50]; }; void printadd(struct address *addr); int main(int argc,char argv[ ]) { struct address home,office,*paddr;

11 Department of Computer Science C Programming 11/26 การประกาศตัวแปร pointer ไปยัง structure (2) ในที่นี้ home และ office เป็นตัวแปร structure ธรรมดา ซึ่งในการเข้าถึง (access) fields ต่างๆ ใน structure ทำได้ในลักษณะดังนี้ fprintf(stdout,"%d\t%s\t%s\n",office.home_n umber, office.street_name, office.city); ในขณะที่ paddr เป็นตัวแปร pointer ไปยัง structure ซึ่งเราสามารถที่จะกระทำการ access ได้ในลักษณะดังนี้ fprintf(stdout,"%d\t%s\t%s\n",paddr- >home_number, paddr->street_name, paddr->city);

12 Department of Computer Science C Programming 12/26 (0,0 ) (4,3) หากต้องการเก็บข้อมูลจุดบนแกนโค ออดิเนท จะประกอบไปข้อมูลแกน x และ y เป็นข้อมูลจำนวนเต็มประเภท int ประเภทข้อมูลที่ใช้ได้แก่ประเภท ข้อมูลแบบโครงสร้าง สามารถประกาศ ประเภทข้อมูลที่ใช้ดังนี้ ข้อมูล ลักษณะการใช้งาน ข้อมูล แบบ โครงสร้าง

13 Department of Computer Science C Programming 13/26 struct point { int x; int y; }; ประเภทข้อมูล การประกาศ ประเภทข้อมูล แบบโครงสร้าง Mem ber หมายเหตุ การประกาศชื่อสมาชิกภายใน struct จะใช้ชื่อใดก็ได้ อาจจะซ้ำกับชื่อตัว แปรที่อยู่ภายนอก struct แต่ชื่อที่อยู่ ภายใน struct เดียวกันห้ามประกาศชื่อซ้ำ กัน

14 Department of Computer Science C Programming 14/26 struct point { int x; int y; } x, y, z; ตัวแปรข้อมูล การประกาศ ตัวแปรข้อมูล แบบ โครงสร้าง หมายเหตุ จะเห็นว่าชื่อของ struct จะ ประกาศหรือไม่ก็ได้ หากไม่มีการประกาศ จะไม่สามารถนำ struct นั้นกลับมาใช้ได้ อีก แบบที่ 1

15 Department of Computer Science C Programming 15/26 struct point { int x; int y; }; struct point x,y,z แบบที่ 2 การ ประกาศ แบบ ข้อมูล โครงสร้า ง การ ประกาศ ตัวแปร ข้อมูล แบบ โครงสร้า ง ตัวแปรข้อมูล การประกาศ ตัวแปรข้อมูล แบบ โครงสร้าง (2)

16 Department of Computer Science C Programming 16/26 struct point pt = {320,200}; การกำหนดค่าเริ่มต้นให้กับตัวแปร ข้อมูลแบบโครงสร้าง struct_name.member การอ้างถึงสมาชิกภายในตัวแปร ข้อมูลแบบโครงสร้าง การกำหนด ค่าเริ่มต้น และการ อ้างถึง สมาชิก

17 Department of Computer Science C Programming 17/26 เมื่อต้องการอ้างถึงสมาชิกภายใน struct ว่าอยู่ตรงกับจุดใดบนแกนโคออดิ เนทจะใช้ printf ( “%d, %d”, pt.x, pt.y ); หรือหากต้องการคำนวณระยะทางจะ ว่าห่างจากจุดเริ่มต้น (0, 0) เท่าใด สามารถใช้ double dist, sqrt (double); dist =sqrt ((double)pt.x * pt.x +(double)pt.y * pt.y ); ตัวอย่ าง

18 Department of Computer Science C Programming 18/26 สมาชิกของข้อมูลประเภท struct อาจจะ เป็นตัวแปรประเภทใดก็ได้ ทั้งข้อมูล พื้นฐานและประเภทข้อมูลอื่น ๆ เช่น อาเรย์ และยังประกาศตัวแปรของข้อมูลประเภท struct ได้อีกด้วย ตัวอย่ าง pt 2 pt 1 หากต้องการ เก็บข้อมูลของ สี่เหลี่ยมดังรูป สามารถทำการ ประกาศตัวแปร ได้ดังนี้ สมาชิกของข้อมูลประเภท struct

19 Department of Computer Science C Programming 19/26 struct rect { struct point pt1; struct point pt2; }; struct rect screen; int co_x; co_x = screen.pt1.x การ ประกาศ แบบ ข้อมูล โครงสร้า ง การ ประกาศ ตัวแปร ข้อมูลแบบ โครงสร้าง การอ้างถึง สมาชิก

20 Department of Computer Science C Programming 20/26 2. การเก็บข้อมูลแบบ โครงสร้าง  การเก็บข้อมูลแบบโครงสร้าง ภายในหน่วยความจำจะเก็บ ตามลำดับที่มีการประกาศสมาชิก ของข้อมูลนั้น  โดยทั่วไปข้อมูลแบบโครงสร้างจะ ประกอบขึ้นจากข้อมูลหลาย ๆ ชนิด และข้อมูลแต่ละชนิดมักจะมีการจอง พื้นที่ใช้งานแต่ต่างกัน  การจองพื้นที่หน่วยความจำใน ระบบส่วนใหญ่จะจองที่แอดเดรสที่ หารด้วย 2 หรือ 4 ลงตัว

21 Department of Computer Science C Programming 21/26 struct alignment { int num1; char ch; int num2; } example; ตัวอย่าง 2.1 mem ber 2 nu m1 chch nu m Byte Offset จะเห็นว่า num2 จะไม่สามารถใช้พื้นที่ที่ติดกับ ch ได้ เนื่องจาก num2 เป็นข้อมูลประเภทเลขจำนวนต้องใช้ พื้นที่ที่มีแอดเดรสหารด้วย 2 หรือ 4 ลงตัว ทำให้เกิดที่ ว่างที่ไม่สามารถนำมาใช้ประโยชน์ได้ เพราะฉะนั้นการ ประกาศสมาชิกของ โครงสร้างจะมีผลต่อการใช้พื้นที่ในหน่วยความจำด้วย

22 Department of Computer Science C Programming 22/26 3. การใช้ข้อมูลแบบ โครงสร้างกับฟังก์ชัน การทำงานของตัวแปรที่เป็นประเภท โครงสร้างสามารถทำงานต่าง ๆ ได้ เช่นเดียวกับตัวแปรอื่น ๆ ยกเว้นการเปรียบเทียบตัวแปร struct กับตัวแปร struct เนื่องจากข้อมูลของตัว แปร struct จะเก็บอยู่ในตัวแปรที่เป็น สมาชิกของ struct การเปรียบเทียบจึง ต้องทำผ่านตัวแปรที่เป็นสมาชิกของ struct เท่านั้น การใช้งานตัวแปร struct กับฟังก์ชั่น สามารถทำได้หลายลักษณะ ทั้งการให้ ฟังก์ชั่นคืนค่าเป็น struct การส่งอากิว เมนท์ให้ฟังก์ชั่นเป็นตัวแปร struct

23 Department of Computer Science C Programming 23/26 ตัวอย่าง 3.1 ฟังก์ชั่นใช้ในการกำหนดค่าให้กับ ตัวแปร struct struct point makepoint ( int x, int y ) { struct point temp; temp.x = x; temp.y = y; return temp; } หมายเหตุ ตัวอย่างนี้แสดงฟังก์ชันที่ทำการส่งค่า กลับเป็นรูปแบบโครงสร้าง

24 Department of Computer Science C Programming 24/26 การเรียกใช้งานฟังก์ชัน struct rect screen; struct point middle; struct point makepoint ( int, int ); screen.pt1 = makepoint ( 0, 0 ); screen.pt2 = makepoint ( XMAX, YMAX ); middle = makepoint ((screen.pt1.x + screen.pt2.x) / 2, (screen.pt1.y + screen.pt2.y) / 2 );

25 Department of Computer Science C Programming 25/26 ตัวอย่าง 5.2 ฟังก์ชันการบวก x และ y ของจุด 2 จุด และคืนค่า ผลของการบวกเป็น struct struct point addpoint(struct point p1, struct point p2) { p1.x += p2.x; p1.y += p2.y; return p1; } หมายเหตุ ตัวอย่างนี้แสดงการส่งอาร์กิวเมนท์ แบบ struct ให้กับฟังก์ชัน

26 Department of Computer Science C Programming 26/26 ตัวอย่าง 5.3 ฟังก์ชันการหาว่าจุดอยู่ในพื้นที่ สี่เหลี่ยมหรือไม่ int pinrect ( struct point p, struct rect r ) { return p.x >= r.pt1.x && p.x < r.pt2.x && p.y >= r.pt1.y && p.y < r.pt2.y; } หมายเหตุ ตัวอย่างนี้เป็นการหาว่าจุดที่ระบุอยู่ใน พื้นที่สี่เหลี่ยมหรือไม่ โดยส่งค่าจุดและพื้นที่สี่เหลี่ยม เป็นอากิวเมนท์ให้กับฟังก์ชัน หากจุดอยู่ในพื้นที่ สี่เหลี่ยมจะคืนค่า 1 แต่หากจุดอยู่นอกพื้นที่สี่เหลี่ยม จะคืนค่าเป็น 0


ดาวน์โหลด ppt C Programming Lecture no. 9 Structure. Department of Computer Science310322 C Programming 2/26 ข้อมูลแบบโครงสร้าง (Structures)

งานนำเสนอที่คล้ายกัน


Ads by Google