Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Chapter4

Chapter4

Published by atom.ktech2012, 2021-09-10 09:08:44

Description: คำสั่งควบคุมเป็นคำสั่งที่สำคัญในการเขียนโปรแกรม คือ ช่วยควบคุมทิศทางการทำงานของโปรแกรมให้เป็นไปตามที่ต้องการ โดยแบ่งออกเป็น 2 ประเภท คือ คำสั่งเงื่อนไข (Condition Statement)ได้แก่ if, if-else, switch-case และคำสั่งทำซ้ำ (Iteration Statement) ได้แก่ for, while, do-while

Search

Read the Text Version

วชิ าการเขียนโปรแกรมเชิงวตั ถเุ บ้ืองตน้ Object-Oriented Programming CHAPTER4 คำสัง่ ควบคุม อาจารยณ์ ภทั ร วรรณสาร



คำสงั่ เงอ่ื นไข(CONDITION STATEMENT) if (เงอ่ื นไข) { โฟลวชำรต์ แสดงกำรทำงำนของคำสงั่ เงอ่ื นไข if คาสงั่ ท่ี 1; } คาสงั่ ท่ี 2; หำกเงอ่ื นไขทก่ี ำหนดเป็นจรงิ แลว้ คำสงั่ ต่ำงๆ ทอ่ี ยู่ภำยในบลอ็ กของเงอ่ื นไข if ก็จะไดร้ บั กำรประมวลผล (ซง่ึ อำจมมี ำกกวำ่ 1 คำสงั่ ) แต่ถำ้ ตรวจสอบแลว้ พบว่ำเงอ่ื นไขเป็นเทจ็ คำสงั่ ทอ่ี ยู่ภำยในบลอ็ กของเงอ่ื นไข if กจ็ ะไมไ่ ดร้ บั กำรประมวลผล คือ จะขำ้ มไปทำกำรประมวลผลคำสงั่ ทอ่ี ยู่ถดั จำกบลอ็ กของ if ทนั ที

โปรแกรมแสดงกำรทำงำนของคำสงั่ เงอ่ื นไข IF รนั ครง้ั ท่ี 1 ผลลพั ธข์ องโปรแกรม #include <stdio.h> How old are you? : 15 You are young main(){ You are 15 year old int age; How old are you? : 18 printf(“How old are you? :”); รนั ครง้ั ท่ี 2 You are 18 year old scanf(“%d”, &age); if(age<18) printf(“You are young\\n”); printf(“You are %d year old”); }

อธิบายโปรแกรม ทำกำรตรวจสอบเงอ่ื นไขวำ่ หำกอำยุนอ้ ยกวำ่ 18 ปี ใหพ้ มิ พข์ อ้ ควำม “You are young” ซง่ึ สงั เกต โปรแกรมน้ใี หด้ ี บรรทดั ท่ี 9 เท่ำนนั้ ทเ่ี ป็นคำสงั่ ภำยในบลอ็ กของคำสงั่ if สว่ นบรรทดั ท่ี 10 เป็นคำสงั่ นอกบลอ็ กของ if ดงั จะเหน็ ไดจ้ ำกผลลพั ธท์ แ่ี สดง ดงั น้ี หำกเงอ่ื นไขทต่ี รวจสอบเป็นจรงิ ขอ้ ควำมในบรรทดั ท่ี 9 ก็จะถกู พมิ พ์ หลงั จำกนน้ั กจ็ ะทำคำสงั่ ทอ่ี ยู่นอก เงอ่ื นไข if ต่อไป คอื พมิ พข์ อ้ ควำมในบรรทดั ท่ี 10 แต่หำกเงอ่ื นไขทต่ี รวจสอบเป็นเทจ็ ขอ้ ควำมในบรรทดั ท่ี 9 ทเ่ี ป็นคำสงั่ ในส่วนของเงอ่ื นไข if กจ็ ะไมถ่ กู ประมวลผล แต่จะขำ้ มกำรทำงำนไปประมวลผลในบรรทดั ท่ี 10 ทนั ที

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

