คำสั่งควบคุมการทำงานของโปรแกรม
สำหรับบทนี้จะอธิบายถึงคำสั่งควบคุมการทำงานของโปรแกรม ซึ่งแบ่งกลุ่มตามลักษณะการทำงานตามข้อกำหนดมาตรฐานของสถาบัน 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);
}
โดยที่
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 คำสั่ง จะต้องเขียนอยู่ภายในเครื่องหมาย {….}
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 */
ผลลัพธ์ที่ได้จากโปรแกรม
ที่มา : สมชาย รัตนเลิศนุสรณ์, 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 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 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 */
ผลลัพธ์ที่ได้จากโปรแกรม
บรรทัดที่ 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 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 4.2 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 7 ฟังก์ชัน 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 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 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 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 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.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 */
ผลลัพธ์ที่ได้จากโปรแกรม
ที่มา : สมชาย รัตนเลิศนุสรณ์, 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 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 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 เพื่อวนการทำงานให้ผู้ใช้เติมตัวเลข เต็มบวก หรือ เต็มลบ หรือ ศูนย์ และมีการนับจำนวนตัวเลขแต่ละชนิดด้วย แล้วแสดงผลที่ได้ออกจอภาพ