หน้าแรก
คำชี้แจงก่อนเรียน
รายละเอียดรายวิชา

 แบบทดสอบก่อนเรียน
 หน่วยที่ 1 ภาษาคอมพิวเตอร์เบื้องต้น
 หน่วยที่ 2 เริ่มต้นกับภาษาซี
 หน่วยที่ 3 ข้อมูลพื้นฐานและตัวดำเนินการ
 หน่วยที่ 4 คำสั่งพื้นฐานในภาษาซี
 หน่วยที่ 5 คำสั่งควบคุมแบบทางเลือก
แบบทดสอบก่อนเรียนประจำหน่วย
5.1 คำสั่ง if-else
5.2 คำสั่ง if-else if-else
แบบฝึกหัดที่ 5.1
5.3 คำสั่ง switch
5.4 การใช้คำสั่งแบบทางเลือกเชิงซ้อน
แบบฝึกหัดที่ 5.2
แบบทดสอบหลังเรียนประจำหน่วย
 หน่วยที่ 6 คำสั่งควบคุมแบบวนซ้ำ
 แบบทดสอบหลังเรียน
 บรรณานุกรม

แจ้งข่าว
 แหล่งเรียนรู้เพิ่มเติม
 ติดต่อครูผู้สอน
 ผู้พัฒนาบทเรียน
 

 
5.1 คำสั่ง if-else
5.2 คำสั่ง if-else if-else
5.3 คำสั่ง switch
5.4 การใช้คำสั่งแบบทางเลือกเชิงซ้อน
 
 

คำสั่ง switch...case เป็นคำสั่งควบคุมแบบทางเลือก ที่ทางเลือกขึ้นอยู่กับ ค่าของตัวแปรหรือนิพจน์ ที่ให้ผลลัพธ์ เป็นจำนวนเต็มหรืออักขระ สามารถคาดการณ์ นำมาสร้างเป็นกรณีทางเลือกได้

คำสั่ง switch...case มีรูปแบบการใช้ ดังนี้

 
 
รูปแบบคำสั่ง switch...case


switch (
ตัวแปรหรือนิพจน์) {

case
ค่าคงตัว 1 :
คำสั่งกรณี ค่าคงตัว 1;
break;
case
ค่าคงตัว 2 :
คำสั่งกรณี ค่าคงตัว 2;
break;
case
ค่าคงตัว 3 :
คำสั่งกรณี ค่าคงตัว 3;
break;
.
.
.
case
ค่าคงตัว n :
คำสั่งกรณค่าคงตัว n;
break;
default :

คำสั่ง default ;
}

 

อธิบายรูปแบบคำสั่ง switch...case
 
ตัวแปรหรือนิพจน์ จะต้องให้ค่าเป็นจำนวนเต็ม หรือ อักขระ
 
ค่าคงตัว 1-n คือ ค่าคงตัว ชนิด จำนวนเต็ม หรือ อักขระ ตัวอย่าง ค่าคงตัวที่เป็นจำนวนเต็ม
เช่น 1 เป็นต้น ค่าคงตัวที่เป็นอักขระ เช่น 'A' เป็นต้น
 
หาก ค่าตัวแปรหรือนิพจน์ เท่ากับ ค่าคงตัวใน case ใด คำสั่งใน case นั้น จะถูกดำเนินการ
 
หาก ไม่มีค่าคงตัวใน case ใด เท่ากันกับ ค่าตัวแปรหรือนิพจน์ เลย
คำสั่งใน default จะถูกดำเนินการ
 
คำสั่งใน case ที่ถูกดำเนินการ จะสิ้นสุดก็ต่อเมื่อ ประมวลผลคำสั่ง break เท่านั้น
ดังนั้น หาก case ใด ไม่มีคำสั่ง break ปิดท้าย คำสั่งใน case ถัดไป จะถูกดำเนินการด้วย
 
defalut ไม่จำเป็นต้องมีคำสั่ง break เพราะเป็นคำสั่งสุดท้ายของ switch อยู่แล้ว
 
 
   