การทางานของคาสงั่ เงอ่ื นไข if-else #include <stdio.h> รนั ครงั้ ท่ี 1 ผลลพั ธข์ องโปรแกรม main(){ Please enter points : 49 int points; Fail...Attempt again Bye bye...see you again next seme printf(“Please enter points : ”); scanf(“%d”, &points); รนั ครงั้ ท่ี 2 Please enter points : 79 Pass exam...Congratulations if(points >= 50) Bye bye...see you again next semes printf(“Pass exam...Congratulations\\n;”); else printf(“Fail...Attempt again\\n”); printf(“Bye bye...see you again next semester”); }

ทำกำรรบั ค่ำคะแนน (points) เขำ้ มำในโปรแกรม จำกนน้ั ตรวจสอบดว้ ยเงอ่ื นไข if-else หำกคะแนนมำกกวำ่ หรอื เท่ำกบั 50 ใหพ้ มิ พข์ อ้ ควำม “Pass exam...Congratulations” และออกจำกบลอ็ กกำรทำงำนของคำสงั่ เงอ่ื นไข if-else ไปทำงำน ในคำสงั่ ถดั ไป คอื พมิ พข์ อ้ ควำม “Bye bye...see you again next semester” หำกคะแนนนอ้ ยกว่ำ 50 ใหพ้ มิ พข์ อ้ ควำม “Fail...Attempt again” และออกจำกบลอ็ ค กำรทำงำนของคำสงั่ เงอ่ื นไข if-else ไปทำงำนในคำสงั่ ถดั ไป คอื พมิ พข์ อ้ ควำม “Bye bye...see you again next semester”

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

โฟลวชำรต์ แสดงกำรทำงำนของคำสงั่ เงอ่ื นไข nested-if

โปรแกรมแสดงการทางานของ if-else ผลลพั ธข์ องโปรแกรม #include <stdio.h> รนั ครงั่ ท่ี 1 Please enter points : 55 You get grade D main(){ See you again! Next course int points; รนั ครงั่ ท่ี 2 Please enter points : 80 printf(“Please enter points : ”); Congratulations scanf(“%d”, &points); C Language programming subject if(points >= 80) { You get grade A See you again! Next course printf(“Congratulations\\n”); printf(“C Language programming subject\\n”); รนั ครงั่ ท่ี 3 Please enter points : 45 printf(“You get grade A\\n”); You get grade F } See you again! Next course else if(points>=70) printf(“You get grade B\\n”); else if(points>=60) printf(“You get grade C\\n”); else if(points>=50) printf(“You get grade D\\n”); else printf(“You get grade F\\n”); printf(“See you again! Next course”); }

อธิบายโปรแกรม ตวั อย่างท่ี 9.5a และ 9.5b น้ีเป็นโปรแกรมท่เี หมอื นกนั ทกุ ประการ เพยี งแต่เขียนในรูปแบบท่ตี ่างกนั เท่าน้นั โปรแกรมน้ีจะคานวณเกรดจากคะแนนท่ปี ้ อนเขา้ มา โดยใชค้ าสงั่ ในรูปแบบ if ซอ้ น if ในการตรวจสอบ ซ่งึ หลกั การทางานกเ็ หมือนกบั คาสงั่ เงอ่ื นไข if และ if-else ในตวั อยา่ งท่ผี ่านมา คอื หากตรวจสอบเงอ่ื นไขใดแลว้ พบว่าเป็นจรงิ กจ็ ะทางานตามคาสงั่ ของบลอ็ คน้นั ๆ เช่น หากไดค้ ะแนน 75 คะแนน จะไดว้ ่าเงอ่ื นไขท่ี 2 คอื points >= 70 เป็นจรงิ ดงั น้นั จงึ แสดงขอ้ ความว่า “You get grade B” และเม่อื ตรวจสอบ และทางานตามคาสงั่ ในสว่ นของ nested if เรยี บรอ้ ยแลว้ กจ็ ะแสดงขอ้ ความ “See you again! Next course” เสมอ

