วันพุธที่ 17 กันยายน พ.ศ. 2557

06:38
บทที่  4
คำสั่งควบคุมการทำงานของโปรแกรม 
            สำหรับบทนี้จะอธิบายถึงคำสั่งควบคุมการทำงานของโปรแกรม  ซึ่งแบ่งกลุ่มตามลักษณะการทำงานตามข้อกำหนดมาตรฐานของสถาบัน  ANSI (American  National  Standards  Institute)  กำหนดให้ภาษา  C  มีคำสั่งที่ใช้ควบคุมการทำงานของโปรแกรมดังนี้
           1) คำสั่งวนลูปหรือทำงานซ้ำ ๆ เป็นลูป (loop  statements)  ได้แก่  คำสั่ง  for, while, do while  และมีคำสั่งออกจากลูปคือคำสั่ง  break  หรือทำงานในรอบต่อไป  คือคำสั่ง  continue
           2) คำสั่งทดสอบเงื่อนไขในการตัดสินใจ  (decision  statements)  ได้แก่  คำสั่ง  if, if else, โครงสร้าง  else  if  (หรือ  nested  if)  และคำสั่ง  switch
           3) คำสั่งที่สั่งให้ไปทำงานตามจุดที่กำหนดให้   (goto  statements)  ได้แก่  คำสั่ง  goto  และ  label  ซึ่งแต่ละคำสั่งมีรายละเอียดดังต่อไปนี้
4.1 คำสั่งวนลูปหรือทำงานซ้ำ ๆ เป็นลูป (loop  statements)
           คำสั่งวนลูปเป็นคำสั่งที่สามารถควบคุมโปรแกรมให้ทำงานเป็นจำนวนรอบตามที่เรากำหนดไว้  หรือทำงานจนกว่าเงื่อนไขที่กำหนดไว้เป็นเท็จ  จึงจะออกจากคำสั่งวนลูปได้
           4.1.1 คำสั่ง  for
                      for  เป็นคำสั่งที่สั่งให้โปแกรมมีการทำงานซ้ำ ๆ วนลูปจนกว่าเงื่อนไขที่กำหนดไว้เป็นเท็จ  จึงออกจากคำสั่ง  for  ไปทำคำสั่งถัดไป  ควรใช้คำสั่ง  for  ในกรณีที่ทราบจำนวนรอบของการทำงาน
รูปแบบการใช้คำสั่ง  for
for  (expression1; expression2; expression3)
       statement;
หรือ
for  (expression1; expression2; expression3)
{
      statement(s);
}
  
           
โดยที่   

expression1  คือ นิพจน์ที่ใช้กำหนดค่าเริ่มต้นให้กับตัวแปรที่จะใช้วนลูป
expression2  คือ นิพจน์ที่ใช้ทดสอบเงื่อนไข  ซึ่งจะมีค่าจริงหรือเท็จอย่างใดอย่างหนึ่งเท่านั้น
expression3  คือ  นิพจน์ที่ใช้เพิ่มหรือลดค่าตัวแปรที่จะใช้วนลูป
statement(s)  คือ คำสั่งต่าง ๆ ถ้ามีมากกว่า 1 คำสั่ง จะต้องเขียนอยู่ภายในเครื่องหมาย  {….}

ลักษณะการทำงานของคำสั่ง  for  สามารถเขียนเป็นแผนผังได้ดังนี้

รูปที่  4.1  ผังงานแสดงลักษณะการทำงานของคำสั่ง  for
ที่มา : สมชาย  รัตนเลิศนุสรณ์, 2545 : 78.

โปรแกรมตัวอย่างที่  4.1  แสดงการใช้คำสั่ง  for  เพื่อวนแสดงตัวเลข  1  ถึง  10  ออกแสดงที่จอภาพ

