การเขียนคำาสั่งควบคุม
แบบวนซำ้า
โปรแกรมแบบวนซำ้า (คำาสังประเภท For , while, do
่
while)
คำาสั่งควบคุมการทำางาน แบบ for
คำาสัง For เป็นคำาสั่งควบคุมการทำางานและ
่
กำาหนดการทำางานวนรอบคล้าย ๆ กับคำาสั่ง while
จะมีรูปแบบแตกต่างกับคำาสังควบคุมการทำางานอืน
่
ๆ
คำาสัง for เป็นเป็นคำาสั่งสั่งควบคุมการทำางาน
่
และกำาหนดการทำางานวนรอบ โดยตั้งค่าก่อน แล้ว
จึงทำาการพิจารณาเงื่อนไข ถ้าเงื่อนไขเป็นจริง ก็
จะทำาคำาสังและวนรอบต่อไป
่
รูปแบบการเขียน คำาสั่ง for
for (ค่าเริ่มต้น;เงื่อนไข;การเพิ่มหรือลดค่า)
ตัวอย่างการโปรแกรม

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

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

ผลลัพธ์ของโปรแกรม
จากตัวอย่างการโปรแกรม เราได้ทำาการ
เขียนโปรแกรม โดยสร้างตัวแปร $i แล้วให้มีคา
่
เท่ากับ 5 หลังจากนัน ตรงนีละที่จะทำางานต่างจาก
้
้
while เราะจะเจอกับคำาสั่ง do เมื่อเจอคำาสั่ง do
โปรแกรมจะทำาเลยทันที (do แปลว่าทำานี่นา) ซึ่งก็
่
คือแสดงผลค่าตัวแปร i คือ แสดงเลข 5 ออกมา
และขึ้นบรรทัดใหม่ แล้วเมื่อเจอคำาสั่ง $i-- จำากันได้
ไหมเพิ่งผ่านไปในบทความที่แล้ว มีความหมายว่า
ลบค่า $i ไป 1 ดังนั้นตอนนี้ $i=4 แล้ว
จากนันโปรแกรมจะเจอคำาสั่ง while ซึ่งจะ
้
ทำาการเช็คค่าในตัวแปร i คือ หากตัวแปร i มีคา
่
มากกว่าหรือเท่ากับ 1 โปรแกรมจะวนลูปทำาคำาสั่ง
ในลูป do อีกครั้ง การทำางานก็เหมือนคำาสั่ง while
คำาสังควบคุมแบบวนซำ้า
่
การวนซำ้า เป็นการกำาหนดให้มีการประมวลผล
คำาสังซำ้า ๆ กัน ตังแต่ 1 ครั้งขึนไป ทั้งนีขึ้นอยู่กับ
่
้
้
้
เงื่อนไขในการทำางาน ซึ่งจะช่วยให้การเขียน
โปรแกรมได้ง่าย สะดวก ไม่ตองเขียนข้อความคำาสั่ง
้
เดิมหลายครัง ทำาให้โปรแกรมมีความกระชับ
้
สามารถตรวจสอบความผิดพลาดได้ง่าย
โครงสร้างควบคุมแบบวนซำ้า (repetition
control structure) ประกอบด้วย
•คำาสั่ง for
•คำาสั่ง while
•คำาสั่ง do-while
โดยแต่ละโครงสร้างคำาสัง มีรูปแบบและวิธีการ
่
ใช้งานที่แตกต่างกัน นักเขียนโปรแกรมสามารถ
คำาสัง for
่
คำาสัง for เป็นคำาสังที่สั่งให้ประมวลผลคำา
่
่
สั่ง หรือชุดคำาสัง วนซำ้าได้หลายรอบ โดยต้อง
่
กำาหนดจำานวนรอบให้การวนซำ้าที่แน่นอน
รูปแบบของคำาสั่ง for เป็นดังนี้
for (การกำาหนดค่าเริ่มต้นของตัวนับ; เงื่อนไข
การวนซำ้า; การเปลี่ยนแปลงค่าตัวนับ) คำาสั่ง;
การกำาหนดค่าเริ่มต้นของตัวนับ เงื่อนไขการวน
ซำ้า และ การเปลียนแปลงค่าตัวนับ เป็นนิพจน์ทมี
่
ี่
การทำางานร่วมกันในคำาสั่ง for ดังนี้
การกำาหนดค่าเริ่มต้นของตัวนับ เป็นนิพจน์ที่ใช้
สำาหรับกำาหนดค่าเริ่มต้น ให้กบตัวแปรทีทำาหน้าที่
ั
่
ควบคุมการวนซำ้า และจะประมวลผลเพียงครั้งเดียว
•เงื่อนไขการวนซำ้า เป็นนิพจน์ทใช้สำาหรับประเมินค่า
ี่
คำาสั่ง จะถูกประมวลผลหรือไม่ นั่นคือถ้า เงื่อนไขการ
วนซำ้า มีค่าจริง คำาสั่ง จะถูกประมวลผล และถ้า
เงื่อนไขการวนซำ้า มีค่าเท็จ คำาสั่ง for จะสิ้นสุดลง
•การเปลี่ยนแปลงค่าตัวนับ เป็นนิพจน์ทจะถูก
ี่
ประมวลผลทุกครั้งหลังจาก คำาสั่ง ถูกประมวลผล โดย
การเปลียนแปลงค่าตัวนับ เป็นนิพจน์ใด ๆ ทีสามารถ
่
่
ประเมินค่าได้ เช่น นิพจน์เพิ่มค่า นิพจน์ลดค่า และ
นิพจน์กำาหนดค่า เป็นต้น
ตัวอย่างที่ 4.2.1 โปรแกรมแสดงตัวเลข
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

