การวนซ้ำ (Loop) ในภาษาคอมพิวเตอร์หมายถึงการทำคำสั่งหรือชุดคำสั่งนั้น ซ้ำ ๆ กันหลาย ๆ ครั้ง เช่น
การแสดงผลตัวเลข 1-10 ทางหน้าจอคอมพิวเตอร์ หรือแสดงผลตัวเลขคู่ ของตัวเลข 1-200 เป็นต้น
การวนซ้ำด้วยจำนวนรอบที่แน่นอนด้วยคำสั่ง for
คำสั่ง for เป็นคำสั่งวนซ้ำการทำงานเดิม ๆ ด้วยจำนวนรอบที่แน่นอน โดยโปรแกรมจะตรวจสอบเงื่อนไข
ก่อนทำงานทุกรอบ และตรวจสอบเงื่อนไขใหม่อีกครั้ง ถ้าเงื่อนไขเป็นเท็จให้โปรแกรมออกจากการทำงานไป
ทำงานที่คำสั่งถัดไปทันที
รูปแบบคำสั่ง for สามารถเขียนเป็นผังงานได้ดังนี้
ตัวอย่าง แสดงตัวเลขที่น้อยกว่า 10 บนหน้าจอ
** หลัง for จะไม่มีเครื่องหมาย เซมิโคลอน (;) ถ้ามีโปรแกรมจะแสดงค่าสุดท้ายค่าเดียว
1. เมื่อโปรแกรมเริ่มทำงาน i = 1
2. เช็คว่า i < 10 จริงไหม
- จริง จะเข้าไปทำใน loop คือ print i ออกมา คือ 1
3. จบ Loop แรก
4. เมื่อจบ Loop มันก็ไปทำงาน i++ ที่เรากำหนดไว้ว่าหลังจบ Loop ให้ i++
5. i มีค่าเท่ากับ 1
6. เช็คตรงเงื่อนไขก็เข้า Loop อีกครั้งว่า i < 10 จริงหรือไม่
- จริง print i คือ 2
** ค่าที่กำหนดค่าเริ่มต้นไม่ได้ใช้แล้ว การกำหนดค่าเริ่มต้น i = 1 ถูกใช้แค่เพียงครั้งเดียวจะทำซ้ำใน Loop ครั้งแรกเท่านั้น
7. i++ อีกครั้ง i ก็จะเป็น 2
- แล้วก็จะไปทำการเช็คเงื่อนไข เป็นอย่างนี้ไปเรื่อยๆ จน i = 9 จบ Loop
8. ลูปสุดท้าย การเพิ่มขึ้นของ i จากที่กำหนดให้ i++ ได้ i = 10 เช็คเงื่อนไข i < 10
- ไม่จริง ออกจาก Loop ซึ่งทำให้ผลการรันของโปรแกรมนี้คือ
ผลลัพธ์
ตัวดำเนินการเพิ่มค่าและลดค่า
ตัวดำเนินการเพิ่มค่า (Increment Operator) ใช้เครื่องหมาย ++
ตัวดำเนินการลดค่า (Decrement Operator) ใช้เครื่องหมาย –
ตัวดำเนินการ นิพจน์ ตัวอย่าง
ความหมาย
++ (Prefix) ++ i ++1
เพิ่มค่าให้กับ i หนึ่งค่าก่อน จึงนำค่าใหม่ของ i ในนิพจน์นี้ไปใช้
(i=i+1)
++ (Postfix) i++ 1++
นำค่าปัจจุบันของ i ในนิพจน์นี้ไปใช้ก่อน จึงเพิ่มค่าให้กับ i หนึ่งค่า
(i=i+1)
- (Prefix) --i --1
ลดค่าให้กับ i หนึ่งค่าก่อน จึงนำค่าใหม่ของ i ในนิพจน์นี้ไปใช้
(i=i-1)
-- (Postfix) i-- 1--
นำค่าปัจจุบันของ i ในนิพจน์นี้ไปใช้ก่อน จึงลดค่าให้กับ i หนึ่งค่า
(i=i-1)
ตัวอย่าง โปรแกรมรับค่าตัวเลขจำนวนเต็ม จำนวน N ค่า แล้วหาค่าเฉลี่ย พร้อมแสดงผลทางจอภาพ
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง 1 #include <stdio.h> แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ 2 int main() { ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) 3 int i , N , num , sum = 0; ประกาศตัวแปร i N num และ เป็นชนิดจำนวนเต็ม กำหนดค่าเริ่มต้นให้กับ sum เป็น 0 4 printf("Please Input number : "); แสดงข้อความให้ผู้ใช้ป้อนข้อมูล "Please Input number : " ทางจอภาพ 5 scanf("%d" , &N); รับค่าเลขจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร N 6 for(i=1 ; i <= N ; i++) { เป็นคำสั่งควบคุมแบบวนซ้ำ (มีคำสั่งย่อยมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย { }) โดยมีขั้นตอนทำงานดังนี้
ขั้นตอนที่ 1) i = 1 กำหนดค่าเริ่มต้นให้ตัวนับ i = 1 (ทำเฉพาะรอบแรกเท่านั้น)
ชั้นตอนที่ 2) i <= N ตรวจสอบว่า ค่า i น้อยกว่าหรือเท่ากับ ค่า N จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งที่ต้องการทำซ้ำ บรรทัดที่ 7 ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง for ไปทำคำสั่งบรรทัดที่ 117 printf("Input Number %d : " , i); แสดงข้อความ "Input Number %d : " โดยแสดงค่า i ใน %d เพื่อแจ้งให้ผู้ใช้ โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร 8 scanf("%d" , &num); รับค่าเลขจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร num เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป 9 sum += num; คำสั่งคำนวณสะสมค่า เหมือนกับคำสั่ง sum = sum + num; โดย ประมวลผล sum + num ก่อน แล้วนำผลลัพธ์ที่ได้ ไปเก็บไว้ใน sum 10 } กลับไปทำบรรทัดที่ 6 คำสั่งย่อย i++ แล้วกลับไปเริ่มทำ ขั้นตอนที่ 2) 11 printf("\nAvg : %.2f" , (float)sum/N); ขึ้นบรรทัดใหม่ แล้วแสดงข้อความ "Avg : %.2f" โดยแสดงค่าจำนวนจริงของ sum/N ใน %.2f เป็นเลขทศนิยม 2 ตำแหน่ง 12 return 0; คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ 13 } สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม)