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 บัตรเนื้อหาที่ 1 คำสั่งทดสอบเงื่อนไขในการตัดสินใจ

บัตรเนื้อหาที่ 1 คำสั่งทดสอบเงื่อนไขในการตัดสินใจ

Description: ชุดที่4

Search

Read the Text Version

ชุดท่ี4 โครงสร้างการเขยี นโปรแกรม บตั รเนอ้ื หาท่ี 1 คาสัง่ ทดสอบเงื่อนไข ในการตดั สินใจ คำสั่งทดสอบเง่ือนไขเพื่อกำรตัดสินใจ เป็นคำสั่งที่มีกำรทดสอบเงื่อนไขก่อนที่จะทำงำนตำมคำสั่งท่ี กำหนดไว้ ซง่ึ ไดแ้ กค่ ำสงั่ if, if else, โครงสร้ำง else if (หรอื nested if) และคำสง่ั switch คาส่งั if if เป็นคำสั่งทสี่ งั่ ให้มีกำรทดสอบเงอื่ นไขก่อนท่ีจะไปทำงำนตำมคำส่งั ที่กำหนดไว้ รปู แบบการใช้คาส่งั if if (expression) statement; หรือ if (expression) { statement(s); } โดยที่ expression คือ นิพจน์เงื่อนไข ซ่ึงจะมีคำ่ จรงิ หรือเทจ็ อย่ำงใดอย่ำงหนึง่ เทำ่ นน้ั ถำ้ เง่ือนไขเป็น จรงิ จะทำงำนตำมคำสง่ั ที่อยใู่ น if จำกน้นั กอ็ อกจำกคำสง่ั if ไปทำคำสง่ั ถัดไป ถ้ำเงื่อนไขเปน็ เท็จจะออก จำกคำส่ัง if ทนั ที ชดุ กจิ กรรมการเรยี นรูก้ ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 1 รายวชิ าภาษาซี ง30243 ชัน้ มัธยมศึกษาปีท่ี 5

ชุดที่4 โครงสรา้ งการเขียนโปรแกรม ลกั ษณะการทางานของคาสงั่ if สำมำรถเขียนเป็นแผนผังไดด้ งั นี้ รูปท่ี 4.4 ผังงำนแสดงลกั ษณะกำรทำงำนของคำส่ัง if โปรแกรมตัวอย่างท่ี 4.12 แสดงกำรใชค้ ำสง่ั if เพอื่ ตรวจสอบคำ่ ที่รบั จำกคยี ์บอรด์ /* if1.C. */ #include <stdio.h> /* บรรทัดท่ี 1 */ #include <conio.h> /* บรรทดั ที่ 2 */ #include <ctype.h> /* บรรทัดท่ี 3 */ /*Capitalize Keys read from The Keyboard */ /* บรรทดั ท่ี 4 */ main() /* บรรทัดท่ี 5 */ { /* บรรทัดท่ี 6 */ char any_char; /* บรรทัดท่ี 7 */ clrscr(); /* บรรทดั ท่ี 8 */ printf(\"Please type a lowercase letter : \"); /* บรรทดั ท่ี 9 */ scanf(\"%c\", &any_char); /* บรรทัดท่ี 10 */ if(any_char >= 'a') /* บรรทดั ที่ 11 */ printf(\"In uppercase: %c \\n\", toupper(any_char)); /* บรรทดั ท่ี 12 */ getch(); /* บรรทดั ที่ 13 */ return(0); /* บรรทัดที่ 14 */ } /* บรรทดั ท่ี 15 */ ชุดกิจกรรมการเรยี นร้กู ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 2 รายวชิ าภาษาซี ง30243 ชั้นมธั ยมศกึ ษาปีที่ 5