//Program: Counting.c
#include <stdio.h>
void main() {
int x, y;
printf("Count increasen");
for(x=1; x<=5; x++)
printf("%dn", x);
printf("Count decreasen");
for(y=5; y<=1; y--)
printf("%dn", y);
getch();
}
ผลลัพธ์ คือ
Count increase
1
2
3
4
5
Count decrease
5
4
3
2
1
คำำสั่ง 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
1
v
v
3
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 อำจเป็นคำำ
่
สั่งอย่ำงง่ำยหรือคำำสังเชิงประกอบ
่
ย่า งที่ 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("PowertValuen");
11  do
12    printf("%dt%.2fn", 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 บน
แป้นพิมพ์
นิพ จน์  (expression)
            นิพจน์ คือ การนำาค่าคงที่ ตัวแปร 
และตัวดำาเนินการมาเขียนประกอบกัน  เพื่อให้
ตัวแปรภาษาสามารถเข้าใจและคำานวณหา
ผลลัพธ์ได้ตามที่เราต้องการ
ตัว อย่า งที่  2.6  ถ้าต้องการหาค่าจากสูตร  a2+2ab+b2  เมื่อ 
a=2, b=3  เราจะต้องเขียนสูตรดังกล่าวให้เป็นนิพจน์ดังนี้
• a*a+2 *a *b+b*b  ……………………..……………………………  แบบที่  1
หรือ       pow(a,2)  +  2 *a *b  +  pow(b,2)  
………………………………  แบบที่  2
•  สำาหรับฟังก์ชัน  pow(x,y)  เป็นฟังก์ชันที่ใช้หาค่าตัวเลขที่อยู่ใน
รูปเลขยกกำาลัง
โดยที่     x     เป็นเลขฐานซึ่งจะต้องมีค่าเป็นเลขจำานวนเต็มบวก
หรือศูนย์ก็ได้
              y     เป็นเลขยกกำาลังซึ่งอาจจะเป็นเลขจำานวนเต็ม
บวกหรือลบก็ได้
ดังนั้น  pow(x,y) หมายถึง  xy ส่วน pow(a,2)   หมายถึง a2  และ
pow(b,2)  หมายถึง  b2
• ข้อ ควรระวัง   ก่อนที่เราจะใช้ฟังก์ชัน  pow(x,y)  นีจะต้องใช้
้
คำาสั่ง  #include<math.h>  อยู่บนส่วนต้นของโปรแกรม  เพือนำา
่
แฟ้ม  math.h  เข้ามาไว้ในโปรแกรมภาษา  C  ก่อน  มิฉะนั้น
ตัว อย่า งที่  2.7 แสดงนิพจน์ตัวอย่าง  ซึ่งมีอยูหลาย
่
ชนิดตังต่อไปนี้
• 1)  a+b*10+(3*c)*8        /* นิพจน์ทางคณิตศาสตร์*/
2)  (m>=n)&&(x<y)     /* นิพจน์เชิงตรรกะและนิพจน์
เชิงเปรียบเทียบความสัมพันธ์*/
3)  !(k==25)              /* นิพจน์เชิงตรรกะและนิพจน์เชิง
เปรียบเทียบความสัมพันธ์*/
4)  !(p)                      /* นิพจน์เชิงตรรกะ*/
5)  (i>10)||(j<5)        /* นิพจน์เชิงตรรกะและนิพจน์เชิง
เปรียบเทียบ*/
6)  if  (y==z)          /* นิพจน์เงื่อนไข*/
•             ตัว อย่า งที่  2.8 แสดงการหาค่าผลลัพธ์
จากนิพจน์ในภาษา  C 
• กำาหนดให้    int   x=5, y=8, z=9;

