1.1k likes | 1.25k Views
418115: Structured Programming การบรรยายครั้งที่ 3 & 4. ประมุข ขันเงิน pramook@gmail.com. โปรแกรม #1. void main() { }. โปรแกรม #1. โปรแกรมนี้ทำอะไร ? ไม่ได้ทำอะไร ข้างในไม่มีคำสั่งอะไรเลย เข้ามาแล้วก็ออกไป. โปรแกรม #1. main() คืออะไร ? ฟังก์ชัน ฟังก์ชันคืออะไร ? โปรแกรมย่อย
E N D
418115: Structured Programmingการบรรยายครั้งที่ 3 & 4 ประมุข ขันเงิน pramook@gmail.com
โปรแกรม #1 void main() { }
โปรแกรม #1 • โปรแกรมนี้ทำอะไร? • ไม่ได้ทำอะไร • ข้างในไม่มีคำสั่งอะไรเลย • เข้ามาแล้วก็ออกไป
โปรแกรม #1 • main() คืออะไร? • ฟังก์ชัน • ฟังก์ชันคืออะไร? • โปรแกรมย่อย • ทำหน้าที่เฉพาะตัวอย่างหนึ่ง • ให้โปรแกรมใหญ่เรียกใช้ • แล้วโปรแกรมใหญ่ล่ะ? • ระบบปฏิบัติการ (OS)
โปรแกรม #2 #include <stdio.h> void main() { printf(“Hello, world!\n”); }
โปรแกรม #2 • โปรแกรมนี้ทำอะไร? • พิมพ์ Hello, world!
โปรแกรม #2 • #include <stdio.h> คืออะไร? • ใช้บอกว่าเราจะไปเอาฟังก์ชันจากไฟล์ชื่อ stdio.h มาใช้ • stdio.h เป็นไฟล์ที่เราเรียกว่า header file • มันบรรจุชื่อและข้อมูลอื่นๆ ของฟังก์ชันที่ฟังก์ชัน main ของเราจะไปเรียกใช้ได้
โปรแกรม #2 • #include <stdio.h> คืออะไร? • ใช้บอกว่าเราจะไปเอาฟังก์ชันจากไฟล์ชื่อ stdio.h มาใช้ • stdio.h เป็นไฟล์ที่เราเรียกว่า header file • มันบรรจุชื่อและข้อมูลอื่นๆ ของฟังก์ชันที่ฟังก์ชัน main ของเราจะไปเรียกใช้ได้ • เราใช้ฟังก์ชันอะไรจาก stdio.h? • printf
โปรแกรม #2 • printf มีไว้ทำอะไร? • พิมพ์ข้อความออกทาง standard output • standard output คืออะไร? • ช่องทางแสดงผลลัพธ์ที่ระบบปฏิบัติการสร้างให้โปรแกรมตามปกติ • ส่วนมากคือหน้าจอ • แต่เราสามารถบอกให้ระบบปฏิบัติการต่อ standard output เข้าไฟล์หรือการ์ดเน็ตเวิร์กก็ได้
โปรแกรม #2 • “Hello, world!\n” คืออะไร? • ข้อมูลประเภทข้อความ • ภาษา C เรียกข้อมูลประเภทนี้ว่าสตริง(string) • ในภาษา C เราเขียนข้อความประเภท string ได้ด้วยการใช้เครื่องหมายฟันหนู (“) ล้อมรอบข้อความที่ต้องการ • ตัวอย่างเช่น “one”, “Franscesca Lucchini”, “3.1415”
โปรแกรม #2 • อ้าว! ทำไมพิมพ์ออกมาแล้วไม่เห็นมี \n? • ข้อความ \n เป็นข้อความพิเศษ • เรียกว่า escape sequence • ตัว \n แทน การเว้นบรรทัด
โปรแกรม #3 • ผลลัพธ์ของโปรแกรมนี้ควรจะเป็นอย่างไร? #include <stdio.h> void main() { printf(“one\ntwo\nthree\n”); printf(“four\nfive\nsix\n”); }
โปรแกรม #3 one two three four five six
แบบฝึกหัด #1 • เขียนโปรแกรมเพื่อพิมพ์ข้อความ a\b\\”c” de’f’
แบบฝึกหัด #1 #include <stdio.h> void main() { printf(“a\\b\\\\\”c\”\n”); printf(“de\’f\’”); }
แบบฝึกหัด #1 #include <stdio.h> void main() { printf(“a\\b\\\\\”c\”\n”); printf(“de’f’”); }
เครื่องหมายเซมิโคลอน (;) • เวลาเราเรียกฟังก์ชันหนึ่งครึ่ง ถือเป็นคำสั่งหนึ่งคำสั่ง • มีคำสั่งแบบอื่นๆ อีกมากมายที่จะได้เรียน • ทุกคำสั่งต้องจบด้วยเครื่องหมายเซมิโคลอน (;) เสมอ • ระวังใส่เครื่องหมายเซมิโคลอนหลังทุกคำสั่งด้วย
โปรแกรม #4 #include <stdio.h> void main() { printf(“First value is %d.\n”, 5); printf(“Second value is %d.\n”, 7); }
โปรแกรม #4 • printf(“First value is %d.”, 5); • ข้อมูลที่เราป้อนให้ฟังก์ชันเวลาสั่งให้มันทำงาน เรียกว่า อาร์กิวเมนต์ (argument) • เวลามี argument หลายๆ ตัว เราจะคั่นมันด้วยเครื่องหมายคอมมา (,) • ตอนนี้ printf มี argument สองตัว • สตริง “First value is %d.” • ตัวเลขจำนวนเต็ม 5
โปรแกรม #4 • อาร์กิวเมนต์ตัวแรกของ printf จะต้องเป็นสตริงเสมอ • เพราะมันคือข้อความที่เราจะพิมพ์ออกไป • แล้วอาร์กิวเมนต์ตัวอื่นๆ ที่ตามมาล่ะ? • มันจะถูกนำไปแทนค่าใส่ใน ชุดอักขระจัดรูปแบบ • แล้วชุดอักขระจัดรูปแบบที่ว่านั่นอยู่ไหน? • “First value is %d.” • %dบอกว่ามันจะพิมพ์ค่าที่เอามาแทนเป็น เลขฐานสิบ (decimal)
โปรแกรม #4 • ผลลัพธ์ของโปรแกรม First value is 5. Second value is 7.
โปรแกรม #5 #incluce <stdio.h> void main() { printf(“Sum of %d and %d is %d.\n”, 9, 4, 9+4); printf(“Difference of %d and %d is %d.\n”,9, 4, 9-4); printf(“Product of %d and %d is %d.\n”, 9, 4, 9*4); printf(“Quotient of %d by %d is %d\n”, 9, 4, 9/4); printf(“Modulus of %d by %d is %d\n”, 9, 4, 9%4); }
โปรแกรม #5 • ผลลัพธ์ Sum of 9 and 4 is 13. Difference of 9 and 4 is 5. Product of 9 and 4 is 36. Quotient of 9 and 4 is 2. Modulus of 9 and 4 is 1.
โปรแกรม #5 • printf(“Sum of %d and %d is %d.\n”, 9, 4, 9+4); • แสดงให้เราเห็นว่า printf จะมี argument กี่ตัวก็ได้ • argument ตัวที่ตามหลังมาจะถูกนำไปแทรกที่อักขระจัดรูปแบบตามลำดับที่อักขระจัดรูปแบบปรากฏ
โปรแกรม #5 • 9+4, 9-4, 9*4, 9/4 และ 9%4 • เราเรียกพวกนี้ว่า นิพจน์ • นิพจน์มีผลลัพธ์ ซึ่งจะเป็นค่าหนึ่งค่า • เครื่องหมายสำหรับการคำนวณเชิงคณิตศาสตร์ • เครื่องหมาย +และ -แทนการบวกและการลบ ตามลำดับ • เครื่องหมาย *แทนการคูณ • เครื่องหมาย /แทนการหาร • ถ้าเอาจำนวนเต็มมาหารกันก็จะได้จำนวนเต็ม • เครื่องหมาย %แทนการหารเอาเศษ
โปรแกรม #5 • เครื่องหมายพวกนี้มีลำดับความสำคัญเหมือนกับในทางคณิตศาสตร์ • + และ – มีความสำคัญเท่ากัน • * และ / และ % มีความสำคัญเท่ากัน • * และ / และ % มีความสำคัญมากกว่า + และ – • เราสามารถใช้วงเล็บเพื่อจัดลำดับการคำนวณได้
แบบฝึกหัด #2 • ผลลัพธ์ของโปรแกรมนี้คืออะไร? #include <stdio.h> void main() { printf(“%d\n”, 7+10%3); printf(“%d\n”, (7+10)%3); printf(“%d\n”, 7+10%3*4-(5*20)); }
แบบฝึกหัด #2 8 2 -89
โปรแกรม #6 #incluce <stdio.h> void main() { printf(“%f + %f = %f\n”, 9.0, 4.0, 9.0+4.0); printf(“%f - %f = %f\n”, 9.0, 4.0, 9.0-4.0); printf(“%f * %f = %f\n”, 9.0, 4.0, 9.0*4.0); printf(“%f / %f = %f\n”, 9.0, 4.0, 9.0/4.0); }
โปรแกรม #6 • ผลลัพธ์ของโปรแกรม 9.000000 + 4.000000 = 13.000000 9.000000 - 4.000000 = 13.000000 9.000000 * 4.000000 = 36.000000 9.000000 / 4.000000 = 2.250000
โปรแกรม #6 • ภาษา C สามารถจัดการเลขทศนิยมได้เช่นกัน • ค่าของเลขทศนิยม เวลาพิมพ์ต้องมีจุดทศนิยม มิฉะนั้นภาษา C จะคิดว่าเป็นจำนวนเต็ม • มีเครื่องหมายที่เราใช้ได้สี่เครื่องหมายคือ +, -, *, / • เวลาเอาเลขทศนิยมไปหารเลขทศนิยมก็จะได้เลขทศนิยมกลับมา • เราสามารถพิมพ์ค่าเลขทศนิยมได้ด้วยอักขระจัดรูปแบบ %f
โปรแกรม #7 #include <stdio.h> void main() { int age; age = 15; printf(“The child age is %d\n”, age); }
โปรแกรม #7 • ผลลัพธ์ของโปรแกรม The child age is 15.
ตัวแปร (Variable) • ตำแหน่งในหน่วยความจำ เก็บข้อมูลหนึ่งชิ้น • ตัวแปรต้องมี ชื่อ • ตัวแปรช่วยให้เราแทน ข้อมูล ด้วย ชื่อ ทำให้ไม่จำเป็นต้องรู้ค่าของมัน • ในโปรแกรม #7 มีตัวแปรหนึ่งตัว ชื่อ age • เราพิมพ์ค่าของ age ออกทางด้วย printf ได้เหมือนกับพิมพ์ค่าตัวเลข printf(“The child age is %d\n”, age);
การประกาศตัวแปร • เป็นการบอกว่า • มีตัวแปรชื่อนี้ • ตัวแปรชื่อที่เราประกาศชนิดอะไร • ถ้าจะประกาศตัวแปรแค่ตัวเดียว ให้สั่ง ชนิดข้อมูล ชื่อตัวแปร1; • หรือถ้าจะประกาศพร้อมกันทีละหลายๆ ตัวก็ได้ ชนิดข้อมูล ชื่อตัวแปร 1, ชื่อตัวแปร 2, ชื่อตัวแปร 3, …, ชื่อตัวแปร n;
ตัวอย่าง int age; int x, y, z; float area, length; • int คือชนิดของตัวแปรที่เก็บจำนวนเต็มแบบหนึ่ง • float คือชนิดของตัวแปรที่เก็บจำนวนจริงแบบหนึ่ง
การกำหนดค่าให้ตัวแปร (Assignment) • ใช้เครื่องหมายเท่ากับ (=) โดยมีรูปแบบดังนี้ ชื่อตัวแปร = นิพจน์; ยกตัวอย่างเช่น x = 5; หรือ y = (10*3)%7; • ตัวแปรก็สามารถเข้าไปอยู่ในนิพจน์ได้ เช่น x = 10*y+y/5; • แม้แต่ตัวแปรตัวเดียวกันก็สามารถไปอยู่ทั้งสองฟากของเครื่องหมายเท่ากับได้ • x = x+1; • z = z*z + 2*z + 1 • โปรแกรมจะอ่านค่าที่เก็บในหน่วยความจำมาใช้ในการคำนวณทางด้านซ้าย เมื่อคำนวณเสร็จแล้วจะเอาผลลัพธ์ไปเขียนทับลงในตัวแปรที่อยู่ในด้านขวา • ถ้า x เท่ากับ 5 หลังจากสั่ง x = x+1 จะได้ x เท่ากับ 6 • ถ้า z เท่ากับ 3 หลังจากสั่ง z = z*z + 2*z + 1 แล้ว z จะมีค่าเท่ากับ 16
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); }
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 2
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 2 5
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 2 5 6
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 32 2 5 6
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 32 2 5 6 5
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 32 2 5 6 5 32
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 32 2 5 6 5 32 6
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 32 2 5 6 -33 5 32 6
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 32 2 5 6 -33 5 32 6 32
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 32 2 5 6 -33 5 32 6 32 5
แบบฝึกหัด #3 #include <stdio.h> void main() { int x, y, z; x = 2; y = 5; z = 6; x = x+y*z; z = y–x-z; y = 4*x/y printf(“%d %d %d\n”, x, y, z); } 32 2 5 6 -33 5 32 6 32 5 24