ชดุ ที่4 โครงสร้างการเขียนโปรแกรม ผลลัพธท์ ี่ไดจ้ ากโปรแกรม Please type a lowercase letter : P In uppercase: P คาอธบิ ายโปรแกรม จำกโปรแกรมตัวอย่ำงท่ี 4.12 สำมำรถอธบิ ำยกำรทำงำนของโปรแกรมท่สี ำคัญ ๆ ได้ดังนี้ บรรทัดที่ 3 #include <ctype.h> ให้กำรสนับสนนุ ฟังกช์ นั toupper( ) ในบรรทดั ท่ี 12 บรรทัดท่ี 4 เปน็ คำอธิบำยโปรแกรมเพอ่ื บอกให้ทรำบวำ่ เปน็ โปรแกรมทีแ่ ปลงตวั อกั ขระทรี่ ับเข้ำมำให้เปน็ ตวั พิมพใ์ หญ่ บรรทดั ท่ี 9 และ 10 พิมพ์ขอ้ ควำมแนะนำให้ผ้ใู ช้ พมิ พ์ตวั พมิ พ์เล็ก แลว้ รับเขำ้ มำเก็บไว้ในตวั แปร any_char ตำมลำดบั บรรทดั ที่ 11 คำสงั่ if (any_char >= ‘a’) ตรวจสอบอกั ขระทเ่ี กบ็ ในตวั แปร any_char ทีร่ ับเข้ำมำจำก คยี ์บอรด์ ว่ำมคี ่ำมำกกว่ำหรือเท่ำกบั ‘a‘ น่ันคือตรวจสอบว่ำเปน็ ตวั พมิ พเ์ ลก็ หรือไม่ ถำ้ ใช่ให้ ไปทำงำนคำสงั่ บรรทดั ท่ี 12 บรรทดั ท่ี 12 คำสง่ั ทใี่ ห้ทำภำยหลังจำกตรวจสอบเงือ่ นไข if แลว้ ไดค้ ำ่ เปน็ จรงิ คือ เรียกใช้ ฟงั กช์ นั toupper( ) เพ่อื แปลงตัวพิมพเ์ ล็กทเี่ กบ็ ไว้ในตวั แปร any_char เป็นตวั พิมพ์ ใหญ่ คือ toupper (any_char); แสดงออกทจ่ี อภำพ แลว้ หยุดรอรับคำ่ ใด ๆ จำก คียบ์ อรด์ เชน่ ถ้ำกด enter กจ็ ะกลับสโู่ ปรแกรม ชุดกิจกรรมการเรียนร้กู ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 3 รายวชิ าภาษาซี ง30243 ชัน้ มธั ยมศกึ ษาปที ี่ 5

ชุดที่4 โครงสร้างการเขยี นโปรแกรม โปรแกรมตวั อย่างที่ 4.13 แสดงการใชค้ าสั่ง if เพ่ือชว่ ยในการนบั ตวั อักขระและนับคาในประโยค ที่ผใู้ ชพ้ ิมพ์ /* if2.c */ #include<stdio.h> /* บรรทดั ที่ 1 */ #include<conio.h> /* บรรทัดท่ี 2 */ void main(void) /* บรรทัดที่ 3 */ { /* บรรทัดที่ 4 */ int charcnt = 0, wordcnt = 0; /* บรรทดั ที่ 5 */ char ch; /* บรรทัดที่ 6 */ clrscr(); /* บรรทัดที่ 7 */ printf(\"Type your sentense or a phrase : \"); /* บรรทดั ท่ี 8 */ while( (ch=getche( ) ) != '\\r' ) /* บรรทัดท่ี 9 */ { /* บรรทัดที่ 10 */ charcnt++; /* บรรทัดที่ 11 */ if( ch==' ' ) wordcnt++; /* บรรทัดท่ี 12 */ } /* end while */ /* บรรทัดท่ี 13 */ printf(\"\\n\\nCharacter count is %d\", charcnt); /* บรรทดั ที่ 14 */ printf(\"\\nWord count is %d\", wordcnt+1); /* บรรทดั ท่ี 15 */ printf(\"\\n\\nPress any key back to program...\"); /* บรรทดั ที่ 16 */ getch(); /* บรรทัดท่ี 17 */ } /* บรรทดั ท่ี 18 */ ผลลพั ธ์ทไี่ ดจ้ ากโปรแกรม Type your sentense or a phrase : I’am a teacher Character count is 13 Word count is 3 Press any key back to program... ชดุ กจิ กรรมการเรยี นรกู้ ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 4 รายวชิ าภาษาซี ง30243 ช้นั มัธยมศกึ ษาปีที่ 5

