บทที่ 8 โครงสรางแบบมีทางเลือก เนื้อหา 1.คําสั่ง if 2.คําสั่ง if else 3.คําสั่ง nested if 4.คําสั่ง switch … case
ผลการเรียนรูที่คาดหวัง เขียนโปรแกรมที่มีโครงสรางการทํางานแบบมีทางเลือกได
ในการเขียนโปรแกรมคอมพิวเตอรบางครั้งจะตองมีการใหโปรแกรมมีทางเลือก เพื่อที่จะทํางานอยาง ใดอยางหนึ่ง โดยถาเงื่อนไขเปนจริงจะทํา ถาเงื่อนไขเปนเท็จจะไมทํา ตัวอยางการทํางานในคอมพิวเตอรที่อาจพบบอย เชน กรณีที่เราใชงานโปรแกรม Microsoft Word เมื่อเราปดโปรแกรมโดยไมไดบันทึก จะมีการเตือนใหเลือกบันทึก ขอมูลไวในดิสกคือ กรณีเลือก Yes จะบันทึกขอมูลในดิสก กรณีเลือก No จะไมบันทึกขอมูล ในบทนี้จะกลาวถึงโครงสรางการทํางานแบบมีทางเลือกโดยในที่นี้แบงเปน 4 ลักษณะ คือ 1. คําสั่ง if 2. คําสั่ง if else 3. คําสั่ง nested if 4. คําสั่ง switch … case
-2
1. คําสั่ง if .
เปนคําสั่งที่มีการทดสอบเงื่อนไข (จริง/เท็จ) กอนที่จะทํางานตามคําสั่งที่กําหนด คําสั่ง if มีรูปแบบเปน ดังรูปที่ 8.1 if (expression) statement A ;
(ก) if (expression) { statement A1; statement A2; statement A3; ... statement An; }
(ข) รูปที่ 8.1 รูปแบบการใชงานคําสั่ง if (ก) กรณีคําสั่งเดี่ยว (ข) คําสั่งประกอบ (compound statement) โดย expression เปนเงื่อนไขที่มีคาความจริงไดเพียงแบบเดียวคือ จริง หรือ เท็จ เทานั้น ถามีคาเปน จริงจะทําตามคําสั่งชุด A จากนั้นจึงออกไปทําตามคําสั่งถัดไปตามปกติ แตถาเงื่อนไขมีคาเปนเท็จ จะไมทําตามคําสั่ง ในชุด A สวนคําสั่งที่อยูถัดไป(ถามี) ก็จะมีการทํางานตามปกติ คําสั่งชุด A อาจเปนไดทั้งแบบคําสั่งเดี่ยว (statement A) หรือคําสั่งประกอบ (statement A1 ถึง An) ซึ่งจะเกิดการทํางานขึ้นเมื่อเงื่อนไขเปนจริงเทานั้น โดยคําสั่งประกอบจะถูกใชในกรณีที่ตองการควบคุมใหมีคําสั่ง มากกวา 1 คําสั่งทํางานเมื่อเงื่อนไขเปนจริง ซึ่งจะเห็นไดวาโครงสรางของคําสั่งประกอบและคําสั่งเดี่ยวจะตางกันตรง ที่วาคําสั่งประกอบนั้นจะประกอบดวยหลายๆ คําสั่งเดี่ยวที่ครอมไวดวยเครื่องหมาย วงเล็บปกกา (สัญลักษณ { }) นั่นเอง เท็จ
เงื่อนไข จริง คําสั่งชุด A
ออกจากคําสั่ง if
รูปที่ 8.2 สวนของผังงานแทนการทํางานของคําสั่ง if รายวิชา ง40101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2552
-3-
ตัวอยางที่ 8.1 #include <stdio.h> #include <conio.h> void main() { int n; printf(" Enter Number n= "); scanf("%d",&n); if(n>0) { printf("positive number"); } }
ตัวอยางที่ 8.2 #include <stdio.h> #include <conio.h> void main() { int magic=123, guess; printf(" Enter Number = "); scanf("%d",&guess); if(guess = = magic) printf("right"); printf("\nbye"); }
ตัวอยางที่ 8.3 #include <stdio.h> #include <conio.h> void main() { int answer; printf(" What is 4+5 ? "); scanf("%d",&answer); if(answer = = 4+5) { printf("right"); printf("\nbye"); } }
รายวิชา ง40101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2552
-4
2. คําสั่ง if else .
เปนคําสั่งที่มีการทดสอบเงื่อนไขแบบ 2 ทางเลือก ถาเงื่อนไขเปนจริง ใหทําตามคําสั่งชุด A แตถา เงื่อนไขเปนเท็จ ใหทําตามคําสั่งชุด B หรือกลาวไดวาถาเงื่อนไขเปนจริงทําคําสั่งหลัง if (จํานวน 1 ชุดคําสั่ง) แตถา เงื่อนไขเปนเท็จจึงไปทําหลัง else (จํานวน 1 ชุดคําสั่ง) ซึ่งจะเห็นวาตองเลือกทําอยางใดอยางหนึ่งเสมอ สําหรับการ ทํางานของคําสั่ง if else มีรูปแบบของคําสั่ง if else ดังรูปที่ 8.3 if (expression) statement A; else statement B;
(ก) if (expression) { statement A1; statement A2; ... statement An; } else { statement B1; statement B2; ... statement Bn; }
(ข) รูปที่ 8.3 รูปแบบการใชงานคําสั่ง if else (ก) กรณีคําสั่งเดี่ยว (ข) คําสั่งประกอบ (compound statement) โดย expression เปนเงื่อนไขที่มีคาความจริงไดเพียงแบบเดียวคือ จริง หรือ เท็จ เทานั้น ถามีคาเปน จริง โปรแกรมจะทํางานตอไปในคําสั่งหลัง if คือ คําสั่งชุด A เสร็จแลวออกจาก if โดยไมทําตามคําสั่งชุด B ถา expression มีคาเปนเท็จ โปรแกรมจะทําตามคําสั่งหลัง else คือ คําสั่งชุด B แลวออกไปโดยไมทําตามคําสั่งชุด A เท็จ
เงื่อนไข
คําสั่งตาง ๆ (ชุด B )
จริง คําสั่งตาง ๆ (ชุด A)
ออกจากคําสั่ง if else
รูปที่ 8.4 สวนของผังงานแทนการทํางานของคําสั่ง if else รายวิชา ง40101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2552
-5-
ตัวอยางที่ 8.4
#include <stdio.h> #include <conio.h> void main() { int n; printf("Enter Integer Number : "); scanf("%d",&n); if(n>0){ printf("positive number \n"); }else{ printf("negative number or zero\n"); } }
ตัวอยางที่ 8.5 #include <stdio.h> #include <conio.h> void 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"); }else{ printf("answer is %d",n1/n2); } }
ตัวอยางที่ 8.6 #include <stdio.h> #include <conio.h> void main() { int answer; printf(" What is 4+5 ? "); scanf("%d",&answer); if(answer = = 4+5) printf("right"); else printf("wrong"); printf("\nbye"); }
รายวิชา ง40101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2552
-6
3. คําสั่ง Nested if .
คําสั่ง Nested if หรือ if else if มีโครงสราง else if เพิ่มเขามาในคําสั่ง else ทําใหใชคําสั่ง else if เพิ่มไดตามที่ตองการ ใชกับการตัดสินใจที่มีทางเลือกมากกวา 2 ทางเลือก รูปแบบของคําสั่ง if else if ดังรูปที่ 8.5 โดยในที่นี้จะแสดงเฉพาะกรณีคําสั่งประกอบ สวนคําสั่งเดี่ยวจะอาศัยหลักการเชนเดียวกับกรณีของโครงสรางแบบ if และ if else if (expression1) {
statement A; } else if (expression2) { statement B; } ... else if (expression n) { statement n; } else { statement n+1; }
รูปที่ 8.5 รูปแบบการใชงานคําสั่ง if else if
เงื่อนไข1 เท็จ
จริง คําสั่งชุด A
เท็จ
เงื่อนไข2 จริง
…
นไข nN เงืเงื่อ่อนไข
คําสั่งชุดที่ B จริง
เท็จ
คําสั่งชุดที่ n
คําสั่งชุดที่ n+1
ออกจากคําสั่ง if else if
รูปที่ 8.6 สวนของผังงานแทนการทํางานของคําสั่ง if else if รายวิชา ง40101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2552
-7-
ตัวอยางที่ 8.7 #include <stdio.h> #include <conio.h> void 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"); } }
ตัวอยางที่ 8.8 #include <stdio.h> #include <conio.h> void 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); }
รายวิชา ง40101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2552
-8
4. คําสั่ง switch case .
เปนคําสั่งที่ใชทดสอบเงื่อนไขและมีทางเลือกของการตัดสินใจหลายทาง ทํานองเดียวกับคําสั่ง if else if แตนิยมใชคําสั่ง switch มากกวา เพราะมีรูปแบบที่เขาใจไดงาย สะดวกในการแกไขในกรณีที่มีการผิดพลาด รูปแบบ การทํางานดังรูปที่ 8.7 อยางไรก็ตามการเลือกใช switch ยังมีขอจํากัดบางประการเนื่องจากคาคงที่(constant) หลัง case จะตองเปนชนิด int หรือ char เทานั้น ดังนั้นในการพิจารณาเลือกใช if หรือ switch จะตองพิจาณาในสวนนี้ดวย switch (expression) { case (constant1) : statements; break; case (constant2): statements; break; … case (constantn): statements; break; default : statements }
รูปที่ 8.7 รูปแบบการใชงานคําสั่ง switch expression ของ switch เปนจะถูกใชเพื่อเปรียบเทียบคาวาตรงกับ constant ของ case ใด โดย โปรแกรมจะปฏิบัติตามคําสั่งตาง ๆ ใน case นั้น สวนคําสั่ง break; จะเปนคําสั่งใหออกจากคําสั่ง switch ในกรณีที่ไมมี คําสั่ง break โปรแกรมจะปฏิบัติเรียงตามลําดับตลอดทุกคําสั่งในทุก case ที่อยูตอกัน ในกรณีที่คาของ expression ของ switch ไมตรงกับ constant ของ case ใด โปรแกรมจะปฏิบัติตาม คําสั่งใน default โดยขอสังเกตในแตละ case อาจมีคําสั่งหลายคําสั่งไมตองใชเครื่องหมาย { } ครอมดังกรณีของคําสั่ง if แบบตางๆ
รายวิชา ง40101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2552
-9-
ตัวอยางที่ 8.9 #include <stdio.h> #include <conio.h> ¡ การเลือกทําแบบ if void main() { char operator_in; int ans,x,y; x=10; y=2; printf("Enter operator : "); operator_in =getche(); printf("\n"); switch (operator_in) { 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"); } }
แหลงอางอิง : การโปรแกรมภาษาซีเบื้องตน, ภาควิชาคณิตศาสตรและวิทยาการคอมพิวเตอร, คณะวิทยาศาสตร, สถาบันเทคโนโลยีพระ จอมเกลาเจาคุณทหารลาดกระบัง, 2545 มนตรี พจนารถลาวัณย, การเขียนโปรแกรมคอมพิวเตอรดวยเทอรโบซี, กรุงเทพฯ, ซีเอ็ดยูเคชัน ่ , 2540 เจนวิทย เหลืองอราม, การเขียนโปรแกรมสําหรับ Application ดวย C/C++, ธรรมสาร, 2543 รายวิชา ง40101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2552