คาสงั่ เงอ่ื นไข switch-case switch (ตวั แปร/นิพจน์ท่จี ะตรวจสอบ) { case ค่าท่ี 1 : คาสงั่ ท่ี 1; เป็นคาสงั่ ท่ใี ชเ้ ลอื กทางานตามคาสงั่ ตา่ ง ๆ โดยพจิ ารณาจากค่าของตวั แปรหรอื นิพจน์ทก่ี าหนดวา่ ตรงกบั break; กรณี (case) ใด กลา่ วคอื ถา้ คาสงั่ switch ตรวจสอบค่าของตวั แปรหรอื นิพจน์ท่กี าหนดแลว้ case ค่าท่ี 2 : พบวา่ ตรงกบั case ใดกจ็ ะทางานตามคาสงั่ ทอ่ี ยูภ่ ายใต้ case น้นั แตห่ ากตรวจสอบแลว้ ไม่ตรง กบั case ใดๆเลย กจ็ ะเขา้ สูก่ ารทางานภายใตส้ ว่ นของ default ทง้ั น้ีคาสงั่ switch- คาสงั่ ท่ี 2; case จะมหี รอื ไม่มสี ว่ นของ default กไ็ ด้ break; case คา่ ท่ี 3 : ถา้ มี default : เม่อื ตรวจสอบคา่ ของตวั แปร/นิพจน์แลว้ ไม่ตรงกบั case ใด ๆ กจ็ ะ เขา้ มาทางานท่ี default คาสงั่ ท่ี 3; break; ถา้ ไม่มี default : เม่ือตรวจสอบค่าของตวั แปร/นิพจนแ์ ลว้ ไม่ตรงกบั case ใดๆกจ็ ะ default : คาสงั่ ท่ี 3; ไม่ทางานตามคาสงั่ ใดๆ ภายใน switch-case น้นั เลย }

โฟลวชำรต์ แสดงกำรทำงำนของคำสงั่ เงอ่ื นไข switch-case จากรูปแบบการทางานของคาสงั่ เงอ่ื นไข switch-case จะสงั เกตเหน็ ว่าในแต่ละ case เม่ือทางานตามคาสงั่ ตา่ ง ๆ ของ case น้ัน ๆ เรยี บรอ้ ยแลว้ จะตอ้ งจบดว้ ยคาสงั่ break ทกุ ครง้ั (ยกเวน้ กรณีของ default เน่ืองจากเป็นกรณีสดุ ทา้ ยจงึ ไม่จาเป็นตอ้ งใสค่ าสงั่ break) ซ่ึงสาเหตทุ ่ตี อ้ งใสค่ าสงั่ break เพราะหลงั จากทางานตามคาสงั่ ใน case น้ัน ๆ เรยี บรอ้ ยแลว้ หากไม่มคี าสงั่ break โปรแกรมจะทางาน ตามคาสงั่ ใน case อน่ื ๆ ท่อี ยูถ่ ดั ไปดว้ ย ดงั น้นั จงึ จาเป็นตอ้ งใชค้ าสงั่ break ในการควบคมุ ใหโ้ ปรแกรมกระโดดออกจากการทางานของคาสงั่ เงอ่ื นไข switch-case (ขา้ มการทางานของ case อน่ื ๆท่อี ยู่ ถดั ไป)ไปทาคาสงั่ ท่อี ยูน่ อกชดุ คาสงั่ switch-case ตอ่ ไป

โปรแกรมแสดงการทางานของคาสงั่ เงอ่ื นไข switch-case #include <stdio.h> main(){ char ch; อธิบายโปรแกรม scanf(“%c”, &ch); โปรแกรมน้ีจะรบั ตวั อกั ษรเขา้ มาเกบ็ ไวใ้ นตวั แปร ch และทาการตรวจสอบตวั แปร ch วา่ มีค่าเป็ นอะไร เพ่อื พจิ ารณาวา่ ผูใ้ ชไ้ ดก้ ดคยี ใ์ ดเขา้ มา โดยหากกด enter (ตวั แปร switch(ch) { ch มีค่าเท่ากบั ‘\\n’) กจ็ ะตรงกบั กรณีของบรรทดั ท่ี 9 และจะทางานตามคาสงั่ ในบรรทดั ท่ี case ‘\\n’ : 10-11 ถา้ กด tab (ตวั แปร ch มีคา่ เทา่ กบั ‘\\t’)จะเขา้ กรณีของบรรทดั ท่ี 12 และจะทา printf(“You press enter”); ตามคาสงั่ บรรทดั ท่ี 13-14 และถา้ กด space (ตวั แปร ch มีค่าเทา่ กบั ‘ ’) จะตรงกบั break; กรณีของบรรทดั ท่ี 15 กจ็ ะทาตามคาสงั่ บรรทดั ท่ี 16-17 ซ่ึงหากป้ อนตวั อกั ษรอน่ื ๆ case ‘\\t’ : นอกเหนือจาก enter, tab และ space แลว้ เม่ือตรวจสอบเง่อื นไขกจ็ ะไม่ตรงกบั printf(“You press tab”); กรณีใดๆเลย จงึ เขา้ สูก่ ารทางานภายใตส้ ว่ นของ default ในบรรทดั ท่ี 18 และทาการพมิ พ์ break; case ‘ ’ : ขอ้ ความออกมาตามคาสงั่ ในบรรทดั ท่ี 19 printf(“You press spacebar”); break; default : printf(“You don’t press enter, tab and spacebar”); } }