ตัวอย่างที่ 6 จงเขียนโปรแกรมรับค่าตัวเลข แล้วแสดงดาวตามจำนวนบรรทัดเท่ากับตัวเลขที่รับเข้ามา ดังภาพตัวอย่าง กรณีรับค่ามาเท่ากับ 3 ( ex5-06.c )
 
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง
/*1*/ #include <stdio.h> /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
/*2*/ int main() { /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
/*3*/ int m; /* ประกาศตัวแปร m เป็นชนิดจำนวนเต็ม */
/*4*/ printf("Input Number (0 - 3) : "); /* แสดงข้อความ "Input Number (0 - 3) : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
/*5*/ scanf("%d" , &m); /* รับค่าจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร m เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
/*6*/ switch (m) { /* ตรวจสอค่า m เท่ากับ ค่าคงตัว ใน case ใด และจะเริ่มทำคำสั่งใน case นั้น และ case ที่อยู่ถัดไป จนสิ้นสุดขอบเขตคำสั่ง switch (บรรทัดที่ 16) ถ้าค่า m ไม่เท่ากับ ค่าคงตัวใน case ใดเลย จะไปเริ่มทำคำสั่งในบรรทัดที่ 14 */
/*7*/ case 3 : /* กรณีค่า m เท่ากับ 3 */
/*8*/ printf("***3***\n"); /* แสดงข้อความ "***3***" แล้วขึ้นบรรทัดใหม่ */
/*9*/ case 2 : /* กรณีค่า m เท่ากับ 2 */
/*10*/ printf("**2**\n"); /* แสดงข้อความ "**2**" แล้วขึ้นบรรทัดใหม่ */
/*11*/ case 1 : /* กรณีค่า m เท่ากับ 1 */
/*12*/ printf("*1*\n"); /* แสดงข้อความ "*1*" แล้วขึ้นบรรทัดใหม่ */
/*13*/ case 0 : /* กรณีค่า m เท่ากับ 0 (ไม่ต้องแสดงข้อความใด ๆ) */
/*14*/ default : /* กรณีค่า m ไม่เท่ากับ ค่าใน case ใด ๆ เลย */
/*15*/ printf("*\n"); /* แสดงข้อความ "*" แล้วขึ้นบรรทัดใหม่ */
/*16*/ } /* สิ้นสุด block ขอบเขตของคำสั่ง switch (ในบรรทัดที่ 6) */
/*17*/ return 0; /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
/*18*/ } /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
   
ตัวอย่างผลการรันโปรแกรม (เมื่อ m เป็น 3)
   
   
ตัวอย่างที่ 7 จงเขียนโปรแกรมแปลงตัวเลขโดด 0 - 3 ที่ผู้ใช้ป้อนเข้ามา ให้เป็นตัวหนังสือ Number to word ( ex5-07.c )
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง
/*1*/ #include <stdio.h> /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
/*2*/ int main() { /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
/*3*/ int m; /* ประกาศตัวแปร m เป็นชนิดจำนวนเต็ม */
/*4*/ printf("Input Number (0 - 3) : "); /* แสดงข้อความ "Input Number (0 - 3) : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
/*5*/ scanf("%d" , &m); /* รับค่าจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร m เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
/*6*/ switch (m) { /* ตรวจสอค่า m เท่ากับ ค่าคงตัว ใน case ใด และจะเริ่มทำคำสั่งใน case นั้น ถ้าค่า m ไม่เท่ากับ ค่าคงตัวใน case ใดเลย จะไปเริ่มทำคำสั่งในบรรทัดที่ 19 */
/*7*/ case 3 : /* กรณีค่า m เท่ากับ 3 */
/*8*/ printf("%d -> Three\n" , m); /* แสดงข้อความ "%d -> Three" โดยแสดงค่า m ใน %d แล้วขึ้นบรรทัดใหม่ */
/*9*/ break; /* ไปเริ่มทำคำสั่งในบรรทัดที่ 22 */
/*10*/ case 2 : /* กรณีค่า m เท่ากับ 2 */
/*11*/ printf("%d -> Two\n" , m); /* แสดงข้อความ "%d -> Two" โดยแสดงค่า m ใน %d แล้วขึ้นบรรทัดใหม่ */
/*12*/ break; /* ไปเริ่มทำคำสั่งในบรรทัดที่ 22 */
/*13*/ case 1 : /* กรณีค่า m เท่ากับ 1 */
/*14*/ printf("%d -> One\n" , m); /* แสดงข้อความ "%d -> One" โดยแสดงค่า m ใน %d แล้วขึ้นบรรทัดใหม่ */
/*15*/ break; /* ไปเริ่มทำคำสั่งในบรรทัดที่ 22 */
/*16*/ case 0 : /* กรณีค่า m เท่ากับ 0 */
/*17*/ printf("%d -> Zero\n" , m); /* แสดงข้อความ "%d -> Zero" โดยแสดงค่า m ใน %d แล้วขึ้นบรรทัดใหม่ */
/*18*/ break; /* ไปเริ่มทำคำสั่งในบรรทัดที่ 22 */
/*19*/ default : /* กรณีค่า m ไม่เท่ากับ ค่าใน case ใด ๆ เลย */
/*20*/ printf("!!!Error.Input Number 0 to 3 only.\n"); /* แสดงข้อความ "!!!Error.Input Number 0 to 3 only." แล้วขึ้นบรรทัดใหม่ */
/*21*/ } /* สิ้นสุด block ขอบเขตของคำสั่ง switch (ในบรรทัดที่ 6) */
/*22*/ return 0; /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
/*23*/ } /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
   
