ห้องเรียนออนไลน์ของครูจตุรภัทร
 หน้าแรก  แนะนำการใช้บทเรียน  แหล่งเรียนรู้เพิ่มเติม  กระดานถามตอบ & สมุดเยี่ยม (Facebook)  ผู้พัฒนาบทเรียน
 
 
 
   บทเรียนหลัก
แนะนำรายวิชา
แบบทดสอบก่อนเรียน แบบทดสอบก่อนเรียน
บทที่ 1 การพัฒนาโปรแกรม
บทที่ 2 แนะนำภาษาซี
บทที่ 3 ตัวแปร และตัวดำเนินการ
บทที่ 4 คำสั่งควบคุม
บทที่ 5 โครงงานคอมพิวเตอร์
แบบทดสอบหลังเรียน
 
 
บทที่ 4
4.2 คำสั่งควบคุมแบบวนซ้ำ
 

คำสั่งควบคุมแบบวนซ้ำ

          การวนซ้ำ เป็นการกำหนดให้มีการประมวลผลคำสั่งซ้ำ ๆ กัน ตั้งแต่ 1 ครั้งขึ้นไป ทั้งนี้ขึ้นอยู่กับเงื่อนไขในการทำงาน ซึ่งจะช่วยให้การเขียนโปรแกรมได้ง่าย สะดวก ไม่ต้องเขียนข้อความคำสั่งเดิมหลายครั้ง ทำให้โปรแกรมมีความกระชับ สามารถตรวจสอบความผิดพลาดได้ง่าย

          โครงสร้างควบคุมแบบวนซ้ำ (repetition control structure) ประกอบด้วย

  • คำสั่ง for
  • คำสั่ง while
  • คำสั่ง do-while

          โดยแต่ละโครงสร้างคำสั่ง มีรูปแบบและวิธีการใช้งานที่แตกต่างกัน นักเขียนโปรแกรมสามารถเลือกใช้ได้ตามความเหมาะสมกับลักษณะการใช้งานในโปรแกรม

กลับสู่ด้านบน

คำสั่ง for

          คำสั่ง for เป็นคำสั่งที่สั่งให้ประมวลผลคำสั่ง หรือชุดคำสั่ง วนซ้ำได้หลายรอบ โดยต้องกำหนดจำนวนรอบให้การวนซ้ำที่แน่นอน

          รูปแบบของคำสั่ง for เป็นดังนี้

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


ผังงานของคำสั่ง for
ผังงานของคำสั่ง for

          การกำหนดค่าเริ่มต้นของตัวนับ เงื่อนไขการวนซ้ำ  และ การเปลี่ยนแปลงค่าตัวนับ    เป็นนิพจน์ที่มีการทำงานร่วมกันในคำสั่ง for ดังนี้

  • การกำหนดค่าเริ่มต้นของตัวนับ  เป็นนิพจน์ที่ใช้สำหรับกำหนดค่าเริ่มต้น ให้กับตัวแปรที่ทำหน้าที่ควบคุมการวนซ้ำ และจะประมวลผลเพียงครั้งเดียว
  • เงื่อนไขการวนซ้ำ  เป็นนิพจน์ที่ใช้สำหรับประเมินค่า คำสั่ง จะถูกประมวลผลหรือไม่ นั่นคือถ้า เงื่อนไขการวนซ้ำ มีค่าจริง คำสั่ง จะถูกประมวลผล และถ้า เงื่อนไขการวนซ้ำ มีค่าเท็จ คำสั่ง for จะสิ้นสุดลง
  • การเปลี่ยนแปลงค่าตัวนับ  เป็นนิพจน์ที่จะถูกประมวลผลทุกครั้งหลังจาก คำสั่ง ถูกประมวลผล โดย การเปลี่ยนแปลงค่าตัวนับ เป็นนิพจน์ใด ๆ ที่สามารถประเมินค่าได้ เช่น นิพจน์เพิ่มค่า นิพจน์ลดค่า และนิพจน์กำหนดค่า เป็นต้น

          คำสั่งภายใต้คำสั่ง for อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ

     ตัวอย่างที่ 4.2.1 โปรแกรมแสดงตัวเลข

1 //Program: Counting.c
2  
3 #include <stdio.h>
4  
5 void main() {
6
7   int x, y;
8  
9   printf("Count increase\n");
10   for(x=1; x<=5; x++)
11     printf("%d\n", x);
12  
13   printf("Count decrease\n");
14   for(y=5; y<=1; y--)
15     printf("%d\n", y);
16  
17   getch();
18 }

     ผลลัพธ์ คือ

