มีความรู้ความเข้าใจในการใช้คำสั่งควบคุมแบบทางเลือก
1. บอกวิธีการใช้คำสั่ง if - else และนำไปเขียนโปรแกรมได้
|
2. บอกวิธีการใช้คำสั่ง if - else if - else และนำไปเขียนโปรแกรมได้
|
3. บอกวิธีการใช้คำสั่ง switch และนำไปเขียนโปรแกรมได้
|
4. อธิบายการใช้คำสั่งแบบทางเลือกเชิงซ้อน และนำไปเขียนโปรแกรมได้
|
5.1 คำสั่ง if-else
|
5.2 คำสั่ง if-else if-else
|
5.3 คำสั่ง switch
|
5.4 การใช้คำสั่งแบบทางเลือกเชิงซ้อน
|
| 5.1.1 คำสั่ง if-else | 5.1.2 คำสั่ง if |
หน่วยที่ 5 คำสั่งควบคุมแบบทางเลือก
จากโปรแกรมที่ได้ศึกษามาจากหน่วยที่ 4 คำสั่งพื้นฐานในภาษาซี จะเป็นการทำงานทีละคำสั่งตามลำดับขั้น สามารถเขียนผังงาน (Flowchart) ได้ดังภาพ
แสดงรูปแบบผังงานแบบตามลำดับขั้นทั่วไป
ลักษณะของการทำงานทีละคำสั่งแบบตามลำดับขั้นนั้น คำสั่งทุกคำสั่งจะถูกประมวลผลตั้งแต่เริ่มต้นจนสิ้นสุดโปรแกรม ถือเป็นโปรแกรมการทำงานที่ไม่ซับซ้อน
ในภาษาซียังมีคำสั่งควบคุมแบบอื่น ที่ให้เลือกทำหรือไม่ทำคำสั่งก็ได้ ตามเงื่อนไขที่กำหนดไว้ ลักษณะนี้เรียกว่า โครงสร้างแบบทางเลือก มีคำสั่งควบคุมแบบทางเลือก ดังต่อไปนี้
จากหน่วยที่ 3 ข้อมูลพื้นฐานและตัวดำเนินการ ได้เรียนรู้ตัวดำเนินการเปรียบเทียบ ตัวดำเนินการตรรกะและนิพจน์ แล้ว ซึ่งสามารถนำมาประยุกต์ใช้กับหน่วยนี้ในส่วนของการกำหนดเงื่อนไขทางเลือก โปรแกรมจะซับซ้อนมากหรือน้อย ก็ขึ้นอยู่กับเงื่อนไขว่าซับซ้อนมากน้อยระดับใด หากเงื่อนไขซับซ้อนมาก
โปรแกรมก็จะซับซ้อนมาก หากเงื่อนไขซับซ้อนน้อย โปรแกรมก็จะซับซ้อนน้อยด้วยเช่นกัน
5.1.1 คำสั่ง if-else
ผังงานแสดงการทำงานแบบทางเลือก (แบบ 2 ทาง)
คำสั่ง if-else ใช้สำหรับการเขี่ยนโปรแกรมเลือกทำตามเงื่อนไขทางเลือกที่กำหนด
มีรูปแบบดังนี้
|
รูปแบบคำสั่ง if-else
| if (เงื่อนไขทางเลือก)
คำสั่ง จริง; else คำสั่ง เท็จ;
| if (เงื่อนไขทางเลือก) {
คำสั่ง จริง 1; คำสั่ง จริง 2;
.
.
.
คำสั่ง จริง n; } else { คำสั่ง เท็จ 1; คำสั่ง เท็จ 2;
.
.
.
คำสั่ง เท็จ n;
}
|
|
|
เงื่อนไขทางเลือก หมายถึง นิพจน์ใด ๆ ที่สามารถประเมินค่าได้ ในกรณีที่ เงื่อนไขทางเลือก มีค่าไม่เท่ากับศูนย์ แสดงว่ามีค่าเป็นจริง จะทำคำสั่งหลังเงื่อนไข
แต่กรณีที่ เงื่อนไขทางเลือก มีค่าเท่ากับศูนย์ แสดงว่ามีค่าเป็นเท็จ จะทำคำสั่งหลัง else
|
|
ข้อสังเกต หากมีคำสั่งใน if มากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย {}
|
|
5.1.2 คำสั่ง if
ผังงานแสดงการทำงานแบบทางเลือก (แบบทางเดียว)
คำสั่ง if ใช้สำหรับให้ทำคำสั่ง เฉพาะกรณีที่เงือนไขทางเลือก เป็นจริง
และไม่ต้องทำอะไร เมื่อเงื่อนไขเป็นเท็จ มีรูปแบบดังนี้
|
รูปแบบคำสั่ง if
| if (เงื่อนไขทางเลือก)
คำสั่ง จริง;
| if (เงื่อนไขทางเลือก) {
คำสั่ง จริง 1; คำสั่ง จริง 2;
.
.
.
คำสั่ง จริง n; }
|
|
|
ข้อสังเกต 1. หากเงื่อนไขทางเลือก มีค่าเป็นเท็จ จะไม่มีการประมวลผลคำสั่งใด ๆ
|
|
2.
หากมีคำสั่งใน if มากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย {}
|
|
|
|
ตัวอย่างที่ 1
| จงเขียนโปรแกรมตัดเกรด ผ่าน/ตก ( ex5-01.c )
|
| โดยคะแนน >= 50 ผ่าน และ คะแนน < 50 ตก
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
|
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้
|
|
|
บรรทัด
| รหัสต้นฉบับ (Source Code)
| อธิบายคำสั่ง
| /*1*/
| #include <stdio.h>
| /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
| /*2*/
| int main() {
| /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
| /*3*/
| int score ;
| /* ประกาศตัวแปร score เป็นชนิดจำนวนเต็ม (สำหรับเก็บคะแนน) */
| /*4*/
| printf("Input Score : ");
| /* แสดงข้อความ "Input Score : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
| /*5*/
| scanf("%d" , &score);
| /* รับค่าคะแนนเป็นจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร score เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
| /*6*/
| if (score >= 50)
| /* ตรวจสอบ ค่า score มากกว่าหรือเท่ากับ 50 จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งหลังเงื่อนไข บรรทัดที่ 7 ถ้าเท็จ เริ่มทำคำสั่งหลัง else บรรทัดที่ 9 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
| /*7*/
| printf("%d -> Pass" , score);
| /* แสดงข้อความ "%d -> Pass" โดยแสดงค่า score ใน %d เสร็จแล้วไปทำคำสั่งบรรทัดที่ 10 */
| /*8*/
| else
| /* ทำกรณีผลการตรวจสอบเงื่อนไข ในคำสั่งบรรทัดที่ 6 เป็นเท็จ */
| /*9*/
| printf("%d -> Fail" , score);
| /* แสดงข้อความ "%d -> Fail" โดยแสดงค่า score ใน %d เสร็จแล้วไปทำคำสั่งบรรทัดที่ 10 */
| /*10*/
| return 0;
| /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
| /*11*/
| }
| /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
|
|
|
|
ตัวอย่างผลการรันโปรแกรม
|
|
|
|
|
|
ตัวอย่างที่ 2
| จงเขียนโปรแกรมตรวจสอบเลขคู่เลขคี่ ( ex5-02.c )
|
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
|
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้
|
|
|
บรรทัด
| รหัสต้นฉบับ (Source Code)
| อธิบายคำสั่ง
| /*1*/
| #include <stdio.h>
| /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
| /*2*/
| int main() {
| /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
| /*3*/
| int num ;
| /* ประกาศตัวแปร num เป็นชนิดจำนวนเต็ม */
| /*4*/
| printf("Input Number : ");
| /* แสดงข้อความ "Input Number : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
| /*5*/
| scanf("%d" , &num);
| /* รับค่าจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร num เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
| /*6*/
| if (num % 2 == 0)
| /* ตรวจสอบ ค่า num % 2 เท่ากับ 0 จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งหลังเงื่อนไข บรรทัดที่ 7 ถ้าเท็จ เริ่มทำคำสั่งหลัง else บรรทัดที่ 9 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
| /*7*/
| printf("%d is Even." , num);
| /* แสดงข้อความ "%d is Even." โดยแสดงค่า num ใน %d เสร็จแล้วไปทำคำสั่งบรรทัดที่ 10 */
| /*8*/
| else
| /* ทำกรณีผลการตรวจสอบเงื่อนไข ในคำสั่งบรรทัดที่ 6 เป็นเท็จ */
| /*9*/
| printf("%d is Odd." , num);
| /* แสดงข้อความ "%d is Odd." โดยแสดงค่า num ใน %d เสร็จแล้วไปทำคำสั่งบรรทัดที่ 10 */
| /*10*/
| return 0;
| /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
| /*11*/
| }
| /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
|
|
|
|
ตัวอย่างผลการรันโปรแกรม
|
|
|
|
|
|
ตัวอย่างที่ 3
| จงเขียนโปรแกรมรับค่าจำนวนจริง 2 จำนวน แล้วหาผลหาร โดยจำนวนแรกเป็นตัวตั้ง จำนวนที่ 2 เป็นตัวหาร หากตัวหารเป็น 0 ให้แจ้งข้อความว่า "cannot devide by zero." ( ex5-03.c )
|
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
|
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้
|
|
|
บรรทัด
| รหัสต้นฉบับ (Source Code)
| อธิบายคำสั่ง
| /*1*/
| #include <stdio.h>
| /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
| /*2*/
| int main() {
| /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
| /*3*/
| float x , y ;
| /* ประกาศตัวแปร x และ y เป็นชนิดจำนวนจริง */
| /*4*/
| printf("<<< x divide by y >>>\n");
| /* แสดงข้อความ "<<< x divide by y >>>" ทางจอภาพ แจ้งผู้ใช้โปรแกรม แล้วขึ้นบรรทัดใหม่ */
| /*5*/
| printf("Input Number x : ");
| /* แสดงข้อความ "Input Number x : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
| /*6*/
| scanf("%f" , &x);
| /* รับค่าจำนวนจริง จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร x เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
| /*7*/
| printf("Input Number y : ");
| /* แสดงข้อความ "Input Number y : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
| /*8*/
| scanf("%f" , &y);
| /* รับค่าจำนวนจริง จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร y เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
| /*9*/
| if (y == 0.0)
| /* ตรวจสอบ ค่า y เท่ากับ 0 จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งหลังเงื่อนไข บรรทัดที่ 10 ถ้าเท็จ เริ่มทำคำสั่งหลัง else บรรทัดที่ 12 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
| /*10*/
| printf("\ncannot devide by zero.");
| /* ขึ้นบรรทัดใหม่ แล้วแสดงข้อความ "cannot devide by zero." เสร็จแล้วไปทำคำสั่งบรรทัดที่ 13 */
| /*11*/
| else
| /* ทำกรณีผลการตรวจสอบเงื่อนไข ในคำสั่งบรรทัดที่ 9 เป็นเท็จ */
| /*12*/
| printf("\n%.2f/%.2f = %.2f" , x , y ,x/y);
| /* ขึ้นบรรทัดใหม่ แล้วแสดงข้อความ "%.2f/%.2f = %.2f" โดยแสดงค่า x ใน %.2f ตัวแรก แสดงค่า y ใน %.2f ตัว 2 และแสดงค่า x / y ใน %.2f ตัว 3 เป็นจำนวนจริงทศนิยม 2 ตำแหน่ง เสร็จแล้วไปทำคำสั่งบรรทัดที่ 13 */
| /*13*/
| return 0;
| /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
| /*14*/
| }
| /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
|
|
|
|
ตัวอย่างผลการรันโปรแกรม (ทั้งกรณีเงื่อนไขเป็นจริงและเท็จ)
|
|
|
|
|
|
|
|
|
ตัวอย่างที่ 4
| จงเขียนโปรแกรมรับจำนวนเต็ม 2 จำนวน แล้วเรียงจำนวนจากน้อยไปมาก ( ex5-04.c )
|
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
|
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้
|
|
|
บรรทัด
| รหัสต้นฉบับ (Source Code)
| อธิบายคำสั่ง
| /*1*/
| #include <stdio.h>
| /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
| /*2*/
| int main() {
| /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
| /*3*/
| int a , b , temp ;
| /* ประกาศตัวแปร a b และ temp เป็นชนิดจำนวนเต็ม (a และ b สำหรับเก็บจำนวนที่จะนำมาสลับกัน ส่วน temp เอาไว้พักข้อมูลชั่วคราว) */
| /*4*/
| printf("swap (small -> big)\n");
| /* แสดงข้อความ "swap (small -> big)" แจ้งผู้ใช้โปรแกรม แล้วขึ้นบรรทัดใหม่ */
| /*5*/
| printf("Input Number a : ");
| /* แสดงข้อความ "Input Number a : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
| /*6*/
| scanf("%d" , &a);
| /* รับค่าจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร a เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
| /*7*/
| printf("Input Number b : ");
| /* แสดงข้อความ "Input Number b : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
| /*8*/
| scanf("%d" , &b);
| /* รับค่าจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร b เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
| /*9*/
| if (a > b) {
| /* ตรวจสอบ ค่า a มากกว่า ค่า b จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งหลังเงื่อนไข บรรทัดที่ 10 ถ้าเท็จ (ในโปรแกรมนี้ไม่มีคำสั่งกรณีเป็นเท็จ) ให้ไปทำคำสั่งบรรทัดที่ 14 (มีคำสั่งย่อยมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งย่อยภายในเครื่องหมาย { } */
| /*10*/
| temp = a;
| /* เป็นคำสั่งกำหนดค่า โดยนำค่า a ไปเก็บไว้ในตัวแปร temp */
| /*11*/
| a = b;
| /* เป็นคำสั่งกำหนดค่า โดยนำค่า b ไปเก็บไว้ในตัวแปร a */
| /*12*/
| b = temp;
| /* เป็นคำสั่งกำหนดค่า โดยนำค่า temp ไปเก็บไว้ในตัวแปร b */
| /*13*/
| }
| /* สิ้นสุด block ขอบเขตของคำสั่ง if กรณีเป็นจริง (ในบรรทัดที่ 9) */
| /*14*/
| printf("\n%d %d" , a , b);
| /* ขึ้นบรรทัดใหม่ 1 บรรทัด แล้วแสดงข้อความ "%d %d" โดยแสดงค่า a ใน %d ตัวแรก และแสดงค่า b ใน %d ตัวที่ 2 */
| /*15*/
| return 0;
| /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
| /*16*/
| }
| /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
|
|
|
|
ตัวอย่างผลการรันโปรแกรม
|
|
|
|
คำสั่ง if-else if-else เป็นคำสั่งควบคุมแบบทางเลือก แบบมีเงื่อนไขทางเลือกหลายเงื่อนไข ลักษณะการทำงานจะตรวจสอบเงื่อนไขทางเลือก ลำดับบนสุดก่อน หากตรวจสอบแล้ว พบว่า เงื่อนไขทางเลือก
- มีค่าเป็นจริง จะทำคำสั่งที่อยู่ถัดจากเงื่อนไขทางเลือกนั้น แล้วจะออกจากคำสั่ง if ไปทำคำสั่งถัดไป โดยไม่ตรวจสอบเงื่อนไขทางเลือกที่เหลืออีก
- มีค่าเป็นเท็จ จะตรวจสอบเงื่อนไขทางเลือกลำดับถัดไป
- มีค่าเป็นเท็จทั้งหมด (ไม่มีเงื่อนไขใดเป็นจริงเลย) จะทำคำสั่งที่อยู่ถัดจาก else
ผังงานแสดงการทำงาน คำสั่ง if-else if-else
คำสั่ง if-else if-else มีรูปแบบการใช้ ดังนี้
|
รูปแบบคำสั่ง if-else if-else
| if (เงื่อนไขทางเลือก 1)
คำสั่งเงื่อนไขทางเลือก 1 เป็นจริง; else if (เงื่อนไขทางเลือก 2) คำสั่งเงื่อนไขทางเลือก 2 เป็นจริง;else if (เงื่อนไขทางเลือก 3) คำสั่งเงื่อนไขทางเลือก 3 เป็นจริง; else if (เงื่อนไขทางเลือก.....)
.
.
. else if (เงื่อนไขทางเลือก M) คำสั่งเงื่อนไขทางเลือก M เป็นจริง;
else คำสั่งเงื่อนไขทางเลือก M เป็นเท็จ;
| if (เงื่อนไขทางเลือก 1){
คำสั่ง 1 เงื่อนไขทางเลือก 1 เป็นจริง; คำสั่ง 2 เงื่อนไขทางเลือก 1 เป็นจริง; คำสั่ง 3 เงื่อนไขทางเลือก 1 เป็นจริง; . .
.
คำสั่ง N เงื่อนไขทางเลือก 1 เป็นจริง;
}else if (เงื่อนไขทางเลือก 2){ คำสั่ง 1 เงื่อนไขทางเลือก 2 เป็นจริง; คำสั่ง 2 เงื่อนไขทางเลือก 2 เป็นจริง; คำสั่ง 3 เงื่อนไขทางเลือก 2 เป็นจริง;
.
.
.
คำสั่ง N เงื่อนไขทางเลือก 2 เป็นจริง;}else if (เงื่อนไขทางเลือก 3){ คำสั่ง 1 เงื่อนไขทางเลือก 3 เป็นจริง; คำสั่ง 2 เงื่อนไขทางเลือก 3 เป็นจริง;
คำสั่ง 3 เงื่อนไขทางเลือก 3 เป็นจริง;
.
.
.
คำสั่ง N เงื่อนไขทางเลือก 3 เป็นจริง; }else if (เงื่อนไขทางเลือก.....){
.
.
. }else if (เงื่อนไขทางเลือก M){ คำสั่ง 1 เงื่อนไขทางเลือก M เป็นจริง; คำสั่ง 2
เงื่อนไขทางเลือก M เป็นจริง; คำสั่ง 3 เงื่อนไขทางเลือก M เป็นจริง;
.
.
.
คำสั่ง N เงื่อนไขทางเลือก M เป็นจริง; }else{ คำสั่ง 1 เงื่อนไขทางเลือก M เป็นเท็จ; คำสั่ง 2 เงื่อนไขทางเลือก M เป็นเท็จ; คำสั่ง 3
เงื่อนไขทางเลือก M เป็นเท็จ; .
.
.
คำสั่ง N เงื่อนไขทางเลือก M เป็นเท็จ; }
|
|
|
ข้อสังเกต หากมีคำสั่งใน if มากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย {}
|
|
|
|
ตัวอย่างที่ 5
| จงเขียนโปรแกรมตัดเกรด 5 เกรด ตามช่วงคะแนน ดังนี้ ( ex5-05.c )
|
|
ช่วงคะแนน
| เกรด
| >= 80
| 4.00
| >= 70 และ < 80
| 3.00
| >= 60 และ < 70
| 2.00
| >= 50 และ < 60
| 1.00
| < 50
| 0.00
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
|
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้
|
|
|
บรรทัด
| รหัสต้นฉบับ (Source Code)
| อธิบายคำสั่ง
| /*1*/
| #include <stdio.h>
| /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
| /*2*/
| int main() {
| /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
| /*3*/
| int score;
| /* ประกาศตัวแปร score เป็นชนิดจำนวนเต็ม */
| /*4*/
| float grade;
| /* ประกาศตัวแปร grade เป็นชนิดจำนวนจริง */
| /*5*/
| printf("+++ Grade +++\n");
| /* แสดงข้อความ "+++ Grade +++" แจ้งผู้ใช้โปรแกรม แล้วขึ้นบรรทัดใหม่ */
| /*6*/
| printf("Input Score : ");
| /* แสดงข้อความ "Input Score : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
| /*7*/
| scanf("%d" , &score);
| /* รับค่าจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร score เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
| /*8*/
| if (score >= 80)
| /* ตรวจสอบ ค่า score มากกว่าหรือเท่ากับ 80 จริงหรือไม่ ถ้าจริง ทำคำสั่งหลังเงื่อนไข บรรทัดที่ 9 ถ้าเท็จ ทำคำสั่งบรรทัดที่ 10 */
| /*9*/
| grade = 4.00;
| /* เป็นคำสั่งกำหนดค่า โดยนำ 4.00 ไปเก็บไว้ในตัวแปร grade เสร็จแล้วให้ไปเริ่มทำคำสั่งบรรทัดที่ 18 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
| /*10*/
| else if (score >= 70)
| /* ตรวจสอบ ค่า score มากกว่าหรือเท่ากับ 70 จริงหรือไม่ ถ้าจริง ทำคำสั่งหลังเงื่อนไข บรรทัดที่ 11 ถ้าเท็จ ทำคำสั่งบรรทัดที่ 12 */
| /*11*/
| grade = 3.00;
| /* เป็นคำสั่งกำหนดค่า โดยนำ 3.00 ไปเก็บไว้ในตัวแปร grade เสร็จแล้วให้ไปเริ่มทำคำสั่งบรรทัดที่ 18 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
| /*12*/
| else if (score >= 60)
| /* ตรวจสอบ ค่า score มากกว่าหรือเท่ากับ 60 จริงหรือไม่ ถ้าจริง ทำคำสั่งหลังเงื่อนไข บรรทัดที่ 13 ถ้าเท็จ ทำคำสั่งบรรทัดที่ 14 */
| /*13*/
| grade = 2.00;
| /* เป็นคำสั่งกำหนดค่า โดยนำ 2.00 ไปเก็บไว้ในตัวแปร grade เสร็จแล้วให้ไปเริ่มทำคำสั่งบรรทัดที่ 18 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
| /*14*/
| else if (score >= 50)
| /* ตรวจสอบ ค่า score มากกว่าหรือเท่ากับ 50 จริงหรือไม่ ถ้าจริง ทำคำสั่งหลังเงื่อนไข บรรทัดที่ 15 ถ้าเท็จ ทำคำสั่งหลัง else บรรทัดที่ 17 */
| /*15*/
| grade = 1.00;
| /* เป็นคำสั่งกำหนดค่า โดยนำ 1.00 ไปเก็บไว้ในตัวแปร grade เสร็จแล้วให้ไปเริ่มทำคำสั่งบรรทัดที่ 18 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
| /*16*/
| else
| /* ทำเมื่อกรณีตรวจสอบเงื่อนไขบรรทัดที่ 14 เป็นเท็จ */
| /*17*/
| grade = 0.00;
| /* เป็นคำสั่งกำหนดค่า โดยนำ 0.00 ไปเก็บไว้ในตัวแปร grade เสร็จแล้วให้ไปเริ่มทำคำสั่งบรรทัดที่ 18 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
| /*18*/
| printf("\nScore : %d -> Grade : %.2f" , score , grade);
| /* ขึ้นบรรทัดใหม่ 1 บรรทัด แล้วแสดงข้อความ "Score : %d -> Grade : %.2f" โดยแสดงค่า score ใน %d และแสดงค่า grade ใน %.2f เป็นทศนิยม 2 ตำแหน่ง */
| /*19*/
| return 0;
| /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
| /*20*/
| }
| /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
|
|
|
|
ตัวอย่างผลการรันโปรแกรม
|
|
|
|