/*             for1.c        */
#include<stdio.h>                                               /*  บรรทัดที่  1  */
#include<conio.h>                                                             /*  บรรทัดที่  2  */
void main(void)                                                                    /*  บรรทัดที่  3  */
{                                                                                          /*  บรรทัดที่  4  */
      int  num;                                                                        /*  บรรทัดที่  5  */
      clrscr( );                                                                         /*  บรรทัดที่  6  */
      for (num=1; num<=10; num++)                                  /*  บรรทัดที่  7  */
            printf( "%3d\n", num);    /*  end for   */              /*  บรรทัดที่  8  */
      printf("\n\nPress any key back to program...");           /*  บรรทัดที่  9  */
      getch();                                                                         /*  บรรทัดที่  10  */
}                                                                                           /*  บรรทัดที่  11  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: 1  2  3  4  5  6  7  8  9  10    Press any key back to program...

คำอธิบายโปรแกรม
           จากโปรแกรมตัวอย่างที่  4.1  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่  7  คำสั่ง  for (num = 1;  num <=10;  num++)  จะเริ่มทำงานโดยการกำหนดค่าเริ่มต้นตัวแปร  num  เป็น  1  จากนั้นทดสอบเงื่อนไข  num <= 10  จริงหรือเท็จ  ถ้าเป็นจริงจะทำงานตามคำสั่งบรรทัดที่  8  ถ้าเป็นเท็จออกจาก  for  ไปทำคำสั่งบรรทัดที่  9
บรรทัดที่  8  ฟังก์ชัน  printf( )  เพื่อพิมพ์ค่าของตัวแปร  num  ในแต่ละรอบของการทำงาน  และขึ้นบรรทัดใหม่ด้วย  ออกแสดงที่จอภาพ
บรรทัดที่  9  ฟังก์ชัน printf( ) แสดงข้อความให้กดคีย์ใด ๆ  เพื่อกลับสู่โปรแกรม
บรรทัดที่  10  หยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม
โปรแกรมตัวอย่างที่  4.2  แสดงการใช้คำสั่ง  for  เพื่อวนคำนวณแม่สูตรคูณ  แม่ต่าง ๆ  ตามผู้ใช้เติม  และแสดงผลที่จอภาพ

/*   for2.c                */
#include<stdio.h>                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                             /*  บรรทัดที่  2  */
void main(void)                                                                    /*  บรรทัดที่  3  */
{                                                                                               /*  บรรทัดที่  4  */
      int k,i;                                                                                   /*  บรรทัดที่ 5  */
      clrscr();                                                                               /*  บรรทัดที่  6  */
      printf("input number >>> ");                                           /*  บรรทัดที่  7  */
      scanf("%d",&k);                                                                 /*  บรรทัดที่  8  */
      for (i=1; i<=12; i++)                                                         /*  บรรทัดที่  9  */
            printf("%d x %d = %d\n",k,i,i*k);                 /*  บรรทัดที่  10  */
      printf("\n\nPress any key back to program...");            /*  บรรทัดที่  11  */
      getch();                                                                               /*  บรรทัดที่  12  */
}                                                                                               /*  บรรทัดที่  13  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: input number >>> 5  5 x 1 = 5  5 x 2 = 10  5 x 3 = 15  5 x 4= 20  5 x 5 = 25  5 x 6 = 30  5 x 7 =3 5  5 x 8 = 40  5 x 9 = 45  5 x 10 = 50  5 x 11 = 55  5 x 12 = 60    Press any key back to program...

คำอธิบายโปรแกรม 
           จากโปรแกรมตัวอย่างที่  4.2  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  ฟังก์ชัน  printf( )  พิมพ์ข้อความ  input  number >>>  ออกที่จอภาพ  นั่นคือ  ให้ผู้ใช้เติมตัวเลขจำนวนเต็ม  เพื่อที่จะนำไปคำนวณแม่สูตรคูณ
บรรทัดที่  8  ฟังก์ชัน scanf( ) รับค่าตัวเลขจากคีย์บอร์ด  แล้วเก็บไว้ที่ตัวแปร  k
บรรทัดที่  9  คำสั่ง  for (i = 1;  i <= 12;  i++)  เป็นการกำหนดค่าเริ่มต้นตัวแปร  i  เป็น  1  จากนั้นทดสอบเงื่อนไข  i <= 12  จริงหรือเท็จ  ถ้าเป็นจริงจะทำคำสั่งบรรทัดที่  10  ถ้าเป็นเท็จจะออกจาก  for  ไปทำคำสั่งบรรทัดที่  11
บรรทัดที่  10  ฟังก์ชัน  printf( )  แสดงค่าตัวแปร  k, i  และ  i * k  นั่นคือ  ค่าแม่สูตรคูณตัวเลขนั้น ๆ  คูณกับค่า  i  ในแต่ละรอบ  และค่าผลลัพธ์ที่ได้จากการเอาตัวเลขแม่สูตรคูณ  คูณกับตัวเลขในแต่ละรอบออกมาเป็นสูตรคูณ
บรรทัดที่  11  ฟังก์ชัน  printf( ) พิมพ์ข้อความให้กดคีย์ใด ๆ เพื่อกลับสู่โปรแกรม
บรรทัดที่  12  หยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม  
โปรแกรมตัวอย่างที่  4.3  แสดงการใช้คำสั่ง  for  เพื่อวนคำนวณค่าสะสมตัวเลข  1  ถึง  10  และแสดงผลออกจอภาพ

/*             for3.c         */
#include<stdio.h>                                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                                             /*  บรรทัดที่ 2  */
void main(void)                                                                                    /*  บรรทัดที่  3  */
{                                                                                                      /*  บรรทัดที่  4  */
      int  i, sum;                                                                                 /*  บรรทัดที่  5  */
      clrscr( );                                                                                   /*  บรรทัดที่  6  */
      for( i=1, sum=0; i<=10; i++ )                                                         /*  บรรทัดที่  7  */
            {                                                                                     /*  บรรทัดที่  8  */
                  sum+=i;                                                                    /*  บรรทัดที่ 9  */
                  printf("I = %d, SUM = %d\n", i, sum);                        /*  บรรทัดที่  10  */
            }   /*  end for  */                                                              /*  บรรทัดที่  11  */
printf("\n\nI = %d, SUM = %d",i,sum);                                       /*  บรรทัดที่  12  */
printf("\n\nPress any key back to program...");                            /*  บรรทัดที่  13  */
getch();                                                                                        /*  บรรทัดที่  14  */
}                                                                                                 /*  บรรทัดที่  15  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: I = 1, SUM = 1  I = 2, SUM = 3  I = 3, SUM = 6  I = 4, SUM = 10  I = 5, SUM = 15  I = 6, SUM = 21  I = 7, SUM = 28  I = 8, SUM = 36  I = 9, SUM = 45  I = 10, SUM = 55  I = 11, SUM = 55    Press any key back to program...                    

คำอธิบายโปรแกรม 
           จากโปรแกรมตัวอย่างที่  4.3  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  7  คำสั่ง  for (i = 1, sum = 0; i <= 10; i++)  มีนิพจน์ที่กำหนดค่าเริ่มต้นให้กับตัวแปร  2  ค่า  คือ  i = 1  และ  sum = 0  ส่วนนิพจน์เงื่อนไข  คือ  i <10  และนิพจน์สำหรับเพิ่มค่าตัวแปร  i  คือ  i++  ในคำสั่ง  for  ถ้าตรวจสอบเงื่อนไข  i <=10  แล้วเป็นจริงจะทำงานใน  loop for  คือ  บรรทัดที่  9  และ  10  แล้ววนไปเพิ่มค่าตัวแปร  i  และวนตรวจสอบเงื่อนไขอีกครั้งว่า  i <= 10  จริงหรือเท็จ  แต่ถ้าตรวจสอบเงื่อนไขแล้วได้ค่าเป็นเท็จ  ก็จะข้ามคำสั่งใน  loop for  ไปทำคำสั่งบรรทัดที่  12  ถึง  14
บรรทัดที่  9  และ  10  เป็นคำสั่งให้คำนวณค่าสะสมตัวแปร  sum  ในแต่ละรอบการทำงาน  และแสดงค่าตัวแปร  i  และตัวแปร  sum  ที่คำนวณได้ในแต่ละรอบ  แสดงผลออกจอภาพ
บรรทัดที่  12  ถึง  14  เป็นคำสั่งที่โปรแกรมจะทำงานภายหลังจากตรวจสอบเงื่อนไข  loop for  แล้วได้ค่าเป็นเท็จ  นั่นคือ  บรรทัดที่  12  พิมพ์ค่าตัวแปร  i  และ  ตัวแปร  sum  ค่าสุดท้าย  ส่วนบรรทัดที่  13  จะแสดงข้อความให้กดคีย์ใด ๆ  เพื่อกลับสู่โปรแกรม  และบรรทัดที่  14  หยุดรอรับค่าใด ๆ จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม       
โปรแกรมตัวอย่างที่  4.4  แสดงการใช้คำสั่ง  for  เพื่อวนแสดงตัวเลขแต่ละแถว  ซึ่งแสดงแถวละ  10  ตัว  ออกแสดงที่จอภาพ

/*             for4.c         */
                #include<stdio.h>                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                             /*  บรรทัดที่  2  */
