340 likes | 491 Views
คำสั่งควบคุมโปรแกรม ( Control Flow Command). บทนำ. การทำงานของโปรแกรมคอมพิวเตอร์ ประกอบไปด้วย 3 ลักษณะใหญ่ ได้แก่ 1. การทำงานตามโปรแกรมทีละคำสั่งตามลำดับก่อนหลัง (Sequencing) 2. ควบคุมให้โปรแกรมทำงานซ้ำจนกว่าจะเป็นไปตามเงื่อนไขที่กำหนดไว้ (Iteration)
E N D
คำสั่งควบคุมโปรแกรม(Control Flow Command)
บทนำ • การทำงานของโปรแกรมคอมพิวเตอร์ ประกอบไปด้วย 3 ลักษณะใหญ่ ได้แก่ 1. การทำงานตามโปรแกรมทีละคำสั่งตามลำดับก่อนหลัง (Sequencing) 2. ควบคุมให้โปรแกรมทำงานซ้ำจนกว่าจะเป็นไปตามเงื่อนไขที่กำหนดไว้ (Iteration) 3. การตรวจสอบเงื่อนไขแล้วเลือกทำตามคำสั่งที่เลือก (Selection)
บทนำ • การทำซ้ำและการตรวจสอบเงื่อนไข ภาษาซีมีคำสั่งในหมวดนี้ 3 คำสั่งได้แก่ 1. คำสั่งที่ให้ข้ามไปทำงานโดยไม่มีเงื่อนไข goto, break และ continue 2. คำสั่งให้ข้ามไปทำงานโดยมีเงื่อนไข if และ switch 3. คำสั่งให้ทำงานซ้ำ while, do…while และ for
คำสั่ง If • if เป็นคำสั่งแบบมีเงื่อนไข (Conditional Statement) • ผลการตรวจสอบเงื่อนไข จริง ทำภายใน if{ } แต่ถ้าเท็จทำภายใน else{ } • รูปแบบของคำสั่ง
ตัวอย่างการใช้คำสั่ง if • Example: scanf(“Enter x and y :”,&x,&y); if(x>y){ printf(“x>y”); } else{ printf(“y>x”); }
การใช้ if/else หลายทางเลือก • สำหรับการตรวจสอบเงื่อนไขมากกว่า 2 ทางเลือก • ใช้คำสั่ง if/else ได้ใช้คำสั่ง if/else ซ้อนกันหลายระดับ • รูปแบบการใช้คำสั่ง
if/else สามารถเขียนเป็น Flowchart ได้ดังนี้
โปรแกรมแปลงหน่วยความยาวฟุต เมตร #include”stdio.h” main(){ float num; int choice; printf(“1. Feet to Meter 2.Meter to Feet\n”); printf(“Enter choice :”); scanf(“%d”,&choice); if(choice==1){ printf(“\n\nEnter number of feet :”); scanf(“%f”,&num); printf(“Meter : %f”,num/3.28); } else{ printf(“\n\nEnter number of meter :”); scanf(“%f”,&num); printf(“Feet : %f”,num*3.28); } }
การใช้ Logical Operator ในการตรวจสอบเงื่อนไข • && (AND) • || (OR) • ! (NOT) • สามารถใช้กับคำสั่ง if ได้ทำให้ทางเลือกการทำงานหลากหลายขึ้น เช่น x>0 && x<10 y>=0 && y<=10 z==5 || z==15
โปรแกรมการคิดเกรดจากคะแนน score #include ”stdio.h” main(){ int score; char grade; printf(“Enter score :”); scanf(“%d”,&score); if(score>=60 && score<=80)grade=‘B’; else if(score>80) grade=‘A’; else grade=‘C’; printf(“Grade is %c”,grade); }
คำสั่ง switch • เหมือนกันกับคำสั่ง if/else ซ้อนกันหลายครั้ง แต่ใช้งานได้สะดวกกว่า • ประกอบไปด้วยคำสั่งย่อยภายใน case เพื่อเลือกตัดสินใจทำงานตามนิพจน์ที่ได้ผลลัพธ์ทางลอจิกเป็นค่าจริง • รูปแบบของคำสั่ง
ตัวอย่างการใช้งานคำสั่ง switch #include<stdio.h> main(){ int x; Printf(“Enter X”);scanf(“%d”,&x); switch(x){ case 1: printf(“x = 1\n”); break; case 2: printf(“x = 2\n”); break; case 3: printf(“x = 3\n”); break; default: printf(“No Value !”); } }
คำสั่ง for • เป็นคำสั่งสำหรับการทำซ้ำ ใช้ควบคุมการทำงานของโปรแกรมให้มีการทำซ้ำกันหลายๆ ครั้งตามที่กำหนด • โครงสร้างของคำสั่งประกอบด้วย 3 ส่วนดังนี้ 1. ส่วนที่กำหนดค่าเริ่มต้น 2. ส่วนตรวจสอบเงื่อนไข 3. ส่วนค่าที่เปลี่ยนไป รูปแบบ
ตัวอย่าง การใช้งานคำสั่ง for • for(x=1;x<=100;x++) printf(“%d”,x); • #include “stdio.h” main(){ int I; for(i=1;i<100;i++){ printf(“This is i: %d”,i); printf(“and I squared is %d\n”,i*i); } }
การกำหนดนิพจน์ใน () ของคำสั่ง for • นิพจน์ภายในวงเล็บ () สามารถกำหนดให้ยืดหยุ่นต่อการใช้งาน • นิพจน์แต่ละส่วนคั่นด้วย ; แต่บางนิพจน์อาจจะไม่ระบุก็ได้เช่น • เมื่อไม่มีส่วนของการระบุนิพจน์สำหรับตรวจสอบเงื่อนไข คอมไพเลอร์จะถือว่าส่วนที่ไม่ระบุนิพจน์มีค่าเป็น 0 (เท็จ) ตลอดเวลา
การใช้นิพจน์ย่อยในคำสั่ง for • โปรแกรมวนรอบแสดงตัวเลขตั้งแต่ 0 ถึง 98 โดยเพิ่มค่าขึ้นครั้งละ 2 กำหนดให้ใช้ตัวแปร 2 ตัว x และ y กำหนดค่าเริ่มต้นเท่ากับ 0 #include “stdio.h” main(){ int x,y; for(x=0,y=0;x+y<100;++x,++y) printf(“%d”,x+y); }
ตัวแปรที่สามารถใช้ได้กับคำสั่ง for • ตัวแปรที่ใช้ในคำสั่ง for สำหรับการวนรอบจะเป็น int หรือ char • float และ String • กรณีที่ใช้ตัวแปร char for(ch=‘A’;ch<=‘Z’;ch++) printf(“ASCII = %c decimal = %d\n”,ch,ch);
คำสั่ง while • เป็นคำสั่งการทำงานวนรอบเช่นเดียวกับคำสั่ง for • การทำงานจะเริ่มต้นด้วยการตรวจสอบเงื่อนไขก่อน เมื่อตรวจพบว่านิพจน์ที่ทำการตรวจสอบให้ค่าจริงก็จะทำคำสั่งต่อจากคำสั่ง while แต่ถ้าพบว่าไม่จริงก็จะหยุดรอบการทำงานแล้วข้ามไปทำคำสั่งต่อไป • รูปแบบ
ตัวอย่างการใช้งานคำสั่ง while • Example #include “stdio.h” main(){ int i=1; int count=0; while(i<=100){ count+=1; i++; } printf(“Total = %d”,count); }
คำสั่ง do/while • ใช้สำหรับควบคุมการทำงานของโปรแกรมให้ทำวนรอบ เหมือนคำสั่ง for และ while และลักษณะการทำงานจะตรงกันข้าม • ลักษณะการทำงานจะเริ่มต้นทำตามคำสั่งที่อยู่ใน do แล้วจึงไปตรวจสอบเงื่อนไขหลังคำสั่ง while กรณีที่ผลจากการตรวจสอบเป็นจริง ก็จะกลับไปทำตามคำสั่งที่อยู่หลัง do แต่ถ้าพบว่าไม่จริงก็จะจบการทำงาน โดยข้ามไปทำคำสั่งหลังจาก while • รูปแบบ
แนวทางการเขียนผังงานคำสั่ง do-while
ตัวอย่างการใช้คำสั่ง do/while • โปรแกรมการบวกเลขตั้งแต่ 1 ถึง 100 โดยใช้ do/while #include “stdio.h” main(){ int i=1,count=0; do{ count+=I; i++; }while(i<=100); printf(“Total = %d”,count); }
ตัวอย่างการใช้คำสั่ง do/while • โปรแกรมวนรอบแสดงอัตราส่วนของตัวแปร a/b โดย b ต้องไม่เป็น 0 เมื่อกดคีย์ ‘S’ จึงจบการทำงาน main(){ float a,b,ratio; do{ printf(“\nEnter two number :”); scanf(“%f %f”,&a,&b); if(b==0.0) printf(“The ratio is undefined !\n”); else{ ratio=a/b; printf(“The ratio is %f\n”,ratio); } printf(“Press <S> to stop, any key to continue.”); }while(getch()!=‘S’); }
การวนรอบซ้ำ (Nested Loop) • การแก้ปัญหาโจทย์หรือระบบงานที่ซับซ้อน จะเกี่ยวข้องกับการใช้ตัวแปรหลายๆตัว • ระบบงานที่ซับซ้อน อาจจะกระทำในลักษณะของการวนรอบซ้อน เรียกว่า Nested Loop • for, while และ do…while สามารถใช้ในลักษณะการวนรอบซ้อนได้ตามความต้องการ
โปรแกรมวนรอบซ้อน ด้วยคำสั่ง for ผลลัพธ์จะปรากฎดังนี้ X x^2 x^3 x^4 • 1 1 1 • 4 8 16 • 9 27 81 • 16 64 256 • 25 125 625 …. … …. ….. 9 81 729 6561 #include "stdio.h" main(){ int x,y,z,num; printf(" x x^2 x^3 x^4 \n"); for(x=1; x<10; x++){ for(y=1; y<5; y++){ num=1; for(z=0; z<y; z++){ num=num*x; } printf("%9d",num); } printf("\n"); } }
คำสั่ง break • การทำงานของคำสั่งวนรอบ จะหยุดการทำงานเมื่อเงื่อนไขที่ตรวจสอบเป็นเท็จ • กรณีที่ต้องการหยุดการวนรอบก่อนครบกำหนด สามารถทำได้โดยใช้คำสั่ง break for(x=0;x<100;x++){ printf(“%d”,x); if(x==10) break; }
คำสั่ง continue • ตรงข้ามกับคำสั่ง break เมื่อพบคำสั่ง continue จะกลับไปวนรอบใหม่เพื่อตรวจสอบเงื่อนไขตามที่กำหนด for(x=0;x<100;x++){ continue; printf(“%d”,x); }
โปรแกรมบวกเลข ด้วยคำสั่ง continue do{ printf(“Enter next number <0 to STOP> “); scanf(“%d”,&i); printf(“ls %d correct ? <Y/N> “,i); ch=getch(); printf(“\n”); if(ch==‘N’) continue; total+=i; }while(i); printf(“Total is %d\n”,total);
คำสั่ง goto • goto ใช้สำหรับสั่งให้ข้ามการทำงานไปยังตำแหน่งหรือชื่อที่กำหนดโดยไม่มีเงื่อนไข ประกอบด้วยส่วนสำคัญ 2 ส่วน คือ 1. ส่วนของคำสั่ง 2. ส่วนของ Label • รูปแบบ
ตัวอย่างการใช้คำสั่ง goto ไม่มีโอกาสประมวลผล goto step; printf(“This line will not print”); step: printf(“This line will print”); float r=2,pi=3.14159; loop: printf(“R=%f Area=%f\n”,r,pi*r*r); r=r+1; goto loop; }
บทสรุป • คำสั่งตัดสินใจทางเลือก if..else , switch • คำสั่งวนรอบ for, while, do..while • คำสั่งข้ามไปทำยังตำแหน่งที่ต้องการ goto