การเขียนคำสั่งแบบวนซ้ำ

  • 1.
  • 2.
    โปรแกรมแบบวนซำ้า (คำาสังประเภท For, while, do ่ while) คำาสั่งควบคุมการทำางาน แบบ for คำาสัง For เป็นคำาสั่งควบคุมการทำางานและ ่ กำาหนดการทำางานวนรอบคล้าย ๆ กับคำาสั่ง while จะมีรูปแบบแตกต่างกับคำาสังควบคุมการทำางานอืน ่ ๆ คำาสัง for เป็นเป็นคำาสั่งสั่งควบคุมการทำางาน ่ และกำาหนดการทำางานวนรอบ โดยตั้งค่าก่อน แล้ว จึงทำาการพิจารณาเงื่อนไข ถ้าเงื่อนไขเป็นจริง ก็ จะทำาคำาสังและวนรอบต่อไป ่
  • 3.
    รูปแบบการเขียน คำาสั่ง for for(ค่าเริ่มต้น;เงื่อนไข;การเพิ่มหรือลดค่า) ตัวอย่างการโปรแกรม ผลลัพธ์ของโปรแกรม
  • 4.
    การเขียนโดยใช้คำาสัง for จะเห็นได้ว่ามีความ ่ กระชับเขียนได้สั้นกว่าคำาสั่งwhile เพราะสามารถ กำาหนดได้ในครั้งเดียว แต่การทำางานก็จะได้ผล เหมือนกันกับคำาสั่งwhile ลักษณะการทำางานก็คอโปรแกรมจะทำาการ ื เช็คในส่วนของเงื่อนไข หากเงื่อนไขเป็นจริงก็จะ เพิ่มค่าของตัวแปรไป 1 และทำาคำาสังในลูป จาก ่ นั้นก็ทำาการตรวจสอบเงื่อนไขอีก หากเงื่อนไขเป็น จริงก็จะทำางานซำ้า ๆ แบบนีไปเรื่อย ๆ จนกว่า ้ เงื่อนไขเป็นเท็จ การทำางานของโปรแกรมก็จะ หลุดจากลูป และจบการทำางาน
  • 5.
    คำาสังควบคุมการทำางาน แบบ While ่ คำาสังWhile เป็นคำาสั่งสำาหรับใช้ควบคุม ่ การทำางานแบบมีเงือนไข อีกแบบหนึ่ง ซึ่งแตกต่าง ออกไปจากการใช้งานคำาสั่ง if และ elseif ก่อน หน้านี้ ซึ่งคำาสั่ง While เป็นคำาสั่งที่จำาเป็นใน การนำาไปใช้เขียนโปรแกรม ลองเข้ามาดูคะ ว่ามี ่ รูปแบบการเขียนและวิธีเขียนอย่างไร คำาสัง While เป็นคำาสั่งสำาหรับใช้ควบคุมการ ่ ทำางานแบบมีเงือนไข ในการกำาหนดคำาสั่งให้มี การทำางานแบบวนรอบ โดยพิจารณาเงื่อนไขก่อน หากค่าที่ได้เป็นจริงตามเงื่อนไข จึงจะประมวลผล
  • 6.
  • 7.
    การเขียนโดยใช้คำาสั่ง for จะเห็นได้ว่ามี ความกระชับเขียนได้สั้นกว่าคำาสั่งwhile เพราะ สามารถกำาหนดได้ในครั้งเดียว แต่การทำางานก็จะ ได้ผลเหมือนกันกับคำาสั่ง while ลักษณะการทำางานก็คือโปรแกรมจะทำาการ เช็คในส่วนของเงื่อนไข หากเงื่อนไขเป็นจริงก็จะ เพิ่มค่าของตัวแปรไป 1 และทำาคำาสังในลูป จาก ่ นั้นก็ทำาการตรวจสอบเงื่อนไขอีก หากเงื่อนไขเป็น จริงก็จะทำางานซำ้า ๆ แบบนีไปเรื่อย ๆ จนกว่า ้ เงื่อนไขเป็นเท็จ การทำางานของโปรแกรมก็จะ หลุดจากลูป และจบการทำางาน
  • 8.
    คำาสังควบคุมการทำางาน แบบ ่ Do...While คำาสังนีมีลักษณะการทำางานคล้ายกับคำาสัง ่ ้ ่ Whileแต่มีส่วนแตกต่างอยู่เล็ก ๆ น้อย ๆ ที่มี Do เพิ่มเข้ามานี่ดิ แล้วไอ้ Do นี่จะทำาให้แตกต่างจาก While เดี่ยว ๆ คำาสัง do while เป็นคำาสั่งที่กำาหนดให้มีการ ่ ทำางานวนรอบ คล้าย ๆ คำาสั่ง While แต่แตกต่าง กันที่คำาสั่ง do while จะให้ทำาคำาสั่งในลูป do ก่อน แล้วค่อยพิจารณาเงื่อนไขใน while ถ้าค่าเงื่อนไข ใน while เป็นจริง จึงจะวนรอบทำาคำาสั่งในลูป do ต่อไป
  • 9.
  • 10.
    จากตัวอย่างการโปรแกรม เราได้ทำาการ เขียนโปรแกรม โดยสร้างตัวแปร$i แล้วให้มีคา ่ เท่ากับ 5 หลังจากนัน ตรงนีละที่จะทำางานต่างจาก ้ ้ while เราะจะเจอกับคำาสั่ง do เมื่อเจอคำาสั่ง do โปรแกรมจะทำาเลยทันที (do แปลว่าทำานี่นา) ซึ่งก็ ่ คือแสดงผลค่าตัวแปร i คือ แสดงเลข 5 ออกมา และขึ้นบรรทัดใหม่ แล้วเมื่อเจอคำาสั่ง $i-- จำากันได้ ไหมเพิ่งผ่านไปในบทความที่แล้ว มีความหมายว่า ลบค่า $i ไป 1 ดังนั้นตอนนี้ $i=4 แล้ว จากนันโปรแกรมจะเจอคำาสั่ง while ซึ่งจะ ้ ทำาการเช็คค่าในตัวแปร i คือ หากตัวแปร i มีคา ่ มากกว่าหรือเท่ากับ 1 โปรแกรมจะวนลูปทำาคำาสั่ง ในลูป do อีกครั้ง การทำางานก็เหมือนคำาสั่ง while
  • 11.
    คำาสังควบคุมแบบวนซำ้า ่ การวนซำ้า เป็นการกำาหนดให้มีการประมวลผล คำาสังซำ้า ๆกัน ตังแต่ 1 ครั้งขึนไป ทั้งนีขึ้นอยู่กับ ่ ้ ้ ้ เงื่อนไขในการทำางาน ซึ่งจะช่วยให้การเขียน โปรแกรมได้ง่าย สะดวก ไม่ตองเขียนข้อความคำาสั่ง ้ เดิมหลายครัง ทำาให้โปรแกรมมีความกระชับ ้ สามารถตรวจสอบความผิดพลาดได้ง่าย โครงสร้างควบคุมแบบวนซำ้า (repetition control structure) ประกอบด้วย •คำาสั่ง for •คำาสั่ง while •คำาสั่ง do-while โดยแต่ละโครงสร้างคำาสัง มีรูปแบบและวิธีการ ่ ใช้งานที่แตกต่างกัน นักเขียนโปรแกรมสามารถ
  • 12.
    คำาสัง for ่ คำาสัง forเป็นคำาสังที่สั่งให้ประมวลผลคำา ่ ่ สั่ง หรือชุดคำาสัง วนซำ้าได้หลายรอบ โดยต้อง ่ กำาหนดจำานวนรอบให้การวนซำ้าที่แน่นอน รูปแบบของคำาสั่ง for เป็นดังนี้ for (การกำาหนดค่าเริ่มต้นของตัวนับ; เงื่อนไข การวนซำ้า; การเปลี่ยนแปลงค่าตัวนับ) คำาสั่ง;
  • 14.
    การกำาหนดค่าเริ่มต้นของตัวนับ เงื่อนไขการวน ซำ้า และการเปลียนแปลงค่าตัวนับ เป็นนิพจน์ทมี ่ ี่ การทำางานร่วมกันในคำาสั่ง for ดังนี้ การกำาหนดค่าเริ่มต้นของตัวนับ เป็นนิพจน์ที่ใช้ สำาหรับกำาหนดค่าเริ่มต้น ให้กบตัวแปรทีทำาหน้าที่ ั ่ ควบคุมการวนซำ้า และจะประมวลผลเพียงครั้งเดียว •เงื่อนไขการวนซำ้า เป็นนิพจน์ทใช้สำาหรับประเมินค่า ี่ คำาสั่ง จะถูกประมวลผลหรือไม่ นั่นคือถ้า เงื่อนไขการ วนซำ้า มีค่าจริง คำาสั่ง จะถูกประมวลผล และถ้า เงื่อนไขการวนซำ้า มีค่าเท็จ คำาสั่ง for จะสิ้นสุดลง •การเปลี่ยนแปลงค่าตัวนับ เป็นนิพจน์ทจะถูก ี่ ประมวลผลทุกครั้งหลังจาก คำาสั่ง ถูกประมวลผล โดย การเปลียนแปลงค่าตัวนับ เป็นนิพจน์ใด ๆ ทีสามารถ ่ ่ ประเมินค่าได้ เช่น นิพจน์เพิ่มค่า นิพจน์ลดค่า และ นิพจน์กำาหนดค่า เป็นต้น
  • 15.
    ตัวอย่างที่ 4.2.1 โปรแกรมแสดงตัวเลข 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //Program:Counting.c #include <stdio.h> void main() { int x, y; printf("Count increasen"); for(x=1; x<=5; x++) printf("%dn", x); printf("Count decreasen"); for(y=5; y<=1; y--) printf("%dn", y); getch(); }
  • 16.
  • 17.
    คำำสั่ง while รูปแบบของคำำสั่ง whileเป็นดังนี้ while (เงื่อนไขกำรวนซำ้ำ) คำำสัง; ่
  • 18.
    เงื่อนไขกำรวนซำ้ำ เป็นนิพจน์ใดๆ ที่สำมำรถประเมินค่ำได้ โดยจะต้องเขียนไว้ระหว่ำงเครื่องหมำย( และ ) เสมอเช่นเดียวกับ คำำสั่ง if และคำำสั่ง if – else เมื่อเริ่มต้นประมวลผลคำำสั่ง while เงื่อนไขกำรวนซำ้ำ จะถูก ตรวจสอบค่ำ ถ้ำพบว่ำ เงื่อนไขกำรวนซำ้ำ มีค่ำเป็นจริง คำำสั่ง ภำย ใต้คำำสั่ง while จะถูกตรวจสอบค่ำเป็นรอบแรก แล้ว เงื่อนไขกำรวน ซำ้ำ จะถูกตรวจสอบค่ำอีกครั้ง หำกพบว่ำ เงื่อนไขกำรวนซำ้ำ ยังมีค่ำ เป็น จริง คำำสั่ง จะถูกตรวจสอบค่ำอีกครั้ง จนกระทั่ง เงื่อนไขกำร วนซำ้ำ มีค่ำเป็น เท็จ คำำสั่ง while จึงจะสิ้นสุดลง กำรตรวจสอบค่ำ เงื่อนไขกำรวนซำ้ำ ของคำำสั่ง while ในครั้ง แรก และพบว่ำมีค่ำเป็น เท็จ คำำสั่ง จะไม่ประมวลผลเลย คำำสั่ง ภำยใต้คำำสั่ง while อำจเป็นคำำสั่งอย่ำงง่ำยหรือคำำสั่งเชิง ประกอบ
  • 19.
    ตัวอย่ำงที่ 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 }
  • 20.
  • 21.
    หมำยเหตุ • หมำยถึง ให้กดปุ่มEnter บนแป้นพิมพ์ • ^z หมำยถึง ให้กดปุ่ม Ctrl - z บนแป้นพิมพ์ • โปรแกรม InOut1.c แสดงกำรใช้คำำสั่งของภำษำซี 2 คำำ สั่ง getchar() และ putchar() เพื่อใช้รับข้อมูลนำำเข้ำและแสดง ผลลัพธ์แทนกำรใช้คำำสั่ง scanf() และ printf() • คำำสั่ง getchar() เป็นคำำสั่งไม่มีอำร์กิวเมนต์ และจะรับ อักขระ 1 ตัวจำกแผงแป้นอักขระแล้ว ส่งกลับค่ำจำำนวนเต็มทีมี ่ ค่ำในตำรำงรหัสแอสกีที่ตรงกับอักขระดังกล่ำว • ฟังก์ชัน putchar() มีอำร์กิวเมนต์ 1 ตัวเป็นชนิด int และ แสดงอักขระในตำรำงรหัสแอสกีทมีค่ำตรงกับจำำนวนเต็มดัง ี่ กล่ำวจอภำพ • สำำหรับ EOF เป็นค่ำคงที่ที่นิยำมอยู่ในแฟ้มส่วนหัวชื่อ stdio.h และใช้เป็นอักขระสำำหรับตรวจสอบกำรสิ้นสุดกำร ป้องกันข้อมูลซึ่งในที่นี้ คือกำรป้องกัน Ctrl - z
  • 22.
    • จำกโปรแกรม InOut1.c ตรำบใดทีอักขระผู้ใช้ป้อน ่ ไม่ใช้อักขระสินสุดกำรป้อนข้อมูลเงื่อนไขกำรวนซำ้ำ ้ iochar != EOF จะยังมีค่ำเป็นจริง และแสดงผลค่ำอักขระ นันออกทำงจอภำพก่อนทีจะวนรับอักขระตัวถัดไป และ ้ ่ ในรอบทีผู้ใช้ป้อน Ctrl - z เงื่อนไขกำรวนซำ้ำ iochar != ่ EOF จะมีค่ำเป็นเท็จ และคำำสั่ง while จะสิ้นสุดกำร ทำำงำน • ในกรณีทผู้ใช้ป้อน Ctrl-z ในครั้งแรก เงื่อนไขกำร ี่ วนซำ้ำ iochar != EOF จะมีค่ำเป็นเท็จและคำำสัง while จะ ่ สิ้นสุดกำรทำำงำนในทันที โดยทีคำำสั่งในบรรทัดที่ 11 ่ และ 12 ไม่ถกประมวลผลเลย ู
  • 23.
    คำำ สั่ง do-while  รูปแบบของคำำสั่งdo-while เป็นดังนี้ • do คำำสัง; ่ while (เงื่อนไขกำรวนซำ้ำ);
  • 24.
    คำำ สัง  จะถูกประมวลผลโดยไม่มีเงื่อนไข ่ ใดๆ ในรอบแรก จำกนันเงื่อ นไขกำรวน ้ ซำ้ำ  จะถูกตรวจสอบค่ำ และคำำสั่ง จะถูกประมวล ผลซำ้ำอีกทุกครั้งที่ เงื่อ นไขกำรวนซำ้ำ  มีค่ำ เป็น จริง  และในครั้งแรกที่ เงื่อ นไขกำรวน ซำ้ำ  มีค่ำเป็น เท็จ  คำำสั่ง do-while จึงจะสิ้นสุด ลง  คำำ สัง  ภำยใต้คำำสั่ง do-while อำจเป็นคำำ ่ สั่งอย่ำงง่ำยหรือคำำสังเชิงประกอบ ่
  • 25.
    ย่า งที่ 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("PowertValuen"); 11  do 12    printf("%dt%.2fn", count, pow(BASE, count)); 11   while (count++ != limit); 13  } 14   15   getch(); 16 }
  • 26.
  • 27.
    นิพ จน์  (expression)            นิพจน์ คือ การนำาค่าคงที่ ตัวแปร  และตัวดำาเนินการมาเขียนประกอบกัน  เพื่อให้ ตัวแปรภาษาสามารถเข้าใจและคำานวณหา ผลลัพธ์ได้ตามที่เราต้องการ
  • 28.
    ตัว อย่า งที่  2.6  ถ้าต้องการหาค่าจากสูตร a2+2ab+b2  เมื่อ  a=2, b=3  เราจะต้องเขียนสูตรดังกล่าวให้เป็นนิพจน์ดังนี้ • a*a+2 *a *b+b*b  ……………………..……………………………  แบบที่  1 หรือ       pow(a,2)  +  2 *a *b  +  pow(b,2)   ………………………………  แบบที่  2 •  สำาหรับฟังก์ชัน  pow(x,y)  เป็นฟังก์ชันที่ใช้หาค่าตัวเลขที่อยู่ใน รูปเลขยกกำาลัง โดยที่     x     เป็นเลขฐานซึ่งจะต้องมีค่าเป็นเลขจำานวนเต็มบวก หรือศูนย์ก็ได้               y     เป็นเลขยกกำาลังซึ่งอาจจะเป็นเลขจำานวนเต็ม บวกหรือลบก็ได้ ดังนั้น  pow(x,y) หมายถึง  xy ส่วน pow(a,2)   หมายถึง a2  และ pow(b,2)  หมายถึง  b2 • ข้อ ควรระวัง   ก่อนที่เราจะใช้ฟังก์ชัน  pow(x,y)  นีจะต้องใช้ ้ คำาสั่ง  #include<math.h>  อยู่บนส่วนต้นของโปรแกรม  เพือนำา ่ แฟ้ม  math.h  เข้ามาไว้ในโปรแกรมภาษา  C  ก่อน  มิฉะนั้น
  • 29.
    ตัว อย่า งที่  2.7แสดงนิพจน์ตัวอย่าง  ซึ่งมีอยูหลาย ่ ชนิดตังต่อไปนี้ • 1)  a+b*10+(3*c)*8        /* นิพจน์ทางคณิตศาสตร์*/ 2)  (m>=n)&&(x<y)     /* นิพจน์เชิงตรรกะและนิพจน์ เชิงเปรียบเทียบความสัมพันธ์*/ 3)  !(k==25)              /* นิพจน์เชิงตรรกะและนิพจน์เชิง เปรียบเทียบความสัมพันธ์*/ 4)  !(p)                      /* นิพจน์เชิงตรรกะ*/ 5)  (i>10)||(j<5)        /* นิพจน์เชิงตรรกะและนิพจน์เชิง เปรียบเทียบ*/ 6)  if  (y==z)          /* นิพจน์เงื่อนไข*/ •             ตัว อย่า งที่  2.8 แสดงการหาค่าผลลัพธ์ จากนิพจน์ในภาษา  C  • กำาหนดให้    int   x=5, y=8, z=9;