ตัวอย่างผลการรันโปรแกรม
   
 
 
 
การใช้คำสั่งแบบทางเลือกเชิงซ้อน หมายถึง การใช้คำสั่งควบคุมแบบทางเลือกซ้อนกัน โปรแกรมที่ซับซ้อนมาก ๆ ก็จะมีการใช้คำสั่งควบคุมแบบทางเลือกซ้อนกันมากไปด้วย คำสั่งควบคุมแบบทางเลือก สามารถซ้อนอยู่ใน ส่วนทางเลือกที่เป็นจริงหรือเป็นเท็จก็ได้ ลักษณะการทำงานจะตรวจสอบเงื่อนไขทางเลือก นอกสุดก่อน จึงจะตรวจสอบเงือนไขของคำสั่งควบคุมแบบทางเลือก ที่ซ้อนอยู่ในนั้น คำสั่งควบคุมแบบทางเลือกที่ซ้อนกันอยู่ ถือว่าเป็นคำสั่งย่อยในโครงสร้างควบคุมแบบทางเลือกนั้น (Compound Statement)
ข้อสังเกต คำสั่งควบคุมแบบทางเลือก 1 ชุด (Compound Statement) ถือเป็น 1 คำสั่ง
 
การใช้คำสั่งแบบทางเลือกเชิงซ้อน ไม่มีรูปแบบที่แน่นอน ขึ้นอยู่กับรูปแบบคำสั่งแบบทางเลือกข้างต้น มาซ้อนกัน รูปแบบหลักจึงเป็นไปตามรูปแบบคำสั่งแบบทางเลือกเหล่านั้น ตัวอย่างรูปแบบการใช้ มีดังนี้
 
 
ตัวอย่างรูปแบบการใช้ if เชิงซ้อน (แบบ if-else ซ้อนกัน)


if (เงื่อนไขทางเลือก 1)

if (เงื่อนไขทางเลือก 2)

คำสั่งเงื่อนไขทางเลือก 2 เป็นจริง;

else

คำสั่งเงื่อนไขทางเลือก 2 เป็นเท็จ;

 

 

 

 

else

if (เงื่อนไขทางเลือก 3)

คำสั่งเงื่อนไขทางเลือก 3 เป็นจริง;

else

คำสั่งเงื่อนไขทางเลือก 3 เป็นเท็จ;

 

 

 

 

 


