|
|
|
|
มีความรู้ความเข้าใจในการใช้คำสั่งควบคุมแบบวนซ้ำ |
|
|
|
|
1. บอกวิธีการใช้คำสั่ง while และนำไปเขียนโปรแกรมได้ |
2. บอกวิธีการใช้คำสั่ง do - while และนำไปเขียนโปรแกรมได้ |
3. บอกวิธีการใช้คำสั่ง for และนำไปเขียนโปรแกรมได้ |
4. บอกวิธีการใช้ คำสั่ง continue คำสั่ง break และนำไปเขียนโปรแกรมได้ |
5. อธิบายการใช้คำสั่งวนซ้ำเชิงซ้อน และนำไปเขียนโปรแกรมได้ |
|
|
|
|
|
|
|
|
|
คำสั่งควบคุมแบบวนซ้ำ ใช้สำหรับกำหนดให้มีการประมวลผลคำสั่งซ้ำ ๆ กัน ตั้งแต่ 1 ครั้งขึ้นไป ขึ้นอยู่กับเงื่อนไขการวนซ้ำ |
|
คำสั่งควบคุมแบบวนซ้ำในภาษาซี มี 3 คำสั่ง คือ คำสั่ง while คำสั่ง do - while และคำสั่ง for |
|
พื้นฐานความรู้ในการศึกษาเรื่องคำสั่งควบคุมแบบวนซ้ำ จำเป็นต้องใช้คำสั่งคำนวณ เพิ่มค่า
ลดค่า สะสมค่า ในหน่วยที่ 4 มากำหนดให้คำสั่งควบคุมแบบวนซ้ำสามารถทำงานได้ อย่างไรก็ตามในเนื้อหาหน่วยที่ 6 นี้ ได้นำคำสั่งในหน่วยที่ผ่านมา ประกอบในการเขียนโปรแกรมด้วย หากนักเรียนต้องการศึกษาเนื้อหาในหน่วยที่ 6 นี้ ให้เข้าใจง่ายยิ่งขึ้น ควรทบทวนเนื้อหาหน่วยที่ 1 - 5 มาก่อน |
|
|
6.1 คำสั่ง while เป็นคำสั่งควบคุมแบบวนซ้ำรูปแบบหนึ่ง ซึ่งมีขั้นตอนการทำงานดังนี้ |
|
แผนผังคำสั่งควบคุมแบบวนซ้ำ - คำสั่ง while |
|
|
|
มีรูปแบบการใช้คำสั่ง ดังนี้ |
|
|
อธิบาย |
|
เงื่อนไขการวนซ้ำ หมายถึง นิพจน์ที่สามารถประเมินค่าได้ เขียนอยู่ในเครื่องหมาย () ให้ค่าเป็นจริงหรือเท็จ |
|
เมื่อเริ่มต้นประมวลผล คำสั่ง while เงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า หากมีค่าเป็นจริง คำสั่งภายใต้คำสั่ง while จะถูกประมวลผล 1 รอบ แล้ววนกลับไปตรวจสอบ เงื่อนไขการวนซ้ำอีก จนกระทั่งเงื่อนไขการวนซ้ำ มีค่าเป็นเท็จ คำสั่ง while จึงสิ้นสุดลง และไปทำคำสั่งถัดไป |
|
หากการตรวจสอบเงื่อนไขการวนซ้ำในครั้งแรก และมีค่าเป็นเท็จ คำสั่งภายใต้คำสั่ง while จะไม่ได้รับการประมวลผลเลย |
|
คำสั่งภายใต้คำสั่ง while อาจเป็นคำสั่งง่าย ๆ หรือ คำสั่งเชิงประกอบ หากมีมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย {} |
|
|
|
|
|
|
ตัวอย่างที่ 1 |
จงเขียนโปรแกรมนับและแสดงเลข 1 ถึง 10 ทางจอภาพ ( ex6-01.c ) |
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้ |
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้ |
|
|
บรรทัด |
รหัสต้นฉบับ (Source Code) |
อธิบายคำสั่ง |
/*1*/ |
#include <stdio.h> |
/* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */ |
/*2*/ |
int main() { |
/* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */ |
/*3*/ |
int i = 1; |
/* ประกาศตัวแปร i เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นเป็น 1 */ |
/*4*/ |
while (i <= 10) { |
/* ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ 10 จริงหรือไม่ ถ้าจริง ให้ทำเริ่มต้น block ของคำสั่ง while บรรทัดที่ 5 ถ้าเท็จ สิ้นสุดการทำซ้ำ ให้ไปทำคำสั่งบรรทัดที่ 8 */ |
/*5*/ |
printf("%d\n" , i); |
/* แสดงข้อความ "%d" โดยแสดงค่า i ใน %d เสร็จแล้วขึ้นบรรทัดใหม่ */ |
/*6*/ |
i++; |
/* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */ |
/*7*/ |
} |
/* สิ้นสุด block ของคำสั่ง while แล้ววนไปทำคำสั่งบรรทัดที่ 4 */ |
/*8*/ |
return 0; |
/* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */ |
/*9*/ |
} |
/* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */ |
|
|
|
ผลการรันโปรแกรม |
|
|
|
|
|
|
|
ตัวอย่างที่ 2 |
จงเขียนโปรแกรมแสดงผลรวมจากเลข 1 ถึง 10 ทางจอภาพ ( ex6-02.c ) |
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้ |
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้ |
|
|
บรรทัด |
รหัสต้นฉบับ (Source Code) |
อธิบายคำสั่ง |
/*1*/ |
#include <stdio.h> |
/* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */ |
/*2*/ |
int main() { |
/* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */ |
/*3*/ |
int i = 1 , sum = 0; |
/* ประกาศตัวแปร i และ sum เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นให้กับ i และ sum เป็น 1 และ 0 ตามลำดับ */ |
/*4*/ |
while (i <= 10) { |
/* ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ 10 จริงหรือไม่ ถ้าจริง ให้ทำเริ่มต้น block ของคำสั่ง while บรรทัดที่ 5 ถ้าเท็จ สิ้นสุดการทำซ้ำ ให้ไปทำคำสั่งบรรทัดที่ 8 */ |
/*5*/ |
sum += i; |
/* คำสั่งคำนวณสะสมค่า เหมือนกับคำสั่ง sum = sum + i; โดย ประมวลผล sum + i ก่อน แล้วนำผลลัพธ์ที่ได้ ไปเก็บไว้ใน sum */ |
/*6*/ |
i++; |
/* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */ |
/*7*/ |
} |
/* สิ้นสุด block ของคำสั่ง while แล้ววนไปทำคำสั่งบรรทัดที่ 4 */ |
/*8*/ |
printf("Sum 1 - 10 : %d\n" ,sum); |
/* แสดงข้อความ "Sum 1 - 10 : %d" โดยแสดงค่า sum ใน %d เสร็จแล้วก็ขึ้นบรรทัดใหม่ */ |
/*9*/ |
return 0; |
/* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */ |
/*10*/ |
} |
/* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */ |
|
|
|
ผลการรันโปรแกรม |
|
|
|
|
|
|
|
ตัวอย่างที่ 3 |
จงเขียนโปรแกรมแสดงผลรวมของจำนวนจาก 1 ถึง N ทางจอภาพ
( ex6-03.c ) |
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้ |
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้ |
|
บรรทัด |
รหัสต้นฉบับ (Source Code) |
อธิบายคำสั่ง |
/*1*/ |
#include <stdio.h> |
/* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */ |
/*2*/ |
int main() { |
/* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */ |
/*3*/ |
int i = 1 , N , sum = 0; |
/* ประกาศตัวแปร i N และ sum เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นให้กับ i และ sum เป็น 1 และ 0 ตามลำดับ */ |
/*4*/ |
printf("Input Last Number : "); |
/* แสดงข้อความ "Input Last Number :" ทางจอภาพ เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */ |
/*5*/ |
scanf("%d" , &N); |
/* รับค่าเลขจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร N เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */ |
/*6*/ |
while (i <= N) { |
/* ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ ค่า N จริงหรือไม่ ถ้าจริง ให้ทำเริ่มต้น block ของคำสั่ง while บรรทัดที่ 7 ถ้าเท็จ สิ้นสุดการทำซ้ำ ให้ไปทำคำสั่งบรรทัดที่ 10 */ |
/*7*/ |
sum += i; |
/* คำสั่งคำนวณสะสมค่า เหมือนกับคำสั่ง sum = sum + i; โดย ประมวลผล sum + i ก่อน แล้วนำผลลัพธ์ที่ได้ ไปเก็บไว้ใน sum */ |
/*8*/ |
i++; |
/* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */ |
/*9*/ |
} |
/* สิ้นสุด block ของคำสั่ง while แล้ววนไปทำคำสั่งบรรทัดที่ 6 */ |
/*10*/ |
printf("Sum 1 - %d : %d\n" , N , sum); |
/* แสดงข้อความ "Sum 1 - %d : %d" โดยแสดงค่า N ใน %d ตัวแรก และ แสดงค่า sum ใน %d ตัวที่ 2 เสร็จแล้วก็ขึ้นบรรทัดใหม่ */ |
/*11*/ |
return 0; |
/* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */ |
/*12*/ |
} |
/* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */ |
|
|
|
ตัวอย่างผลการรันโปรแกรม |
|
|
|
|
|
|
|
ตัวอย่างที่ 4 |
จงเขียนโปรแกรมรับค่าข้อมูลตัวเลข จำนวน N ค่า แล้วแสดงผลรวมตัวเลขชุดนั้น ทางจอภาพ ( ex6-04.c ) |
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้ |
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้ |
|
|
บรรทัด |
รหัสต้นฉบับ (Source Code) |
อธิบายคำสั่ง |
/*1*/ |
#include <stdio.h> |
/* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */ |
/*2*/ |
int main() { |
/* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */ |
/*3*/ |
int i = 1 , N , sum = 0 , num; |
/* ประกาศตัวแปร i N sum และ num เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นให้กับ i และ sum เป็น 1 และ 0 ตามลำดับ */ |
/*4*/ |
printf("Input N : "); |
/* แสดงข้อความ "Input N : " ทางจอภาพ เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */ |
/*5*/ |
scanf("%d" , &N); |
/* รับค่าเลขจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร N เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */ |
/*6*/ |
while (i <= N) { |
/* ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ ค่า N จริงหรือไม่ ถ้าจริง ให้ทำเริ่มต้น block ของคำสั่ง while บรรทัดที่ 7 ถ้าเท็จ สิ้นสุดการทำซ้ำ ให้ไปทำคำสั่งบรรทัดที่ 12 */ |
/*7*/ |
printf("Input Number %d : " , i); |
/* แสดงข้อความ "Input Number %d : " โดยแสดงค่า i ใน %d เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */ |
/*8*/ |
scanf("%d" , &num); |
/* รับค่าเลขจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร num เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */ |
/*9*/ |
sum += num; |
/* คำสั่งคำนวณสะสมค่า เหมือนกับคำสั่ง sum = sum + num; โดย ประมวลผล sum + num ก่อน แล้วนำผลลัพธ์ที่ได้ ไปเก็บไว้ใน sum */ |
/*10*/ |
i++; |
/* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */ |
/*11*/ |
} |
/* สิ้นสุด block ของคำสั่ง while แล้ววนไปทำคำสั่งบรรทัดที่ 6 */ |
/*12*/ |
printf("Summary %d Number = %d" , N , sum); |
/* แสดงข้อความ "Summary %d Number = %d" โดยแสดงค่า N ใน %d ตัวแรก และ แสดงค่า sum ใน %d ตัวที่ 2 */ |
/*13*/ |
return 0; |
/* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */ |
/*14*/ |
} |
/* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */ |
|
|
|
ตัวอย่างผลการรันโปรแกรม |
|
|
|
|
|
|
|
ตัวอย่างที่ 5 |
จงเขียนโปรแกรมรับค่าข้อมูลตัวเลข จำนวน N ค่า แล้วแสดงค่าสูงสุดจากตัวเลขชุดนั้น ทางจอภาพ ( ex6-05.c ) |
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้ |
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้ |
|
|
บรรทัด |
รหัสต้นฉบับ (Source Code) |
อธิบายคำสั่ง |
/*1*/ |
#include <stdio.h> |
/* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */ |
/*2*/ |
int main() { |
/* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */ |
/*3*/ |
int i = 1 , N , max = -9999 , num; |
/* ประกาศตัวแปร i N max และ num เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นให้กับ i และ max เป็น 1 และ -9999 ตามลำดับ */ |
/*4*/ |
printf("Input N : "); |
/* แสดงข้อความ "Input N : " ทางจอภาพ เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */ |
/*5*/ |
scanf("%d" , &N); |
/* รับค่าเลขจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร N เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */ |
/*6*/ |
while (i <= N) { |
/* ตรวจสอบ ค่า i น้อยกว่าหรือเท่ากับ ค่า N จริงหรือไม่ ถ้าจริง ให้ทำเริ่มต้น block ของคำสั่ง while บรรทัดที่ 7 ถ้าเท็จ สิ้นสุดการทำซ้ำ ให้ไปทำคำสั่งบรรทัดที่ 13 */ |
/*7*/ |
printf("Input Number %d : " , i); |
/* แสดงข้อความ "Input Number %d : " โดยแสดงค่า i ใน %d เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */ |
/*8*/ |
scanf("%d" , &num); |
/* รับค่าเลขจำนวนเต็ม จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร num เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */ |
/*9*/ |
if (num > max) |
/* คำสั่งควบคุมแบบทางเลือก ตรวจสอบเงื่อนไขทางเลือกว่า ค่า num มากกว่า ค่า max จริงหรือไม่ ถ้าจริง ให้เริ่มทำคำสั่งบรรทัดที่ 10 ถ้าเท็จ ให้ไปเริ่มทำคำสั่งบรรทัดที่ 11 (มีคำสั่งย่อยในคำสั่ง แบบทางเลือก เพียงคำสั่งเดียว จึงไม่ต้องใส่เครื่องหมาย { } ก็ได้) */ |
/*10*/ |
max = num; |
/* กำหนดค่า num ให้กับตัวแปร max แสดงว่า ข้อมูลที่รับเข้ามาใหม่ มีค่าสูงกว่า ค่า max เดิม */ |
/*11*/ |
i++; |
/* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */ |
/*12*/ |
} |
/* สิ้นสุด block ของคำสั่ง while แล้ววนไปทำคำสั่งบรรทัดที่ 6 */ |
/*13*/ |
printf("Max : %d" , max); |
/* แสดงข้อความ "Max : %d" โดยแสดงค่า max ใน %d */ |
/*14*/ |
return 0; |
/* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */ |
/*15*/ |
} |
/* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */ |
|
|
|
ตัวอย่างผลการรันโปรแกรม |
|
|
|
|
|
|
|
|
|
คำสั่ง do - while เป็นคำสั่งควบคุมแบบวนซ้ำรูปแบบหนึ่ง |
|
แผนผังคำสั่งควบคุมแบบวนซ้ำ - คำสั่ง do - while |
|
|
|
มีรูปแบบการใช้คำสั่ง ดังนี้ |
|
|
อธิบาย |
|
เงื่อนไขการวนซ้ำ หมายถึง นิพจน์ที่สามารถประเมินค่าได้ เขียนอยู่ในเครื่องหมาย ()
ให้ค่าเป็นจริงหรือเท็จ |
|
คำสั่่ง do - while จะเริ่มต้นประมวลผลคำสั่งที่ต้องการทำซ้ำก่อน แล้วจึง ตรวจสอบ เงื่อนไขการวนซ้ำ ขณะที่เงื่อนไขการวนซ้ำมีค่าเป็นจริง จะวนกลับไปทำคำสั่งที่ต้องการทำซ้ำอีก จนกระทั่ง
การตรวจสอบค่า เงื่อนไขการวนซ้ำ มีค่าเป็นเท็จ ก็จะออกจากการวนซ้ำ (ออกจากคำสั่ง do - while) และไปทำคำสั่งถัดไป |
|
คำสั่งที่ต้องการทำซ้ำ ในคำสั่ง do - while จะถูกทำอย่างน้อย 1 รอบเสมอ แม้เงื่อนไขการวนซ้ำจะเป็นเท็จก็ตาม |
|
คำสั่งภายใต้คำสั่ง do - while อาจเป็นคำสั่งง่าย ๆ หรือ คำสั่งเชิงประกอบ
หากมีมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย {} |
|
|
|
|
|
|
ตัวอย่างที่ 6 |
จงเขียนโปรแกรมแสดงตัวเลขจาด 10 ถึง 1 ทางจอภาพ ( ex6-06.c ) |
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้ |
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้ |
|
|
บรรทัด |
รหัสต้นฉบับ (Source Code) |
อธิบายคำสั่ง |
/*1*/ |
#include <stdio.h> |
/* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */ |
/*2*/ |
int main() { |
/* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */ |
/*3*/ |
int i = 10; |
/* ประกาศตัวแปร i เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นเป็น 10 */ |
/*4*/ |
do { |
/* ขอบเขตให้เริ่มทำ คำสั่งที่ต้องการทำซ้ำ (มีคำสั่งย่อยมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย { }) */ |
/*5*/ |
printf("%d\n" , i); |
/* แสดงข้อความ "%d" โดยแสดงค่า i ใน %d เสร็จแล้วขึ้นบรรทัดใหม่ */ |
/*6*/ |
i--; |
/* ลดค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i - 1 หรือ i -= 1) */ |
/*7*/ |
} while (i >= 1); |
/* ตรวจสอบว่า ค่า i มากกว่าหรือเท่ากับ 1 จริงหรือไม่ ถ้าจริง วนกลับไปทำคำสั่งบรรทัดที่ 4 แล้วเริ่มทำ คำสั่งที่ต้องการทำซ้ำอีกครั้ง ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง do - while และไปทำคำสั่งบรรทัดที่ 8 */ |
/*8*/ |
return 0; |
/* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */ |
/*9*/ |
} |
/* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */ |
|
|
|
ผลการรันโปรแกรม |
|
|
|
|
|
|
|
ตัวอย่างที่ 7 |
จงเขียนโปรแกรมแสดงเฉพาะเลขคู่ จาก 1 ถึง 20 ทางจอภาพ ( ex6-07.c ) |
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้ |
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้ |
|
|
บรรทัด |
รหัสต้นฉบับ (Source Code) |
อธิบายคำสั่ง |
/*1*/ |
#include <stdio.h> |
/* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */ |
/*2*/ |
int main() { |
/* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */ |
/*3*/ |
int i = 1; |
/* ประกาศตัวแปร i เป็นชนิดจำนวนเต็ม พร้อมกำหนดค่าเริ่มต้นเป็น 1 */ |
/*4*/ |
do { |
/* ขอบเขตให้เริ่มทำ คำสั่งที่ต้องการทำซ้ำ (มีคำสั่งย่อยมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย { }) */ |
/*5*/ |
if (i % 2 == 0) |
/* คำสั่งควบคุมแบบทางเลือก ตรวจสอบเงื่อนไขทางเลือกว่า ค่า i % 2 เท่ากับ 0 จริงหรือไม่ ถ้าจริง ให้เริ่มทำคำสั่งบรรทัดที่ 6 ถ้าเท็จ ให้เริ่มทำคำสั่งบรรทัดที่ 7 (มีคำสั่งย่อยในคำสั่ง แบบทางเลือก เพียงคำสั่งเดียว จึงไม่ต้องใส่เครื่องหมาย { } ก็ได้) */ |
/*6*/ |
printf("%d\n" , i); |
/* แสดงข้อความ "%d" โดยแสดงค่า i ใน %d เสร็จแล้วขึ้นบรรทัดใหม่ */ |
/*7*/ |
i++; |
/* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */ |
/*8*/ |
} while (i <= 20); |
/* ตรวจสอบว่า ค่า i น้อยกว่าหรือเท่ากับ 20 จริงหรือไม่ ถ้าจริง วนกลับไปทำคำสั่งบรรทัดที่ 4 แล้วเริ่มทำ คำสั่งที่ต้องการทำซ้ำอีกครั้ง ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง do - while และไปทำคำสั่งบรรทัดที่ 9 */ |
/*9*/ |
return 0; |
/* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */ |
/*10*/ |
} |
/* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */ |
|
|
|
ผลการรันโปรแกรม |
|
|
|
|
|
|
|
ตัวอย่างที่ 8 |
จงเขียนโปรแกรมแสดงตัวเลขตามช่วงที่กำหนด ทางจอภาพ ( ex6-08.c ) |
|
|
จากโจทย์ เขียนผังงาน แสดงการแก้ปัญหา ได้ดังนี้ |
|
|
|
|
|
จากผังงาน เขียนโปรแกรมได้ดังนี้ |
|
|
บรรทัด |
รหัสต้นฉบับ (Source Code) |
อธิบายคำสั่ง |
/*1*/ |
#include <stdio.h> |
/* เป็นคำสั่งของตัวประมวลผลก่อนซี จะมีผลให้แฟ้ม stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวกับการรับและแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรมนี้ */ |
/*2*/ |
int main() { |
/* ประกาศ main เป็นฟังก์ชันหลัก ชนิดจำนวนเต็ม และเริ่มต้น block ของฟังก์ชัน main (เริ่มต้นโปรแกรม) */ |
/*3*/ |
int i , N; |
/* ประกาศตัวแปร i และ N เป็นชนิดจำนวนเต็ม */ |
/*4*/ |
printf("Input 2 Number (Start and Last Number) : "); |
/* แสดงข้อความ "Input 2 Number (Start and Last Number) :" ทางจอภาพ เพื่อแจ้งให้ผู้ใช้โปรแกรมทราบว่า ต้องป้อนข้อมูลอะไร */ |
/*5*/ |
scanf("%d %d", &i , &N); |
/* รับค่าเลขจำนวนเต็ม 2 จำนวน จากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปร i และ N เมื่อป้อนข้อมูลเสร็จแล้ว ต้องกดแป้น Enter เพื่อยืนยันข้อมูลและทำคำสั่งถัดไป */ |
/*6*/ |
do { |
/* ขอบเขตให้เริ่มทำ คำสั่งที่ต้องการทำซ้ำ (มีคำสั่งย่อยมากกว่า 1 คำสั่ง ต้องเขียนคำสั่งภายใต้เครื่องหมาย { }) */ |
/*7*/ |
printf("%d\n" , i); |
/* แสดงข้อความ "%d" โดยแสดงค่า i ใน %d เสร็จแล้วขึ้นบรรทัดใหม่ */ |
/*8*/ |
i++; |
/* เพิ่มค่าตัวนับ i ครั้งละ 1 (ความหมายเดียวกับคำสั่ง i = i + 1 หรือ i += 1) */ |
/*9*/ |
} while (i <= N); |
/* ตรวจสอบว่า ค่า i น้อยกว่าหรือเท่ากับ ค่า N จริงหรือไม่ ถ้าจริง วนกลับไปทำคำสั่งบรรทัดที่ 6 แล้วเริ่มทำ คำสั่งที่ต้องการทำซ้ำอีกครั้ง ถ้าเท็จ สิ้นสุดการวนซ้ำด้วยคำสั่ง do - while และไปทำคำสั่งบรรทัดที่ 10 */ |
/*10*/ |
return 0; |
/* คืนค่า 0 ให้ฟังก์ชัน main โปรแกรมทำงานถูกต้องสมบูรณ์ */ |
/*11*/ |
} |
/* สิ้นสุด block ของฟังก์ชัน main (สิ้นสุดโปรแกรม) */ |
|
|
|
ตัวอย่างผลการรันโปรแกรม |
|
|
|
|
|
|