ชุดท่ี4 โครงสรา้ งการเขียนโปรแกรม คาอธิบายโปรแกรม จำกโปรแกรมตัวอย่ำงท่ี 4.13 สำมำรถอธิบำยกำรทำงำนของโปรแกรมที่สำคญั ๆ ได้ดงั น้ี บรรทัดท่ี 5 ประกำศตวั แปรชนิดจำนวนเตม็ โดยท่ี charcnt ใช้เกบ็ จำนวนตวั อกั ขระทน่ี ับ ได้ และ wordcnt ใช้เก็บจำนวนคำทีน่ บั ไดใ้ นประโยค บรรทดั ที่ 9 คำส่งั while ((ch = getche()) ! = ‘ \\r ‘) เพื่อควบคุมกำรทำงำนของโปรแกรมให้วนทำงำน ซ้ำ ๆ จนกว่ำเงอื่ นไขเป็นเท็จจงึ หยุด น่ันคอื ถ้ำผใู้ ช้กด enter แทนกำรเตมิ ประโยค จะทำให้ เป็นเท็จ แลว้ จะออกจำก loop while ไปทำคำสัง่ บรรทัดที่ 14 ถงึ 17 แตถ่ ำ้ เปน็ จุดปจรระิงสงคคือ์ขอผง้ใู กชา้เตริมวิเปครระาโะยหคง์ ากนจ็ ะทำงำนใน loop while บรรทดั ที่ 11 และ 12 บรในรทกำัดรทว่ีิเค1ร1ำะคหำง์ สำน่งั แcตh่ลaะrอcยnำ่tง+ม+ีจ;ดุ ปใหระบ้ สวงกคสข์ ะอสงมกตำำรมวิเจคำรนำวะนหต์งัวำอนักทขีส่ รำะคทญั ีผ่ ดใู้ ังชนพ้ ้ี มิ พ์รวมทั้งชอ่ งว่ำงก็นับด้วย บรรทัดท่ี 11.2เพค่อื ำหสำ่ังวตั iถf ุป(cรhะส=ง=ค์ข‘อ‘ง)กwำรoเขrdยี cนnโtป+รแ+กรเมพอ่ื ตรวจสอบวำ่ ตัวแปร ch เทำ่ กับช่องว่ำงหรอื ไม่ นนั่ 2. เพคือ่ อื หำผรูปูใ้ ชแ้เบคบำะผแลปล้นัพพธท์มิ พต่ี ้อท์ งี่ กsำpรace bar เพือ่ เว้นชอ่ งว่ำงก่คี รง้ั จะบวกสะสมไวท้ ีต่ วั แปร wordcnt บรรทดั ที่ 14 พมิ พ์แสดงจำนวนตวั อักขระท่ีนับสะสมไว้ในตัวแปร charcnt ออกจอภำพ บรรทดั ท่ี 15 พิมพแ์ สดงจำนวนคำท่นี บั สะสมไวใ้ นตวั แปร wordcnt ออกจอภำพ แต่ตัว แปร wordcnt ตอ้ งเพม่ิ อีก 1 เพรำะถงึ จะเปน็ จำนวนคำที่ถูกต้อง บรรทดั ที่ 16 และ 19 พมิ พข์ ้อควำมใหก้ ดคีย์ใด ๆ เพื่อกลับสู่โปรแกรม และ หยุดรอรบั คำ่ ใด ๆ จำก คยี ์บอร์ด เช่น ถำ้ กด enter ก็จะกลบั สูโ่ ปรแกรม ตำมลำดบั คาสง่ั if else if else เปน็ คำสง่ั ที่สั่งใหม้ กี ำรทดสอบเงอ่ื นไข โดยมีกำรตัดสินใจแบบ 2 ทำงเลือก รปู แบบการใช้คาสัง่ if ชุดกจิ กรรมการเรยี นรู้การเขยี นโปรแกรมภาษาคอมพิวเตอร์ 5 รายวชิ าภาษาซี ง30243 ช้ันมธั ยมศึกษาปีท่ี 5

ชดุ ที่4 โครงสรา้ งการเขียนโปรแกรม if (expression) { statementA(s); } else { statementB(s); } จำกรปู แบบกำรใช้คำสง่ั if else หมำยควำมวำ่ ถำ้ นิพจน์เงอ่ื นไข (expression) มคี ำ่ เป็นจรงิ จะ ทำตำมคำสง่ั ชุด A (statementA(s);) ถ้ำมีค่ำเป็นเท็จจะทำตำมคำสัง่ ชุด B (statementB(s);) เม่อื ทำ เสร็จก็ออกจำกคำส่งั น้ี ลักษณะการทางานของคาสง่ั if else สำมำรถเขยี นเปน็ แผนผงั ได้ดงั นี้ รปู ท่ี 4.5 ผงั งำนแสดงลกั ษณะกำรทำงำนของคำสั่ง if else ชุดกิจกรรมการเรียนรกู้ ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 6 รายวชิ าภาษาซี ง30243 ชั้นมัธยมศึกษาปที ี่ 5