โปรแกรมหาคา่ ผลบวก ลบ คูณ หาร หรอื ยกกาลงั ของเลข 2 จานวน #include <stdio.h> #include <math.h> main() { int choice; double num1,num2; printf(\"############################\\ ผลลพั ธข์ องโปรแกรม n\"); printf(\"# Please select choice #\\n\"); ############################ printf(\"############################\\ n\"); # Please select choice # printf(\"# 1. Plus (+) #\\n\"); ############################ printf(\"# 2. Minus (-) #\\n\"); # 1. Plus (+) # printf(\"# 3. Multiply (*) #\\n\"); # 2. Minus (-) # printf(\"# 4. Divide (/) #\\n\"); รนั ครง้ั ท่ี 1 printf(\"# 5. Power # 3. Multiply (*) # #\\n\"); printf(\"############################\\ # 4. Divide (/) # n\"); # 5. Power # printf(\"\\n \\t Select : \"); scanf(\"%d\",&choice); ############################ printf(\"\\nEnter number1 : \"); scanf(\"%lf\",&num1); Select : 1 printf(\"Enter number2 : \"); scanf(\"%lf\",&num2); Enter number1 : 2 switch(choice) { Enter number2 : 3 2.00 + 3.00 = 5.00 case 1 : printf(\"%3.2lf + %3.2lf = %3.2lf\\n\",num1,num2,num1+num2); break; case 2 : printf(\"%3.2lf - %3.2lf = %3.2lf\\n\",num1,num2,num1-num2); break; case 3 : printf(\"%3.2lf * %3.2lf = %3.2lf\\n\",num1,num2,num1*num2); break; case 4 :

อธบิ ายโปรแกรม บรรทดั ท่ี 2 ทาการ include ไฟล์ math.h ซ่งึ เป็นเฮดเดอรไ์ ฟลข์ องภาษาซที ่ี รวบรวมการประกาศของฟงั กช์ นั่ ท่ใี ชท้ างานต่าง ๆ ดา้ นคณิตศาสตรไ์ ว้ สาเหตทุ ่ตี อ้ งรวมไฟลน์ ้ีเขา้ ไวใ้ น โปรแกรม เน่ืองจากในบรรทดั ท่ี 37 มีการเรยี กใชฟ้ งั กช์ นั่ pow() เพอ่ื คานวณเลขยกกาลงั โดย pow() เป็นฟงั กช์ นั่ ท่มี ีการประกาศอยู่ในเฮดเดอรไ์ ฟล์ math.h ดงั น้นั จงึ ตอ้ งรวมเฮดเดอร์ ไฟลน์ ้ีเขา้ ไวใ้ นโปรแกรมดว้ ย หากลองนาโปรแกรม มาเปล่ยี นแปลง โดยลบคาสงั่ break ออกจาก case ทกุ case ของโปรแกรม ผลลพั ธท์ ่ไี ดจ้ ะเป็นดงั น้ี

รนั ครง้ั ท่ี 2 รนั ครง้ั ท่ี 3 ############################ ############################ # Please select choice # # Please select choice # ############################ ############################ # 1. Plus (+) # # 1. Plus (+) # # 2. Minus (-) # # 2. Minus (-) # # 3. Multiply (*) # # 3. Multiply (*) # # 4. Divide (/) # # 4. Divide (/) # # 5. Power # # 5. Power # ############################ ############################ Select : 5 Select : 7 Enter number1 : 2 Enter number1 : 2 Enter number2 : 3 Enter number2 : 3 2.00 power 3.00 = 8.00 Please select choice 1-5 only