void main(void)                                                                    /*  บรรทัดที่  3  */
{                                                                                              /*  บรรทัดที่  4  */
      int  row,  col;                                                                     /*  บรรทัดที่  5  */
      clrscr( );                                                                             /*  บรรทัดที่  6  */
      for (row=1; row<=5; row++)                                          /*  บรรทัดที่  7  */
            {                                                                               /*  บรรทัดที่  8  */
                  for( col=1; col<=10 ; col++ )            /*  บรรทัดที่  9  */
                  printf("%2d",row );                /*  บรรทัดที่  10  */
                  printf("\n");                                              /*  บรรทัดที่  11  */
            } /* end for(row)  */                                               /*  บรรทัดที่  12  */
printf("\n\nPress any key back to program...");           /*  บรรทัดที่  13  */
getch();                                                                              /*  บรรทัดที่  14  */
}                                                                                              /*  บรรทัดที่  15  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: 1 1 1 1 1 1 1 1 1 1  2 2 2 2 2 2 2 2 2 2  3 3 3 3 3 3 3 3 3 3   4 4 4 4 4 4 4 4 4 4  5 5 5 5 5 5 5 5 5 5    Press any key back to program...   

 คำอธิบายโปรแกรม
           จากโปรแกรมตัวอย่างที่  4.4  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  7  คำสั่ง  for (row=1; row<=5; row++)  เพื่อควบคุมการทำงานของโปรแกรมให้มีการทำงานจำนวน  5  แถว  และมีนิพจน์เงื่อนไข  คือ  row<=5  เป็นจริงหรือเท็จ  ถ้านิพจน์เงื่อนไขมีค่าจริง  จะทำงานใน  loop  for  คือ  บรรทัดที่  9  ถึง  11  แล้ววนไปเพิ่มค่าตัวแปร  row  และวนตรวจสอบเงื่อนไขอีกครั้งว่า  row<=5  จริงหรือเท็จ  แต่ถ้าตรวจสอบเงื่อนไขแล้วได้ค่าเป็นเท็จ  ก็จะข้ามคำสั่งใน  loop  for  ไปทำคำสั่งบรรทัดที่  14  และ  15
บรรทัดที่  9  คำสั่ง  for (col=1; col<=10; col++)  เพื่อควบคุมการทำงานของโปรแกรมให้ทำงาน  10  คอลัมน์  ต่อ  1  แถว  ซึ่งการทำงานใน  loop  for  นี้  มีลักษณะการทำงานคล้ายกับ  loop  for  ของบรรทัดที่  7  ซึ่งถ้านิพจน์เป็นจริง  จะไปทำงานคำสั่งบรรทัดที่  10  นั่นคือ  วนพิมพ์ค่าของตัวแปร  row  ไปเรื่อย ๆ  จนครบ  10  ครั้ง  และแต่ละครั้งจะเว้นช่องว่างห่างกัน  2  ช่องว่างสำหรับการแสดงค่าตัวแปร  row  แต่ถ้านิพจน์เป็นเท็จ  จะไปทำคำสั่งบรรทัดที่  11  นั่นคือ  ขึ้นบรรทัดใหม่
บรรทัดที่  13  และ  14  เป็นคำสั่งที่โปรแกรมจะทำงานภายหลังจากตรวจสอบเงื่อนไขของตัวแปร  row  ว่า  row<=5  แล้วได้ค่าเป็นเท็จ  คือ  แสดงข้อความให้กดคีย์ใด ๆ  เพื่อกลับเข้าสู่โปรแกรม  และจะหยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  กด  enter  ก็จะกลับสู่โปรแกรม
           4.1.2 คำสั่ง  while
                      while  เป็นคำสั่งที่มีการทำงานซ้ำ ๆ เป็นลูป  และมีลักษณะการทำงานของคำสั่งคล้ายกับคำสั่ง  for  แตกต่างกันตรงที่  การใช้  while  ไม่ต้องทราบจำนวนรอบของการทำงานที่แน่นอน  แต่ต้องมีเงื่อนไขที่เป็นเท็จจึงจะออกจากคำสั่ง  while  ได้
รูปแบบการใช้คำสั่ง  while
while  (expression)  statement;
หรือ
while  (expression)
{
statement(s);
}
  
           
           โดยที่
  
expression  คือ  นิพจน์ที่ใช้ทดสอบเงื่อนไข  ถ้านิพจน์นี้ให้ผลลัพธ์เป็นจริงจะทำตามคำสั่งที่อยู่ภายในคำสั่ง  while  จนกว่าเงื่อนไขเป็นเท็จจึงออกจากคำสั่ง  while  ได้
            ลักษณะการทำงานของคำสั่ง  while  สามารถเขียนเป็นแผนผังได้ดังนี้

รูปที่  4.2  ผังงานแสดงลักษณะการทำงานของคำสั่ง  while
ที่มา : สมชาย  รัตนเลิศนุสรณ์, 2545 : 82.

โปรแกรมตัวอย่างที่  4.5  แสดงการใช้คำสั่ง  while  เพื่อวนคำนวณค่าสะสมตัวเลข  1  ถึง  10  และหาค่าเฉลี่ย  แล้วแสดงผลออกจอภาพ

/* while1.c             */
#include<stdio.h>                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                             /*  บรรทัดที่  2  */
void main(void)                                                                    /*  บรรทัดที่  3  */
{                                                                                              /*  บรรทัดที่  4  */
      int n=1;                                                                  /*  บรรทัดที่  5  */
      float sum =0 ,  avg;                                              /*  บรรทัดที่  6  */
      clrscr( );                                                                 /*  บรรทัดที่  7  */
      while ( n < 11 )                                                     /*  บรรทัดที่  8  */
      {                                                                               /*  บรรทัดที่  9  */
            sum+=n;                                                            /*  บรรทัดที่  10  */
            n++;                                                                    /*  บรรทัดที่  11  */
      }   /*  end  while   */                                              /*  บรรทัดที่  12  */
      n--;                                                                          /*  บรรทัดที่  13  */
      avg = sum/n;                                                        /*  บรรทัดที่  14  */
      printf("N = %d, Sum = %.2f\n",n, sum);           /*  บรรทัดที่  15  */
      printf("Average = %.2f", avg);                             /*  บรรทัดที่  16  */
      printf("\n\nPress any key back to program..."); /*  บรรทัดที่  17  */
      getch();                                                                  /*  บรรทัดที่  18  */
}                                                                                    /*  บรรทัดที่  19  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: N = 10 ,  Sum = 55.00  Average = 5.50    Press any key back to program...                   
คำอธิบายโปรแกรม 
           จากโปรแกรมตัวอย่างที่  4.5  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  8  คำสั่ง  while (n < 11)  เพื่อควบคุมการทำงานของโปรแกรมให้ทำงานซ้ำ ๆ  กัน  โดยการทำงานของคำสั่ง  while  จะตรวจสอบเงื่อนไข  n < 11  เป็นจริงหรือเท็จ  ถ้าเป็นจริงจะทำงานตามคำสั่งที่อยู่ภายใน  loop  while  คือ  บรรทัดที่  10  และ  11  จากนั้นจะกลับมาตรวจสอบเงื่อนไขใหม่  ทำอย่างนี้ซ้ำ ๆ  จนกว่าตรวจสอบเงื่อนไข  n < 11  เป็นเท็จ  จึงจะออกจาก  loop  while  แล้วไปทำคำสั่งบรรทัดที่  13  ถึง  คำสั่งบรรทัดที่  18
บรรทัดที่  10  และ  11  เป็นคำสั่งที่โปรแกรมจะทำงานภายหลังจากตรวจสอบเงื่อนไข  while  แล้วเป็นจริง  นั่นคือ  คำนวณค่าสะสมของตัวแปร  sum  และ  เพิ่มค่า  n  ทีละ  1  ตามลำดับ
บรรทัดที่  13  ถึง  18  เป็นคำสั่งที่โปรแกรมจะทำงานภายหลังจากตรวจสอบเงื่อนไข  while  แล้วเป็นเท็จ  คือ  ลดค่าตัวแปร  n  ลง  1  แล้วคำนวณค่าเฉลี่ยเก็บไว้ที่ตัวแปร  avg  และพิมพ์ค่าตัวแปร  n, sum  และ  avg  แสดงที่จอภาพ  พร้อมกับพิมพ์ข้อความให้กดคีย์ใด ๆ  เพื่อกลับสู่โปรแกรม  สุดท้ายจะหยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม     
โปรแกรมตัวอย่างที่  4.6  แสดงการใช้คำสั่ง  while  เพื่อวนทำงานให้ผู้ใช้เติมตัวอักษร  และ  แสดงผลออกจอภาพไปเรื่อย ๆ  จนกว่าจะกด  enter  ถึงหยุดการทำงาน

/*             while2.c                 */
#include<stdio.h>                                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                                             /*  บรรทัดที่  2  */
void main(void)                                                                                    /*  บรรทัดที่  3  */
{                                                                                                 /*  บรรทัดที่  4  */
      char  ch='A';                                                                         /*  บรรทัดที่  5  */
      while (ch != '\r')                                                                    /*  บรรทัดที่  6  */
      {                                                                                               /*  บรรทัดที่  7  */
            clrscr();                                                                               /*  บรรทัดที่  8  */
            printf("Enter a character : ");                                           /*  บรรทัดที่  9  */
            ch=getche();                                                                     /*  บรรทัดที่  10  */
            printf("\nYour type a character is...%c", ch);                /*  บรรทัดที่  11  */
            getch();                                                                               /*  บรรทัดที่  12  */
      }  /* end while */                                                                   /*  บรรทัดที่  13  */
}                                                                                               /*  บรรทัดที่  14  */

ผลลัพธ์ที่ได้จากโปรแกรม



 คำอธิบายโปรแกรม
           จากโปรแกรมตัวอย่างที่  4.6  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  5  ประกาศตัวแปรชนิดตัวอักขระ  ชื่อ  ch  และให้เก็บค่า  ‘A’  เพื่อไว้ตรวจสอบเงื่อนไขเริ่มแรก
บรรทัดที่  6  คำสั่ง  while (ch != ‘ \r ’)  คือ  การตรวจสอบเงื่อนไข  ค่าของตัวแปร  ch  ไม่เท่ากับ  ‘ \r ‘  หรือไม่  (‘ \r ‘  คือรหัสของการกดแป้น  enter)  ซึ่งถ้าเงื่อนไขเป็นจริง  จะทำคำสั่งภายใน  loop  while  คือ  บรรทัดที่  8  ถึง  12  แต่ถ้าเงื่อนไขเป็นเท็จก็จะออกจาก  loop  while  ซึ่งในกรณีนี้เงื่อนไขจะเป็นเท็จได้คือผู้ใช้จะต้องกดแป้น  enter  เพราะ  ‘ \r ‘  ไม่เท่ากับ  ‘ \r ‘  จะเป็นเท็จ
บรรทัดที่  8  ถึง  12  เป็นคำสั่งที่โปรแกรมจะทำงานภายหลังจากตรวจสอบเงื่อนไข  while  แล้วเป็นจริง  คือ  ลบจอภาพ  แล้วให้เติมตัวอักขระตัวใด ๆ  ไปเก็บไว้ในตัวแปร  ch  เพื่อเอาไว้ตรวจสอบเงื่อนไข  และนำค่าตัวอักขระที่ผู้ใช้เติมแสดงออกจอภาพ  สุดท้ายหยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม    
โปรแกรมตัวอย่างที่  4.7  แสดงการใช้คำสั่ง  while  เพื่อวนการทำงานให้ผู้ใช้เติมตัวเลข  เต็มบวก  หรือ  เต็มลบ  หรือ  ศูนย์  และมีการนับจำนวนตัวเลขแต่ละชนิดด้วย  แล้วแสดงผลที่ได้ออกจอภาพ

/*   while3.c           */
#include <stdio.h>                                                                             /*  บรรทัดที่  1  */
#include <conio.h>                                                                            /*  บรรทัดที่  2  */
void main(void)                                                                                    /*  บรรทัดที่  3  */
{                                                                                                     /*  บรรทัดที่  4  */
      float in_key;                                                                          /*  บรรทัดที่  5  */
      int p=0,z=0,n=0, c=1;                                                                     /*  บรรทัดที่  6  */
      clrscr();                                                                                  /*  บรรทัดที่  7  */
   while (c<=10)                                                                                   /*  บรรทัดที่  8  */
   {                                                                                                 /*  บรรทัดที่  9  */
      printf("Enter a value %d : ", c);                                                     /*  บรรทัดที่  10  */
      scanf("%f", &in_key);                                                             /*  บรรทัดที่  11  */
      if (in_key<0.0)                                                                 /*  บรรทัดที่  12  */
            n++;                                                                                      /*  บรรทัดที่  13  */
            else if (in_key==0.0)                                                          /*  บรรทัดที่  14  */
                  z++;                                                                        /*  บรรทัดที่  15  */
                  else                                                                                    /*  บรรทัดที่  16  */
                        p++;                                                                  /*  บรรทัดที่  17  */
      c++;                                                                                     /*  บรรทัดที่  18  */
}                                                                                                  /*  บรรทัดที่  19  */
printf("Negative = %d\n", n);                                                           /*  บรรทัดที่  20  */
printf("Positive = %d\n", p);                                                             /*  บรรทัดที่  21  */
printf("Zero = %d\n", z);                                                                   /*  บรรทัดที่  22  */
getch();                                                                                               /*  บรรทัดที่  23  */
}                                                                                                  /*  บรรทัดที่  24  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: Enter a value 1 :  -5   Enter a value 2 :  20  Enter a value 3 :  0  Enter a value 4 :  -30  Enter a value 5 :  8  Enter a value 6 :  48  Enter a value 7 :  0  Enter a value 8 :  35  Enter a value 9 :  -19  Enter a value 10 :  0    Negative = 3  Positive = 4  Zero = 3   

 คำอธิบายโปรแกรม
           จากโปรแกรมตัวอย่างที่  4.7  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่  8  คำสั่ง  while (c<=10)  เพื่อควบคุมการทำงานของโปรแกรมให้ทำงานซ้ำ ๆ  กัน  โดยการทำงานของคำสั่ง  while  จะตรวจสอบเงื่อนไข  c<=10  เป็นจริงหรือเท็จ  ถ้าเป็นจริงจะทำงานตามคำสั่งที่อยู่ภายใน  loop  while  คือคำสั่งบรรทัดที่  10  ถึง  18  แต่ถ้าเงื่อนไขเป็นเท็จจะออกจาก  loop  while  ไปทำคำสั่งบรรทัดที่  20  ถึง  23
บรรทัดที่  10  ถึง  11  ให้ผู้ใช้เติมตัวเลขใด ๆ จะเป็นตัวเลขลบ  บวก  หรือศูนย์  แล้วเก็บไว้ที่ตัวแปร  in_key
บรรทัดที่  12  ถึง  18  คำสั่ง  if (in_key < 0.0)  จะตรวจสอบตัวเลขที่รับเข้ามาจากคีย์บอร์ดว่ามีค่าน้อยกว่าศูนย์หรือไม่  ถ้าใช่จะเพิ่มค่า  n  ขึ้นทีละ  1  แต่ถ้าไม่ใช่จะไปตรวจสอบเงื่อนไข  if (in_key == 0.0)  คือตรวจสอบว่าตัวเลขที่รับเข้ามาจากคีย์บอร์ดว่ามีค่าเท่ากับศูนย์หรือไม่  ถ้าใช่จะเพิ่มค่า  z  ขึ้นทีละ  1  แต่ถ้าไม่ใช่ทั้ง  2  กรณี  แสดงว่า  ตัวเลขที่รับเข้ามาจากคีย์บอร์ดมีค่ามากกว่าศูนย์  ก็จะเพิ่มค่า  p  ขึ้นทีละ  1  หลังจากนั้นค่อยเพิ่มค่าตัวแปร  c  ขึ้น  1  แล้วกลับไปตรวจสอบเงื่อนไขใน  loop  while  อีกครั้ง  ซึ่งจะวนทำงานแบบนี้ไปเรื่อย ๆ
บรรทัดที่  20  ถึง  23  เป็นคำสั่งที่โปรแกรมจะทำงานภายหลังจากตรวจสอบเงื่อนไข  while  แล้วเป็นเท็จ  คือ  แสดงจำนวนของตัวเลขที่เป็นค่าบวก  ค่าลบ  และ  เท่ากับศูนย์  ที่บวกสะสมไว้แล้วนั้น  แสดงออกจอภาพ  และหยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม  
           4.1.3 คำสั่ง  do  while
                      do  while  เป็นคำสั่งที่มีการทำงานซ้ำ ๆ วนลูป  คล้ายกับคำสั่ง while  มาก  แตกตางกันตรงที่คำสั่ง  do  while  จะทดสอบเงื่อนไขหลังจากที่ได้ทำงานตามคำสั่งภายในลูปไปแล้ว  1  รอบ  จากนั้นจึงค่อยย้อนกลับมาทดสอบเงื่อนไขอีกครั้งหนึ่ง  ถ้าเงื่อนไขเป็นจริงก็จะทำงานตามคำสั่งภายในลูป  แต่ถ้าเงื่อนไขเป็นเท็จจะออกจากคำสั่ง  do  while  ทันที
รูปแบบการใช้คำสั่ง  do  while

do{
statement(s);
}  while  (expression);
ลักษณะการทำงานของคำสั่ง  do  while  สามารถเขียนเป็นแผนผังได้ดังนี้
 

รูปที่  4.3   ผังงานแสดงลักษณะการทำงานของคำสั่ง  do  while
ที่มา : สมชาย  รัตนเลิศนุสรณ์, 2545 : 85.
ข้อควรระวังในการใช้คำสั่ง  do  while
ควรระวังเงื่อนไขของคำสั่ง  do  while  ต้องพิจารณาให้ดีว่ามีทั้งกรณีที่เป็นจริงและเท็จอยู่หรือไม่  ถ้ามีอยู่ทั้ง  2  กรณี  แสดงว่าใช้คำสั่งนี้ได้ถูกต้องตามไวยากรณ์ของคำสั่งนี้  ถ้ามีเฉพาะกรณีที่เงื่อนไขเป็นจริงเท่านั้นแสดงว่าเกิดลักษณะการทำงานวนลูป (looping)  ไม่มีทางออกจากคำสั่งนี้  ในทำนองกลับกันถ้าเงื่อนไขเป็นเท็จอย่างเดียว  จะทำคำสั่ง  do  while  เพียงครั้งเดียว
โปรแกรมตัวอย่างที่  4.8  แสดงการใช้คำสั่ง  do  while  เพื่อวนลูปแสดง  main  memu  ให้ผู้ใช้เลือกเมนู  ไปเรื่อย ๆ  จนกว่าเลือกเมนูที่  5  ถึงจะออกจากโปรแกรม


/*             dowhile1.c                            */
                #include<stdio.h>                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                             /*  บรรทัดที่  2  */
void main(void)                                                                    /*  บรรทัดที่  3  */
{                                                                                              /*  บรรทัดที่  4  */
char choice;                                                                     /*  บรรทัดที่  5  */
clrscr();                                                                              /*  บรรทัดที่  6  */
do {                                                                                     /*  บรรทัดที่  7  */
printf("\n\n******* MAIN MENU *******\n");      /*  บรรทัดที่  8  */
printf("*************************\n\n");               /*  บรรทัดที่  9  */
printf("1. Create New File\n");                          /*  บรรทัดที่  10  */
printf("2. Use an Old File\n");                           /*  บรรทัดที่  11  */
printf("3. Edit data record  in File \n");           /*  บรรทัดที่  12  */
printf("4. Append data record in File\n");      /*  บรรทัดที่  13  */
printf("5. Exit Program\n");                               /*  บรรทัดที่  14  */
printf("Enter your choice(1,2,3,4,5): ");           /*  บรรทัดที่  15  */
choice=getche();                                              /*  บรรทัดที่  16  */
}while(choice != '5');                                                      /*  บรรทัดที่  17  */
}                                                                                             /*  บรรทัดที่  18  */
          

ผลลัพธ์ที่ได้จากโปรแกรม
 

  คำอธิบายโปรแกรม
           จากโปรแกรมตัวอย่างที่  4.8  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  7  คำสั่ง  do  จะควบคุมการทำงานของโปรแกรม  ให้ทำตามคำสั่งที่อยู่ภายใน  loop  do  คือคำสั่งภายในเครื่องหมาย  { }  บรรทัดที่  8  ถึง  16  ซึ่งจะทำอย่างน้อย  1  รอบ  หลังจากนั้นค่อยไปตรวจสอบเงื่อนไข  while  ในบรรทัดที่  17  ถ้าเป็นจริงจะกลับมาทำคำสั่งใน  loop  อีกครั้ง  แต่ถ้าเป็นเท็จก็จะออกจากโปรแกรม  และสิ้นสุดการทำงาน