ชุดท่ี4 โครงสร้างการเขียนโปรแกรม โปรแกรมตวั อยา่ งที่ 4.14 แสดงการใช้คาสง่ั if else เพื่อตรวจสอบคา่ ที่รบั จากคยี บ์ อร์ด /* if_else1.c */ #include <stdio.h> /* บรรทดั ที่ 1 */ #include <conio.h> /* บรรทดั ที่ 2 */ #include <ctype.h> /* บรรทดั ท่ี 3 */ /*Capitalize Keys read from The Keyboard */ /* บรรทัดที่ 4 */ main() /* บรรทดั ที่ 5 */ { /* บรรทัดท่ี 6 */ char any_char; /* บรรทดั ที่ 7 */ clrscr(); /* บรรทัดที่ 8 */ printf(\"Please type a lowercase letter : \"); /* บรรทดั ท่ี 9 */ scanf(\"%c\",&any_char); /* บรรทัดที่ 10 */ if(any_char < 'a') /* บรรทัดท่ี 11 */ printf(\"Sorry, I can not capitalize that.\\n\"); /* บรรทัดที่ 12 */ else /* บรรทัดท่ี 13 */ printf(\"Thank you. In uppercase : %c.\",toupper (any_char)); /* บรรทัดท่ี 14 */ printf(\"\\n\\nPress any key back to program...\"); /* บรรทดั ท่ี 15 */ getch(); /* บรรทดั ที่ 16 */ return(0); /* บรรทัดที่ 17 */ } /* บรรทัดที่ 18 */ ผลลพั ธท์ ่ีไดจ้ ากโปรแกรม ผลลพั ธท์ ี่ได้จากโปรแกรม กรณีทเ่ี ตมิ ตัวอกั ษรพมิ พ์เลก็ กรณที ีเ่ ติมตวั อกั ษรพิมพ์ใหญ่ Please type a lowercase letter : n Please type a lowercase letter : N Thank you. In uppercase : N Sorry, I can not capitalize that. ชดุ กจิ กรรมการเรียนรกู้ ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 7 รายวชิ าภาษาซี ง30243 ชัน้ มัธยมศกึ ษาปที ี่ 5

ชุดท่ี4 โครงสรา้ งการเขียนโปรแกรม คาอธบิ ายโปรแกรม จำกโปรแกรมตวั อยำ่ งท่ี 4.14 สำมำรถอธิบำยกำรทำงำนของโปรแกรมท่ีสำคญั ๆ ไดด้ งั น้ี บรรทดั ท่ี 11 และ 12 คำส่งั if (any_char < ‘a’) ตรวจสอบอกั ขระทรี่ ับเข้ำมำว่ำมีค่ำน้อย กว่ำ ‘a’ หรอื ไม่ ถำ้ ใช่ให้พิมพ์ข้อควำม Sorry, I can not capitalize that. น่นั คอื ตรวจสอบ ตวั อักขระท่รี ับเขำ้ มำว่ำใช่ตวั อกั ขระพมิ พ์ใหญห่ รอื ไม่ แต่ถ้ำไม่ใช่ ใหไ้ ปทำคำส่ังบรรทดั ท่ี 13 บรรทัดที่ 13 else คือ เงื่อนไขบรรทัดที่ 11 เปน็ เท็จ (กรณที ี่ตวั อกั ขระเปน็ ตวั พมิ พเ์ ลก็ ) ให้ทำคำสง่ั บรรทัด ท่ี 14 คือ เปล่ียนตัวพมิ พเ์ ลก็ ให้เป็นตัวพิมพ์ใหญ่ ดว้ ยฟังก์ชัน toupper( ) และ แสดงออก จอภำพ บรรทัดท่ี 15 และ 16 พมิ พข์ อ้ ควำมใหก้ ดคยี ์ใด ๆ เพอื่ กลับสู่โปรแกรม และหยดุ รอรับคำ่ ใด ๆ จำก คียบ์ อรด์ เชน่ ถ้ำกด enter ก็จะกลบั สูโ่ ปรแกรม ตำมลำดบั คาสัง่ โครงสร้าง else if (คาสัง่ nested if) else if เปน็ โครงสร้ำงทท่ี ำใหเ้ รำสำมำรถใช้คำสั่ง if else ซอ้ นกนั ไดเ้ ร่ือย ๆ ส่วนมำกจะใช้ในกำร ตัดสนิ ใจทีม่ ำกกว่ำ 2 ทำงเลือกขึ้นไป บำงคร้งั อำจเรยี กโครงสร้ำงนวี้ ำ่ nested if else if (expression) { statementA(s); } else if (expression){ statementB(s); } ชุดกจิ กรรมการเรียนรกู้ ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 8 รายวชิ าภาษาซี ง30243 ช้ันมัธยมศึกษาปีท่ี 5

ชดุ ท่ี4 โครงสรา้ งการเขยี นโปรแกรม ข้อควรระวังในการใช้ nested if กำรเขียนคำสั่ง nested if ค่อนข้ำงยงุ่ ยำก อำจเกดิ ควำมสบั สนได้ ควรเขยี นคำส่งั nested if ใหเ้ ยือ้ งกันเพอ่ื ควำมสะดวกในกำรแกไ้ ขคำส่งั ในภำยหลงั โปรแกรมตัวอย่างที่ 4.16 แสดงกำรใช้คำสั่ง nested if เพ่อื ตรวจสอบคะแนนทีผ่ ู้ใช้เติม แลว้ ให้ เกรดตำมเงอื่ นไขทีก่ ำหนดในโปรแกรม /* nestif1.c */ #include<stdio.h> /* บรรทดั ท่ี 1 */ #include<conio.h> /* บรรทดั ท่ี 2 */ #include<stdlib.h> /* บรรทดั ที่ 3 */ void main(void) /* บรรทดั ท่ี 4 */ { /* บรรทดั ที่ 5 */ int score, n, i; /* บรรทัดที่ 6 */ char grade; /* บรรทัดท่ี 7 */ char numstr[20]; /* บรรทัดท่ี 8 */ clrscr( ); /* บรรทัดที่ 9 */ printf(\"Enter Number of Students : \"); /* บรรทดั ที่ 10 */ n = atoi(gets(numstr)); /* บรรทดั ท่ี 11 */ for ( i=1; i<=n; i++ ){ /* บรรทัดท่ี 12 */ printf(\"\\nEnter score of student #%d : \", i); /* บรรทัดท่ี 13 */ score = atoi(gets(numstr)); /* บรรทดั ท่ี 14 */ if ( score >= 80 ) /* บรรทัดท่ี 15 */ grade = 'A'; /* บรรทัดท่ี 16 */ else if ( score >= 70 ) /* บรรทัดท่ี 17 */ grade = 'B'; /* บรรทดั ท่ี 18 */ else if ( score >= 60 ) /* บรรทดั ท่ี 19 */ grade = 'C'; /* บรรทดั ที่ 20 */ else if ( score >= 50 ) /* บรรทดั ที่ 21 */ grade = 'D'; /* บรรทัดท่ี 22 */ else grade = 'F'; /* บรรทดั ท่ี 23 */ ชดุ กจิ กรรมการเรียนรู้การเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 9 รายวชิ าภาษาซี ง30243 ชั้นมัธยมศึกษาปที ่ี 5

