หน้าแรก
คำชี้แจงก่อนเรียน
รายละเอียดรายวิชา

 แบบทดสอบก่อนเรียน
 หน่วยที่ 1 ภาษาคอมพิวเตอร์เบื้องต้น
 หน่วยที่ 2 เริ่มต้นกับภาษาซี
 หน่วยที่ 3 ข้อมูลพื้นฐานและตัวดำเนินการ
 หน่วยที่ 4 คำสั่งพื้นฐานในภาษาซี
 หน่วยที่ 5 คำสั่งควบคุมแบบทางเลือก
 หน่วยที่ 6 คำสั่งควบคุมแบบวนซ้ำ
แบบทดสอบก่อนเรียนประจำหน่วย
6.1 คำสั่ง while
6.2 คำสั่ง do - while
แบบฝึกหัดที่ 6.1
6.3 คำสั่ง for
6.4 คำสั่ง continue และคำสั่ง break
6.5 คำสั่งวนซ้ำเชิงซ้อน
แบบฝึกหัดที่ 6.2
แบบทดสอบหลังเรียนประจำหน่วย
 แบบทดสอบหลังเรียน
 บรรณานุกรม

แจ้งข่าว
 แหล่งเรียนรู้เพิ่มเติม
 ติดต่อครูผู้สอน
 ผู้พัฒนาบทเรียน
 

 
 
6.1 คำสั่ง while
6.2 คำสั่ง do - while
6.3 คำสั่ง for
6.4 คำสั่ง continue และ คำสั่ง break
6.5 คำสั่งวนซ้ำเชิงซ้อน
 
 
 
คำสั่ง for เป็นคำสั่งควบคุมแบบวนซ้ำรูปแบบหนึ่ง
 
แผนผังคำสั่งควบคุมแบบวนซ้ำ - คำสั่ง for
 
 
มีรูปแบบการใช้คำสั่ง ดังนี้
 
 
รูปแบบคำสั่ง for


for (กำหนดค่าเริ่มต้นของตัวนับ ;
เงื่อนไขการวนซ้ำ ; เพิ่มหรือลดค่าตัวนับ)

คำสั่งที่ต้องการทำซ้ำ;


for (กำหนดค่าเริ่มต้นของตัวนับ ;
เงื่อนไขการวนซ้ำ ; เพิ่มหรือลดค่าตัวนับ){

คำสั่งที่ต้องการทำซ้ำ 1;
คำสั่งที่ต้องการทำซ้ำ 2;
คำสั่งที่ต้องการทำซ้ำ 3;
.
.
.

คำสั่งที่ต้องการทำซ้ำ n;
}

 

อธิบาย
 
กำหนดค่าเริ่มต้นของตัวนับ เป็นคำสั่งย่อยในคำสั่ง for ใช้สำหรับกำหนดค่าเริ่มต้น ให้กับตัวแปรที่ทำหน้าที่ควบคุมการวนซ้ำ และจะประมวลผลเพียงครั้งเดียว หากมีตัวนับหลายตัว ให้คั่นคำสั่งย่อยกำหนดค่าเริ่มต้นของตัวนับ ด้วยเครื่องหมาย , (comma)
 
เงื่อนไขการวนซ้ำ หมายถึง นิพจน์ที่สามารถประเมินค่าได้ ให้ค่าเป็นจริงหรือเท็จ
 
เมื่อเริ่มต้นประมวลผล คำสั่ง for เงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า หากมีค่าเป็นจริง คำสั่งภายใต้คำสั่ง for จะถูกประมวลผล 1 รอบ แล้วจะ เพิ่มหรือลดค่าตัวนับ ตามด้วยวนกลับไปตรวจสอบ เงื่อนไขการวนซ้ำอีก จนกระทั่งเงื่อนไขการวนซ้ำ มีค่าเป็นเท็จ คำสั่ง for จึงสิ้นสุดลง และไปทำคำสั่งถัดไป
 
เพิ่มหรือลดค่าตัวนับ เป็นคำสั่งย่อยในคำสั่ง for ใช้สำหรับเพิ่มค่าตัวนับ หรือลดค่าตัวนับ โดยใช้คำสั่งคำนวณทางคณิตศาสตร์ หากมีตัวนับหลายตัว ให้คั่นคำสั่งย่อยเพิ่มหรือลดค่าตัวนับ ด้วยเครื่องหมาย , (comma)
 