Count increase
1
2
3
4
5

Count decrease
5
4
3
2
1

กลับสู่ด้านบน

คำสั่ง while

          รูปแบบของคำสั่ง while เป็นดังนี้

while (เงื่อนไขการวนซ้ำ)
  คำสั่ง;

ผังงานของคำสั่ง while
ผังงานของคำสั่ง while

          เงื่อนไขการวนซ้ำ เป็นนิพจน์ใดๆ ที่สามารถประเมินค่าได้ โดยจะต้องเขียนไว้ระหว่างเครื่องหมาย ( และ ) เสมอเช่นเดียวกับคำสั่ง if และคำสั่ง if – else

          เมื่อเริ่มต้นประมวลผลคำสั่ง while เงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า ถ้าพบว่า เงื่อนไขการวนซ้ำ มีค่าเป็นจริง คำสั่ง ภายใต้คำสั่ง while จะถูกตรวจสอบค่าเป็นรอบแรก แล้ว เงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่าอีกครั้ง หากพบว่า เงื่อนไขการวนซ้ำ ยังมีค่าเป็น จริง คำสั่ง จะถูกตรวจสอบค่าอีกครั้ง จนกระทั่ง เงื่อนไขการวนซ้ำ มีค่าเป็น เท็จ คำสั่ง while จึงจะสิ้นสุดลง

          การตรวจสอบค่า เงื่อนไขการวนซ้ำ ของคำสั่ง while ในครั้งแรก และพบว่ามีค่าเป็น เท็จ คำสั่ง จะไม่ประมวลผลเลย

          คำสั่ง ภายใต้คำสั่ง while อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ

     ตัวอย่างที่ 4.2.2 โปรแกรมรับและแสดงค่าข้อมูล1

1 //Program: InOut1.c
2  
3 #include <stdio.h>
4  
5 void main(){
6
7   int iochar;
8  
9   iochar = getchar();
10   while(iochar != EOF){
11     putchar(iochar);
12     iochar = getchar();
13   }
14   
15   getch();
16 }

     ผลลัพธ์ คือ


1

v

3
-9 
-9
^z
    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม 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 เป็นดังนี้

do
  คำสั่ง;
while (เงื่อนไขการวนซ้ำ);

ผังงานของคำสั่ง do-while
ผังงานของคำสั่ง do-while

          คำสั่ง จะถูกประมวลผลโดยไม่มีเงื่อนไขใด ๆ ในรอบแรก จากนั้นเงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า และคำสั่ง จะถูกประมวลผลซ้ำอีกทุกครั้งที่ เงื่อนไขการวนซ้ำ มีค่าเป็น จริง และในครั้งแรกที่ เงื่อนไขการวนซ้ำ มีค่าเป็น เท็จ คำสั่ง do-while จึงจะสิ้นสุดลง

          คำสั่ง ภายใต้คำสั่ง do-while อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ

     ตัวอย่างที่ 4.2.3 โปรแกรมเลขยกกำลัง

1 //Program: Power.c
2  
3 #define BASE 2
4 #include <stdio.h>
5 #include <math.h>
6  
7 void main(){
8
9   int count = 0, limit;
8  
9   printf("Enter an upper limit: ");
10   scanf("%d", &limit);
11   printf("Power\tValue\n");
11   do
12     printf("%d\t%.2f\n", count, pow(BASE, count));
11   while (count++ != limit);
13   }
14   
15   getch();
16 }

     ผลลัพธ์ คือ

Enter an upper limit: 5 
Power  Value
0      1.00
1      2.00
2      4.00
3      8.00
4      16.00
5      32.00
    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์

          กกกก


กลับสู่ด้านบน
 
 
 
 
  เว็บไซต์นี้จัดทำขึ้นเพื่อประกอบการจัดการเรียนการสอนบนเครือข่ายอินเทอร์เน็ต
กลับสู่ด้านบน กลับสู่ด้านบน  
  ยินดีรับข้อเสนอแนะ ติดต่อ .
เพื่อความสวยงามในการชม ใช้หน้าจอขนาด 1024 x 768.

โรงเรียนคำนาดีพิทยาคม
ตำบลคำนาดี อำเภอโพนทอง จังหวัดร้อยเอ็ด
สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 27
สำนักงานคณะกรรมการการศึกษาขั้นพื้นฐาน
กระทรวงศึกษาธิการ