ชุดที่4 โครงสร้างการเขียนโปรแกรม โปรแกรมตวั อยา่ งที่ 4.16 แสดงกำรใชค้ ำส่งั nested if เพื่อตรวจสอบคะแนนทีผ่ ใู้ ชเ้ ติม แลว้ ให้ เกรดตำมเงอ่ื นไขท่กี ำหนดในโปรแกรม printf(\"Score = %d, Grade of std #%d is %c\\n\",score,i,grade); /* บรรทัดที่ 24 */ } /* end for */ /* บรรทัดท่ี 25 */ printf(\"\\n\\nPress any key back to program...\"); /* บรรทดั ที่ 26 */ getch(); /* บรรทดั ที่ 27 */ } /* บรรทัดที่ 28 */ ผลลพั ธ์ที่ได้จากโปรแกรม Enter Number of Students : 3 Enter score of student #1 : 85 Score = 85, Grade of std #1 is A Enter score of student #2 : 70 Score = 70, Grade of std #2 is b Enter score of student #3 : 61 Score =61, Grade of std #3 is C nPress any key back to program... คาอธิบายโปรแกรม จำกโปรแกรมตวั อย่ำงที่ 4.16 สำมำรถอธบิ ำยกำรทำงำนของโปรแกรมท่ีสำคัญ ๆ ไดด้ ังน้ี บรรทัดที่ 3 #include <stdlib.h> สนบั สนนุ กำรใช้ฟังก์ชัน atoi( ) ของคำส่ังบรรทดั ที่ 11 บรรทัดท่ี 10 และ 11 รบั ค่ำตวั เลขท่เี ป็นจำนวนนกั เรยี น แล้วทำคำส่งั n = atoi(gets(numstr)); คอื นำคำ่ ท่ี รบั เข้ำมำแปลงใหเ้ ปน็ จำนวนเตม็ แล้วเกบ็ ไว้ทีต่ ัวแปร n บรรทดั ที่ 12 คำส่ัง for (i=1; i<=n; i++) เพื่อควบคมุ กำรทำงำนของโปรแกรมใหว้ นรอบทำงำน ตำมจำนวน ของตัวเลขทเ่ี ติมคอื n ครั้ง ซง่ึ ถ้ำตรวจสอบเง่อื นไข for แล้วเปน็ จริงจะทำคำสง่ั ภำยใน loop for คือคำสั่งบรรทัดที่ 13 ถึง 24 แตถ่ ้ำตรวจสอบเงื่อนไข for แล้วเป็นเท็จ จะไปทำคำสง่ั บรรทดั ตรวจสอบเง่ือนไขต่ออกี วำ่ ตัวแปร score ว่ำมำกกว่ำหรือเท่ำกบั 50 หรือไม่ ถำ้ ใช่ใหก้ ำหนดตัว แปร grade เก็บ D แตถ่ ้ำไมใ่ ชใ่ ห้ไปทำงำนคำส่ังบรรทัดที่ 23 ชดุ กิจกรรมการเรียนร้กู ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 10 รายวชิ าภาษาซี ง30243 ช้นั มัธยมศกึ ษาปที ่ี 5

ชุดท่ี4 โครงสร้างการเขียนโปรแกรม บรรทดั ท่ี 13 และ 14 รบั ค่ำคะแนนทผ่ี ู้ใช้เตมิ แลว้ แปลงใหเ้ ปน็ จำนวนเตม็ เก็บไวท้ ตี่ ัวแปร score ตำมลำดับ บรรทดั ที่ 15 คำส่ัง if ( score >= 80 ) ตรวจสอบเงอ่ื นไขของตัวแปร score วำ่ มำกกว่ำหรอื เท่ำกบั 80 หรอื ไม่ ถำ้ ใชใ่ หก้ ำหนดตัวแปร grade เก็บ A แต่ถำ้ ไมใ่ ชใ่ ห้ไปทำงำนคำสง่ั บรรทดั ท่ี 17 บรรทัดที่ 17 คำส่งั else if ( score >= 70 ) ตรวจสอบเงื่อนไขต่ออกี ว่ำตัวแปร score วำ่ มำกกว่ำหรอื เท่ำกบั 70 หรือไม่ ถำ้ ใชใ่ หก้ ำหนดตัวแปร grade เก็บ B แต่ถ้ำไม่ใช่ใหไ้ ปทำงำนคำสัง่ บรรทดั ที่ 19 บรรทดั ที่ 19 คำสง่ั else if ( score >= 60 ) ตรวจสอบเงอ่ื นไขต่ออีกว่ำตวั แปร score ว่ำมำกกวำ่ หรือ เท่ำกบั 60 หรอื ไม่ ถำ้ ใชใ่ หก้ ำหนดตัวแปร grade เกบ็ C แตถ่ ้ำไมใ่ ชใ่ ห้ไปทำงำนคำสงั่ บรรทัด ที่ 21 บรรทัดท่ี 21 คำสง่ั else if ( score >= 50 ) ตรวจสอบเงอ่ื นไขต่ออกี ว่ำตัวแปร score วำ่ มำกกวำ่ หรือ เท่ำกบั 50 หรอื ไม่ ถำ้ ใช่ใหก้ ำหนดตัวแปร grade เก็บ D แตถ่ ้ำไม่ใช่ใหไ้ ปทำงำนคำสง่ั บรรทดั ที่ 23 บรรทดั ที่ 23 คำสัง่ else grade = ‘F’; กำหนดตัวแปร grade เก็บ F บรรทัดท่ี 24 ภำยหลงั จำกทำงำนทกุ เงื่อนไขแลว้ จะมำทำคำสงั่ บรรทัดท่ี 24 คอื แสดงค่ำตัวแปร score ตัว แปร i และตัวแปร grade ทีไ่ ด้แสดงออกจอภำพ บรรทดั ที่ 26 และ 27 พมิ พ์ขอ้ ควำมให้กดคยี ์ใด ๆ เพือ่ กลับสูโ่ ปรแกรม สดุ ท้ำยจะหยดุ รอรบั ค่ำใด ๆ จำก คยี ์บอร์ด เชน่ ถำ้ กด enter กจ็ ะกลับสโู่ ปรแกรม ตำมลำดับ ชุดกจิ กรรมการเรียนรกู้ ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 11 รายวชิ าภาษาซี ง30243 ชน้ั มธั ยมศกึ ษาปีท่ี 5

ชดุ ท่ี4 โครงสร้างการเขยี นโปรแกรม คาส่งั switch switch เป็นคำส่งั ทใ่ี ช้ทดสอบเง่อื นไขในกรณที ม่ี ีทำงเลอื กสำหรับตดั สนิ ใจมำกกว่ำ 2 ทำงขึ้นไป เชน่ เดยี วกันกบั nested if โดยมำกนยิ มใช้คำส่ัง switch แทนคำสงั่ nested if เพรำะมรี ูปแบบกำรใช้ คำสง่ั ทง่ี ่ำยและสะดวกในกำรแกไ้ ขคำสง่ั เม่อื มีขอ้ ผิดพลำดเกดิ ขึน้ รปู แบบการใช้คาส่ัง switch switch (expression) { case expression1: statement(s); break; case expression2: statement(s); break; ….. case expressionN: statement(s); break; default: statement(s); } โดยที่ expression คือ นิพจน์ หรือตัวแปรทจ่ี ะใช้เปรียบเทยี บกับนพิ จน์ expression1, expression2, …, expressionN ว่ำมคี ่ำตรงกับนพิ จน์ใด expression1, expression2, …, expressionN คอื นิพจน์ หรอื ค่ำคงที่ในเงือ่ นไขที่ 1, 2, 3, …, N ตำมลำดับ ชุดกิจกรรมการเรียนรูก้ ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 12 รายวชิ าภาษาซี ง30243 ชัน้ มัธยมศึกษาปที ี่ 5

ชดุ ที่4 โครงสร้างการเขียนโปรแกรม break คอื คำสั่งทีจ่ ะตอ้ งใส่ไว้ในแต่ละ case เพ่อื เป็นกำรบอกใหอ้ อกจำกสั่ง switch หลงั จำก ทำคำส่งั ทอี่ ยู่ใน case น้ัน ๆ แลว้ ถำ้ หำกไม่มีคำส่งั break ใน case ใด เมื่อทำงำนจบ case นัน้ แลว้ จะทำงำนใน case ถัดไปจนกว่ำจะเจอคำสง่ั break ซง่ึ ทำใหเ้ กิดกำรทำงำนผิดพลำดได้ default คือ กรณีที่ expression ไมต่ รงกับเง่อื นไขใด ๆ เลย ให้ทำงำนตำมคำสั่งท่ีเขียนไว้ ใน default โดย default นีไ้ ม่จำเปน็ ต้องใสค่ ำสงั่ break เอำไว้ เพรำะ default เป็นกรณีสุดท้ำยของ คำส่ัง switch ข้อควรระวังในการใช้คาสัง่ switch 1. ถำ้ ใช้คำสั่ง switch ในแตล่ ะกรณี (case) จะต้องใสค่ ำสงั่ break เอำไว้ด้วยมิฉะนั้นจะเกดิ กำรทำงำนซ้ำใน case ต่อมำจนกว่ำจะเจอคำสัง่ break ยกเวน้ กรณี default ไม่ต้องใส่คำส่งั break 2. expression ท่อี ยู่หลงั คำสั่ง switch ควรใชเ้ ปน็ ตัวแปร เพื่อจะได้สะดวกในกำรนำไป เปรียบเทียบกบั กรณีต่ำง ๆ สว่ น expression1, expression2, …, expressionN ท่อี ยู่หลงั case ตำ่ ง ๆ ควรใชเ้ ป็นค่ำคงท่ี โปรแกรมตวั อย่างท่ี 4.18 แสดงกำรใช้คำส่ัง switch เพือ่ ตรวจสอบเกรดทีผ่ ู้ใชเ้ ติม ว่ำตรงกบั กรณี ใด แลว้ แสดงเกรดที่เปน็ ตวั เลขออกจอภำพ /* switch.c */ #include<stdio.h> /* บรรทัดที่ 1 */ #include<conio.h> /* บรรทัดท่ี 2 */ #include<stdlib.h> /* บรรทัดท่ี 3 */ #include<ctype.h> /* บรรทดั ที่ 4 */ void main(void) /* บรรทัดที่ 5 */ { /* บรรทัดท่ี 6 */ int n, i; /* บรรทดั ที่ 7 */ float gradepoint; /* บรรทดั ที่ 8 */ char grade; /* บรรทัดท่ี 9 */ char numstr[20]; /* บรรทัดที่ 10 */ clrscr( ); /* บรรทัดท่ี 11 */ printf(\"Enter Number of Students : \"); /* บรรทดั ที่ 12 */ n = atoi(gets(numstr)) ; /* บรรทดั ที่ 13 */ for ( i=1; i<=n; i++ ) { /* บรรทัดที่ 14 */ ชดุ กิจกรรมการเรยี นรกู้ ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 13 รายวชิ าภาษาซี ง30243 ช้ันมธั ยมศกึ ษาปีที่ 5

ชุดท่ี4 โครงสรา้ งการเขียนโปรแกรม printf(\"\\nEnter grade of student #%d: \", i); /* บรรทัดท่ี 15 */ grade = getche( ); /* บรรทัดที่ 16 */ switch(toupper(grade)) { /* บรรทัดที่ 17 */ case 'A': /* บรรทัดที่ 18 */ gradepoint = 4.0; break; /* บรรทัดที่ 19 */ case 'B': /* บรรทัดที่ 20 */ gradepoint = 3.0; break; /* บรรทัดท่ี 21 */ case 'C': /* บรรทดั ที่ 22 */ gradepoint = 2.0; break; /* บรรทัดที่ 23 */ case 'D': /* บรรทดั ท่ี 24 */ gradepoint = 1.0; break; /* บรรทดั ที่ 25 */ default: gradepoint = 0.0; /* บรรทดั ที่ 26 */ } /* end switch */ /* บรรทัดที่ 27 */ printf(\"\\nGrade Point of Student#%d is %.2f\\n\",i,gradepoint); /* บรรทดั 28 */ } /* end for */ /* บรรทดั 29 */ printf(\"\\n\\nPress any key back to program...\"); /* บรรทดั 30 */ getch(); /* บรรทดั 31 */ } /* end main */ /* บรรทัด 32 */ ผลลพั ธ์ทไี่ ด้จากโปรแกรม Enter Number of Students : 2 Enter grade of student #1 : a Grade Point of Student #1 : 4.00 Enter grade of student #2 : b Grade Point of Student #2 : 3.00 Press any key back to program... ชดุ กิจกรรมการเรยี นรู้การเขยี นโปรแกรมภาษาคอมพิวเตอร์ 14 รายวชิ าภาษาซี ง30243 ช้ันมัธยมศกึ ษาปีท่ี 5

ชดุ ท่ี4 โครงสรา้ งการเขียนโปรแกรม คาอธิบายโปรแกรม จำกโปรแกรมตวั อยำ่ งท่ี 4.18 สำมำรถอธิบำยกำรทำงำนของโปรแกรมทสี่ ำคญั ๆ ไดด้ ังนี้ บรรทดั ที่ 12 และ 13 ใหผ้ ใู้ ช้เตมิ จำนวนนักเรยี น แลว้ นำค่ำท่ีผ้ใู ชเ้ ติมมำแปลงใหเ้ ปน็ จำนวนเต็ม แลว้ เกบ็ ไว้ ทตี่ วั แปร n บรรทัดที่ 14 for (i = 1; i < n; i++) คำส่ังควบคุมกำรทำงำนของโปรแกรมใหว้ นทำงำนจำนวนรอบเท่ำกบั ตัว แปร n หรอื คำ่ ตวั เลขท่ีผ้ใู ช้เติม เม่อื ทดสอบเง่อื นไข for แลว้ เป็นจรงิ จะทำงำนตำมคำส่งั ใน loop for คอื คำส่ังบรรทัดท่ี 15 ถึง 29 แตถ่ ำ้ เป็นเท็จ จะไปทำงำนตำมคำสัง่ บรรทัด ท่ี 30 และ 31 บรรทดั ท่ี 15 และ 16 ใหผ้ ใู้ ชเ้ ติมเกรดแล้วเก็บไวท้ ี่ตัวแปร grade บรรทัดท่ี 17 ถึง 27 เปน็ loop ของ คำส่งั switch ซึ่งทำงำนซ้อนภำยใน loop for ดงั น้ี จำกตวั แปร เกรดที่รบั เข้ำจะแปลงใหเ้ ปน็ ตวั พิมพใ์ หญท่ ุกคร้ัง เพือ่ นำไปทดสอบทกุ กรณขี องคำสง่ั switch เริม่ ตรวจสอบกรณีแรก คือ ทดสอบว่ำเป็นตัว A หรือไม่ ถ้ำใช่ กำหนดตวั แปร gradepoint มีค่ำ เท่ำกบั 4.0 แลว้ หยดุ กำรทำงำนในกรณนี ้ี (break) แตถ่ ำ้ ไมใ่ ช่ตัว A กไ็ ปตรวจสอบกรณี ถดั ไป คอื ใชต่ วั B หรือไม่ ถ้ำใช่ กำหนดตัวแปร gradepoint มคี ่ำเท่ำกับ 3.0 แลว้ หยดุ กำร ทำงำนในกรณีนี้ (break) แต่ถำ้ ไมใ่ ช่ตัว B กไ็ ปตรวจสอบกรณีถัดไป คอื ใชต่ วั C หรือไม่ ถ้ำ ใช่ กำหนดตวั แปร gradepoint มีค่ำเท่ำกบั 2.0 แล้วหยดุ กำรทำงำนในกรณีน้ี (break) แตถ่ ำ้ ไมใ่ ชต่ ัว C ก็ไปตรวจสอบกรณถี ดั ไป คือ ใช่ตัว D หรอื ไม่ ถ้ำใช่ กำหนดตัวแปร gradepoint มี คำ่ เทำ่ กบั 1.0 แลว้ หยดุ กำรทำงำนในกรณีน้ี (break) กรณีสดุ ทำ้ ย คือ กรณที ี่เตมิ ตวั อ่ืนท่ีไมใ่ ช่ ทงั้ 4 กรณขี ้ำงต้น จะทำคำสั่งบรรทัดที่ 26 คอื default; gradepoint = 0.0; คือ กรณี อน่ื ๆ ใหก้ ำหนดตวั แปร gradepoint มคี ่ำเทำ่ กบั 0.0 บรรทัดท่ี 28 ภำยหลังจำกกำรทำงำนทกุ กรณีของคำสงั่ switch แล้ว จะทำคำสงั่ บรรทดั ท่ี 28 คอื แสดง ค่ำตวั แปร gradepoint ทไี่ ดข้ องแต่ละคน แสดงทีจ่ อภำพ บรรทดั ที่ 30 และ 31 พมิ พข์ ้อควำมให้กดคีย์ใด ๆ เพื่อกลบั สโู่ ปรแกรม สุดท้ำยจะหยดุ รอรบั คำ่ ใด ๆ จำก คียบ์ อรด์ เชน่ ถำ้ กด enter กจ็ ะกลบั สูโ่ ปรแกรม ตำมลำดับ ชดุ กิจกรรมการเรียนร้กู ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 15 รายวชิ าภาษาซี ง30243 ชั้นมัธยมศกึ ษาปที ี่ 5