คาสงั่ ทาซ้า (Iteration Statement) เป็นคำสงั่ ทใ่ี ชก้ ำหนดวงรอบ (loop) กำรทำงำนของโปรแกรม ซง่ึ มปี ระโยชนม์ ำกในกรณีทต่ี อ้ งทำงำนหน่ึงๆซำ้ กนั หลำยๆครง้ั คำสงั่ ทำซำ้ for for (กาหนดค่าเรม่ิ ตน้ ใหก้ บั ตวั แปร; เงอ่ื นไขท่ตี อ้ งการตรวจสอบ; ปรบั ค่าของ ตวั แปร) { คาสงั่ ท่ี 1; } คาสงั่ ท่ี 2; คำสงั่ น้ปี ระกอบดว้ ย 3 สว่ น คอื 1.สว่ นกำหนดค่ำเรม่ิ ตน้ ใหก้ บั ตวั แปร 2.สว่ นเงอ่ื นไขทต่ี อ้ งกำรตรวจสอบ 3.ส่วนปรบั ค่ำของตวั แปร

การทางานของ for น้ัน จะเรม่ิ จากสว่ นแรกคอื กาหนดค่าเรม่ิ ตน้ ใหก้ บั ตวั แปร โฟลวชำรต์ แสดงกำรทำงำนของคำสงั่ ทำซำ้ for กอ่ น จากน้นั จะไปตรวจสอบเงอ่ื นไขในสว่ นท่ี 2 ว่าเป็นจรงิ หรอื ไม่ ถา้ เป็นจรงิ ก็ จะเขา้ สูก่ ารทางานของลปู (ถา้ เป็นเทจ็ จะไม่เขา้ สูล่ ูป แตจ่ ะไปทาคาสงั่ ตอ่ ไปท่อี ยู่ ถดั จากลูปเลย) และเม่ือทางานตามคาสงั่ ทง้ั หมดท่อี ยู่ภายในลูปแลว้ กจ็ ะเขา้ ไป ทางานในสว่ นท่ี 3 ของคาสงั่ for เพอ่ื ปรบั ค่าของตวั แปร และทาการตรวจสอบ เงอ่ื นไขใหม่อกี ครง้ั ซ่ึงทา่ เงอ่ื นไขเป็นจรงิ กย็ งั คงอยูใ่ น ลูปต่อไป และจะทาอย่าง น้ีเรอ่ื ยๆจนกระทงั่ ผลการตรวจสอบเงอ่ื นไขเป็นเทจ็ จงึ ค่อยออกจากลูปไปทาคาสงั่ ท่อี ยู่นอกลูปต่อไป

โปรแกรมแสดงการทางานของคาสงั่ for ผลลพั ธข์ องโปรแกรม #include <stdio.h> This is round 1 #include <conio.h> This is round 2 This is round 4 main() { This is round 5 int i,j; Loop perform 5 rounds clrscr(); for(i=1,j=1;i<=10;i++) { if(i==3){ j++; continue; printf(\"This is round %d\\n\",i); } else { printf(\"This is round %d\\n\",j); j++; } if(i==5) break; } printf(\"Loop perform %d rounds\\n\",i); getch(); }

อธบิ ายโปรแกรม บรรทดั ท่ี 2 : ทาการ include ไฟล์ conio.h ซ่ึงเป็นเฮดเดอรไ์ ฟลข์ องภาษาซีเขา้ มาในโปรแกรม เน่ืองจากในบรรทดั ท่ี 6 มกี าร เรยี กใชฟ้ งั กช์ นั่ clrscr() เพอ่ื เคลยี รห์ นา้ จอ(Clear screen)ใหว้ ่าง และ บรรทดั ท่ี 20 มกี ารเรยี กใชฟ้ งั กช์ นั่ getch() ซ่ึงทง้ั สองฟงั กช์ นั่ มกี ารประกาศอยู่ในเฮดเดอรไ์ ฟล์ conio.h จงึ จาเป็นตอ้ งรวมเฮดเดอรไ์ ฟลน์ ้ีเขา้ มาในโปรแกรม จากผลลพั ธจ์ ะเหน็ วา่ การทางานในรอบท่ี 3 ไม่ไดพ้ มิ พ์ ”This is round 3” ออกมาทางจอภาพ ซ่ึงเป็นผลมาจากคาสงั่ continue ในบรรทดั ท่ี 10 กลา่ วคอื เม่ือพบคาสงั่ continue โปรแกรมจะไม่ทางานตอ่ จนจบรอบการทางานรอบน้ันของลูป แต่ จะวนกลบั ข้ึนไปทางานในรอบการทางานใหม่ทนั ที และจากผลลพั ธจ์ ะเหน็ ว่าโปรแกรมทางานเพยี ง 5 รอบ ทง้ั ท่กี าหนดการทางานไว้ 10 รอบ (คอื ใหท้ าตง้ั แต่ i เป็น 1 และจะหยดุ ทาเม่อื i มากกวา่ 10 โดยเพม่ิ คา่ i รอบละ 1) ท่เี ป็นเช่นน้ีเน่ืองมาจากคาสงั่ break ในบรรทดั ท่ี 17 กลา่ วคอื ในรอบการทางานรอบท่ี 5 เม่ือพบ คาสงั่ break โปรแกรมจะออกจากลูปทนั ที บรรทดั ท่ี 20 : ทาการใสฟ่ งั กช์ นั่ getch() ไวใ้ นโปรแกรม เน่ืองจากตอ้ งการใหโ้ ปรแกรมหยดุ รอการกดคียใ์ ด ๆ กอ่ นท่จี ะจบการทางาน เพอ่ื ใหเ้ ราไดเ้ หน็ ผลลพั ธบ์ นหนา้ จอ