หากการตรวจสอบเงื่อนไขการวนซ้ำในครั้งแรก และมีค่าเป็นเท็จ คำสั่งภายใต้คำสั่ง for จะไม่ได้รับการประมวลผลเลย
 
คำสั่งภายใต้คำสั่ง for อาจเป็นคำสั่งง่าย ๆ หรือ คำสั่งเชิงประกอบ หากมีมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย {}
 
สรุปขั้นตอนการทำงานของคำสั่ง for
 
 
   
ตัวอย่างที่ 9 จงเขียนโปรแกรมแสดงเลขจาก 1 ถึง 10 ทางจอภาพ ( ex6-09.c )
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง
/*1*/ #include <stdio.h> /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
/*2*/ int main() { /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
/*3*/ int i ; /* ประกาศตัวแปร i เป็นชนิดจำนวนเต็ม */
/*4*/ for(i=1 ; i <= 10 ; i++) /* เป็นคำสั่งควบคุมแบบวนซ้ำ โดยมีขั้นตอนทำงานดังนี้
ขั้นตอนที่ 1) i =
1 กำหนดค่าเริ่มต้นให้ตัวนับ i = 1 (ทำเฉพาะรอบแรกเท่านั้น)
ชั้นตอนที่ 2) i <= 10 ตรวจสอบว่า ค่า i น้อยกว่าหรือเท่ากับ 10 จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งที่ต้องการทำซ้ำ บรรทัดที่ 5 ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง for ไปทำคำสั่งบรรทัดที่ 6 */
/*5*/ printf("%d\n" , i); /* แสดงข้อความ "%d" โดยแสดงค่า i ใน %d เสร็จแล้วขึ้นบรรทัดใหม่ (มีคำสั่งย่อยในคำสั่งแบบวนซ้ำ เพียงคำสั่งเดียว จึงไม่ต้องใส่เครื่องหมาย { } ก็ได้) แล้วกลับไปทำบรรทัดที่ 4 คำสั่งย่อย i++ แล้วกลับไปเริ่มทำ ขั้นตอนที่ 2) */
/*6*/ return 0; /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
/*7*/ } /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
   
ผลการรันโปรแกรม
   
 
   
