Decision Making การตัดสินใจ ภาษา C

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

แสดงด้านล่างเป็นรูปแบบทั่วไปของโครงสร้างการตัดสินใจทั่วไปที่พบในภาษาการเขียนโปรแกรมส่วนใหญ่ −


ภาษาซีจะถือว่าค่าที่ไม่ใช่ศูนย์และไม่ใช่ค่าว่างเป็นจริงและหากเป็นค่าศูนย์หรือค่าว่างระบบจะถือว่าค่านั้นเป็นค่าเท็จ

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

การควบคุมเงื่อนไขด้วย if-statement ในการใช้ประโยคคำสั่ง if-statement เพื่อตรวจสอบเงื่อนไข มีอยู่ 5 แบบด้วยกัน คือ

1. if statement


ประโยคเงื่อนไข if อย่างง่ายหรือเรียกว่า if แบบทางเลือกเดียว

Syntax (ไวยากรณ์)


ไวยากรณ์ของคำสั่ง ‘if’ ในภาษาซีคือ −

if(boolean_expression) {
   /* statement(s) will execute if the boolean expression is true */
}

หากนิพจน์บูลีนประเมินว่าเป็น จริง (true) บล็อกของโค้ดภายในคำสั่ง ‘if’ จะถูกดำเนินการ หากนิพจน์บูลีนประเมินเป็น เท็จ (false) โค้ดชุดแรกหลังจุดสิ้นสุดของคำสั่ง ‘if’ (หลังวงเล็บปีกกาปิด) จะถูกดำเนินการ

ภาษาซีจะถือว่าค่าที่ไม่ใช่ศูนย์และไม่ใช่ค่าว่างเป็น จริง (true) และหากเป็นค่าศูนย์หรือค่าว่างระบบจะถือว่าค่านั้นเป็นค่า เท็จ (false)


Flow Diagram


ตัวอย่าง

#include <stdio.h>
 