โปรแกรมสูตรคูณแม่ 2 แสดงการทางานซ้าๆโดยใชค้ าสงั่ ทาซ้า for #include <stdio.h> ผลลพั ธข์ องโปรแกรม 2*1 = 2 #include <conio.h> 2*2 = 4 2*3 = 6 main() { 2*4 = 8 int i; 2*5 = 10 clrscr(); 2*6 = 12 for(i=1;i<=12;i++){ 2*7 = 14 printf(\"\\t 2*%d \\t = \\t %d\\n\",i,2*i); 2*8 = 16 } 2*9 = 18 getch(); 2*10 = 20 2*11 = 22 } 2*12 = 24 กำรใชค้ ำสงั่ for ซอ้ น for (nested for) nested for เป็นกำรนำคำสงั่ ทำซำ้ for หลำยๆชดุ มำทำงำนซอ้ นกนั ซง่ึ กำรทำงำนจะเรม่ิ จำกลูป for ทอ่ี ยู่ขำ้ ง นอก (outer loop)ไปสู่กำรทำงำนของลูป for ทอ่ี ยู่ขำ้ งใน (inner loop) และจะทำลูป for ขำ้ งในจนเสรจ็ สมบูรณจ์ งึ จะกลบั ออกไปทำลูปนอกอกี ครง้ั ซง่ึ จะทำงำนเช่นน้ีไปเรอ่ื ยๆจนกว่ำเงอ่ื นไขของลูปนอกจะเป็นเทจ็

โปรแกรมแสดงการพมิ พ์ * ออกทางจอภาพ โดยใช้ nested for ควบคมุ การพมิ พ์ #include <stdio.h> ผลลพั ธข์ องโปรแกรม #include <conio.h> * main() { *** int i,j; ***** clrscr(); ******* for(i=1;i<=9;i+=2) { ********* for(j=1;j<=i;j++) ********* printf(\"*\"); ******* printf(\"\\n\"); ***** } *** * for(i=9;i>=1;i-=2) { for(j=i;j>=1;j--) printf(\"*\"); printf(\"\\n\"); } getch(); }

อธบิ ายโปรแกรม โปรแกรมน้ีมี nested for อยู่ 2 ชดุ ชดุ แรกคอื บรรทดั ท่ี 7-11 และชดุ ท่สี องคอื บรรทดั ท่ี 13-17 โดย nested for ชดุ แรกจะทาการพมิ พ์ * ออกทางจอภาพ โดยเพ่มิ จานวนการพมิ พข์ ้ึนครง้ั ละ 2 คอื จาก 1 ไป 3, 5, 7, 9 ดวงตามลาดบั สว่ น nested for ชดุ ท่สี องจะพมิ พ์ * ออกทางจอภาพ โดยลดจานวนการพมิ พจ์ าก 9 ไป 7, 5, 3, 1 ดวงตามลาดบั การทางานของ nested for ชดุ แรกน้นั เร่มิ จากลูปนอก รอบแรกจะมคี ่า i เป็น 1 จากน้นั จะเขา้ สูก่ าร ทางานของลูปใน คอื เร่มิ ท่ี j=1 และจะพมิ พ์ * จนกว่าเงอ่ื นไข j <= i จะเป็นเท็จ จงึ กลบั ไปทางานลูปนอกต่อ ซ่งึ จะ ส้นิ สดุ การทางานของลูปนอกเม่ือเงอ่ื นไข i<= 9 เป็นเทจ็ สาหรบั nested for ชดุ ท่สี อง กจ็ ะมีการทางานเหมือนกบั nested for ชดุ แรก เพยี งแต่เปลย่ี น สว่ นของการกาหนดค่าเร่มิ ตน้ ใหก้ บั ตวั แปร, เงอ่ื นไขท่ใี ชต้ รวจสอบการออกจากลูป และการปรบั ค่าตวั แปรเท่าน้ัน แต่ หลกั การทางานจะเหมอื นกนั