ตัวอย่างที่ 10 จงเขียนโปรแกรมรับค่าตัวเลขจำนวนเต็ม จำนวน N ค่า แล้วหาค่าเฉลี่ย พร้อมแสดงผลทางจอภาพ ( ex6-10.c )
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (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 เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นให้กับ sum เป็น 0 */
/*4*/ printf("Input N : "); /* แสดงข้อความ "Input N : " ทางจอภาพ เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
/*5*/ scanf("%d" , &N); /* รับค่าเลขจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร N เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
/*6*/ for(i=1 ; i <= N ; i++) { /* เป็นคำสั่งควบคุมแบบวนซ้ำ (มีคำสั่งย่อยมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย { }) โดยมีขั้นตอนทำงานดังนี้
ขั้นตอนที่ 1) i =
1 กำหนดค่าเริ่มต้นให้ตัวนับ i = 1 (ทำเฉพาะรอบแรกเท่านั้น)
ชั้นตอนที่ 2) i <= N ตรวจสอบว่า ค่า i น้อยกว่าหรือเท่ากับ ค่า N จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งที่ต้องการทำซ้ำ บรรทัดที่ 7 ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง for ไปทำคำสั่งบรรทัดที่ 11 */
/*7*/ 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 (สิ้นสุดโปรแกรม) */
   
ตัวอย่างผลการรันโปรแกรม
   
 
 
คำสั่ง continue เป็นคำสั่งย่อย ที่ใช้ร่วมกับคำสั่ง while do - while และ for เพื่อเริ่มการประมวลผลในรอบถัดไป โดยข้ามคำสั่งย่อยที่ต้องการทำซ้ำ ที่อยู่ถัดจากคำสั่ง continue ทั้งหมด ยกเว้นในกรณีคำสั่ง for ที่ก่อนเริ่มประมวลผลรอบถัดไป จะต้องประมวลผล เพิ่มหรือลดค่าตัวนับ ก่อน
 
ข้อสังเกต
คำสั่ง continue มักจะใช้ภายใต้คำสั่ง if หรือ if-else เพื่อให้มีเงื่อนไขทางเลือก บางเงื่อนไขเกิดขึ้น และทำให้เกิดการประมวลผลในรอบถัดไปเริ่มต้นก่อนเวลาอันควร แต่หากว่า คำสั่ง continue ไม่ได้อยู่ภายใต้คำสั่ง if หรือ if-else แล้ว จะทำให้คำสั่งที่ต้องการทำซ้ำ ที่อยู่ถัดจากคำสั่ง continue ไม่มีโอกาสถูกประมวลผลเลย
 
คำสั่ง break เป็นคำสั่งย่อย ที่ใช้ร่วมกับคำสั่ง while do - while และ for (เช่นเดียวกับคำสั่ง continue แต่ลักษณะการทำงานตรงข้าม) การใช้คำสั่ง break มีวัตถุประสงค์ เพื่อให้คำสั่ง while do - while และ for สิ้นสุดการทำงาน ก่อนเงื่อนไขการวนซ้ำจะมีค่าเป็นเท็จ โดยข้ามคำสั่งย่อยที่ต้องการทำซ้ำ ที่อยู่ถัดจากคำสั่ง break ทั้งหมด
 
ข้อสังเกต
1. คำสั่ง break มักจะใช้ภายใต้คำสั่ง if หรือ if-else เพื่อให้มีเงื่อนไขทางเลือก บางเงื่อนไขเกิดขึ้น และทำให้เกิดการสิ้นสุดคำสั่งการวนซ้ำก่อนเวลาอันควร แต่หากว่า คำสั่ง break ไม่ได้อยู่ภายใต้คำสั่ง if หรือ if-else แล้ว จะทำให้คำสั่งที่ต้องการทำซ้ำ ที่อยู่ถัดจากคำสั่ง break ไม่มีโอกาสถูกประมวลผลเลย
2. คำสั่ง break จะมีผลให้คำสั่ง while do - while และ for ชั้นที่มีคำสั่ง break อยู่เท่านั้น ที่สิ้นสุดการทำงาน
 
   
ตัวอย่างที่ 11 จงเขียนโปรแกรมรับค่าจำนวนจริงบวก 5 จำนวน พร้อมหาผลรวม แล้วแสดงผลทางจอภาพ หากรับข้อมูลผิดพลาดให้รับข้อมูลใหม่ ( ex6-11.c )
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง
/*1*/ #include <stdio.h> /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
/*2*/ int main() { /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
/*3*/ int i = 1; /* ประกาศตัวแปร i เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นเป็น 1 */
/*4*/ float num , sum = 0.0; /* ประกาศตัวแปร num และ sum เป็นชนิดจำนวนจริง พร้อมกำหนดค่าเริ่มต้นให้กับ sum เป็น 0.0 */
/*5*/ printf("Summary 5 positive number\n"); /* แสดงข้อควาาม "Summary 5 positive number" แล้วขึ้นบรรทัดใหม่ */
/*6*/ while (i <= 5) { /* ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ 5 จริงหรือไม่ ถ้าจริง ให้ทำเริ่มต้น block ของคำสั่ง while บรรทัดที่ 7 ถ้าเท็จ สิ้นสุดการทำซ้ำ ให้ไปทำคำสั่งบรรทัดที่ 16 */
/*7*/ printf("Input positive number %d : " , i); /* แสดงข้อความ "Input positive number %d : " โดยแสดงค่า i ใน %d  เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
/*8*/ scanf("%f" , &num); /* รับค่าเลขจำนวนจริง จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร num เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
/*9*/ if (num <= 0) { /* ตรวจสอบว่า ค่า num น้อยกว่าหรือเท่ากับ 0 จริงหรือไม่ ถ้าจริง เริ่มทำบรรทัดที่ 10 ถ้าเท็จ เริ่มทำบรรทัดที่ 13 (มีคำสั่งย่อยมากกว่า 1 คำสั่ง ่ต้องเขียนคำสั่งภายใต้เครื่องหมาย { }) */
/*10*/ printf("\aError , Input positive number %d again\n" , i); /* ส่งเสียงปี๊บดัง 1 ครั้ง พร้อมแสดงข้อความ "Error , Input positive number %d again" โดยแสดงค่า i ใน %d แล้วขึ้นบรรทัดใหม่ */
/*11*/ continue; /* กลับไปเริ่มทำคำสั่งบรรทัดที่ 7 */
/*12*/ } /* สิ้นสุด block ของคำสั่ง if */
/*13*/ sum += num; /* คำสั่งคำนวณสะสมค่า เหมือนกับคำสั่ง sum = sum + num; โดย ประมวลผล sum + num ก่อน แล้วนำผลลัพธ์ที่ได้ ไปเก็บไว้ใน sum */
/*14*/ i++; /* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */
/*15*/ } /* สิ้นสุด block ของคำสั่ง while แล้ววนไปทำคำสั่งบรรทัดที่ 6 */
/*16*/ printf("\nSummary 5 positive number = %.2f" , sum); /* ขึ้นบรรทัดใหม่ แล้วจึงแสดงข้อความ "Summary 5 positive number = %.2f" โดยแสดงค่า sum ใน %.2f (แสดงทศนิยม 2 ตำแหน่ง) */
/*17*/ return 0; /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
/*18*/ } /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
 
ตัวอย่างผลการรันโปรแกรม
   
 
   
ตัวอย่างที่ 12 จงเขียนโปรแกรมรับค่าจำนวนจริงบวก 5 จำนวน พร้อมหาผลรวม แล้วแสดงผลทางจอภาพ หากรับข้อมูลผิดพลาดให้หยุดรับข้อมูล ( ex6-12.c )
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง
/*1*/ #include <stdio.h> /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
/*2*/ int main() { /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
/*3*/ int i = 1; /* ประกาศตัวแปร i เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นเป็น 1 */
/*4*/ float num , sum = 0.0; /* ประกาศตัวแปร num และ sum เป็นชนิดจำนวนจริง พร้อมกำหนดค่าเริ่มต้นให้กับ sum เป็น 0.0 */
/*5*/ printf("Summary 5 positive number\n"); /* แสดงข้อควาาม "Summary 5 positive number" ทางจอภาพ แล้วขึ้นบรรทัดใหม่ */
/*6*/ while (i <= 5) { /* ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ 5 จริงหรือไม่ ถ้าจริง ให้ทำเริ่มต้น block ของคำสั่ง while บรรทัดที่ 7 ถ้าเท็จ สิ้นสุดการทำซ้ำ ให้ไปทำคำสั่งบรรทัดที่ 16 */
/*7*/ printf("Input positive number %d : " , i); /* แสดงข้อความ "Input positive number %d : " โดยแสดงค่า i ใน %d  เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */
/*8*/ scanf("%f" , &num); /* รับค่าเลขจำนวนจริง จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร num เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */
/*9*/ if (num <= 0) { /* ตรวจสอบ ค่า num น้อยกว่าหรือเท่ากับ 0 จริงหรือไม่ ถ้าจริง เริ่มทำบรรทัดที่ 10 ถ้าเท็จ เริ่มทำบรรทัดที่ 13 (มีคำสั่งย่อยมากกว่า 1 คำสั่ง ่ต้องเขียนคำสั่งภายใต้เครื่องหมาย { }) */
/*10*/ printf("\aData Error!!!\n"); /* ส่งเสียงปี๊บดัง 1 ครั้ง พร้อมแสดงข้อความ "Data Error!!!" แล้วขึ้นบรรทัดใหม่ */
/*11*/ break; /* สิ้นสุดการทำงานของคำสั่งควบคุมการวนซ้ำ while เริ่มไปทำคำสั่งบรรทัดที่ 16 */
/*12*/ } /* สิ้นสุด block ของคำสั่ง if */
/*13*/ sum += num; /* คำสั่งคำนวณสะสมค่า เหมือนกับคำสั่ง sum = sum + num; โดย ประมวลผล sum + num ก่อน แล้วนำผลลัพธ์ที่ได้ ไปเก็บไว้ใน sum */
/*14*/ i++; /* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */
/*15*/ } /* สิ้นสุด block ของคำสั่ง while แล้ววนไปทำคำสั่งบรรทัดที่ 6 */
/*16*/ printf("\nSummary 5 positive number = %.2f" , sum); /* ขึ้นบรรทัดใหม่ แล้วจึงแสดงข้อความ "Summary 5 positive number = %.2f" โดยแสดงค่า sum ใน %.2f (แสดงทศนิยม 2 ตำแหน่ง) */
/*17*/ return 0; /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
/*18*/ } /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
   
ตัวอย่างผลการรันโปรแกรม กรณีข้อมูลถูกต้อง
ตัวอย่างผลการรันโปรแกรม กรณีข้อมูลผิดพลาด
   
 
 
 
คำสั่งวนซ้ำเชิงซ้อน คือ คำสั่งวนซ้ำที่มีคำสั่งวนซ้ำเป็นคำสั่งย่อยอยู่ภายใน คำสั่งวนซ้ำที่ซ้อนกัน อาจเป็นคำสังวนซ้ำประเภทเดียวกันหรือแตกต่างกันก็ได้ เช่น คำสั่ง while ซ้อนอยู่ในคำสั่ง while คำสั่ง for ซ้อนอยู่ในคำสั่ง while หรือคำสั่ง for ซ้อนอยู่ในคำสั่ง for เป็นต้น โดยคำสั่งวนซ้ำจะซ้อนกันเป็นชั้น ๆ จากชั้นในสู่ชั้นนอกตามลำดับ
 
ในการประมวลผลคำสั่งวนซ้ำเชิงซ้อน ในแต่ละรอบของการประมวลผลคำสั่งวนซ้ำชั้นนอก คำสั่งวนซ้ำชั้นในจะต้องประมวลผลจนกระทั่งสิ้นสุดเงื่อนไขการวนซ้ำก่อน แล้วจึงวนซ้ำ ไปประมวลผลคำสั่งวนซ้ำชั้นนอกในรอบถัดไป และวนซ้ำเช่นนี้ จนกระทั่งเงื่อนไขการวนซ้ำชั้นนอกจะสิ้นสุดลง จึงจะทำให้คำสั่งวนซ้ำเชิงซ้อนสิ้นสุดการทำงาน
 
   
ตัวอย่างที่ 13 จงเขียนโปรแกรมแสดงดาวเป็นสามเหลี่ยม ดังรูป ( ex6-13.c )
 
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง
/*1*/ #include <stdio.h> /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
/*2*/ int main() { /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
/*3*/ int i = 1 , j ; /* ประกาศตัวแปร i และ j เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นให้กับ i เป็น 1 */
/*4*/ while (i <= 10) { /* ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ 10 จริงหรือไม่ ถ้าจริง ให้ทำเริ่มต้น block ของคำสั่ง while บรรทัดที่ 5 ถ้าเท็จ สิ้นสุดการทำซ้ำ ให้ไปทำคำสั่งบรรทัดที่ 11 */
/*5*/ for(j = 1 ; j <= i ; j++) /* เป็นคำสั่งควบคุมแบบวนซ้ำ โดยมีขั้นตอนทำงานดังนี้
ขั้นตอนที่ 1) j =
1 กำหนดค่าเริ่มต้นให้ตัวนับ j = 1 (ทำเฉพาะรอบแรกเท่านั้น)
ชั้นตอนที่ 2) j <= i ตรวจสอบ ค่า j น้อยกว่าหรือเท่ากับ ค่า i จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งที่ต้องการทำซ้ำ บรรทัดที่ 6 ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง for ไปทำคำสั่งบรรทัดที่ 7 */
/*6*/ printf("* "); /* แสดงข้อความ "*" (มีคำสั่งย่อยในคำสั่งแบบวนซ้ำ เพียงคำสั่งเดียว จึงไม่ต้องใส่เครื่องหมาย { } ก็ได้) แล้วกลับไปทำบรรทัดที่ 5 คำสั่งย่อย j++ แล้วกลับไปเริ่มทำ ขั้นตอนที่ 2) */
/*7*/ printf("\n"); /* ขึ้นบรรทัดใหม่ */
/*8*/ i++; /* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */
/*9*/ } /* กลับไปทำบรรทัดที่ 4 */
/*11*/ return 0; /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
/*11*/ } /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
   
ผลการรันโปรแกรม
   
 
   
ตัวอย่างที่ 14 จงเขียนโปรแกรมแสดงดาวเป็นรูปสี่เหลี่ยมสลับลาย ดังภาพ ( ex6-14.c )
 
   
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้
   
   
จากผังงาน เขียนโปรแกรมได้ดังนี้
   
บรรทัด รหัสต้นฉบับ (Source Code) อธิบายคำสั่ง
/*1*/ #include <stdio.h> /* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */
/*2*/ int main() { /* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */
/*3*/ int i , j ; /* ประกาศตัวแปร i และ j เป็นชนิดจำนวนเต็ม */
/*4*/ for (i = 1 ; i <= 10 ; i++) { /* เป็นคำสั่งควบคุมแบบวนซ้ำ โดยมีขั้นตอนทำงานดังนี้
ขั้นตอนที่ 1) i =
1 กำหนดค่าเริ่มต้นให้ตัวนับ i = 1 (ทำเฉพาะรอบแรกเท่านั้น)
ชั้นตอนที่ 2) i <= 10 ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ 10 จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งที่ต้องการทำซ้ำ บรรทัดที่ 5 ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง for (วงนอก) ไปทำคำสั่งบรรทัดที่ 12 */
/*5*/ for(j = 1 ; j <= 20 ; j++) /* เป็นคำสั่งควบคุมแบบวนซ้ำ โดยมีขั้นตอนทำงานดังนี้
ขั้นตอนที่ A) j =
1 กำหนดค่าเริ่มต้นให้ตัวนับ j = 1 (ทำเฉพาะรอบแรกเท่านั้น)
ชั้นตอนที่ B) j <= 20 ตรวจสอบ ค่า j น้อยกว่าหรือเท่ากับ 20 จริงหรือไม่ ถ้าจริง เริ่มทำคำสั่งที่ต้องการทำซ้ำ บรรทัดที่ 6 ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง for (วงใน) ไปทำคำสั่งบรรทัดที่ 10 */
/*6*/ if( (i + j) %2 == 1) /* ตรวจสอบ ค่า (i + j) % 2 เท่ากับ 1 จริงหรือไม่ ถ้าจริง เริ่มทำบรรทัดที่ 7 ถ้าเท็จ เริ่มทำบรรทัดที่ 8 (if - else บรรทัดที่ 6 - 9 เป็นคำสั่งเชิงประกอบ ถือว่าเป็น 1 คำสั่ง เมื่อมีคำสั่งย่อยในคำสั่งแบบวนซ้ำ เพียงคำสั่งเดียว จึงไม่ต้องใส่เครื่องหมาย { } ก็ได้) */
/*7*/ printf("*"); /* แสดงข้อความ "*" (มีคำสั่งย่อย เพียงคำสั่งเดียว จึงไม่ต้องใส่เครื่องหมาย { } ก็ได้) แล้วกลับไปทำบรรทัดที่ 5 คำสั่งย่อย j++ แล้วกลับไปเริ่มทำ ขั้นตอนที่ B) */
/*8*/ else /* ทำกรณีคำสั่งบรรทัดที่ 6 เป็นเท็จ */
/*9*/ printf(" "); /* แสดงข้อความ " " (ช่องว่าง 1 ช่อง) (มีคำสั่งย่อย เพียงคำสั่งเดียว จึงไม่ต้องใส่เครื่องหมาย { } ก็ได้) แล้วกลับไปทำบรรทัดที่ 5 คำสั่งย่อย j++ แล้วกลับไปเริ่มทำ ขั้นตอนที่ B) */
/*10*/ printf("\n"); /* ขึ้นบรรทัดใหม่ */
/*11*/ } /* กลับไปทำบรรทัดที่ 4 คำสั่งย่อย i++ แล้วกลับไปเริ่มทำ ขั้นตอนที่ 2) */
/*12*/ return 0; /* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */
/*13*/ } /* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */
   
ผลการรันโปรแกรม