ห้องเรียนออนไลน์ของครูจตุรภัทร
 หน้าแรก  แนะนำการใช้บทเรียน  แหล่งเรียนรู้เพิ่มเติม  กระดานถามตอบ & สมุดเยี่ยม (Facebook)  ผู้พัฒนาบทเรียน
 
 
 
   บทเรียนหลัก
แนะนำรายวิชา
แบบทดสอบก่อนเรียน แบบทดสอบก่อนเรียน
บทที่ 1 การพัฒนาโปรแกรม
บทที่ 2 แนะนำภาษาซี
บทที่ 3 ตัวแปร และตัวดำเนินการ
บทที่ 4 คำสั่งควบคุม
บทที่ 5 โครงงานคอมพิวเตอร์
แบบทดสอบหลังเรียน
 
 
บทที่ 4
4.1 คำสั่งควบคุมแบบทางเลือก
 

          โครงสร้างแบบลำดับ (sequential structure) มีลักษณะการประมวลผลโปรแกรมจากคำสั่งแรกของฟังก์ชัน main() จนถึงคำสั่งสุดท้ายของฟังก์ชัน main() สังเกตได้จากตัวอย่างโปรแกรมในหัวข้อที่ผ่านมา นั่นคือ คำสั่งในลำดับที่ n+1 จะถูกประมวลหลังคำสั่งลำดับที่ n เสมอ

          นอกจากโครงสร้างแบบลำดับแล้ว ภาษาซียังมีโครงสร้างแบบอื่นๆ อีก คือ โครงสร้างแบบทางเลือก (selection structure) และโครงสร้างแบบวนซ้ำ (repetition structure)

          โดยโครงสร้างแบบทางเลือก ประกอบด้วย คำสั่ง if คำสั่ง if-else และคำสั่ง switch ส่วนโครงสร้างแบบวนซ้ำ ประกอบด้วย คำสั่ง for คำสั่ง while และ คำสั่ง do-while โครงสร้างทั้งสองแบบจะช่วยให้นักเขียนโปรแกรมสามารถเขียนโปรแกรมเพื่อแก้ปัญหาที่มีเงื่อนไขที่ซับซ้อนมากยิ่งขึ้น เมื่อเปรียบเทียบกับการใช้โครงสร้างแบบลำดับเพียงอย่างเดียว


โครงสร้างแบบลำดับ (sequential structure)
ผังงานโครงสร้างแบบลำดับ (sequential structure)

คำสั่งควบคุมแบบทางเลือก

          คำสั่งควบคุมแบบทางเลือก หรือ โครงสร้างแบบทางเลือก เป็นโครงสร้างที่ใช้สำหรับกำหนดทางเลือกการประมวลผลคำสั่ง โดยขึ้นอยู่กับเงื่อนไขทางเลือกที่เขียนอยู่ในรูปของนิพจน์เปรียบเทียบ (relational expression) หรือ นิพจน์ตรรกะ (boolean expression) ซึ่งใช้ตัวดำเนินการเปรียบเทียบ หรือตัวดำเนินการตรรกะเป็นตัวดำเนินการของพจน์

กลับสู่ด้านบน

คำสั่ง if และ if-else

  • คำสั่ง if

          รูปแบบของคำสั่ง if เป็นดังนี้

if (เงื่อนไขทางเลือก)
  คำสั่ง;


ผังงานของคำสั่ง if
ผังงานของคำสั่ง if

          เงื่อนไขทางเลือก ที่เขียนอยู่ระหว่างเครื่องหมาย ( และ ) เป็นนิพจน์ใด ๆ ที่สามารถประเมินค่าได้

    ในกรณีที่ เงื่อนไขทางเลือก มีค่าเป็น จริง และไม่เท่ากับ 0
  • จะประมวลผลคำสั่ง
    ในกรณีที่ เงื่อนไขทางเลือก มีค่าเป็น เท็จ และเท่ากับ 0
  • จะไม่ประมวลผลคำสั่ง

          คำสั่ง  อาจเป็นคำสั่งอย่างง่าย หรือคำสั่งเชิงประกอบ ตามตัวอย่างที่ 4.1.1

     ตัวอย่างที่ 4.1.1 โปรแกรมทายตัวเลข1

1 //Program: Guess1.c
2  
3 #define TARGET 25
4 #include <stdio.h>
5  
6 void main() {
7   int y;
8  
9   printf("Enter integer value: ");
10   scanf("%d",&y);
11  
12   if (y == TARGET);
13         printf("\nYour guess is correct.");
14   printf("\nGood bye.\n");
15  
16   getch();
17 }

     ผลลัพธ์ของการรันครั้งที่ 1 คือ

Enter integer value: 18 
Good bye.

     ผลลัพธ์ของการรันครั้งที่ 2 คือ

Enter integer value: 25 
Your guess is correct.
Good bye.
    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์

          จากการรันครั้งที่ 1 ตัวแปร y (ในบรรทัดที่ 7) รับค่าจากแป้นพิมพ์ เท่ากับ 18 (ในบรรทัดที่ 10) นิพจน์เปรียบเทียบ y == TARGET (ในบรรทัดที่ 12) จะมีค่าเป็นเท็จ แล้วฟังก์ชัน printf( ) (ในบรรทัดที่ 13) จะไม่ได้ถูกประมวลผล แต่ไปประมวลผลต่อในคำสั่งถัดไป (ในบรรทัดที่ 14) และจนจบโปรแกรม

          จากการรันครั้งที่ 2 ตัวแปร y รับค่าจากแป้นพิมพ์ เท่ากับ 25 ทำให้นิพจน์เปรียบเทียบ y == TARGET มีค่าเป็นจริง แล้วฟังก์ชัน printf( ) (ในบรรทัดที่ 13) ถูกประมวลผล แล้วประมวลผลต่อในคำสั่งถัดไปจนจบโปรแกรม

  • คำสั่ง if-else

          รูปแบบของคำสั่ง if – else เป็นดังนี้

if (เงื่อนไขทางเลือก)
  คำสั่ง1;

else
  คำสั่ง2;

ผังงานของคำสั่ง if-else
ผังงานของคำสั่ง if-else

     ตัวอย่างที่ 4.1.2 โปรแกรมทายตัวเลข2

1 //Program: Guess2.c
2  
3 #define TARGET 25
4 #include <stdio.h>
5  
6 void main() {
7   int y;
8  
9   printf("Enter integer value: ");
10   scanf("%d",&y);
11  
12   if (y == TARGET)
13         printf("Your guess is correct.");
14   else
15         printf("Your guess is incorrect.");
16   printf("\nGood bye.\n");
17  
18   getch();
19 }

     ผลลัพธ์ คือ

Enter integer value: 18 
Your guess is incorrect.
Good bye.
    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์

          จากผลลัพธ์ตัวอย่างที่ 4.1.2 ตัวแปร y รับค่าจากแป้นพิมพ์ เท่ากับ 18 นิพจน์เปรียบเทียบ y == TARGET จะมีค่าเป็นเท็จ จะไม่ประมวลผลฟังก์ชัน printf( ) ในบรรทัดที่ 13 แต่ฟังก์ชัน printf( ) ในบรรทัดที่ 15 จะถูกประมวลผลแทน แล้วไปประมวลผลต่อในคำสั่งถัดไป (ในบรรทัดที่ 16) จนจบโปรแกรม

          จะเห็นได้ว่าคำสั่ง if และคำสั่ง if – else ทำให้เกิดทางเลือกของการประมวลผลภายใต้เงื่อนไขที่กำหนดโดยนิพจน์ที่อยู่ต่อจาก if ในคำสั่ง if ถ้าเงื่อนไขเป็นเท็จคำสั่งที่อยู่หลังเงื่อนไขจะไม่ถูกประมวลผล สำหรับในกรณีคำสั่ง if – else จะมีเพียงคำสั่งหนึ่งคำสั่งใดเท่านั้นที่จะถูกประมวลผล ซึ่งจะประมวลผลคำสั่งใดขึ้นอยู่กับค่าความจริงของเงื่อนไข

  • คำสั่ง if-else เชิงซ้อน (Nested if)

          คำสั่ง if – else เชิงซ้อน คือ คำสั่ง if – else ที่มีคำสั่ง if – else ซ้อนอยู่ในส่วน else ประโยคเงื่อนไขในลักษณะนี้ อาจสร้างความสับสนแก่ผู้เขียนโปรแกรมได้ จึงต้องมีความระมัดระวัง

          รูปแบบของคำสั่ง if – else เชิงซ้อน เป็นดังนี้

if (เงื่อนไขทางเลือก1)
  คำสั่ง1;

else  if (เงื่อนไขทางเลือก2)
  คำสั่ง2;
  else  if (เงื่อนไขทางเลือก3)
    คำสั่ง3;
  ...
    else  if (เงื่อนไขทางเลือกn-1)
      คำสั่งn-1;
      else
        คำสั่งn;

ผังงานของคำสั่ง if-else เชิงซ้อน
ผังงานของคำสั่ง if-else เชิงซ้อน

          คำสั่ง if – else เชิงซ้อนเป็นรูปแบบการทำงานแบบหลายทางเลือก โดยจะมีคำสั่งเพียงเดียวเท่านั้นที่จะถูกเลือกให้ประมวลผล ขึ้นอยู่กับว่า เงื่อนไขทางเลือก ใดเป็นจริง และในกรณีที่ไม่มี เงื่อนไขทางเลือก ใดเป็นจริงเลย คำสั่งn จะถูกประมวลผล

          คำสั่ง1, คำสั่ง2, คำสั่ง3, …, คำสั่งn อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ

     ตัวอย่างที่ 4.1.3 โปรแกรมทายตัวเลข3

1 //Program: Guess3.c
2  
3 #define TARGET 25
4 #include <stdio.h>
5  
6 void main() {
7   int y;
8  
9   printf("Enter integer value: ");
10   scanf("%d",&y);
11  
12   if (y > TARGET)
13         printf("Too high.");
14   else if (y < TARGET)
15         printf("Too low.");
16   else
17         printf("Correct!!");
18  
19   getch();
20 }

     ผลลัพธ์ของการรันครั้งที่ 1 คือ

Enter integer value: 100 
Too high.

     ผลลัพธ์ของการรันครั้งที่ 2 คือ

Enter integer value: 9 
Too low.

     ผลลัพธ์ของการรันครั้งที่ 3 คือ

Enter integer value: 25 
Correct!!
    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์

          พิจารณาค่าของตัวแปร y สำหรับโปรแกรมข้างต้นเป็น 3 กรณี ดังนี้

    พิจารณาค่าของตัวแปร y สำหรับโปรแกรมข้างต้นเป็น 3 กรณี ดังนี้
  • กรณีที่ 1 ถ้า y มีค่าเท่ากับ 100 จะได้ว่านิพจน์ y >TARGET มีค่าเป็น จริง แล้วฟังก์ชัน printf( ) ในบรรทัดที่ 13 จะถูกประมวลผล
  • กรณีที่ 2 ถ้า y มีค่าเท่ากับ 9 จะได้ว่านิพจน์ y >TARGET มีค่าเป็น เท็จ และนิพจน์ y < TARGET มีค่าเป็น จริง แล้ว ฟังก์ชัน printf( ) ในบรรทัดที่ 15 จะถูกประมวลผล
  • กรณีที่ 3 ถ้า y มีค่าเท่ากับ 25 จะได้ว่านิพจน์ y > TARGET และนิพจน์ y < TARGET มีค่าเป็น เท็จ ทั้งคู่ ดังนั้น ฟังก์ชัน printf( ) ในบรรทัดที่ 17 จะถูกประมวลผล

          พิจารณาคำสั่ง if ในรูปแบบต่อไปนี้ ซึ่งมีคำสั่ง if – else ซ้อนอยู่ด้านใน

if (เงื่อนไขทางเลือก1)
   if (เงื่อนไขทางเลือก2)
          คำสั่ง1;
   else
          คำสั่ง2;
คำสั่ง3;

          ถ้า เงื่อนไขทางเลือก1 และ เงื่อนไขทางเลือก2 มีค่า จริง แล้วโปรแกรมจะประมวลผล คำสั่ง1 ก่อนที่จะประมวลผล คำสั่ง3

          ถ้า เงื่อนไขทางเลือก1 มีค่า จริง ขณะที่ เงื่อนไขทางเลือก2 มีค่าเท็จ แล้วโปรแกรมจะประมวลผล คำสั่ง2 ก่อนที่จะประมวลผล คำสั่ง3

          และถ้า เงื่อนไขทางเลือก1 มีค่า เท็จ แล้วโปรแกรมจะประมวลผล คำสั่ง3 เพียงคำสั่งเดียวเท่านั้น

          นั่นคือ ในคำสั่ง if – else ( หรือคำสั่ง if – else เชิงซ้อน ) else จะถูกจับคู่กับ if ก่อนหน้าที่อยู่ใกล้ที่สุดเสมอ ซึ่งในที่นี้คือ if ( เงื่อนไขทางเลือก2 )

          ดังนั้น ในกรณีที่ต้องการให้ คำสั่ง2 ถูกประมวลผล เงื่อนไขทางเลือก1 มีค่า เท็จ ก่อนที่จะประมวลผล คำสั่ง3 จะต้องเพิ่มเครื่องหมาย { และ } ตามรูปแบบด้านล่าง และในที่นี้ if ( เงื่อนไขทางเลือก2 ) จัดเป็นคำสั่ง if ที่ซ้อนอยู่ในคำสั่ง if – else ของ if ( เงื่อนไขทางเลือก1 )

if (เงื่อนไขทางเลือก1){
   if (เงื่อนไขทางเลือก2)
          คำสั่ง1;
}
   else
          คำสั่ง2;
คำสั่ง3;

กลับสู่ด้านบน

คำสั่ง switch

          รูปแบบของคำสั่ง switch เป็นดังนี้

switch (นิพจน์) {
  case  ค่าคงที่1: คำสั่ง1;
  case  ค่าคงที่2: คำสั่ง2;
  ...
  case  ค่าคงที่n: คำสั่งn;
  default  : คำสั่ง;
}