คาสงั่ ทาซ้า while หลกั กำรทำงำน คอื จะทำกำรตรวจสอบเงอ่ื นไขก่อน while (เงอ่ื นไข) { กำรทำงำนทกุ ครง้ั หำกเงอ่ื นไขเป็นจรงิ จงึ เขำ้ ไปทำงำน คาสงั่ ท่ี 1; ในบลอ็ กกำรทำงำนของลูป while แต่หำกเงอ่ื นไข เป็นเทจ็ จะไมเ่ ขำ้ สูก่ ำรทำงำนของลูป while แต่ } จะไปทำงำนคำสงั่ ถดั ไปทอ่ี ยู่นอกลูป while ทนั ที คาสงั่ ท่ี 2; โฟลวชำรต์ แสดงกำรทำงำนของคำสงั่ ทำซำ้ while

โปรแกรมเกมทายตวั เลข ผลลพั ธข์ องโปรแกรม #include <stdio.h> Guess number : 5 #include <conio.h> You are wrong! try again main() { Guess number : 7 int number; You are wrong! try again clrscr(); Guess number : 2 printf(\"Guess number : \"); You are wrong! try again scanf(\"%d\",&number); Guess number : 3 while(number != 3) { You win! Congratulations printf(\"You are wrong! try again\\n\"); printf(\"Guess number : \"); อธบิ ำยโปรแกรม scanf(\"%d\",&number); โปรแกรมน้ีเป็นโปรแกรมเกมทำยตวั เลข โดยใชล้ ูป while ตรวจสอบค่ำตวั } เลขทป่ี ้อนเขำ้ มำว่ำเป็นเลข 3 หรอื ไม่ หำกไมใ่ ช่เลข 3 แสดงวำ่ ทำยผดิ กจ็ ะวนลูปกลบั ไปให้ printf(\"You win! Congratulations\\n\"); ทำกำรป้อนค่ำตวั เลขใหม่ โดยโปรแกรมจะวนลูปใหท้ ำยค่ำของตวั เลข จนกวำ่ จะทำกำรทำย getch(); ถกู วำ่ เป็นเลข 3 (คอื ถำ้ number เป็น 3 จะทำใหเ้งอ่ื นไข while เป็นเทจ็ ก็จะ } หลดุ ออกจำกกำรทำงำนของลูปไป)

คาสงั่ ทาซ้า do-while หลกั กำรทำงำน คอื คำสงั่ น้จี ะทำงำนอยำ่ งนอ้ ยทส่ี ุด 1 ครง้ั ก่อนเสมอ do { ไมว่ ำ่ เงอ่ื นไขจะเป็นจรงิ หรอื เทจ็ ก็ตำม จำกนนั้ จงึ ค่อยตรวจสอบ คำสงั่ ท่ี 1; เงอ่ื นไขในภำยหลงั ซง่ึ หำกเงอ่ื นไขเป็นจรงิ กจ็ ะวนลูปกลบั ไปทำงำนท่ี } while (เงอ่ื นไข); บลอ็ คของคำสงั่ do-while อกี ครง้ั แต่หำกเงอ่ื นไขเป็นเทจ็ ก็ คำสงั่ ท่ี 2; จะหลดุ จำกกำรทำงำนของคำสงั่ do-while ไปทำคำสงั่ ทอ่ี ยู่ นอกลูปต่อไป

