คำสั่งการทำซ้ำด้วยคำสั่ง while
การทำซ้ำด้วยคำสั่ง while
การทำซ้ำด้วยคำสั่ง while เป็นคำสั่งทำซ้ำแบบหนึ่งในภาษาซี ที่นิยมใช้ในกรณีที่ใช้ตรวจสอบเงื่อนไขว่าเป็นจริงก็จะทำซ้ำ แต่ถ้าเงื่อนไขเป็นเท็จก็จะหลุดออกจาการทำซ้ำ ซึ่งเงื่อนไขที่ตรวจสอบนี้อาจจะใช้ในกรณีที่รู้จำนวนรอบแน่นอนเช่น ตั้งแต่ a=1 ถึง a=10 หรือไม่รู้จำนวนรอบแน่นอน เช่นทำซ้ำในขณะที่ตัวแปร answer = 'y' ลักษณะเด่นอย่างหนึ่งของคำสั่ง while คือ จะตรวจสอบเงื่อนไขก่อนว่าเป็นจริงหรือเท็จ ซึ่งในการตรวจสอบครั้งแรก ถ้าเงื่อนไขตรวจสอบเป็นเท็จ ก็จะไม่เข้าไปทำในวนรอบของการทำซ้ำเลยก็ได้ แต่ในทำนองเดียวกัน ถ้าตัวตรวจสอบเงื่อนไขเป็นจริงตลอด ก็จะทำซ้ำไปไม่สิ้นสุดก็ได้ ซึ่งผู้เขียนโปรแกรมจะต้องระมัดระวัง จะต้องเขียนโปรแกรมให้มีโอกาสออกจากการวนรอบทำซ้ำให้ได้ โดยที่(เงื่อนไขตรวจสอบ) จะต้องเป็นประโยคหรือนิพจน์ ที่ให้ค่าความจริง (ไม่ใช่ 0) หรือให้ค่าความเท็จ (เป็น 0) ถ้าเงื่อนไขตรวจสอบเป็นเท็จก็จะออกจากการวนรอบทำซ้ำ แต่ถ้าเป็นจริง ก็จะเข้าไปทำซ้ำในวงรอบ คือคำสั่งทุกคำสั่งที่อยู่ในเครื่องหมาย { และ } แล้วกลับไปตรวจสอบเงื่อนไขที่คำสั่ง while อีกครั้ง ซึ่งเขียนเป็นผังงานได้ดังนี้ ผังงานแสดงทิศทางการใช้คำสั่ง while ตัวอย่างที่ 8.6 จงเขียนโปรแกรมเพื่อแสดงข้อความ I like C language. จำนวน 10 บรรทัด ผังงานแสดงการแก้ปัญหาโจทย์ จากผังงานนำมาเขียนเป็นโค้ดได้ดังนี้ Source code1 #include <stdio.h> #include <conio.h> int main() { int i=1; while (i<=10) { printf("I like C language.\n"); i++; } getch(); return 0; } คำอธิบายโปรแกรม // เริ่ม block ของฟังก์ชัน main // ประกาศตัวแปร i เป็นชนิด int // ทำซ้ำในขณะที่ i น้อยกว่าหรือเท่ากับ 10' // เริ่ม block ของคำสั่ง while // แสดงข้อความ "I like C language." // เพิ่มค่าของตัวแปร i ขึ้นอีก 1 // จบ block ของคำสั่ง while กลับไปตรวจสอบคำสั่ง while // รอการกดแป้นใด ๆ // โปรแกรมทำงานถูกต้องสมบูรณ์ // จบ block ของฟังก์ชัน main ผลที่ได้จากการ Run ตัวอย่างที่ 8.7 จงเขียนโปรแกรมเพื่อแสดงตัวอักขระตั้งแต่ 'A' ถึง 'Z' ผังงานแสดงการแก้ปัญหาโจทย์ จากผังงานนำมาเขียนเป็นโค้ดได้ดังนี้ Source code2 #include <stdio.h> #include <conio.h> int main() { char ch='A'; while (ch<='Z') { printf("%c\t",ch); ch++; } getch(); return 0; } คำอธิบายโปรแกรม // เริ่ม block ของฟังก์ชัน main // ประกาศตัวแปร ch เป็นชนิด char // ทำซ้ำในขณะที่ ch น้อยกว่าหรือเท่ากับ 'Z' // เริ่ม block ของคำสั่ง while // แสดงตัวอักขระที่เก็บอยู่ในตัวแปร ch ซึ่งจะเป็นตั้งแต่ 'A' - 'Z' // เพิ่มค่าของตัวแปร ch ขึ้นอีก1 คือจาก 'A' เป็น 'B' // จบ block ของคำสั่ง while // รอการกดแป้นใด ๆ // โปรแกรมทำงานถูกต้องสมบูรณ์ // จบ block ของฟังก์ชัน main ผลที่ได้จากการ Run ตัวอย่างที่ 8.8 จงเขียนโปรแกรมเพื่อแสดงรหัสของตัวอักขระตั้งแต่ 'A' ถึง 'Z' ว่าตรงกับเลขใดในตาราง ASCII ผังงานแสดงการแก้ปัญหาโจทย์ จากผังงานนำมาเขียนเป็นโค้ดได้ดังนี้ Source code3 #include <stdio.h> #include <conio.h> int main() { char ch='A'; while (ch<='Z') { printf("%c = %d\t",ch,ch); ch++; } getch(); return 0; } คำอธิบายโปรแกรม // เริ่ม block ของฟังก์ชัน main // ประกาศตัวแปร ch เป็นชนิด char // ทำซ้ำในขณะที่ ch น้อยกว่าหรือเท่ากับ 'Z' // เริ่ม block ของคำสั่ง while // แสดงค่าของตัวแปร ch ในรูปของ char และ int // เพิ่มค่าของตัวแปร ch ขึ้นอีก1 คือจาก 'A' เป็น 'B' // จบ block ของคำสั่ง while // รอการกดแป้นใด ๆ // โปรแกรมทำงานถูกต้องสมบูรณ์ // จบ block ของฟังก์ชัน main |
ผลที่ได้จากการ Run
ตัวอย่างที่ 8.9 จงเขียนโปรแกรมเพื่อหาผลรวมของเลขที่ป้อนเข้ามาจากแป้นพิมพ์ จนกว่าจะป้อนเลข 0 ผังงานแสดงการแก้ปัญหาโจทย์ จากผังงานนำมาเขียนเป็นโค้ดได้ดังนี้ Source code4 คำอธิบายโปรแกรม #include <stdio.h> #include <conio.h> int main() { float num,sum; while (num!=0) { printf("Enter a number : "); scanf("%f",&num); sum=sum+num; printf("\n"); } printf("The summary = %10.2f : ",sum); getch(); return 0; } คำอธิบายโปรแกรม // เริ่ม block ของฟังก์ชัน main // ประกาศตัวแปร num,sum เป็นชนิด float // ทำซ้ำในขณะที่ num ไม่เท่ากับ 0 (ไม่รู้จำนวนรอบที่แน่นอน) // เริ่ม block ของคำสั่ง while // แสดงข้อความ Enter a number // รอรับค่าจากแป้นพิมพ์ไปเก็บที่ตัวแปร num // เพิ่มค่า sum เท่ากับ sum+num // ขึ้นบรรทัดใหม่ // จบ block ของคำสั่ง while // แสดงค่าของผลรวม sum // รอการกดแป้นใด ๆ // โปรแกรมทำงานถูกต้องสมบูรณ์ // จบ block ของฟังก์ชัน main ผลที่ได้จากการ Run ตัวอย่างที่ 8.10 จงเขียนโปรแกรมเพื่อคำนวณหาพื้นที่ของวงกลม โดยให้รับรัศมีเข้ามาจากแป้นพิมพ์และแสดงผล โดยให้วนรอบทำซ้ำโดยให้ถามว่า Continue(Y/N)? จนกว่าผู้ใช้จะตอบ n ผังงานแสดงการแก้ปัญหาโจทย์ จากผังงานนำมาเขียนเป็นโค้ดได้ดังนี้ Source code5 #include <stdio.h> #include <conio.h> #include <ctype.h> int main() { float r,area; char more='Y'; while (more=='Y') { printf("Enter radial : "); scanf("%f",&r); printf("\n\n"); area=3.14159*r*r; printf("Circle area = %8.2f",area); printf("\n\n"); printf("Continue (Y/N) ?"); more=getche(); more=toupper(more); printf("\n\n"); } getch(); return 0; } คำอธิบายโปรแกรม // เพื่อใช้ฟังก์ชัน toupper // เริ่มต้นฟังก์ชัน main // เริ่ม block ของฟังก์ชัน main // ประกาศตัวแปร r , area เป็นชนิด float // ประกาศตัวแปร more เป็นชนิด char และมีค่าเริ่มต้นเป็น 'Y' // ทำซ้ำในขณะที่ moreเท่ากับ 'Y' // เริ่ม block ของคำสั่ง while // แสดงข้อความ Enter radial : // รอรับค่าจากแป้นพิมพ์มาเก็บที่ตัวแปร r // เว้นบรรทัด // คำนวณหาพื้นที่ของวงกลม // แสดงพื้นที่วงกลมด้วยทศนิยม 2 ตำแหน่ง // เว้นบรรทัด // ถามผู้ใช้ว่า Continue(Y/N)? // รอรับคำตอบจากแป้นพิมพ์มาเก็บที่ more // เปลี่ยนค่าตัวแปร more ที่รับเข้ามาเป็นตัวพิมพ์ใหญ่ // เว้นบรรทัด // จบ block ของ while จะกลับไปตรวจเงื่อนไขที่คำสั่ง while // รอการกดแป้นใด ๆ // โปรแกรมทำงานถูกต้องสมบูรณ์ // จบ block ของฟังก์ชัน main ผลที่ได้จากการ Run |