int main () {

   /* local variable definition */
   int a = 10;
 
   /* check the boolean condition using if statement */
	
   if( a < 20 ) {
      /* if condition is true then print the following */
      printf("a is less than 20\n" );
   }
   
   printf("value of a is : %d\n", a);
 
   return 0;
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

2. if…else statement


ประโยคคำสั่งตัดสินใจแบบสองทางเลือกด้วย if…else

Syntax (ไวยากรณ์)


ไวยากรณ์ของคำสั่ง ‘if’ ในภาษาซีคือ −


if(boolean_expression) {
   /* statement(s) will execute if the boolean expression is true */
} else {
   /* statement(s) will execute if the boolean expression is false */
}



คำสั่ง if…else เป็นคำสั่งที่เราใช้กำหนดให้โปรแกรมตัดสินใจเลือกทำคำสั่งอย่างใดอย่างหนึ่งจาก 2 ทางเลือก โดยตรวจสอบเงื่อนไขที่กำหนดว่าเป็นจริงหรือเท็จ ถ้าเงื่อนไขที่กำหนดเป็น จริง (true) โปรแกรมจะทำงานที่ชุดคำสั่งที่อยู่ภายใต้คำสั่ง if แต่ถ้าเงื่อนไขที่กำหนดให้เป็น เท็จ (false) โปรแกรมจะทำงานที่ชุดคำสั่งที่อยู่ภายใต้คำสั่ง else

ภาษาซีจะถือว่าค่าที่ไม่ใช่ศูนย์และไม่ใช่ค่าว่างเป็น จริง (true) และหากเป็นค่าศูนย์หรือค่าว่างระบบจะถือว่าค่านั้นเป็นค่า เท็จ (false)

Flow Diagram


ตัวอย่าง

#include <stdio.h>
 
int main () {

   /* local variable definition */
   int a = 100;
 
   /* check the boolean condition */
   if( a < 20 ) {
      /* if condition is true then print the following */
      printf("a is less than 20\n" );
   } else {
      /* if condition is false then print the following */
      printf("a is not less than 20\n" );
   }
   
   printf("value of a is : %d\n", a);
 
   return 0;
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

a is not less than 20;
value of a is : 100


If…else if…else Statement


ถ้า ชุดคำสั่ง สามารถตามด้วยตัวเลือกอื่นถ้า … อื่นคำสั่งซึ่งจะเป็นประโยชน์มากในการทดสอบเงื่อนไขต่าง ๆ โดยใช้เพียงครั้งเดียวถ้า … ถ้ามีคำสั่งอื่น

เมื่อใช้คำสั่ง if…else if..else มีบางประเด็นที่ต้องคำนึงถึง −

  • if สามารถมีศูนย์หรือของอื่นได้และต้องตามหลัง if’s
  • if สามารถมีค่าเป็นศูนย์ถึง if’s อื่น ๆ และต้องมาก่อนค่าอื่น
  • อีกครั้งหากสำเร็จ จะไม่มีการทดสอบ if’s หรือ else’s ที่เหลืออีกเลย

ไวยากรณ์


ไวยากรณ์ของคำสั่งif…else if…elseในภาษาซีคือ −

if(boolean_expression 1) {
   /* Executes when the boolean expression 1 is true */
} else if( boolean_expression 2) {
   /* Executes when the boolean expression 2 is true */
} else if( boolean_expression 3) {
   /* Executes when the boolean expression 3 is true */
} else {
   /* executes when the none of the above condition is true */
}


ตัวอย่าง

#include <stdio.h>
 
int main () {

   /* local variable definition */
   int a = 100;
 
   /* check the boolean condition */
   if( a == 10 ) {
      /* if condition is true then print the following */
      printf("Value of a is 10\n" );
   } else if( a == 20 ) {
      /* if else if condition is true */
      printf("Value of a is 20\n" );
   } else if( a == 30 ) {
      /* if else if condition is true  */
      printf("Value of a is 30\n" );
   } else {
      /* if none of the conditions is true */
      printf("None of the values is matching\n" );
   }
   
   printf("Exact value of a is: %d\n", a );
 
   return 0;
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

None of the values is matching
Exact value of a is: 100


3. nested if statements


การเขียนโปรแกรม C มักจะถูกที่จะซ้อนคำสั่ง if-else ซึ่งหมายความว่าคุณสามารถใช้คำสั่ง if หรือ else if ในคำสั่งอื่น if หรือ else if ได้

ไวยากรณ์


ไวยากรณ์สำหรับคำสั่งซ้อน if เป็นดังนี้ −

if( boolean_expression 1) {

   /* Executes when the boolean expression 1 is true */
   if(boolean_expression 2) {
      /* Executes when the boolean expression 2 is true */
   }
}


คุณสามารถซ้อนคำสั่ง if…else ในลักษณะเดียวกับที่คุณซ้อนคำสั่ง if

ตัวอย่าง

#include <stdio.h>
 
int main () {

   /* local variable definition */
   int a = 100;
   int b = 200;
 
   /* check the boolean condition */
   if( a == 100 ) {
   
      /* if condition is true then check the following */
      if( b == 200 ) {
         /* if condition is true then print the following */
         printf("Value of a is 100 and b is 200\n" );
      }
   }
   
   printf("Exact value of a is : %d\n", a );
   printf("Exact value of b is : %d\n", b );
 
   return 0;
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

Value of a is 100 and b is 200
Exact value of a is : 100
Exact value of b is : 200


4. switch statement


การควบคุมเงื่อนไขด้วย switch-case (switch-statement)

switch (สวิทช์) คำสั่งอนุญาตให้ตัวแปรที่จะทดสอบเพื่อความเท่าเทียมกันกับรายการของค่า แต่ละค่าเรียกว่า case และตัวแปรที่ถูกเปิดจะถูกตรวจสอบสำหรับ switch caseแต่ละอัน

ไวยากรณ์


ไวยากรณ์สำหรับคำสั่งswitchในภาษาซีมีดังต่อไปนี้ −

switch(expression) {

   case constant-expression  :
      statement(s);
      break; /* optional */
	
   case constant-expression  :
      statement(s);
      break; /* optional */
  
   /* you can have any number of case statements */
   default : /* Optional */
   statement(s);
}


นอกจากประโยคคำสั่ง if-else แล้วในภาษา c ก็ยังมีการควบคุมเงื่อนไขด้วยการใช้ประโยคคำสั่ง switch โดยประโยคคำสั่ง switch เหมาะกับการนำไปประยุกต์ใช้กับโปรแกรมที่มีเมนูให้เลือกรายการต่างๆ

กฎต่อไปนี้ใช้กับคำสั่งswitch −

  • แสดงออกมาใช้ในสวิทช์คำสั่งจะต้องมีประเภทหนึ่งหรือแจกแจงหรือเป็นประเภทการเรียนในชั้นที่มีฟังก์ชั่นแปลงเดียวชนิดหนึ่งหรือแจกแจง
  • คุณสามารถมีคำสั่งกรณีและปัญหาจำนวนเท่าใดก็ได้ภายในสวิตช์ แต่ละกรณีจะตามด้วยค่าที่จะเปรียบเทียบและทวิภาค
  • คงแสดงออกสำหรับกรณีที่จะต้องมีข้อมูลเดียวกันที่พิมพ์เป็นตัวแปรในสวิทช์และมันจะต้องเป็นค่าคงที่หรืออักษร
  • เมื่อตัวแปรที่เปิดอยู่มีค่าเท่ากับเคส คำสั่งที่ตามหลังเคสนั้นจะดำเนินการจนกว่าจะถึงคำสั่งbreak
  • เมื่อถึงคำสั่งbreakสวิตช์จะสิ้นสุด และโฟลว์ของการควบคุมจะข้ามไปยังบรรทัดถัดไปหลังจากคำสั่ง switch
  • ไม่ได้ทุกกรณีจำเป็นต้องมีการแบ่ง หากไม่มีตัวแบ่งโฟลว์ของการควบคุมจะผ่านไปยังกรณีและปัญหาต่อมาจนกว่าจะถึงตัวแบ่ง
  • สวิทช์คำสั่งสามารถมีตัวเลือกเริ่มต้นกรณีที่ต้องปรากฏในตอนท้ายของสวิทช์ กรณีเริ่มต้นสามารถใช้สำหรับการทำงานเมื่อไม่มีกรณีและปัญหาใด ๆ ที่เป็นจริง ไม่มีการหยุดพักในกรณีเริ่มต้น

Flow Diagram

ตัวอย่าง

#include <stdio.h>
 
int main () {

   /* local variable definition */
   char grade = 'B';

   switch(grade) {
      case 'A' :
         printf("Excellent!\n" );
         break;
      case 'B' :
      case 'C' :
         printf("Well done\n" );
         break;
      case 'D' :
         printf("You passed\n" );
         break;
      case 'F' :
         printf("Better try again\n" );
         break;
      default :
         printf("Invalid grade\n" );
   }
   
   printf("Your grade is  %c\n", grade );
 
   return 0;
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

Well done
Your grade is B


5. nested switch statements

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

ไวยากรณ์


ไวยากรณ์สำหรับคำสั่งสวิตช์ที่ซ้อนกันมีดังนี้ −

switch(ch1) {

   case 'A': 
      printf("This A is part of outer switch" );
		
      switch(ch2) {
         case 'A':
            printf("This A is part of inner switch" );
            break;
         case 'B': /* case code */
      }
	  
      break;
   case 'B': /* case code */
}


ตัวอย่าง

#include <stdio.h>
 
int main () {

   /* local variable definition */
   int a = 100;
   int b = 200;
 
   switch(a) {
   
      case 100: 
         printf("This is part of outer switch\n", a );
      
         switch(b) {
            case 200:
               printf("This is part of inner switch\n", a );
         }
   }
   
   printf("Exact value of a is : %d\n", a );
   printf("Exact value of b is : %d\n", b );
 
   return 0;
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

This is part of outer switch
This is part of inner switch
Exact value of a is : 100
Exact value of b is : 200

Leave a Reply

Your email address will not be published. Required fields are marked *