โปรแกรมแสดงการทางานของคาสงั่ ทาซ้า do-while #include <stdio.h> อธบิ ายโปรแกรม #include <conio.h> บรรทดั ท่ี 5 : กาหนดค่าเร่มิ ตน้ ใหก้ บั ตวั แปร i เป็ น 100 บรรทดั ท่ี 7-10 : มีการนาคาสงั่ ทาซ้า do-while มาใชใ้ นการตรวจสอบ ซ่ึงอยา่ ง main() { int i = 100; ท่กี ลา่ วแลว้ วา่ คาสงั่ น้ีจะทางานกอ่ นอยา่ งนอ้ ย 1 ครง้ั เสมอ ดงั น้ัน จงึ ทางานบรรทดั ท่ี 8 ไดค้ ่า i clrscr(); เทา่ กบั 101 และทาการพมิ พค์ ่า i ออกทางจอภาพ จากน้ันจงึ ทาการตรวจสอบเง่อื นไขวา่ i do{ มากกว่า 200 หรอื ไม่ ปรากฏวา่ ตรวจสอบแลว้ i นอ้ ยกว่า 200 แสดงว่าเงอ่ื นไขเป็ นเท็จ ดงั น้ัน i = i+1; printf(\"%d\",i); จงึ ไม่วนลปู กลบั ไปทางานตอ่ โปรแกรมน้ีจงึ ทางานเพยี งแค่ 1 รอบเทา่ น้นั (หากทดลองเปล่ยี น }while(i>200); ทาซ้าจาก do-while เป็ น while แลว้ ตรวจสอบ ผลท่ไี ด้ จะพบว่าหากใชค้ าสงั่ getch(); while โปรแกรมจะไม่พมิ พค์ ่าใดๆออกทางหนา้ จอ เน่ืองจากเม่ือเร่มิ เขา้ สูล่ ปู ของ while } เงอ่ื นไขกเ็ ป็ นเท็จแลว้ ) ผลลพั ธข์ องโปรแกรม 101

โปรแกรมตรวจสอบการเลอื กเมนูผลลพั ธข์ องโปรแกรม ############################ #include <stdio.h> # Please select choice # #include <conio.h> #include <math.h> ############################ main() { # 1. Plus (+) # int choice; clrscr(); # 2. Minus (-) # printf(\"############################\\n\"); # 3. Multiply (*) # printf(\"# Please select choice # 4. Divide (/) # #\\n\"); # 5. Power # ############################ printf(\"############################\\n\"); printf(\"# 1. Plus (+) Select ( Please select choice 1-5 only ) #\\n\"); printf(\"# 2. Minus (-) Select ( Please select choice 1-5 only ) #\\n\"); printf(\"# 3. Multiply (*) Select ( Please select choice 1-5 only ) #\\n\"); printf(\"# 4. Divide (/) Select ( Please select choice 1-5 only ) #\\n\"); printf(\"# 5. Power #\\n\");

อธบิ ายโปรแกรม โปรแกรมน้ีมเี มนูใหเ้ ลอื กทง้ั หมด 5 เมนู ซ่ึงหากไม่เขียนโปรแกรมตรวจสอบ ขอ้ ผิดพลาดไว้ อาจมผี ูใ้ ชง้ านโปรแกรมบางคนทาการเลอื กเมนูท่ไี ม่ใช่เมนูท่ี 1-5 ทาให้ โปรแกรมเกดิ ขอ้ ผิดพลาดได้ ดงั น้นั โปรแกรมน้ีจงึ ไดน้ าคาสงั่ ทาซ้า do-while มาใชส้ าหรบั ตรวจสอบการเลอื กเมนู โดยบรรทดั ท่ี 16-19 จะวนลูปเพอ่ื รบั คา่ การเลอื ก เมนู หากเมนูท่เี ลอื กไม่ใช่เมนูท่ี 1-5 (คือ ค่าของเมนูท่เี ลอื กมคี า่ นอ้ ยกวา่ 1 หรอื มีค่า มากกว่า 5) กจ็ ะทาการวนลปู เพ่อื รบั คา่ ไปเร่อื ย ๆ จนกว่าผูใ้ ชง้ านโปรแกรมจะเลอื กเมนู ท่ี 1-5 เมนูใดเมนูหน่ึง

ตดิ ต่อ อาจารยณ์ ภทั ร วรรณสาร 087-8548475


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook