Control Flow
Control flow Control flow ของภาษาใช้สำหรับกำหนดขั้นตอนการคำนวณ แบ่งออกได้ 4 กลุ่มดังนี้ Sequencing Conditional Selection Looping (or iterative processing)
Statements and Blocks ในภาษา C ใช้เครื่องหมาย ; (semicolon) บอกจุดสิ้นสุด statement Simple statement lower = 0; upper = 300; step = 20; Null Statement ?
Statements and Blocks Compound Statements (block statements) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } compound-statement : declaration-listopt statement-listopt
If-Else Statement if (expression) statement1 else statement2 expression จะถูกหาค่า ถ้าเป็นจริง(มีค่าเป็น non-zero)จะปฏิบัติ statement1 แต่ถ้าเป็นเท็จ(มีค่าเป็น zero) จะปฏิบัติ statement2 ที่อยู่ในส่วน else
Shortcut if(expression) ... if(expression ?? 0) ...
Dangling Else Problem ถ้าพิจารณาความหมายของการย่อหน้า คิดว่าค่า z จะมีค่าใด n=5; a=2; b=3; z=20; if (n > 0) if (a > b) z = a; else z = b; if (n > 0) if (a > b) z = a; else z = b;
Ambiguity Removal เพื่อไม่ให้เกิดความสับสนให้ใช้ { } ระบุให้ชัดเจน if (n > 0){ if (a > b) z = a; } else z = b; if (n > 0){ if (a > b) z = a; else z = b; }
Exercise จงเขียน flowchart และโค๊ดภาษา C ต่อไปนี้ int x; ถ้าค่าของ x มากกว่า 0 ค่าของ x จะถูกเพิ่มขึ้น 1 ค่า และ แสดงค่าของ x ที่เพิ่มขึ้น 1 ค่านี้ออกมาจอภาพ มิฉะนั้นค่าของ x จะถูกลดลง 1 ค่า
Else-If Statement option if (expression) statement else if (expression) else option
Exercise พิจารณาตารางเกรดดังต่อไปนี้ คะแนน เกรด จงเขียน flowchart และโปรแกรมด้วยภาษา C รับค่าคะแนนทางคีย์บอร์ดและแสดงผลลัพธ์ออกมาเป็นเกรด 2 รูปแบบคือ 1 ใช้ if-else statement 2 ใช้ else-if statement คะแนน เกรด 100-90 A 89-80 B 79-70 C 69-60 D <60 F
Switch Statement option รูปแบบการตัดสินใจหลายทางจาก โดยพิจารณาว่าค่า expression ตรงกับค่าคงที่ integer ใด default เป็นตัวเลือก ถ้าไม่ตรงกับเงื่อนไขใด จะทำ statement ของ default นี้ switch (expression) { case const-expr : statements default : statements } option
falls through falls through หมายถึง หลังจากปฏิบัติ statement ของ case ที่เป็นจริงแล้ว โดยไม่สนใจเงื่อนไขของ case ถัดไป ทุกๆ statements ถัดไปจะถูกปฏิบัติงานทั้งหมด วิธีการแก้ปัญหาให้ใช้ break เพื่อให้ออกจาก switch char key; switch(key){ case ‘a’ : printf(“good”); case ‘b’ : printf(“normal”); case ‘c’ : printf(“bad”); } Q ถ้า key มีค่าเป็น b ผลลัพธ์ออกทางจอภาพคืออะไร ?
Exercise พิจารณาตารางเกรดดังต่อไปนี้ คะแนน เกรด จงเขียนโปรแกรมด้วยภาษา C รับค่าคะแนนทางคีย์บอร์ดและแสดงผลลัพธ์ออกมาเป็นเกรด กำหนดให้ใช้ switch statement คะแนน เกรด 100-90 A 89-80 B 79-70 C 69-60 D <60 F