4. คําสั่ง while
คําสั่ง while เปนคําสั่งวนซํ้า มักใชในกรณีที่ตองทํางานซํ้ากันหลาย ๆ ครั้ง โดยไมทราบจํานวนรอบ
ของการทําซํ้าที่แนนอน ตัวอยางเชน
ตองการรับขอมูลเลขจํานวนเต็มบวกจากผูใชจํานวนหนึ่งเพื่อนํามาหาคาเฉลี่ยของตัวเลขที่ปอนเขามาทั้งหมด
การทํางานดังกลาวจะตองมีการทํางานวนซํ้าเพื่อรับขอมูลและหาผลรวมของขอมูลที่รับเขามานั้น ในกรณีเชนนี้ผูที่ใชงานโปรแกรมซึ่งปอนจํานวนขอมูลเขาสูระบบอาจจะปอนขอมูลในจํ านวนที่ไมเทากัน หากตองการเขียนโปรแกรมเพื่อใหทํางานกับผูใชคนใด ๆ มักจะใชคํ าสั่ง while เขามาชวยในการเขียนโปรแกรม ในกรณีตัวอยางเราทราบวาขอมูลที่รับเขามาตองเปนขอมูลจํานวนเต็มบวกเทานั้นจึงจะนํามาหาคาเฉลี่ย ซึ่งผูเขียนโปรแกรมสามารถตั้งเงื่อนไขวา หากมีการปอนขอมูลเปนเลขจํานวนเต็มลบใหแสดงวาผูใชตองการหยุดการปอนขอมูลนั้น การทํางานของคําสั่ง while
ตัวอยาง รับขอมูลจํานวนเต็มจากผูใช จนกวาผูใชจะปอนเลข -9999 ใหหาวามีเลขจํานวน
เต็มลบ (ไมรวม –9999) อยูกี่จํานวน และมีเลขจํานวนเต็มบวก (รวมทั้งเลขศูนย) อยูกี่จํานวน
#include <stdio.h>
void main( ) {
int countPlus, countMinus, num;
countPlus = countMinus = 0;
printf(“Enter number (-9999 for end) : “);
scanf(“%d”, &num);
while (num != -9999) {
if (num < 0)
countMinus++;
else
countPlus++;
printf(“Enter number (-9999 for end) : “);
scanf(“%d”, &num);
}
printf(“Number less than zero = %d, more than or equal to zero = %d”,
countMinus, countPlus);
}
ในกรณีของการใชคําสั่งวนซํ้ าตาง ๆ สิ่งที่ตองระวังคือการนํ าเอาเลขจํ านวนจริงมาเปนคาควบคุมการวนซํ้า พิจารณาจากตัวอยาง เนื่องจากเรารูวา 1/3 + 1/3 + 1/3 มีคาเทากับ 1 เราจึงจะใชวิธีการดังกลาวมาเปนตัวควบคุมการทํ างานวนซํ้ า เชน57
float x, y;
x = 1.0f;
y = 1/3;
while (x != y) {
printf(“\n55555”);
y += 1/3;
}
หากทดลองเรียกใชโปรแกรมดังกลาว จะเกิดการพิมพคา 55555 ไปเรื่อย ๆ ทํ าใหเกิดสิ่งที่เรียกวา การวนซํ้าแบบอนันต หรือการวนซํ้ าแบบไมรูจบ ทั้งนี้เกิดจากการหาของภาษาซี 1 และ 3 เปนจํ านวนเต็ม เมื่อนํามาหารจะไดคาเทากับ 0 สามารถทดลองงาย ๆ ดวยคํ าสั่งเงื่อนไข
x = 1.0f;
y = (1/3) + (1/3) + (1/3);
if (x == y)
printf(“Equal”);
else
printf(“Not equal”);
คําตอบที่ไดคือ Not equal เพราะฉะนั้นหากใชเลขจํานวนจริงและการคํานวณเปนเปนสิ่งควบคุม การวนซํ้าหรือนําไปเปรียบเทียบเงื่อนไขจะตองระมัดระวังในการเขียนโปรแกรม
ไม่มีความคิดเห็น:
แสดงความคิดเห็น