บรรทัดที่  17  คำสั่ง  while (choice!=‘5‘);  จะตรวจสอบค่าที่รับเข้ามาจากคีย์บอร์ด  ซึ่งจะเก็บไว้ในตัวแปร  choice  และค่าที่รับเข้ามาจะเป็นชนิดอักขระ  ตรวจสอบว่าไม่เท่ากับ  ตัวอักขระ  5  จริงหรือเท็จ  (‘5‘  ความหมายเป็นตัวอักขระไม่ใช่ตัวเลข  ซึ่งเวลาตรวจสอบเงื่อนไข  ตัวดำเนินการทางคณิตศาสตร์  ข้อมูลที่จะตรวจสอบต้องเป็นชนิดเดียวกัน)   มีเงื่อนไขที่จะเป็นเท็จอยู่กรณีเดียว  คือ  เติม  5  จะทำให้  ‘5‘ != 5  เป็นเท็จ  ก็จะออกจาก  loop  และจบการทำงาน 

โปรแกรมตัวอย่างที่  4.9  แสดงการใช้คำสั่ง  do  while  เพื่อวนลูป  คำนวณค่าผลบวกตัวเลข  1  ถึง  100

/*   dowhile2.c      */
#include <stdio.h>                                                                             /*  บรรทัดที่  1  */
#include <conio.h>                                                                            /*  บรรทัดที่  2  */
void main(void)                                                                                    /*  บรรทัดที่  3  */
{                                                                                                               /*  บรรทัดที่  4  */
int i=1, sum=0;                                                                                  /*  บรรทัดที่  5  */
clrscr();                                                                                               /*  บรรทัดที่  6  */
   do                                                                                                        /*  บรรทัดที่  7  */
{                                                                                                            /*  บรรทัดที่  8  */
sum = sum+i;                                                                                 /*  บรรทัดที่ 9  */
i++;                                                                                                   /*  บรรทัดที่  10  */
} while (i<=100);                                                                               /*  บรรทัดที่  11  */
   printf("Sum = %d", sum);                                                                                /*  บรรทัดที่  12  */
printf("\n\nPress any key back to program...");                            /*  บรรทัดที่  13  */
getch();                                                                                               /*  บรรทัดที่  14  */
}                                                                                                               /*  บรรทัดที่  15  */

ผลลัพธ์ที่ได้จากโปรแกรม
แผนผังลำดับงาน: จอภาพ: Sum = 5050    Press any key back to program…                         


คำอธิบายโปรแกรม
           จากโปรแกรมตัวอย่างที่  4.9  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  7  คำสั่ง  do  จะควบคุมการทำงานของโปรแกรม  ให้ทำตามคำสั่งที่อยู่ภายใน  loop  do  คือคำสั่งภายในเครื่องหมาย  { }  บรรทัดที่  9  ถึง  10  ซึ่งจะทำอย่างน้อย  1  รอบ  หลังจากนั้นค่อยไปตรวจสอบเงื่อนไข  while  ในบรรทัดที่  11  ถ้าเป็นจริงจะกลับมาทำคำสั่งใน  loop  อีกครั้ง  แต่ถ้าเป็นเท็จก็จะออกจากโปรแกรม  และสิ้นสุดการทำงาน
บรรทัดที่  11  คำสั่ง  while (i<=100);  จะตรวจสอบว่าค่า  i  น้อยกว่าหรือเท่ากับ  100  เป็นจริงหรือเท็จ  ถ้าเป็นจริงจะกลับไปทำงานตามคำสั่งใน  loop  do  คือ  บวกสะสมตัวเลข  เก็บไว้ในตัวแปร  sum  แล้วเพิ่มค่า  i  ขึ้นทีละ  1  แต่ถ้าเป็นเท็จ  คือ  ค่า  i  เป็น  101  จะออกจาก  loop  do  แล้วไปทำคำสั่งบรรทัดที่  12  ถึง  14  นั่นคือ  พิมพ์ค่าผลบวกสะสมตัวเลข  1  ถึง  100  แล้วพิมพ์ข้อความให้กดคีย์ใด ๆ  เพื่อกลับเข้าสู่โปรแกรม  และหยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม  
           4.1.4 คำสั่ง  break
                      break  เป็นคำสั่งที่สั่งให้ออกจากคำสั่ง  for  หรือ  while  หรือ  do  while  หรือคำสั่ง  switch  (คำสั่ง  switch  อธิบายไว้ในหัวข้อ  2.4)