if (เงื่อนไขทางเลือก 1) {

คำสั่งเงื่อนไขทางเลือก 1 เป็นจริง;

if (เงื่อนไขทางเลือก 2) {

คำสั่ง 1 เงื่อนไขทางเลือก 2 เป็นจริง;

คำสั่ง 2 เงื่อนไขทางเลือก 2 เป็นจริง;

คำสั่ง 3 เงื่อนไขทางเลือก 2 เป็นจริง;
.
.
.
คำสั่ง N เงื่อนไขทางเลือก 2 เป็นจริง;

} else {

คำสั่ง 1 เงื่อนไขทางเลือก 2 เป็นเท็จ;

คำสั่ง 2 เงื่อนไขทางเลือก 2 เป็นเท็จ;

คำสั่ง 3 เงื่อนไขทางเลือก 2 เป็นเท็จ;
.
.
.
คำสั่ง N เงื่อนไขทางเลือก 2 เป็นเท็จ;

}

 

 

 

 

 

 

 

 

 

 

 

 

 


} else {

คำสั่งเงื่อนไขทางเลือก 1 เป็นเท็จ;

if (เงื่อนไขทางเลือก 3) {

คำสั่ง 1 เงื่อนไขทางเลือก 3 เป็นจริง;

คำสั่ง 2 เงื่อนไขทางเลือก 3 เป็นจริง;

คำสั่ง 3 เงื่อนไขทางเลือก 3 เป็นจริง;
.
.
.
คำสั่ง N เงื่อนไขทางเลือก 3 เป็นจริง;

} else {

คำสั่ง 1 เงื่อนไขทางเลือก 3 เป็นเท็จ;

คำสั่ง 2 เงื่อนไขทางเลือก 3 เป็นเท็จ;

คำสั่ง 3 เงื่อนไขทางเลือก 3 เป็นเท็จ;
.
.
.
คำสั่ง N เงื่อนไขทางเลือก 3 เป็นเท็จ;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

ข้อสังเกต 1. หากมีคำสั่งใน if มากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย {}

2. คำสั่ง if ถือเป็น 1 คำสั่งที่ประกอบจากคำสั่งหลายคำสั่งรวมกัน (Compound Statement)

   
ตัวอย่างที่ 8 จงเขียนโปรแกรมรับค่าจำนวนเต็ม 3 จำนวน แล้วหาค่าสูงที่สุด (Maximum)
( ex5-08.c )
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง
/*1*/ #include <stdio.h> /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
/*2*/ int main() { /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
/*3*/ int x , y , z; /* ประกาศตัวแปร x y และ z เป็นชนิดจำนวนเต็ม */
/*4*/ printf("+++ Maximum +++\n"); /* แสดงข้อความ "+++ Maximum +++" แจ้งผู้ใช้โปรแกรม แล้วขึ้นบรรทัดใหม่ */
/*5*/ printf("Input 3 Number to x y z : "); /* แสดงข้อความ "Input 3 Number to x y z : " เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
/*6*/ scanf("%d %d %d" , &x , &y , &z); /* รับค่าจำนวนเต็ม 3 จำนวน (แต่ละจำนวนคั่นด้วยช่องว่าง) จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร x y และ z เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
/*7*/ if (x >= y) /* ตรวจสอบ ค่า x มากกว่าหรือเท่ากับ ค่า y จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งหลังเงื่อนไข บรรทัดที่ 8 ถ้าเท็จ เริ่มทำคำสั่งหลัง else บรรทัดที่ 13 (มีคำสั่งย่อยเชิงประกอบ คำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
/*8*/ if (x >= z) /* ตรวจสอบ ค่า x มากกว่าหรือเท่ากับ ค่า z จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งหลังเงื่อนไข บรรทัดที่ 9 ถ้าเท็จ เริ่มทำคำสั่งหลัง else บรรทัดที่ 11 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
/*9*/ printf("\n%d is Maximum." , x); /* ขึ้นบรรทัดใหม่ แล้วแสดงข้อความ "%d is Maximum." โดยแสดงค่า x ใน %d */
/*10*/ else /* ทำเมื่อกรณีตรวจสอบเงื่อนไขบรรทัดที่ 8 เป็นเท็จ (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
/*11*/ printf("\n%d is Maximum." , z); /* ขึ้นบรรทัดใหม่ แล้วแสดงข้อความ "%d is Maximum." โดยแสดงค่า z ใน %d */
/*12*/ else /* ทำเมื่อกรณีตรวจสอบเงื่อนไขบรรทัดที่ 7 เป็นเท็จ (ภายใน else มีคำสั่งย่อยเชิงประกอบ คำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
/*13*/ if(y >= z) /* ตรวจสอบ ค่า y มากกว่าหรือเท่ากับ ค่า z จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งหลังเงื่อนไข บรรทัดที่ 14 ถ้าเท็จ เริ่มทำคำสั่งหลัง else บรรทัดที่ 16 (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
/*14*/ printf("\n%d is Maximum." , y); /* ขึ้นบรรทัดใหม่ แล้วแสดงข้อความ "%d is Maximum." โดยแสดงค่า y ใน %d */
/*15*/ else /* ทำเมื่อกรณีตรวจสอบเงื่อนไขบรรทัดที่ 13 เป็นเท็จ (มีคำสั่งย่อยคำสั่งเดียวไม่ต้องใส่ { } ก็ได้) */
/*16*/ printf("\n%d is Maximum." , z); /* ขึ้นบรรทัดใหม่ แล้วแสดงข้อความ "%d is Maximum." โดยแสดงค่า z ใน %d */
/*17*/ return 0; /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
/*18*/ } /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
   
ตัวอย่างผลการรันโปรแกรม