บทที่ 8 โครงสร้างแบบมีทางเลือก เนื้อหา 1. 2. 3. 4.
คําสั่ง if คําสั่ง if else คําสั่ง if else if คําสั่ง switch … case
ผลการเรียนรู้ที่คาดหวัง เขียนโปรแกรมที่มีโครงสร้างการทํางานแบบมีทางเลือกได้
ในการเขียนโปรแกรมคอมพิวเตอร์บางครั้งจะต้องมีการให้โปรแกรมมีทางเลือก เพื่อที่จะทํางาน อย่างใดอย่างหนึ่ง โดยถ้าเงื่อนไขเป็นจริงจะทํา ถ้าเงื่อนไขเป็นเท็จจะไม่ทํา ตัวอย่างการทํางานใน คอมพิวเตอร์ที่อาจพบบ่อย เช่น กรณีที่เราใช้งานโปรแกรม Microsoft Word เมื่อเราปิดโปรแกรมโดยไม่ได้ บันทึก จะมีการเตือนให้เลือกบันทึกข้อมูลไว้ในดิสก์คือ กรณีเลือก Yes จะบันทึกข้อมูลในดิสก์ กรณีเลือก No จะไม่บันทึกข้อมูล ในบทนี้จะกล่าวถึงโครงสร้างการทํางานแบบมีทางเลือกโดยในที่นี้แบ่งเป็น 4 ลักษณะ คือ 1. คําสั่ง if 2. คําสั่ง if else 3. คําสั่ง if else if 4. คําสั่ง switch … case
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-21. คําสั่ง if เป็นคําสั่งที่มีการทดสอบเงื่อนไข (จริง/เท็จ) ก่อนที่จะทํางานตามคําสั่งที่กําหนด คําสั่ง if มี รูปแบบดังรูปที่ 1.1 if(expression) ก statement A; ----------------------------------------------------------if(expression) ข { statement A1; statement A2; … statement An; }
รูปที่ 1.1 รูปแบบการใช้งานคําสั่ง if (ก) กรณีภายใต้ if มีกิจกรรมเดียว (ข) กรณีภายใต้ if มีกิจกรรมมากกว่าหนึ่งกิจกรรม โดย expression เป็นเงื่อนไขที่มีค่าความจริงได้เพียงแบบเดียวคือ จริง หรือ เท็จ เท่านั้น ถ้ามีค่าเป็น จริงจะทําตามคําสั่งชุด A จากนั้นจึงออกไปทําตามคําสั่งถัดไปตามปกติ แต่ถ้าเงื่อนไขมีค่าเป็นเท็จ จะไม่ทําตาม คําสั่งในชุด A ส่วนคําสั่งที่อยู่ถัดไป(ถ้ามี) ก็จะมีการทํางานตามปกติ
เงื่อนไข
จริง
เท็จ คําสั่งชุด A
รูปที่ 1.2 ส่วนของผังงานแทนการทํางานของคําสั่ง if ตัวอย่างที่ 1.1 #include<stdio.h> int main() { int n; printf(" Enter Number n= "); scanf("%d",&n); if(n>0) printf("positive number"); return 0; }
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-3ตัวอย่างที่ 1.2 #include<stdio.h> int main() { int magic=123, guess; printf(" Enter Number = "); scanf("%d",&guess); if(guess == magic) printf("right"); printf("\nbye"); return 0; }
ตัวอย่างที่ 1.3 #include<stdio.h> int main() { int answer; printf(" What is 4+5 ? "); scanf("%d",&answer); if(answer == 4+5) { printf("right"); printf("\nbye"); } return 0; }
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-42. คําสั่ง if else . เป็นคําสั่งที่มีการทดสอบเงื่อนไขแบบ 2 ทางเลือก ถ้าเงื่อนไขเป็นจริง ให้ทําตามคําสั่ง ชุด A แต่ถ้าเงื่อนไขเป็นเท็จ ให้ทําตามคําสั่งชุด B หรือกล่าวได้ว่าถ้าเงื่อนไขเป็นจริงทําคําสั่งหลัง if (จํานวน 1 ชุดคําสั่ง) แต่ถ้าเงื่อนไขเป็นเท็จจึงไปทําหลัง else (จํานวน 1 ชุดคําสั่ง) ซึ่งจะเห็นว่าต้องเลือก ทําอย่างใดอย่างหนึ่งเสมอ สําหรับการทํางานของคําสั่ง if else มีรูปแบบของคําสั่ง if else ดังรูปที่ 1.3 if (expression) statement A; ก else statement B; ----------------------------------------------------------------if (expression) ข { statement A1; statement A2; … statement An; } else { statement B1; statement B2; … statement Bn; }
รูปที่ 1.3 รูปแบบการใช้งานคําสั่ง if else (ก) กรณีภายใต้ if else มีกิจกรรมเดียว (ข) กรณีภายใต้ if else มีกิจกรรมมากกว่าหนึ่งกิจกรรม โดย expression เป็นเงื่อนไขที่มีค่าความจริงได้เพียงแบบเดียวคือ จริง หรือ เท็จ เท่านั้น ถ้ามีค่าเป็นจริง โปรแกรมจะทํางานต่อไปในคําสั่งหลัง if คือ คําสั่งชุด A เสร็จแล้วออกจาก if โดยไม่ทําตามคําสั่งชุด B ถ้า expression มีค่าเป็นเท็จ โปรแกรมจะทําตามคําสั่งหลัง else คือ คําสั่งชุด B แล้วออกไปโดยไม่ทําตามคําสั่ง ชุด A
เงื่อนไข เท็จ คําสั่งชุด B
จริง
คําสั่งชุด A
รูปที่ 1.4 ส่วนของผังงานแทนการทํางานของคําสั่ง if else
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-5ตัวอย่างที่ 1.4 #include<stdio.h> int main() { int n; printf("Enter Integer Number : "); scanf("%d",&n); if(n>0) { printf("positive number \n"); } // end if else { printf("negative number or zero\n"); } // end else return 0; }
ตัวอย่างที่ 1.5 #include<stdio.h> int main() { int n1,n2; printf("Enter first number : "); scanf("%d",&n1); printf("Enter second number : "); scanf("%d",&n2); if(n2 == 0) { printf("can not divide by zero\n"); }// end if else { printf("answer is %d",n1/n2); } // end else return 0; }
ตัวอย่างที่ 1.6 #include<stdio.h> int main() { int answer; printf(" What is 4+5 ? "); if(answer == 4+5) printf("right"); else printf("wrong"); printf("\nbye"); return 0; }
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
scanf("%d",&answer);
ภาคเรียนที่ 1/2554
-63. คําสั่ง if else if หรือ Nested if . มีโครงสร้าง else if เพิ่มเข้ามาในคําสั่ง else ทําให้ใช้คําสั่ง else if เพิ่มได้ตามที่ต้องการ ใช้กับการตัดสินใจที่มีทางเลือกมากกว่า 2 ทางเลือก รูปแบบของคําสั่ง if else if ดังรูปที่ 1.5 โดยในที่นี้จะแสดงเฉพาะกรณีคําสั่งประกอบ ส่วนคําสั่งเดี่ยวจะอาศัยหลักการเช่นเดียวกับ กรณีของโครงสร้างแบบ if และ if else if (expression-1) { statement A; } else if (expression-2) { statement B; } else if (expression-n) { statement n; } else { statement n+1; }
รูปที่ 1.5 รูปแบบการใช้งานคําสั่ง if else if
เท็จ เท็จ เท็จ คําสั่ง
เงื่อนไข n
เงื่อนไข นไข2 จริง
เงื่อนไข 1
จริง
จริง คําสั่ง
คําสั่ง
คําสั่ง
รูปที่ 1.6 ส่วนของผังงานแทนการทํางานของคําสั่ง if else if
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-7ตัวอย่างที่ 1.7 #include<stdio.h> int main() { int n; printf("Enter Integer Number : "); scanf("%d",&n); if(n>0) { printf("positive number \n"); } else if(n<0) { printf("negative number\n"); } else { printf("zero\n"); } return 0; }
ตัวอย่างที่ 1.8 #include<stdio.h> #include<conio.h> int main() { int a,b; char ch; printf("Do you want to \n"); printf("A:Add, S:Subtract, M: Multiply, or D:Divide ? \n "); printf("Enter the first letter :"); ch=getchar(); printf("Enter the fiist number :"); scanf("%d",&a); printf("Enter the second number :"); scanf("%d",&b); if((ch= ='A') || (ch= ='a')) printf("result = %d",a+b); else if((ch= ='S') || (ch= ='s')) printf("result = %d",a-b); else if((ch= ='M') || (ch= ='m')) printf("result = %d",a*b); else if( ((ch=='D') || (ch=='d')) && (b != 0)) printf("result = %d",a/b); return 0; }
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-84. คําสั่ง switch…case . เป็นคําสั่งที่ใช้ทดสอบเงื่อนไขและมีทางเลือกของการตัดสินใจหลายทาง ทํานองเดียวกับคําสั่ง if else if แต่นิยมใช้คําสั่ง switch มากกว่า เพราะมีรูปแบบที่เข้าใจได้ง่าย สะดวกในการแก้ไขในกรณีที่มีการผิดพลาด รูปแบบ การทํางานดังรูปที่ 1.7 อย่างไรก็ตามการเลือกใช้ switch ยังมีข้อจํากัดบางประการเนื่องจากค่าคงที่(constant) หลัง case จะต้องเป็นชนิด int หรือ char เท่านั้น ดังนั้นในการพิจารณาเลือกใช้ if หรือ switch จะต้องพิจาณาในส่วนนี้ ด้วย switch (expression) { case (constant-1) : case (constant-2):
statements; break; statements; break;
… case (constant-n): default :
statements; break;
รูปที่ 1.7 รูstatements; ปแบบการใช้งานคําสั่ง switch
}
expression ของ switch จะถูกใช้เพื่อเปรียบเทียบค่าว่าตรงกับ constant ของ case ใด โดยโปรแกรมจะ ปฏิบัติตามคําสั่งต่าง ๆ ใน case นั้น ส่วนคําสั่ง break; จะเป็นคําสั่งให้ออกจากคําสั่ง switch ในกรณีที่ไม่มีคําสั่ง break โปรแกรมจะปฏิบัติเรียงตามลําดับตลอดทุกคําสั่งในทุก case ที่อยู่ต่อกัน ในกรณีที่ค่าของ expression ของ switch ไม่ตรงกับ constant ของ case ใด โปรแกรมจะปฏิบัติตามคําสั่งใน default โดยข้อสังเกตในแต่ละ case อาจมีคําสั่งหลายคําสั่งไม่ต้องใช้เครื่องหมาย { } คร่อมดังกรณีของคําสั่ง if แบบต่างๆ ตัวอย่างที่ 1.9 #include<stdio.h> #include<conio.h> int main() { char operator; int ans,x,y; x=10; y=2; printf("Enter operator : "); operator =getche(); printf("\n"); switch (operator) { case '+' : ans =x + y; printf("answer = %d",ans); break; case '-' : ans=x-y; printf("answer = %d",ans); break; case '*' : ans=x*y; printf("answer = %d",ans); break; case '/' : ans=x/y; printf("answer = %d",ans); break; default : printf("This program can use only +,-,*,/ \n"); }return 0; }
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554