รูปแบบการใช้คำสั่ง  break
break;

   
  โปรแกรมตัวอย่างที่  4.10  แสดงการใช้คำสั่ง  break  ควบคู่กับคำสั่ง  for


/*         break.c    */
    #include<stdio.h>                                                                          /*  บรรทัดที่ 1  */
#include<conio.h>                                                                         /*  บรรทัดที่  2  */
void main(void)                                                                                /*  บรรทัดที่  3  */
{                                                                                                          /*  บรรทัดที่  4  */
int j;                                                                                         /*  บรรทัดที่  5  */
clrscr();                                                                                  /*  บรรทัดที่  6  */
for (j=1; j<=20; j++) {                                                          /*  บรรทัดที่  7  */
printf("%d\t",j);                                                                    /*  บรรทัดที่  8  */
if (j==10) break;   /*  break when j==10 */                   /*  บรรทัดที่  9  */
}  /*  end for  */                                                                      /*  บรรทัดที่  10  */
printf("\n\nPress any key back to program...");               /*  บรรทัดที่  11  */
getch();                                                                                  /*  บรรทัดที่  12  */
}                                                                                                          /*  บรรทัดที่  13  */


ผลลัพธ์ที่ได้จากโปรแกรม
แผนผังลำดับงาน: จอภาพ: 1       2       3       4       5       6       7       8       9       10    Press any key back to program…
คำอธิบายโปรแกรม
           จากโปรแกรมตัวอย่างที่  4.10  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  7  คำสั่ง  for (j = 1;  j <=20;  j++)  ต้องการให้โปรแกรมวนทำงานพิมพ์ค่าของตัวแปร  j  ตั้งแต่  1  ถึง    โดยแต่ละค่าให้ห่างกัน  1  tab
บรรทัดที่   คำสั่ง  if (j == 10)  break;  จะตรวจสอบค่าตัวแปร  j  ว่าเท่ากับ  10  หรือไม่  ถ้าเท่ากับ  10  ให้หยุดการทำงาน  (break)  และออกจาก  loop  for  ดังนั้นโปรแกรมนี้จะไม่ได้พิมพ์ตัวเลข  1  ถึง  20  เพราะพบคำสั่ง  break  แต่จะพิมพ์ตัวเลข  1  ถึง  10
บรรทัดที่  11  และ  12  เป็นคำสั่งที่จะทำงานภายหลังจากตรวจสอบเงื่อนไข  for  ในบรรทัดที่  7  แล้วได้ค่าเท็จ  นั่นคือ  พิมพ์ข้อความให้กดคีย์ใด ๆ  เพื่อกลับสู่โปรแกรม  และหยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม 
           4.1.5 คำสั่ง  continue
                      continue  เป็นคำสั่งที่สั่งให้กลับไปทำงานที่คำสั่งแรกของลูปคำสั่ง  for  หรือ  while หรือ  do  while  ทำให้มีการทำงานในรอบต่อไป
รูปแบบการใช้คำสั่ง  continue
continue;

 โปรแกรมตัวอย่างที่  4.11  แสดงการใช้คำสั่ง  continue  ควบคู่กับคำสั่ง  for


/*             continue.c             */
#include<stdio.h>                                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                                             /*  บรรทัดที่  2  */
void main(void)                                                                                    /*  บรรทัดที่  3  */
{                                                                                                              /*  บรรทัดที่  4  */
int j;                                                                                                     /*  บรรทัดที่  5  */
clrscr();                                                                                              /*  บรรทัดที่  6  */
for( j=1; j<=20; j++ ){                                                                      /*  บรรทัดที่  7  */
printf("%d\t",j);                                                                       /*  บรรทัดที่  8  */
if (j==5) { j=j+10; continue; }                                             /*  บรรทัดที่  9  */
}                                                                                                           /*  บรรทัดที่  10  */
printf("\n\nPress any key back to program...");                           /*  บรรทัดที่  11  */
getch();                                                                                              /*  บรรทัดที่  12  */
}                                                                                                              /*  บรรทัดที่  13  */

                   

ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: 1       2       3       4       5       16       17       18       19       20    Press any key back to program…
คำอธิบายโปรแกรม
           จากโปรแกรมตัวอย่างที่  4.11  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่  7  คำสั่ง  for (j=1; j<=20; j++)  ต้องการให้โปรแกรมวนทำงานพิมพ์ค่าของตัวแปร  j  ตั้งแต่  1  ถึง  20  โดยแต่ละค่าให้ห่างกัน  1  tab
บรรทัดที่   คำสั่ง  if (j==5)  {j=j+10; continue;}  จะตรวจสอบค่าตัวแปร  j  ว่าเท่ากับ  5  หรือไม่  ถ้าเท่ากับ  5  ให้เพิ่มค่า  j  ไป  10  แล้วกลับไปทำงาน  (continue)  คำสั่งบรรทัดที่  7  คือ  เพิ่มค่า  j  อีก  1  เป็น  16  ดังนั้นโปรแกรมนี้จะไม่ได้พิมพ์ตัวเลข  1  ถึง  20  ทุกตัว  แต่จะข้ามตัวเลขช่วง  6  ถึง  15  ไป
บรรทัดที่  11  และ  12  เป็นคำสั่งที่จะทำงานภายหลังจากตรวจสอบเงื่อนไข  for  ในบรรทัดที่  7  แล้วได้ค่าเท็จ  นั่นคือ  พิมพ์ข้อความให้กดคีย์ใด ๆ  เพื่อกลับสู่โปรแกรม  และหยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  เช่น  ถ้ากด  enter  ก็จะกลับสู่โปรแกรม

0 ความคิดเห็น:

แสดงความคิดเห็น