ผังงานของคำสั่ง switch
ผังงานของคำสั่ง switch

          นิพจน์ และ ค่าคงที่ ของนิพจน์ในแต่ละ case จะต้องเป็นชนิดจำนวนเต็ม และมีค่าไม่ซ้ำกัน

          ถ้า นิพจน์ มีค่าเท่ากับ ค่าคงที่1 แล้ว คำสั่ง1 จะถูกประมวลผลเป็นลำดับแรก ตามด้วย คำสั่ง2 จนกระทั่งถึง คำสั่ง ของ default ตามลำดับ

          ในกรณีที่ นิพจน์ มีค่าเท่ากับ ค่าคงที่2 การประมวลผลจะเริ่มต้นที่ คำสั่ง2 จนกระทั่งถึง คำสั่ง ของ default ตามลำดับ

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

          และในกรณีที่ไม่มี default และ นิพจน์ มีค่าไม่ตรงกับ ค่าคงที่ ใดๆจะไม่มีคำสั่งใดเลยที่ถูกประมวลผล

     ตัวอย่างที่ 4.1.4 โปรแกรมพิมพ์เลข 1-9

1 //Program: Switch.c
2  
3 #include <stdio.h>
4  
5 void main() {
6
7   switch (getchar()) {
8     case '9' :  printf("9  9  9  9  9  9  9  9  9\n");
9     case '8' :  printf(" 8  8  8  8  8  8  8  8\n");
10     case '7' :  printf("  7  7  7  7  7  7  7\n");
11     case '6' :  printf("   6  6  6  6  6  6\n");
12     case '5' :  printf("    5  5  5  5  5\n");
13     case '4' :  printf("     4  4  4  4\n");
14     case '3' :  printf("      3  3  3\n");
15     case '2' :  printf("       2  2\n");
16     case '1' :  printf("        1\n");
17  
18     default :  printf("-------------------------\n");
19  }
20  
21   getch();
22 }

     ผลลัพธ์ คือ


    5  5  5  5  5
     4  4  4  4
      3  3  3
       2  2
        1
-------------------------
    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์

          ผลลัพธ์ข้างต้นเป็นผลจากการป้อนอักขระ 5 ให้โปรแกรม นั่น คือ ในกรณีที่อักขระที่รับค่าเข้ามามีค่าเป็น 1 – 9 โปรแกรมจะประมวลผลฟังก์ชัน printf() ของ case ที่ตรงกันและตรงกัน และน้อยกว่าจนครบทุกกรณี และในกรณีที่อักขระที่รับเข้ามาเป็นอักขระอื่น ๆ โปรแกรมจะประมวลผลฟังก์ชัน printf() ในกรณี default เพียงเท่านั้น

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


กลับสู่ด้านบน

คำสั่ง break

          คำสั่ง break ใช้สำหรับควบคุมการกระทำการ โดยบังคับให้หยุดประมวลผล ใช้ควบคู่กับคำสั่ง switch เพื่อป้องกันไม่ใหประมวลผลข้อความคำสั่งอื่นที่ตามมาภายในคำสั่ง switch

     ตัวอย่างที่ 4.1.4 โปรแกรมพิมพ์เลข 1-9

1 //Program: Switch.c
2  
3 #include <stdio.h>
4  
5 void main() {
6
7   switch (getchar()) {
8     case '9' :  printf("9  9  9  9  9  9  9  9  9\n"); break;
9     case '8' :  printf(" 8  8  8  8  8  8  8  8\n"); break;
10     case '7' :  printf("  7  7  7  7  7  7  7\n"); break;
11     case '6' :  printf("   6  6  6  6  6  6\n"); break;
12     case '5' :  printf("    5  5  5  5  5\n"); break;
13     case '4' :  printf("     4  4  4  4\n"); break;
14     case '3' :  printf("      3  3  3\n"); break;
15     case '2' :  printf("       2  2\n"); break;
16     case '1' :  printf("        1\n"); break;
17  
18     default :  printf("-------------------------\n"); break;
19  }
20  
21   getch();
22 }

     ผลลัพธ์ คือ


    5  5  5  5  5
    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์

กลับสู่ด้านบน
 
 
 
 
  เว็บไซต์นี้จัดทำขึ้นเพื่อประกอบการจัดการเรียนการสอนบนเครือข่ายอินเทอร์เน็ต
กลับสู่ด้านบน กลับสู่ด้านบน  
  ยินดีรับข้อเสนอแนะ ติดต่อ .
เพื่อความสวยงามในการชม ใช้หน้าจอขนาด 1024 x 768.

โรงเรียนคำนาดีพิทยาคม
ตำบลคำนาดี อำเภอโพนทอง จังหวัดร้อยเอ็ด
สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 27
สำนักงานคณะกรรมการการศึกษาขั้นพื้นฐาน
กระทรวงศึกษาธิการ