คำสั่งควบคุมแบบวนซ้ำ
การวนซ้ำ เป็นการกำหนดให้มีการประมวลผลคำสั่งซ้ำ ๆ กัน ตั้งแต่ 1 ครั้งขึ้นไป ทั้งนี้ขึ้นอยู่กับเงื่อนไขในการทำงาน ซึ่งจะช่วยให้การเขียนโปรแกรมได้ง่าย สะดวก ไม่ต้องเขียนข้อความคำสั่งเดิมหลายครั้ง ทำให้โปรแกรมมีความกระชับ สามารถตรวจสอบความผิดพลาดได้ง่าย
โครงสร้างควบคุมแบบวนซ้ำ (repetition control structure) ประกอบด้วย
คำสั่ง for
คำสั่ง while
คำสั่ง do-while
โดยแต่ละโครงสร้างคำสั่ง มีรูปแบบและวิธีการใช้งานที่แตกต่างกัน นักเขียนโปรแกรมสามารถเลือกใช้ได้ตามความเหมาะสมกับลักษณะการใช้งานในโปรแกรม
คำสั่ง for
คำสั่ง for เป็นคำสั่งที่สั่งให้ประมวลผลคำสั่ง หรือชุดคำสั่ง วนซ้ำได้หลายรอบ โดยต้องกำหนดจำนวนรอบให้การวนซ้ำที่แน่นอน
รูปแบบของคำสั่ง for เป็นดังนี้
คำสั่ง for เป็นคำสั่งที่สั่งให้ประมวลผลคำสั่ง หรือชุดคำสั่ง วนซ้ำได้หลายรอบ โดยต้องกำหนดจำนวนรอบให้การวนซ้ำที่แน่นอน
รูปแบบของคำสั่ง for เป็นดังนี้
การกำหนดค่าเริ่มต้นของตัวนับ เงื่อนไขการวนซ้ำ และ การเปลี่ยนแปลงค่าตัวนับ เป็นนิพจน์ที่มีการทำงานร่วมกันในคำสั่ง for ดังนี้
การกำหนดค่าเริ่มต้นของตัวนับ เป็นนิพจน์ที่ใช้สำหรับกำหนดค่าเริ่มต้น ให้กับตัวแปรที่ทำหน้าที่ควบคุมการวนซ้ำ และจะประมวลผลเพียงครั้งเดียว
เงื่อนไขการวนซ้ำ เป็นนิพจน์ที่ใช้สำหรับประเมินค่า คำสั่ง จะถูกประมวลผลหรือไม่ นั่นคือถ้า เงื่อนไขการวนซ้ำ มีค่าจริง คำสั่ง จะถูกประมวลผล และถ้า เงื่อนไขการวนซ้ำ มีค่าเท็จ คำสั่ง for จะสิ้นสุดลง
การเปลี่ยนแปลงค่าตัวนับ เป็นนิพจน์ที่จะถูกประมวลผลทุกครั้งหลังจาก คำสั่ง ถูกประมวลผล โดย การเปลี่ยนแปลงค่าตัวนับ เป็นนิพจน์ใด ๆ ที่สามารถประเมินค่าได้ เช่น นิพจน์เพิ่มค่า นิพจน์ลดค่า และนิพจน์กำหนดค่า เป็นต้น
คำสั่งภายใต้คำสั่ง for อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ
การกำหนดค่าเริ่มต้นของตัวนับ เป็นนิพจน์ที่ใช้สำหรับกำหนดค่าเริ่มต้น ให้กับตัวแปรที่ทำหน้าที่ควบคุมการวนซ้ำ และจะประมวลผลเพียงครั้งเดียว
เงื่อนไขการวนซ้ำ เป็นนิพจน์ที่ใช้สำหรับประเมินค่า คำสั่ง จะถูกประมวลผลหรือไม่ นั่นคือถ้า เงื่อนไขการวนซ้ำ มีค่าจริง คำสั่ง จะถูกประมวลผล และถ้า เงื่อนไขการวนซ้ำ มีค่าเท็จ คำสั่ง for จะสิ้นสุดลง
การเปลี่ยนแปลงค่าตัวนับ เป็นนิพจน์ที่จะถูกประมวลผลทุกครั้งหลังจาก คำสั่ง ถูกประมวลผล โดย การเปลี่ยนแปลงค่าตัวนับ เป็นนิพจน์ใด ๆ ที่สามารถประเมินค่าได้ เช่น นิพจน์เพิ่มค่า นิพจน์ลดค่า และนิพจน์กำหนดค่า เป็นต้น
คำสั่งภายใต้คำสั่ง for อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ
เงื่อนไขการวนซ้ำ เป็นนิพจน์ใดๆ ที่สามารถประเมินค่าได้ โดยจะต้องเขียนไว้ระหว่างเครื่องหมาย ( และ ) เสมอเช่นเดียวกับคำสั่ง if และคำสั่ง if – else
เมื่อเริ่มต้นประมวลผลคำสั่ง while เงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า ถ้าพบว่า เงื่อนไขการวนซ้ำ มีค่าเป็นจริง คำสั่ง ภายใต้คำสั่ง while จะถูกตรวจสอบค่าเป็นรอบแรก แล้ว เงื่อนไขการวนซ้ำจะถูกตรวจสอบค่าอีกครั้ง หากพบว่า เงื่อนไขการวนซ้ำ ยังมีค่าเป็น จริง คำสั่ง จะถูกตรวจสอบค่าอีกครั้ง จนกระทั่ง เงื่อนไขการวนซ้ำ มีค่าเป็น เท็จ คำสั่ง while จึงจะสิ้นสุดลง
การตรวจสอบค่า เงื่อนไขการวนซ้ำ ของคำสั่ง while ในครั้งแรก และพบว่ามีค่าเป็น เท็จ คำสั่งจะไม่ประมวลผลเลย
คำสั่ง ภายใต้คำสั่ง while อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ
ตัวอย่างที่ 4.2.2 โปรแกรมรับและแสดงค่าข้อมูล1
เมื่อเริ่มต้นประมวลผลคำสั่ง while เงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า ถ้าพบว่า เงื่อนไขการวนซ้ำ มีค่าเป็นจริง คำสั่ง ภายใต้คำสั่ง while จะถูกตรวจสอบค่าเป็นรอบแรก แล้ว เงื่อนไขการวนซ้ำจะถูกตรวจสอบค่าอีกครั้ง หากพบว่า เงื่อนไขการวนซ้ำ ยังมีค่าเป็น จริง คำสั่ง จะถูกตรวจสอบค่าอีกครั้ง จนกระทั่ง เงื่อนไขการวนซ้ำ มีค่าเป็น เท็จ คำสั่ง while จึงจะสิ้นสุดลง
การตรวจสอบค่า เงื่อนไขการวนซ้ำ ของคำสั่ง while ในครั้งแรก และพบว่ามีค่าเป็น เท็จ คำสั่งจะไม่ประมวลผลเลย
คำสั่ง ภายใต้คำสั่ง while อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ
ตัวอย่างที่ 4.2.2 โปรแกรมรับและแสดงค่าข้อมูล1
หมายเหตุ
หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์
^z หมายถึง ให้กดปุ่ม Ctrl - z บนแป้นพิมพ์
โปรแกรม InOut1.c แสดงการใช้คำสั่งของภาษาซี 2 คำสั่ง getchar() และ putchar() เพื่อใช้รับข้อมูลนำเข้าและแสดงผลลัพธ์แทนการใช้คำสั่ง scanf() และ printf()
คำสั่ง getchar() เป็นคำสั่งไม่มีอาร์กิวเมนต์ และจะรับอักขระ 1 ตัวจากแผงแป้นอักขระแล้ว ส่งกลับค่าจำนวนเต็มที่มีค่าในตารางรหัสแอสกีที่ตรงกับอักขระดังกล่าว
ฟังก์ชัน putchar() มีอาร์กิวเมนต์ 1 ตัวเป็นชนิด int และแสดงอักขระในตารางรหัสแอสกีที่มีค่าตรงกับจำนวนเต็มดังกล่าวจอภาพ
สำหรับ EOF เป็นค่าคงที่ที่นิยามอยู่ในแฟ้มส่วนหัวชื่อ stdio.h และใช้เป็นอักขระสำหรับตรวจสอบการสิ้นสุดการป้องกันข้อมูลซึ่งในที่นี้ คือการป้องกัน Ctrl - z
จากโปรแกรม InOut1.c ตราบใดที่อักขระผู้ใช้ป้อนไม่ใช้อักขระสิ้นสุดการป้อนข้อมูลเงื่อนไข การวนซ้ำ iochar != EOF จะยังมีค่าเป็นจริง และแสดงผลค่าอักขระนั้นออกทางจอภาพก่อนที่จะวนรับอักขระตัวถัดไป และในรอบที่ผู้ใช้ป้อน Ctrl - z เงื่อนไขการวนซ้ำ iochar != EOF จะมีค่าเป็นเท็จ และคำสั่ง while จะสิ้นสุดการทำงาน
ในกรณีที่ผู้ใช้ป้อน Ctrl-z ในครั้งแรก เงื่อนไขการวนซ้ำ iochar != EOF จะมีค่าเป็นเท็จและคำสั่ง while จะสิ้นสุดการทำงานในทันที โดยที่คำสั่งในบรรทัดที่ 11 และ 12 ไม่ถูกประมวลผลเลย
หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์
^z หมายถึง ให้กดปุ่ม Ctrl - z บนแป้นพิมพ์
โปรแกรม InOut1.c แสดงการใช้คำสั่งของภาษาซี 2 คำสั่ง getchar() และ putchar() เพื่อใช้รับข้อมูลนำเข้าและแสดงผลลัพธ์แทนการใช้คำสั่ง scanf() และ printf()
คำสั่ง getchar() เป็นคำสั่งไม่มีอาร์กิวเมนต์ และจะรับอักขระ 1 ตัวจากแผงแป้นอักขระแล้ว ส่งกลับค่าจำนวนเต็มที่มีค่าในตารางรหัสแอสกีที่ตรงกับอักขระดังกล่าว
ฟังก์ชัน putchar() มีอาร์กิวเมนต์ 1 ตัวเป็นชนิด int และแสดงอักขระในตารางรหัสแอสกีที่มีค่าตรงกับจำนวนเต็มดังกล่าวจอภาพ
สำหรับ EOF เป็นค่าคงที่ที่นิยามอยู่ในแฟ้มส่วนหัวชื่อ stdio.h และใช้เป็นอักขระสำหรับตรวจสอบการสิ้นสุดการป้องกันข้อมูลซึ่งในที่นี้ คือการป้องกัน Ctrl - z
จากโปรแกรม InOut1.c ตราบใดที่อักขระผู้ใช้ป้อนไม่ใช้อักขระสิ้นสุดการป้อนข้อมูลเงื่อนไข การวนซ้ำ iochar != EOF จะยังมีค่าเป็นจริง และแสดงผลค่าอักขระนั้นออกทางจอภาพก่อนที่จะวนรับอักขระตัวถัดไป และในรอบที่ผู้ใช้ป้อน Ctrl - z เงื่อนไขการวนซ้ำ iochar != EOF จะมีค่าเป็นเท็จ และคำสั่ง while จะสิ้นสุดการทำงาน
ในกรณีที่ผู้ใช้ป้อน Ctrl-z ในครั้งแรก เงื่อนไขการวนซ้ำ iochar != EOF จะมีค่าเป็นเท็จและคำสั่ง while จะสิ้นสุดการทำงานในทันที โดยที่คำสั่งในบรรทัดที่ 11 และ 12 ไม่ถูกประมวลผลเลย
คำสั่ง จะถูกประมวลผลโดยไม่มีเงื่อนไขใด ๆ ในรอบแรก จากนั้นเงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า และคำสั่ง จะถูกประมวลผลซ้ำอีกทุกครั้งที่ เงื่อนไขการวนซ้ำ มีค่าเป็น จริง และในครั้งแรกที่ เงื่อนไขการวนซ้ำ มีค่าเป็น เท็จ คำสั่ง do-while จึงจะสิ้นสุดลง
คำสั่ง ภายใต้คำสั่ง do-while อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ
ตัวอย่างที่ 4.2.3 โปรแกรมเลขยกกำลัง
คำสั่ง ภายใต้คำสั่ง do-while อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ
ตัวอย่างที่ 4.2.3 โปรแกรมเลขยกกำลัง
หมายเหตุ
หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์
กกกก
หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์
กกกก