76
ใใใใใใใใใใใใ 4 ใใใใใใ ใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใ (ใใใใใใใใใใใใใใใใใใ4) ใใใใใใใ ใใใใใใใใใใใใใใใใใใใใใใใใ ใ 40214 ใใใใใใใใใใใ 4 จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจ ( จจจจจจจจจจ main() ) จจจจจ จจจ จจจจจจจจจจจ จจจจจจจจ จจจจจจจจจจจจจจจจ n จจจจจจจจ จจจจจจจจจจจจจจจจจจจจ n+1 จจจจ จจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจ จจจจจจจจ จจจจจจจจจจจจจจจจจ จจจจจจจจจ (sequential control structure) จจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจ จจจจจจจจจ จจจจจจจจจจจจจจจจจ (selection control structure) จจจจจจจจจจจจจจจจจจจ จจจจ if , if else , switch จจจ จจจจจจจจจจจจจจจจจจจจจจจจ (repetition control structure) จจจจจจจจจจจจจจจ จจจจ for , while , do while ใใใใใใใใใใใใใใใใใใใใใใใใใใ (selection control structure) จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจ จจจ if , if else, switch จจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจ จจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจ(relational operator) จจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ(logical operator) จจจจจจจจจจจจจจจจจจ (จจจจจจจจจจจจจจจจ จจจจ 2 จจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ)

ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

Embed Size (px)

Citation preview

Page 1: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ใบความรูท่ี้ 4เรื่อง คำาสัง่ควบคมุการทำางานของโปรแกรม

(ประกอบแผนการสอนท่ี4)รายวชิา การโปรแกรมและการประยุกต์ ง 40214

ชว่งชัน้ท่ี 4

จากการศึกษาการทำางานของโปรแกรมในบทเรยีนท่ีผ่านมา จะพบวา่โปรแกรมมกีารทำางานตามลำาดับคำาสัง่ที่เรยีงกันมา ( ในฟงัก์ชนั main() ) จนถึง คำาสัง่สดุท้าย กล่าวคือ คำาสัง่ลำาดับที่ n จะทำางานก่อนคำาสัง่ลำาดับที่ n+1 เสมอ โปรแกรมท่ีมเีสน้ทางของการประมวลผลแบบนี้ เรยีกวา่ มีโครงสรา้งควบคมุแบบลำาดับ (sequential control structure) ภาษาซียงัมโีครงสรา้งควบคมุแบบอ่ืนอีก คือ โครงสรา้งควบคมุแบบทางเลือก (selection control structure) ซึ่งมคีำาสัง่ท่ีใช ้เชน่ if , if else , switch กับ โครงสรา้งควบคมุแบบวนซำ้า (repetition control structure) มคีำาสัง่ท่ีใช ้เชน่ for , while , do while

โครงสรา้งควบคมุแบบทางเลือก (selection control structure)

คำาสัง่ควบคมุการทำางานของโปรแกรม กลุ่มท่ีมกีารทดสอบเง่ือนไขก่อนการตัดสนิใจเพื่อทำางานต่อไปตามคำาสัง่ท่ีกำาหนดไว้ ซึ่งมหีลายคำาสัง่ คือ if , if else, switch คำาสัง่เหล่านี้จะมลัีกษณะคล้ายกัน คือ ต้องมกีารทดสอบเง่ือนไขเพื่อเลือกเลือกคำาสัง่ท่ีจะทำางานต่อไป เง่ือนไขท่ีใชใ้นการเลือกเสน้ทางการทำางานของโครงสรา้งแบบทางเลือก ใชก้ารเปรยีบเทียบ ซึ่งทำาได้โดยใชตั้วดำาเนินการเปรยีบเทียบหรอืตัวดำาเนินการสมัพนัธ์(relational operator) และบางครัง้ก็มกีารใชตั้วดำาเนินการตรรกะ(logical operator) ดำาเนินการรว่มด้วย (โดยตัวดำาเนินการทัง้ 2 ชนิด ได้กล่าวมาแล้วในบทเรยีนที่ผ่านมา) ทำาการเปรยีบเทียบนิพจน์วา่ได้ผลลัพธเ์ป็นจรงิหรอืเท็จ ในภาษาซถ้ีาเป็นผลลัพธเ์ป็นเท็จ(false) จะรายงานมาเป็น 0 ถ้าเป็นจรงิจะเป็น 1 (ปกติจะถือวา่ตัวเลขที่ไมใ่ช ่0 จะมคี่าเป็นจรงิ)

Page 2: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.1 โปรแกรม example4_1.c ใชเ้ป็นโปรแกรมตัวอยา่งแสดงผลลัพธจ์ากเง่ือนไขต่าง ๆ ท่ีได้จากการใชตั้วดำาเนินการเปรยีบเทียบและตัวดำาเนินการตรรกะ /* example4_1.c */#include <stdio.h>main(){ int x = 0,y= 5 , z = 10,num; char ch1 = 't'; printf("\n\tThe Value of !x is %d ",!x); printf("\n\tThe Value of !y is %d ",!y); printf("\n\tThe Value of (x == y-5) is %d ",(x==y-5)); printf("\n\tThe Value of ( 2 * y + 3 <= z ) is %d ", 2 * y +3 <= z); printf("\n\tThe Value of ( 7 * z %% 8 >= y ) is %d ",7 * z % 8 >= y ); printf("\n\tThe Value of ( 7 * z %% 8 == y ) is %d ",7 * z % 8 == y ); /* ใช ้%% ซอ้นกันใน printf() % อันแรกใชเ้พื่อแสดง % วา่ไมใ่ช ่escape character */ printf("\n\tThe Value of ( 6 > 5 && 7 <= 8 ) is %d ",6 > 5 && 7 <= 8 ); printf("\n\tThe Value of !( 6 > 5 && 7 <= 8 ) is %d ",!(6 > 5 && 7 <= 8) ); printf("\n\tThe Value of ( 6 <= 5 || ch1 != 't' ) is %d ",6 <= 5 || ch1 != 't' ); getch();}เมื่อโปรแกรมนี้ทำางานจะได้ ผลลัพธ ์ดังรูป

Page 3: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

เง่ือนไข-

เท็จ

ออกจากคำาสัง่ if

คำาสัง่ต่าง ๆ

จรงิ

คำาสัง่ if คำาสัง่นี้เป็นคำาสัง่ท่ีมกีารทดสอบเง่ือนไขก่อนท่ีจะทำางานตามคำาสัง่ที่

กำาหนด คำาสัง่นี้อาจเขยีนผังงานได้ดังนี้

รูปแบบของคำาสัง่ if เป็น ดังนี้ if (expression) statement ; หรอื

if (expression) statement; หรอื

if (expression){ statement 1;

... statement n;}

expression ในคำาสัง่ if เป็นเง่ือนไขที่มคี่าได้เพยีง จรงิ หรอื เท็จ เท่านัน้ ถ้ามเีป็นจรงิจะทำาตามคำาสัง่ใน if จากนัน้ออกไปทำาตามคำาสัง่นอกคำาสัง่ if ถ้าเง่ือนไขมคี่าเป็นเท็จ จะไมท่ำาตามคำาสัง่ใน if โดย คำาสัง่ท่ีจะทำางานหลังเง่ือนไขของ if เป็นจรงิจะเป็นเพยีงคำาสัง่ 1 คำาสัง่ เท่านัน้ และต้องจำาไวว้า่ expression ของ if นี้จะต้องอยูใ่น ( ) เสมอ ในภาษาซ ีประโยคำาสัง่แต่ละคำาสัง่จะต้องจบด้วย ; (semicolon) ถ้าต้องการรวมการทำางานหลายคำาสัง่ ใหเ้ป็นชุดเดียวกัน และต้องการให ้compiler จะมองวา่เป็นคำาสัง่ชุดเดียว และใหท้ำางานเหมอืนเป็นคำาสัง่เดียว โดยทำางานเรยีงลำาดับจากก่อนไปหลัง ใหท้ำาโดยการล้อมกลุ่มของคำาสัง่ท่ีต้องการ เริม่ด้วยเครื่องหมาย { และ ปิดด้วยเครื่องหมาย } ซึ่งอาจเรยีกการทำาลักษณะนี้วา่เป็นการกำาหนด block ของคำาสัง่

Page 4: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี 4.2 โปรแกรม example4_2.c แสดงการใชค้ำาสัง่ if /* example4_2.c */#include <stdio.h>int ch; /* อาจใชเ้ป็น char ch; ในโปรแกรมนี้จะใหผ้ลเหมอืนกัน แต่ความจรงิความหมายต่างกันบา้ง */main(){ printf("\n\tPlease press any key."); ch = getche(); if (ch == '\r') /* ไมต้่องใช ้; ตรงนี้เพราะยงัไมจ่บคำาสัง่ */

printf("\n\tEnter key ( ASCII code = 13 ) was pressed ."); printf("\n\tif statement end already "); getch();}คำาสัง่ if (ch == '\r') printf("\n Enter key ( ASCII code = 13 ) was pressed ."); กำาหนดใหต้รวจสอบเง่ือนในคำาสัง่ คือ ถ้าการเคาะแป้นจากคำาสัง่ ch = getche(); เป็นแป้น enter จรงิ แล้วใหท้ำาตามคำาสัง่ใน if คือ คำาสัง่ ใหแ้สดงขอ้ความวา่ Enter key ( ASCII code = 13 ) was pressed . ออกทางหน้าจอ แล้วจงึทำาตามคำาสัง่นอกคำาสัง่ if คือ แสดงขอ้ความวา่ if statement end already ดังรูป

ถ้าเง่ือนไขเป็นเท็จ ใหแ้สดงขอ้ความวา่ if statement end already โดยไมต้่องแสดงขอ้ความในคำาสัง่ if Enter key ( ASCII code = 13 ) was pressed . เชน่ เคาะแป็น K จะได้ผล ดังรูป

Page 5: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.3 แสดงคำาสัง่ท่ีทำาเมื่อ expression ของคำาสัง่ if มคี่า true มเีพยีงคำาสัง่เดียว โปรแกรม example4_3_1.c แสดงใหเ้หน็วา่ คำาสัง่ท่ีทำาตาม คำาสัง่ if มีเพยีงคำาสัง่เดียว เมื่อ expression ของคำาสัง่ if มคี่า true /* program example4_3_1.c */#include <stdio.h>int ch;main(){ printf("\n\tPlease press any key."); ch = getche(); /* รบัการเคาะแป้นไปเก็บไวใ้นตัวแปร ชื่อ ch */ if (!(ch == '\t')) /* แป้นท่ีเคาะ ไมใ่ช ่แป้น tab อาจเขยีนวา่ if(ch != ‘\t’) */ printf("\n\t\t expression of if is true."); printf("\n\t\tThis line print after if statement."); printf("\n\t\tthe %c key was pressed.",ch); printf("\n\n\tif statement end already "); getch();}เมื่อโปรแกรมทำางาน และเคาะแป้น tab จะได้ผล ดังรูป

และถ้าเมื่อโปรแกรมทำางาน และเคาะแป้นอ่ืนท่ีไมใ่ชแ่ป้น tab เชน่เคาะแป้น A จะได้ผลการทำางานดังรูป

แสดงใหเ้หน็วา่คำาสัง่ท่ีทำาเมื่อเง่ือนไขของ if มคี่าเป็น true จะมเีพยีงคำาสัง่เดียว คือ printf("\n\t\t expression of if is true.");

Page 6: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ถ้าการใหไ้ด้ตามจุดประสงค์ต้องทำาใหค้ำาสัง่ท่ีต้องการทำาเป็นชุดหรอื block ของคำาสัง่ เมื่อ expression ของ if มคี่า true ทำาได้โดยการใสไ่วใ้น { และ } ดังในโปรแกรม example4_3_2.c

Page 7: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

/* program example4_3_2.c */#include <stdio.h>int ch;main(){ printf("\n\tPlease press any key."); ch = getche(); if (!(ch == '\t')) { /* เริม่ต้น block ของคำาสัง่ท่ีทำาเมื่อ expression ของ if ถกู */ printf("\n\t\texpression of if is true."); printf("\n\t\tThis line printf after if expression is true."); printf("\n\t\tthe %c key was pressed.",ch); } /* สิน้สดุ block ของคำาสัง่ท่ีทำาเมื่อ expression ของ if ถกู */ printf("\n\n\tif statement end already "); /* คำาสัง่ท่ีอยู่นอก คำาสัง่ if */ getch();}เมื่อโปรแกรมทำางาน และเคาะแป้น tab จะได้ผลการทำางาน ดังรูป

และเมื่อโปรแกรมทำางานและมกีารเคาะแป้นอ่ืนท่ีไมใ่ช่ tab (ในรูปเคาะแป้น b ) จะได้ผลการทำางาน ดังรูป

Page 8: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

เง่ือนไข-

เท็จ

ออกจากคำาสัง่ if else

คำาสัง่ต่าง ๆ (ชุด B )

จรงิ

คำาสัง่ต่าง ๆ (ชุด A)

คำาสัง่ if elseเป็นคำาสัง่ท่ีมกีารทดสอบเง่ือนไขแบบ 2 ทางเลือก ถ้าเง่ือนไขเป็นจรงิ

ใหท้ำาตามคำาสัง่ชุด(A)ท่ีอยูใ่น if ถ้าเง่ือนไขเป็นเท็จ ใหท้ำาตามคำาสัง่ชุดใน else (ชุด B) การทำางานของคำาสัง่ if else อาจเขยีนเป็นผังงาน ดังนี้

รูปแบบของคำาสัง่ if elseคำาสัง่ if else มรูีปแบบ ดังนี้if (expression)

{ statement A1;

… statement An; }

else {

statement B1; … statement Bn; }

โดย expression ใน if มคี่าได้เพยีง จรงิ หรอื เท็จ ถ้ามคี่าเป็นจรงิ โปรแกรมจะทำางานต่อไปในคำาสัง่หลัง if คือ คำาสัง่ชุด A เสรจ็แล้วออกจาก if โดยไมท่ำาตามคำาสัง่ชุด B ถ้า expression มคี่าเป็นเท็จ โปรแกรมจะทำาตามคำาสัง่หลัง else คือ คำาสัง่ชุด B แล้วออกไปโดยไมท่ำาตามคำาสัง่ชุด A

Page 9: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.4 โปรแกรม example4_4.c เป็นโปรแกรมท่ีใชแ้สดงการใช้โปรแกรมท่ีมกีารเลือก 2 เง่ือนไข ท่ีมกีารทำากิจกรรมทัง้ 2 เง่ือนไข (if else)/* program exampie4_4.c */#include <stdio.h>main(){ float score1; printf("\n\tPlease input your score : "); scanf("%f",&score1); if (score1 >= 50) printf("\n\tYou pass the examination."); else printf("\n\tYou failed the examination."); printf("\n\n\n\tThis command work after if ending."); getch();}เป็นโปรแกรมรบัการป้อนค่าคะแนนจากแป้นพมิพน์ำาไปเก็บในตัวแปร score1 แล้วนำา score1 มาเปรยีบเทียบกับ 50 ถ้ามากกวา่หรอืเท่ากับ 50 จะได้ผลเป็น จรงิ โปรแกรมจะทำาตามคำาสัง่ใน if คือprintf("\n\tYou pass the examination."); แล้วออกจาก if โดยไมท่ำาตามคำาสัง่ใน else แต่ถ้าเปรยีบเทียบ score1 กับ 50 แล้วได้ค่าเป็นเท็จ คือ score1 น้อยกวา่ 50 โปรแกรมจะทำาตามคำาสัง่หลัง else คือ printf("\n\t You failed the examination."); แล้วออกจากคำาสัง่โดยไมท่ำาตามคำาสัง่หลัง if ดังรูปท่ีแสดงผลการทำางานของโปรแกรม

และ

Page 10: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

คำาสัง่ if else if คำาสัง่นี้มโีครงสรา้ง else if เพิม่เขา้มาในคำาสัง่ else ทำาใหใ้ชค้ำาสัง่

else if เพิม่ได้ตามท่ีต้องการ ใชก้ับการตัดสนิใจท่ีมทีางเลือกมากกวา่ 2 ทางเลือก อาจเขยีนผังงานได้เป็น

รูปแบบของคำาสัง่ if else if if (expression1) { statement A; } else if (expression2) { statement B; } else if (expression n) { statement N; } else { statement N + 1; }

จรงิเง่ือนไข

1เท็จคำาสัง่ชุดท่ี 1

เง่ือนไข2ง

เท็จ

คำาสัง่ชุดท่ี 2เง่ือนไข N

ออกจากคำาสัง่ if else if

จรงิ

เท็จ

คำาสัง่ชุดท่ี n

จรงิ

เง่ือนไข n

Page 11: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่ง 4.5 โปรแกรม example4_5.c เป็นโปรแกรมท่ีแสดงการใช ้โครงสรา้งแบบทางเลือก ท่ีมี 5 ทางเลือก โดยใชค้ำาสัง่ if else-if else /* example4_5_1.c */#include <stdio.h>main(){ float score1; printf("\n\tPlease type your score : "); scanf("%f",&score1); if (score1 >= 80) printf("\n\tYou get\tA\tExcelent"); else if (score1 >= 70) printf("\n\tYou get\tB\tGood"); else if (score1 >= 60) printf("\n\tYou get\tC\tCommon"); else if (score1 >= 50 ) printf("\n\tYou get\tD\tPoor"); else printf("\n\tYou get\tF\tFailed"); getch();}โปรแกรมนี้เป็นการใหป้้อนคะแนนทางแป้นพมิพเ์พื่อหาระดับคะแนน ตามเกณฑ์และรายงานผลออกทางจอภาพ ดังรูป

Page 12: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

โปรแกรมท่ีใช ้if แบบหลายทางเลือกนี้ อาจเขยีนเป็นโปรแกรมท่ีใชค้ำาสัง่ if หลายคำาสัง่เรยีงกันได้ แต่อาจต้องดัดแปลงเง่ือนไขใน expression ของ if บา้ง เชน่ example4_5_1.c อาจเขยีนเป็น example4_5_2.c ซึ่งใหผ้ลการทำางานเหมอืนกัน โดยดัดแปลงเง่ือนไขบา้ง ดังนี้

/* example4_5_2.c */#include <stdio.h>main(){ float score1; printf("\n\tPlease type your score : "); scanf("%f",&score1); if (score1 >= 80) printf("\n\tYou get\tA\tExcelent"); if (score1 >= 70 && score1 < 80) printf("\n\tYou get\tB\tGood"); if (score1 >= 60 && score1 < 70) printf("\n\tYou get\tC\tCommon"); if (score1 >= 50 && score1 < 60 ) printf("\n\tYou get\tD\tPoor"); if ( score1 < 50 ) printf("\n\tYou get\tF\tFailed"); getch();}ซึ่งเมื่อโปรแกรม example4_5_2.c ทำางานจะได้ผลลักษณะเดียวกัน ดังรูป

Page 13: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

เง่ือนไข1เท็จ

ออกจากคำาสัง่ nested if

คำาสัง่ชุดท่ี 3

จรงิ

คำาสัง่ชุดท่ี 2

เง่ือนไข2ง

เท็จ จรงิ

คำาสัง่ชุดท่ี 1

โครงสรา้ง หรอื รูปแบบ ท่ีใช ้if ซอ้นกัน หรอื อาจเรยีกวา่ nested if โครงสรา้ง nested if เพิม่ if เขา้มาในคำาสัง่ if ทำาใหใ้ชค้ำาสัง่ if

เพิม่ได้ตามท่ีต้องการ ใชก้ับการตัดสนิใจท่ีมทีางเลือกมากกวา่ 2 ทางเลือก อาจเขยีนผังงานได้เป็น (มไีด้หลายแบบ)

รูปแบบของคำาสัง่ nested if if (expression1) if (expression 2) { statement 1; } else { statement 2; }else { statement 3; }

Page 14: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี 4.6 . โปรแกรม example4_6_1.c และ example4_6_2.c เป็นตัวอยา่งการใช ้if ซอ้นเขา้มาในโครงสรา้งแบบทางเลือกท่ีใชค้ำาสัง่ if โดยเพิม่คำาสัง่ if เขา้มาด้าน if ทำาใหม้โีครงสรา้งท่ีม ีคำาสัง่ if ซอ้น อาจเรยีกวา่ nested if /* example4_6_1.c */#include <stdio.h>main(){ int a,b; printf("\n Please enter first integer : "); scanf("%d",&a); printf("\n Please enter second integer : "); scanf("%d",&b); if (a <= b) /* start if */ if (a < b) /* start nested if */ printf("\n\t %d \t<\t %d\n",a,b); else printf("\n\t %d \t==\t %d\n",a,b); /* end nested if */ else printf("\n\t %d \t>\t %d\n",a,b); /* end if */ getch();}

โดย example4_6_1.c กับ example4_6_2.c ท่ีอยูด้่านล่าง จะมีความหมายเหมอืนกัน

Page 15: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

/* example4_6_2.c */#include <stdio.h>main(){ int a,b; printf("\n Please enter first integer : "); scanf("%d",&a); printf("\n Please enter second integer : "); scanf("%d",&b); if (a <= b) /* start if */ { if (a < b) /* start nested if */ printf("\n\t %d \t<\t %d\n",a,b); else printf("\n\t %d \t==\t %d\n",a,b); /* end nested if */ } else printf("\n\t %d \t>\t %d\n",a,b); /* end if */ getch();}

เมื่อโปรแกรมทัง้สองทำางานจะใหผ้ลทำานองเดียวกัน ดังรูป

Page 16: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

การเขยีนโปรแกรมท่ีมคีำาสัง่เง่ือนไข เชน่ if ซอ้นกันหลายชัน้ต้องมขีอ้ควรระวงั การกำาหนดเง่ือนไขและการวางตำาแหน่งของเง่ือนไขใหถ้กูต้อง ดังตัวอยา่งตัวอยา่งท่ี4.7 แสดงการวางตำาแหน่ง เง่ือนไขหรอืตัวดำาเนินการผิด /* example4_7_1.c */#include <stdio.h>const int max = 100;main(){ int a; printf("\n\tPlease enter first integer : "); scanf("%d",&a); if ( a <= max) { if( a >= 0 ) if ( a % 2) printf("\n\tYou input odd number that less than %d",max); else printf("\n\tYou input even number that less than %",max); } else printf("\n\tYou input negative value");

else printf("\n\tYou input number that more than %d",max); getch();}

เมื่อคอมไพล์โปรแกรมจะเกิด error บอกวา่ else ก่อนคำาสัง่ สดุท้ายเกินมา เพราะใส ่} ผิดท่ี ต้องแก้ ใหเ้ป็นดังใน example4_7_2.c หรอื ตัด { และ } ใหเ้หมอืนกับใน example4_7_3.c โดยโปรแกรม example4_7_2.c กับ example4_7_3.c จะทำางานเหมอืนกัน

Page 17: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

/* example4_7_2.c */ #include <stdio.h>const int max = 100;main(){ int a; printf("\n\tPlease enter first integer : "); scanf("%d",&a); if ( a <= max) { if( a >= 0 ) if ( a % 2) printf("\n\tYou input odd number that less than %d",max); else printf("\n\tYou input even number that less than %",max); else printf("\n\tYou input negative value"); } else printf("\n\tYou input number that more than %d",max); getch();}

Page 18: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

/* example4_7_3.c */ #include <stdio.h>const int max = 100;main(){ int a; printf("\n\tPlease enter first integer : "); scanf("%d",&a); if ( a <= max) if( a >= 0 ) if ( a % 2) printf("\n\tYou input odd number that less than %d",max); else printf("\n\tYou input even number that less than %",max); else printf("\n\tYou input negative value"); else printf("\n\tYou input number that more than %d",max); getch();}

Page 19: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

จริง

นิพจน์ = ค่าคงท่ี 1

เท็จ

คำาสัง่ชุดท่ี 1

จริง

นิพจน์ = ค่าคงท่ี 2

เท็จ

คำาสัง่ชุดท่ี 2

... ..

.

จริง

ม ีdefault:

เท็จ

คำาสัง่ใน default:

จริง

นิพจน์ = ค่าคงท่ี n

เท็จ

คำาสัง่ชุดท่ี n

เท็จ

คำาสัง่ switchเ ป็นคำาสัง่ที่ใชท้ดสอบเง่ือนไขและมทีางเลือกของการตัดสนิใจหลายทาง

ทำานองเดียวกับคำาสัง่ if else if แต่นิยมใชค้ำาสัง่ switch มากกวา่ เพราะมรูีปแบบที่เขา้ใจได้ง่าย สะดวกในการแก้ไขในกรณีที่มกีารผิดพลาด คำาสัง่ switch มกีารทำางานในแต่ละ case เป็นในลักษณะ ท่ีเขยีนผังงานได้ ดังนี้

โดยในผังงานนี้ไมม่คีำาสัง่ break; แต่ในรูปแบบที่แสดงมคีำาสัง่ break; อยูใ่นแต่ละ case ด้วย

Page 20: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

รูปแบบ switch (expression) {

case (constant 1) : statements;

break;case (constant 2):

statements; break;

…case (constant n):

statements; break;default :

statements}

expression ของ switch เป็นตัวแปรนิพจน์ท่ีใชเ้ปรยีบเทียบค่าวา่ตรงกับ constant ของ case ใด โดยโปรแกรมจะปฏิบติัตามคำาสัง่ต่าง ๆ ใน case นัน้ สว่นคำาสัง่ break; จะเป็นคำาสัง่ใหอ้อกจากคำาสัง่ switch ในกรณีที่ไมม่คีำาสัง่ break โปรแกรมจะปฏิบติัเรยีงตามลำาดับตลอดทกุคำาสัง่ในทกุ case ท่ีอยูต่่อกัน(รวมทัง้ใน default) ในกรณีท่ีค่าของ expression ของ switch ไมต่รงกับ constant ของ case ใด โปรแกรมจะปฏิบติัตามคำาสัง่ใน default ในกรณีท่ีไมม่ ีdefault และค่าของ expression ไมต่รงกับ case ใด โปรแกรมจะออกจากคำาสัง่ switch โดยไมไ่ด้ทำาอะไร โดยขอ้สงัเกตท่ีควรจำา ในแต่ละ case อาจมคีำาสัง่หลายคำาสัง่ไมต้่องใชเ้ครื่องหมาย { } ล้อม และท่ี case ต่าง ๆ และ default จะต้องมี : (colon) ต่อท้ายดังนี้ case (constant) : และ default :

Page 21: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี 4.8 โปรแกรม example4_8.c แสดงการใชค้ำาสัง่ switch โดยไมใ่ชค้ำาสัง่ break ในแต่ละ case/* example4_8.c */#include <stdio.h>main(){ /*printf("\n");*/ switch (getchar()) { case '9': printf("9 9 9 9 9 9 9 9 9\n"); case '8': printf(" 8 8 8 8 8 8 8 8\n"); case '7': printf(" 7 7 7 7 7 7 7\n"); case '6': printf(" 6 6 6 6 6 6\n"); case '5': printf(" 5 5 5 5 5\n"); case '4': printf(" 4 4 4 4\n"); case '3': printf(" 3 3 3\n"); case '2': printf(" 2 2\n"); case '1': printf(" 1\n"); default: printf("0000000000000000000"); } getch();}เมื่อโปรแกรมทำางานจะได้ผล ในลักษณะทำานองในรูป

Page 22: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี 4_9 โปรแกรม example4_9.c แสดงการใชค้ำาสัง่ switch โดยมกีารใชค้ำาสัง่ break ในแต่ละ case/* example4_9.c */#include <Stdio.h>main(){ float num1 = 1.0 , num2 = 1.0; int operate; printf("\n Please enter first floating point number : "); scanf("%f",&num1); printf("\n Please enter seconf floating point number : "); scanf("%f",&num2); printf(" \n Please enter the operator. : "); operate = getche(); switch ( operate) /* start switch */ { case '+' : printf("\n\t result \tof \t%0.2f \t%c \t%02.2f\tis \t %.2f",num1,operate,num2,num1+num2);

break; case '-' : printf("\n\t result \tof \t%0.2f \t%c \t%02.2f\tis \t %.2f",num1,operate,num2,num1 - num2);

break; case '*' : printf("\n\t result \tof \t%0.2f \t%c \t%02.2f\tis \t %.2f",num1,operate,num2,num1+num2);

break; case '/' : printf("\n\t result \tof \t%0.2f \t%c \t%02.2f\tis \t %.2f",num1,operate,num2,num1+num2);

break; default : printf("unknown operator"); } /* end switch */ Getch();} /* end main() */

Page 23: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

โดยการทำางานของโปรแกรมนี้เป็นไปในลักษณะ ดังรูป

เมื่อโปรแกรม example4_9.c ทำางานจะเหน็ได้วา่มกีารทำางานตาม case ท่ีเลือกเท่านัน้ซึ่งต่าง จาก example4_8.c เพราะทำาตามคำาสัง่ break;

การแก้ปัญหา โดยใชก้ารเขยีนโปรแกรมแบบโครงสรา้งควบคมุแบบทางเลือก (selection control structure) บางปัญหาสามารถใชทั้ง้คำาสัง่ if และ switch ปกติสามารถเลือกใชค้ำาสัง่ใดคำาสัง่หนึ่งแทนกันได้ ดัง ตัวอยา่งท่ี 4.10ตัวอยา่งท่ี4.10 จงเขยีนโปรแกรม ท่ีเมื่อทำางานแล้วจะใหป้้อนเลขระดับชัน้เรยีน ถ้าป้อน 1 หรอื 2 หรอื 3 ใหข้ึ้นขอ้ความ วา่ lower level student ถ้า ป้อน 4 หรอื 5 หรอื 6 ใหข้ึ้นขอ้ความวา่ upper lever student ถ้าป้อนเลขอ่ืน แสดงขอ้ความวา่ error โดยใหเ้ขยีนโปรแกรม 2 แบบ โดยใชค้ำาสัง่ if และ switch วธิกีาร

เพื่อเป็นการทบทวนวา่ในการเขยีนโปรแกรม จะต้องสามารถกำาหนดขัน้ตอนการทำางานใหโ้ปรแกรมได้ก่อน(แมว้า่ในกรณีท่ีเป็นปัญหาไมย่ากอาจจะไม่เขยีนบนัทึกเป็นลายลักษณ์อักษร คิดในสมองก็สามารถเขยีนโปรแกรมต่อไปได้) จงึจะสามารถเขยีนโปรแกรมได้ ปัญหาที่โจทยก์ำาหนด อาจเขยีนขัน้ตอนการทำางานของโปรแกรมหลายแบบ ในท่ีนี้ เสนอ 2 แบบ ดังนี้รูปแบบท่ี 1 เริม่ต้น รบัค่าตัวเลขที่ป้อน ตรวจค่าตัวเลข กรณี เป็น 6 พมิพ ์วา่ upper level student กรณี เป็น 5 พมิพ ์วา่ upper level student กรณี เป็น 4 พมิพ ์วา่ upper level student กรณี เป็น 3 พมิพ ์วา่ lower level student

Page 24: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

กรณี เป็น 2 พมิพ ์วา่ lower level student กรณี เป็น 1 พมิพ ์วา่ lower level student กรณี เป็น เลขอ่ืน ๆ พมิพ ์วา่ error จบ

Page 25: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

รูปแบบท่ี 2 เริม่ต้น รบัค่าตัวเลขที่ป้อน ตรวจค่าตัวเลข มากกวา่หรอืเท่ากับ 4 และ น้อยกวา่หรอืเท่ากับ 6 พมิพ์ วา่ upper level student มากกวา่ 0 และ น้อยกวา่ 4 พมิพ ์วา่ lower level student กรณีอ่ืน ๆ พมิพ ์วา่ error จบขัน้ตอนการทำางาน รูปแบบที่ 1 สามารถเขยีนโปรแกรมภาษาซ ีได้โดยใชค้ำาสัง่ switch ซีง่จะใช ้2 แบบ คือ ใชค้ำาสัง่ที่ต้องการใหท้ำา และ คำาสัง่ break ไวใ้น case สดุท้ายของ case ท่ีจะมมีกีารทำางานเหมอืนกัน ดังใน โปรแกรม example4_10_1.c หรอื ใชใ้นทกุ case ดังใน โปรแกรม example4_10_2 .c สว่นรูปแบบที่2 เขยีนโปรแกรมภาษาซ ีโดยใช ้if else ดังในโปรแกรม example4_10_3.c ดังนี้

Page 26: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

/* program example4_10_1.c */int num;main(){ printf("\n\tPlease input decimal number : "); scanf("%d",&num); switch(num) { case 6: case 5: case 4: printf("\n\tUpper level student"); break; case 3: case 2: case 1: printf("\n\tLower level student"); break; default: printf("\n\tError"); } getch(); }เมื่อโปรแกรมทำางาน ได้ผลลัพธ ์ในลักษณะ ดังรูป

Page 27: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

/* program example4_10_2.c */int num;main(){ printf("\n\tPlease input decimal number : "); scanf("%d",&num); switch(num) { case 6: printf("\n\tUpper level student"); break; case 5: printf("\n\tUpper level student"); break; case 4: printf("\n\tUpper level student"); break; case 3: printf("\n\tLower level student"); break; case 2: printf("\n\tLower level student"); break; case 1: printf("\n\tLower level student"); break; default: printf("\n\tError"); } getch(); }เมื่อโปรแกรมทำางาน ได้ผลลัพธ ์ในลักษณะ ดังรูป

/* program example4_10_3.c */int num;main(){ printf("\n\tPlease input decimal number : "); scanf("%d",&num);

Page 28: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

if (num >= 4 && num <= 6) printf("\n\tUpper level student"); else if ( num >0 && num < 4) printf("\n\tLower level student"); else printf("\n\tError"); getch(); }เมื่อโปรแกรมทำางาน ได้ผลลัพธ ์ในลักษณะ ดังรูป

Page 29: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ในภาษาซกีารเขยีนโปรแกรมแบบโครงสรา้งควบคมุแบบทางเลือก นอกจากคำาสัง่ if และ switch แล้วยงัม ีตัวดำาเนินการเลือกค่า (conditional operator) ซึ่งใช ้เครื่องหมาย ? และ : โดยมรีูปแบบ คือ

expression1 ? expression2 : expression3;โดย expression1 คือ เง่ือนไข ถ้าใหผ้ลลัพธ ์ออกมาเป็นจรงิ หรอื มคี่าไมใ่ช ่0 ผลของคำาสัง่ จะทำาตาม expression2 ถ้า expression1 มคี่าเป็น เท็จหรอืเป็น 0 ผลของคำาสัง่จะทำาตาม expression3เชน่

0 ? printf(“Bodin”) : printf(“OK”); คำาสัง่นี้จะได้ผลการกระทำาเป็น OK เพราะ 0 เป็น เท็จ

4 <= 9 ? ( 10 + 9 ) : ( 5*2);คำาสัง่นี้จะได้ผลลัพธ ์เป็น 19 เพราะ 4 <= 9 เป็น จรงิ

คำาสัง่ expression1 ? expression2 : expression3; จะใหผ้ลเหมอืนกับ คำาสัง่ if else ท่ีมคีำาสัง่ท่ีทำาเมื่อ expression ของ it เป็นจรงิเพยีง 1 คำาสัง่ และ คำาสัง่ใน else มเีพยีง 1 คำาสัง่

Page 30: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4_11 โปรแกรม /* program example4_11.c */ แสดงการใชง้านคำาสัง่ expression1 ? expression2 : expression3; และการใชค้ำาสัง่ if else ท่ีทำางานได้ผลลัพธ ์เชน่เดียวกัน /* program example4_11.c */#include <stdio.h>main(){ char ch1 ,ch2; printf("\n\n\tUse expression , 5"); printf("\n\tUse conditional operator."); 5 ? printf("\n\t\tResult is true"):printf("\n\t\tResult is false"); printf("\n\tUse if statement."); if(5) printf("\n\t\tResult is true"); else printf("\n\t\tResult is false");

printf("\n\n\tUse expression , 0"); printf("\n\t\tUse conditional operator.Result is"); 0 ? printf("\tTrue.") : printf("\tFalse."); printf("\n\t\tUse if statement. Result is"); if(0) printf("\tTrue."); else printf("\tFalse.");

printf("\n\n\tUse expression 8 == 2"); printf("\n\t\tUse conditional operator.Result is"); 8 == 2 ? printf("\ttrue.") : printf("\tfalse."); printf("\n\t\tUse if statement. Result is"); if(8 == 2) printf("\ttrue"); else printf("\tfalse");

printf("\n\n\tPlease input 1st character : "); ch1 = getche(); printf("\n\tPlease input 2nd character : "); ch2 = getchar(); printf("\n\tUse expression %c==%c ",ch1,ch2);

Page 31: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

printf("\n\t\tUse conditional operator result is"); ch1 == ch2 ? printf("\t%d",ch1 == ch2 ) /* คำาสัง่ในภาษาซอีาจเขยีนหลายบรรทัดได้ compiler จะถือวา่จบบรรทัดเมื่อพบ ; เท่านัน้ ไมว่า่ขอ้ความนัน้จะอยูใ่นหลายบรรทัด */ : printf("\t%d",ch1 == ch2 ) ; printf("\n\t\tUse if statement result is"); if(ch1 == ch2) printf("\t%d",ch1 == ch2 ); else printf("\t%d",ch1 == ch2 ); int num1; printf("\n\n\tPlease input decimal number :"); scanf("%d",&num1); num1 <= 5 ? printf("\n\t %d <= 5 is true.",num1) : printf("\n\t %d <= 5 is fault.",num1); getch();}เมื่อโปรแกรม /* program example4_11.c */ ทำางานจะได้ผล ในลักษณะดังรูป

Page 32: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

เง่ือนไข-เท็จ

ออกจาก for

คำาสัง่ต่าง ๆ

เพิม่หรอืลดค่าตัวแปรท่ีใช้ในการทำาซำ้า

จรงิ

กำาหนดค่าเริม่ต้นใหแ้ก่ตัวแปรท่ีใช้ในการทำาซำ้า

โครงสรา้งควบคมุแบบวนซำ้า (repetition control structure) คำาสัง่ทำาซำ้า(เมื่อทราบจำานวนรอบของการทำางาน) (for statement) คำาสัง่ for เป็นคำาสัง่(statement) ใหท้ำาซำ้าโดยมเีง่ือนไข ปกติใช้การเพิม่ค่าหรอืลดค่าของตัวนับ ทำาซำ้าไปเมื่อเง่ือนไขที่กำาหนดเป็นจรงิ จนกระทัง่เมื่อเง่ือนไขเป็นเท็จใหเ้ลิกทำา รูปแบบของคำาสัง่ เป็นดังนี้ for (นิพจน์ที่1;นิพจน์ที่2;นิพจน์ที่3) คำาสัง่ 1 คำาสัง่หรอื for (นิพจน์ที่1;นิพจน์ที่2;นิพจน์ที่3) { คำาสัง่ท่ี1 คำาสัง่ท่ี2 ... คำาสัง่สดุท้าย

}เมื่อ นิพจน์ที่1 เป็นนิพจน์ท่ีใชก้ำาหนดค่าเริม่ต้นใหก้ับตัวแปรท่ีใชใ้นการทำาซำ้า นิพจน์ที่2 เป็นนิพจน์ท่ีใชเ้ป็นเง่ือนไขโดยมคี่าได้เพยีง 1 ใน 2 ค่าเท่านัน้ คือ เป็นจรงิ หรอื เท็จ นิพจน์ที่3 เป็นนิพจน์ท่ีกำาหนดการเพิม่หรอืลดค่าของตัวแปรท่ีใชใ้นการทำาซำ้า คำาสัง่(statement )หลัง for ถ้ามมีากกวา่ 1 คำาสัง่ จะต้องอยูภ่ายในเครื่องหมาย { กับ } เพื่อใหร้วมเป็นคำาสัง่ชุดเดียว เนื่องจากในภาษาซคีำาสัง่ท่ีอยูใ่นการทำาซำ้าแบบ for จะต้องมเีพยีง 1 คำาสัง่ (คำาสัง่การทำาซำ้าแบบอ่ืน หรอื เงือนไขอ่ืนก็เป็นเชน่เดียวกัน) ขอ้พงึระวงัสำาหรบัคำาสัง่ for ถ้าละ นิพจน์หรอื expression ท่ีใชเ้ป็นเง่ือนไขจะทำาใหเ้กิดการวนซำ้าแบบไมม่ท่ีีสิน้สดุ หรอื endless loopคำาสัง่ for นี้อาจเขยีนเป็นผังงาน ดังนี้

Page 33: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี 4.12 โปรแกรม example4_12.c แสดงการทำางานของโปรแกรมท่ีมกีารควบคมุแบบวนซำ้าโดยใชค้ำาสัง่ for /* example4_12.c */#include <stdio.h>int counter , num;char word[20] = "Bodindecha";main(){ num = 0; for (counter = 3;counter<=11;counter = counter+2) printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num); getch();} โปรแกรมนี้ กำาหนด เริม่ต้น ให ้counter มคี่าเป็น 3 แล้วทดสอบวา่เง่ือนไข คือ counter <= 11 เป็นจรงิ หรอืไม่ ถ้าเป็นจรงิ จะทำาตามคำาสัง่ printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num);แล้วจงึทำาตามคำาสัง่ counter = counter +2 ซึ่งเป็นการเพิม่ค่า ของ counter จากเดิมครัง้ละ 2 แล้วตรวจสอบเง่ือนไข วา่ counter <= 11 ถ้าเป็นจรงิก็ทำาต่อไปซำ้ากันไปเรื่อยจนกระทัง่นิพจน์เง่ือนไข เป็นเท็จ คือ counter มากกวา่ 11 จงึออกจากการทำาซำ้า ในตัวอยา่งน้ีมกีารทำาซำ้า 5 รอบ ได้ผลดังรูป

Page 34: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

นอกจากรูปแบบ ดังกล่าวแล้วคำาสัง่ for ยงัสามารถใชใ้นรูปแบบต่าง ไปได้อีก เชน่ ใช ้for โดย ละค่าเริม่ต้น จะต้องกำาหนดค่าเริม่ต้นไวก้่อน for เชน่ #include <stdio.h> Int n; main() { n = 4; f0r ( ; n >= 0; n-- ) printf(“%d\t”,n); } จะได้ผลการดำาเนินการเป็น 4 2 1 0 การใช ้for โดยละค่าเริม่ต้นและค่าที่ลดหรอืเพิม่ เชน่ #include <stdio.h> Int n; main() { n = 6; for ( ; n <= 20; ) { printf(“%d\t”,n); n = n + 3; } } จะได้ผลการดำาเนินการเป็น 6 9 12 15 18 การใช ้for โดยใชข้อ้ความอยูใ่นสว่นของค่าเริม่ต้น ขอ้ความนัน้จะถกูพมิพเ์พยีง 1 ครัง้ เชน่ #include <stdio.h> int n; main() { n = 6; for (“Use replace start term” ; n <= 20; ) { printf(“%d\t”,n); n = n + 3; } } จะได้ผลการดำาเนินการเป็น Use replace start term 6 9 12 15 18 การใชโ้ดยใสนิ่พจน์อ่ืนไวใ้นวงเล็บของขอ้ความคำาสัง่ for เชน่ #include <stdio.h> int n; main()

Page 35: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

{ for (n=6 ; n <= 20; printf(“%d\t”,n) , n = n + 3 ) } จะได้ผลการดำาเนินการเป็น 6 9 12 15 18

ตัวอยา่งท่ี 4.13 โปรแกรม example4_13.c แสดงโครงสรา้งควบคมุแบบวนซำ้าท่ีมกีารวนซำ้าซอ้นกันโดยใชค้ำาสัง่ for /* example4_13.c */#include <stdio.h> int row,collumn ;main(){ printf("\n"); for (row = 1;row<=5;row++) /* บรรทัด 1 */ { /* บรรทัด 2 */ for(collumn=1;collumn<=4;collumn++) /* บรรทัด 3 */

printf("\t %d%d ",row,collumn); /* บรรทัด 4 */ printf("\n"); /* บรรทัด 5 */ } /* บรรทัด 6 */ getch();}คำาอธบิายบรรทัด 1 เริม่ต้นกำาหนดค่าให ้row เป็น 1 แล้วทดสอบเง่ือนไข row <= 5 เมื่อเป็นจรงิ จะทำาตามบรรทัด 2ถ้าไมจ่รงิ จะออกจาก for (row = 1;row<=5;row++) นี้และในท่ีนี้จะจบโปรแกรมไปเลย จากบรรทัด 2 จะไปสูบ่รรทัด 3 เริม่ต้นจะกำาหนดค่า collumn เป็น 1 และทดสอบเง่ือนไข collumn <= 4 ถ้าเป็นจรงิจะทำาตามคำาสัง่ printf("%d%d \t",row,collumn); ถ้าไมจ่รงิจะออกจาก for(collumn=1;collumn<=4;collumn++) นี้ไปทำาตามคำาสัง่ในบรรทัด 5 คือทำาตามคำาสัง่ printf("\n"); แล้วกลับเขา้สู่ for (row =

Page 36: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

1;row<=5;row++) ซำ้ากันเชน่นี้จนกระทัง่เง่ือนไข row<=5 เป็นเท็จ ก็จะออกจาก for (row = 1;row<=5;row++) และในท่ีนี้จะจบโปรแกรมผลที่ได้จากการ run โปรแกรม example4_13.c เป็นดังรูป

Page 37: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี 4.14 จาก รหสัลำาลอง และคำาสัง่ด้านล่าง ใหเ้ขยีนโปรแกรม ชื่อ example4_14.c เพื่อหาคำาตอบตามเง่ือนไขของโจทย์

sum 0 ;for ( i 1 ; i <= n ; i++)

for ( j 1 ; j <= i ; j++ ) if ( j mod i == 0 )

for ( k 0 ; k < j ; k++ ) sum sum + 1 ;

end for end if

end forend forถ้า n มค่ีาเท่ากับ 10 หลังจากจบการทำางานแล้ว sum มค่ีาเป็น

เท่าใด

Page 38: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

วธิกีาร เขยีนโปรแกรมตามเง่ือนไข ในภาษาซ ีอาจได้โปรแกรม ดังนี้/* example4_14.c */#include <stdio.h>main(){ int n ,i,j,k ,sum; /* ประกาศตัวแปรที่จำาเป็นต้องใช ้ */ n = 10; sum = 0; for (i = 1 ; i <= n ; i++) { /* เพื่อป้องกันความสบัสน ใช ้ { และ } บอกจุดเริม่ต้นและจบการทำาซำ้าหรอืเง่ือนไข */ for (j = 1; j <= i; j++) { if ( j % i == 0) { for ( k = 0 ; k < j; k++) { sum = sum + 1; } } } } printf("\n\tWhen n = %d sum = %d ",n,sum); getch(); }เมื่อโปรแกรม example4_14.c เปล่ียนเป็น example4_14.exe ทำางานจะได้ผลลัพธ ์คือ คำาตอบท่ีโจทยต้์องการ คือ sum = 55 ดังรูป

Page 39: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

เง่ือนไข-เท็จ

ออกจากคำาสัง่ while

คำาสัง่ต่าง ๆ

เปล่ียนแปลงเง่ือนไขในการทำาซำ้า

จรงิ

กำาหนดเง่ือนไขในการทำาซำ้า

คำาสัง่ทำาซำ้าหรอืวนรอบ while statementwhile เป็นคำาสัง่ท่ีใชใ้นโครงสรา้งควบคมุแบบวนซำ้า (repetition

control structure) คือ เป็นคำาสัง่ใหม้กีารทำาซำ้าเป็นรอบ ๆ (loop) ลักษณะการทำางานทำานองเดียวกับคำาสัง่ for แต่ต่างกันตรงท่ีไมท่ราบจำานวนรอบท่ีแน่นอน เมื่อเริม่ต้นจะมกีารตรวจเง่ือนไข ถ้าเง่ือนไขมคี่าเป็นจรงิจะทำาตามคำาสัง่ท่ีมท่ีีมี 1 คำาสัง่ หรอื ชุดของคำาสัง่ แล้วกลับมาตรวจสอบเง่ือนไขใหม่ ถ้าเง่ือนไขท่ีเป็นเท็จจะออกจากคำาสัง่ while ในการใชค้ำาสัง่นี้ต้องมคีำาสัง่เปล่ียนแปลงค่าของนิพจน์ที่ใชเ้ป็นเง่ือนไขใหส้ามารถมคี่าเป็นเท็จได้ หรอืมคิำาสัง่ใหห้ยุดการวนซำ้า มฉิะนัน้จะมปีัญหาท่ีโปรแกรมทำางานแบบวนซำ้าแบบไมม่ท่ีีสิน้สดุ (endless loop) ซึ่งเป็นการผิดพลาดท่ีรุนแรงเพราะจะไมส่ามารถทำาคำาสัง่ต่อ ๆ ไปและจบการทำางานของโปรแกรมไมไ่ด้

การทำาซำ้าแบบ while อาจเขยีนผังงาน ดังรูป

คำาสัง่ while มรูีปแบบ ดังนี้while (นิพจน์ทดสอบเง่ือนไข) statement ;

หรอื while (นิพจน์ทดสอบเง่ือนไข) {

คำาสัง่ท่ี1; คำาสัง่ท่ี2; ... คำาสัง่สดุท้าย;

}

Page 40: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

โดย while จะทำาการทำาซำ้าต่อไปเมื่อนิพจน์ทดสอบเง่ือนไขใหผ้ลลัพธ์เป็นจรงิ และทำาต่อจนกระทัง่ผลลัพธข์องนิพจน์ทดสอบเง่ือนไขเป็นเท็จ

ตัวอยา่งท่ี 4.15 โปรแกรม example4_15.c แสดงการใชค้ำาสัง่ while ในโครงสรา้งควบคมุแบบวนซำ้า ซึ่งได้ผลลัพธเ์หมอืนกับการใช ้for ใน โปรแกรม example4_12.c/* example4_15.c */#include <stdio.h>int counter , num;char word[20] = "Bodindecha";main(){ num = 0; counter = 3; while ( counter <= 11) { printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num); counter = counter + 2 ; } getch();} โปรแกรมนี้ เริม่ต้น กำาหนดค่า num เป็น 0 และให ้counter มคี่าเป็น 3 แล้ว จงึเขา้สูก่ารทำาซำ้า แบบ while เริม่ต้นทดสอบวา่เง่ือนไข คือ counter <= 11 เป็นจรงิ หรอืไม ่ถ้าเป็นจรงิ จะทำาตามคำาสัง่

printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num);และคำาสัง่ counter = counter + 2 ซึ่งเป็นการเพิม่ค่า ของ counter จากเดิม แล้วตรวจสอบเง่ือนไข ถ้าเป็นจรงิก็ทำาต่อไปซำ้ากันไปเรื่อยจนกระทัง่นิพจน์เง่ือนไข เป็นเท็จ คือ counter มากกวา่ 11 ซึ่งคือ เง่ือนไข counter <= 11 มคี่าเป็นเท็จ จงึออกจากการทำาซำ้า ในตัวอยา่งน้ีมกีารทำาซำ้า 5 รอบ ได้ผลดังรูป

Page 41: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง
Page 42: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี 4.16 ใชโ้ปรแกรม example4_16.c แสดงการใช ้ while statement รบัค่าการเคาะแป้นจนมกีารเคาะแป้นท่ีกำาหนด จงึเลิกการทำางาน/* example4_16.c */#include <stdio.h>main(){ int character =65; char ch ; while (character != '\r') /* start while statement*/ { printf("\n\n\tEnter the 1st character: "); ch = getch(); printf("\n\tThe ASCII Code of 1st character (%c) is %d ",ch,ch); printf("\n\n\tEnter the character that you used in condition to exit while loop. :"); character = getche() ; } printf("\nWhile loop is finished."); getch(); }คำาอธบิาย โปรแกรมนี้นิพจน์เง่ือนไขของคำาสัง่ while คือ character != '\r' หมายความวา่ ค่าของ character ไมใ่ชก่ารเคาะแป้น enter โดย character นี้เป็นตัวแปรท่ีรบัค่าการเคาะแป้น จาก คำาสัง่ character = getche() ; ดังนัน้ถ้าการเคาะแป้นไมใ่ชแ่ป้น enter เง่ือนไขก็จะยงัเป็นจรงิ โปรแกรมจะทำาซำ้า แต่ถ้ามกีารเคาะแป้น enter เง่ือนไขก็จะเป็นเท็จ ก็จะออกจากคำาสัง่ while โดยการตรวจเง่ือนไขในครัง้แรกก่อนทำาคำาสัง่อ่ืน นัน้จะได้ค่า ของ character เป็น 65 เพราะคำาสัง่ int character =65; ท่ีกำาหนดไวก้่อนแล้วโปรแกรมจงึทำางานได้อยา่งน้อย 1 รอบ ดังนัน้ เมื่อ โปรแกรม /* example4_16.exe */ ทำางาน จะได้ผล ดังรูป

Page 43: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง
Page 44: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

เง่ือนไข-เท็จ

ออกจากคำาสัง่ do while

คำาสัง่ต่าง ๆ

จรงิ

กำาหนดเง่ือนไขในการทำาซำ้า

คำาสัง่ทำาซำ้าหรอืวนรอบ do while statementdo while เป็นคำาสัง่ใหม้กีารทำาซำ้าเป็นรอบ ๆ (loop) ลักษณะการ

ทำางานทำานองเดียวกับคำาสัง่ while แต่ต่างกันตรงท่ีคำาสัง่นี้จะมกีารทำางานตามคำาสัง่ไป 1 รอบ ก่อนท่ีจะทดสอบเง่ือนไข ถ้าเง่ือนไขท่ีเป็นจรงิจะทำางานต่อไป ถ้าเง่ือนไขเป็นเท็จจงึจะออกจากคำาสัง่ do while คำาสัง่นี้ก็เชน่เดียวกันจะต้องกำาหนดใหม้โีอกาสท่ีเง่ือนไขเป็นเท็จได้ มฉิะนัน้จะมปีัญหาท่ีโปรแกรมทำางานแบบวนซำ้าแบบไมม่ท่ีีสิน้สดุ (endless loop) กรณีที่เง่ือนไขเป็นเท็จเพยีงอยา่งเดียวจะมกีารทำางาน 1 รอบ ก่อนออกจากการทำาซำ้า

การทำาซำ้าแบบ do while อาจเขยีนผังงาน ดังรูป

Page 45: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

คำาสัง่ do while มรูีปแบบ ดังนี้Do { คำาสัง่ท่ี1;

คำาสัง่ท่ี2; ... คำาสัง่สดุท้าย;

} while (นิพจน์ทดสอบเง่ือนไข) ;โดย do while จะทำาการทำาซำ้าต่อไปเมื่อนิพจน์ทดสอบเง่ือนไขให้

ผลลัพธเ์ป็นจรงิ และทำาต่อจนกระทัง่ผลลัพธข์องนิพจน์ทดสอบเง่ือนไขเป็นเท็จ ก็จะออกจากการทำาซำ้า

Page 46: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.17 โปรแกรม example4_17.c แสดงการใช ้ do while statement ในการเขยีนโปรแกรมท่ีมโีครงสรา้งควบคมุแบบวนซำ้า/* example4_17.c */#include <stdio.h>int counter ,num ;char word[20] = "Bodindecha";main(){ Num = 0; counter = 3; do /* start do while */ { printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num); counter = counter + 2 ; } while (counter < 11 ); /* end do while */ getch();} /* end main() */โปรแกรมนี้กำาหนด เริม่ต้น ให ้counter มคี่าเป็น 3 แล้ว จงึเขา้สูก่ารทำาซำ้า แบบ do while ทำาตามคำาสัง่ printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num); และ counter = counter + 2;ไปก่อน 1 ครัง้ แล้วจงึทดสอบวา่เง่ือนไข คือ counter < 11 เป็นจรงิ หรอืไม ่ ถ้าเง่ือนไขเป็นจรงิก็จะทำาซำ้ารอบต่อไป เป็นในลักษณะนี้จนกระทัง่เง่ือนไขเป็นเท็จ คือ เมื่อ counter เป็น 13 ผลการทำางานของโปรแกรม /* example4_17.c */ เป็นดังรูป

Page 47: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ซึ่งจะเป็นได้วา่ผลการทำางานของโปรแกรมเหมอืนกับโปรแกรม example4_15.c ท่ีใชค้ำาสัง่วนซำ้า while

Page 48: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.18 โปรแกรม example4_18.c แสดงความแตกต่างกันของคำาสัง่ while กับ do while โดย do while จะมกีารทำางานอยา่งน้อย 1 รอบก่อน/* example4_18.c */#include <stdio.h>char word[20] = "Bodindecha";main(){ int num1 = 0; int counter1 = 3; printf("\n\tBefore while loop counter = %d",counter1); while ( counter1 < 2 && counter1 >= 0)

/* เปรยีบเทียบ while กับ do while ชุดท่ี1 */ { printf("\n\tIn while loop round %d counter = %d",++num1,counter1); counter1--; } printf("\n\tEnd while loop with round = %d counter = %d\n",num1,counter1);

int num2 = 0; int counter2 = 3; printf("\n\tBefore do while loop counter = %d",counter2); do /* เปรยีบเทียบ while กับ do while ชุดท่ี1 */ { printf("\n\tIn do while loop round %d counter = %d",++num2,counter2); counter2--; }while ( counter2 < 2 && counter2 >= 0); printf("\n\tEnd do while loop with round = %d counter = %d\n",num2,counter2);

int num3 = 0; int counter3 =1 ; printf("\n\tBefore while loop counter = %d",counter3); while ( counter3 < 2 && counter3 >= 0)

/* เปรยีบเทียบ while กับ do while ชุดท่ี2 */

Page 49: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

{ printf("\n\tIn while loop round %d counter = %d",++num3,counter3); counter3--; } printf("\n\tEnd while loop with round = %d counter = %d\n",num3,counter3); int num4 = 0; int counter4 = 1; printf("\n\tBefore do while loop counter = %d",counter4); do /* เปรยีบเทียบ while กับ do while ชุดท่ี2 */ { printf("\n\tIn do while loop round %d counter = %d",++num4,counter4); counter4--; }while ( counter4 < 2 && counter4 >= 0); printf("\n\tEnd do while loop with round = %d counter = %d\n",num4,counter4); getch();}ผลการทำางานของโปรแกรม เป็น ดังรูป

Page 50: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

คำาสัง่ breakเป็นคำาสัง่ท่ีใชเ้พื่อใหอ้อกจากคำาสัง่ในการวนซำ้า หรอื คำาสัง่ ต่าง ๆ เชน่

switch , while ,do while , for ใชเ้มื่อต้องการใหอ้อกจากคำาสัง่ควบคมุแบบวนซำ้าเมื่อพบเง่ือนไขที่ระบุ ก่อนที่จะครบรอบการวนซำ้าตามเง่ือนไขของการวนซำ้านัน้ ๆ

คำาสัง่ continue เป็นคำาสัง่ท่ีใชห้ยุดการทำางาน ณ ตำาแหน่งท่ีพบคำาสัง่ continue แล้วก

ลับไปทำาคำาสัง่ ณ จุดเริม่ต้นของคำาสัง่วนซำ้า โดยไมท่ำาคำาสัง่ที่อยูต่่อจากคำาสัง่ continue และถ้าเป็นการทำาซำ้าด้วยคำาสัง่ for คำาสัง่ continue จะทำาใหม้ีการเปล่ียนค่าตัวนับของคำาสัง่ for ในรูปแบบท่ีคำาสัง่ for ระบุไวด้้วย

Page 51: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.19 โปรแกรม example4_19.c แสดงตัวอยา่งของการใช้คำาสัง่ continue และ break ในการวนซำ้า/* example4_19.c */#include <stdio.h>main(){ int roun = 0; char keypress; printf("\n Before beginning for statement\n"); for ( ; ; ) /* endless loof when use for with no argument */ { printf("\n\n Start for statement."); printf("\n Please press any key (C or c to back to this point, B or b to exit for) : "); keypress = getche(); printf("\n The key %c was pressed.",keypress); if (keypress == 'C' || keypress == 'c') continue; else if(keypress == 'B' || keypress == 'b') break; printf("\n For statement completely run %d round.",++roun); } printf("\n\n\tThis point is shown when the for statement is already complete."); getch();}เมื่อโปรแกรม /* example4_19.c */ ทำางานจะได้ผลในลักษณะ ดังรูป (รูปนี้เคาะแป้น A แล้วเคาะแป้น c แล้วตามด้วย B ตามลำาดับ)

Page 52: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.20 จงเขยีนโปรแกรมที่รบัการป้อนค่าเลขจำานวนเต็มที่เป็นค่าสงูสดุในการแสดงค่าตัวเลขที่หารด้วย 3 ลงตัว ตัง้แต่ 1 ถึง จำานวนท่ีรบัจากการป้อนนัน้วธิกีาร

เพื่อทบทวนวา่การจะเขยีนโปรแกรมได้จะต้องรูว้า่โปรแกรมต้องมขีัน้ตอนการทำางานอยา่งไรจงึจะแก้ปัญหานัน้ได้ ปกติจงึควรเขยีนขัน้ตอนการทำางานก่อน โจทยข์อ้นี้ อาจเขยีนขัน้ตอนการทำางานได้ ดังนี้(อยา่ลืมวา่ปัญหาบางปัญหาอาจมวีธิกีารหลายวธิทีี่นำาเสนอนี้เป็นเพยีง 1 แบบเท่านัน้)

input max_val; for (i = 1 ; I <= max_val ; i++) if ( !(i mod 3)) หรอื อาจเขยีนเป็น if ( i mod 3 == 0 ) เพราะ จำานวนเต็มท่ีไมใ่ช ่0 ภาษาซจีะใหค้่าความจรงิเป็น 1 คือ จรงิ ดังนัน้ i mod 3 ถ้ามเีศษ จะถือวา่ถกูเสมอ ) print i end if end forนำาขัน้ตอนหรอื pseudo code นี้ไปเขยีนโปรแกรมจะได้เป็น Example4_20.c ดังนี้/* example4_20.c */#include <stdio.h>int i , max_val;main(){ printf("\n\tPlease input maximum number : "); scanf("%d",&max_val); for (i = 1 ; i <= max_val ; i++) { if(!(i % 3)) /* or if (0 == i % 3 ) */ { printf("\t%d",i); } } getch();}เมื่อโปรแกรม example4_20.c ทำางานจะได้ผลดังรูป

Page 53: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.21 จงเขยีนโปรแกรมหาค่า y ในสมการ y = 1 + 4 + 9 + 16 + … เมื่อระบุจำานวนตัวเลขในสมการวธิกีาร (นักเรยีนสามารถเขยีนขัน้ตอนการทำางานของโปรแกรมได้ ) โดยสมการนี้ อาจเขยีนได้วา่ คือ y = (1*1) + (2*2) + (3*3) + … โปรแกรมท่ีใชอ้าจเป็นดัง นี้/* example4_21.c */#include <stdio.h>int i , n , y;main(){ printf("\n\tPlease input maximum number : "); scanf("%d",&n); y = 0; for (i = 1 ; i <= n ; i++) { y = y + ( i * i);

} printf("\n\tNumber of term (n) = %d\tValue of y = %d ",n,y); getch();}เมื่อโปรแกรม example4_21.c ทำางานจะได้ผลดังรูป

Page 54: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

ตัวอยา่งท่ี4.22 ถ้ามเีชอืกยาว 100 เมตร นำามาล้อมพื้นท่ีรูปสีเ่หล่ียมผืนผ้า ต้องใหไ้ด้สีเ่หล่ียมผืนผ้าท่ีมด้ีานยาวกี่เมตร ด้านกวา้งกี่เมตรจงึจะมพีื้นท่ีมากท่ีสดุ ถ้ามกีารเปล่ียนความยาวเป็นจำานวนเต็มคือครัง้ละ 1 เมตร ต่อด้านวธิกีาร สีเ่หล่ียมผืนผ้า ถ้าจะล้อมใชค้วามยาว n เมตร รอบด้านทัง้สี ่ อาจพจิารณา โดยใชรู้ป ดังนี้

พื้นท่ี ( area ) = ความยาว X ความกวา้ง = leng * ( 50 –

leng ) และในท่ีนี้ คิดวา่นักเรยีน สามารถคิดขัน้ตอนการทำางานของโปรแกรมในสมองได้แล้ว จงึคิดวา่ คงเขยีนโปรแกรม ได้ วา่ รูปแบบหนึ่ง อาจเป็นดังโปรแกรม example4_22.c/* example4_22.c */#include <stdio.h>main(){ int leng , area, max_area,leng_high ,n; max_area = 0; printf(“\n\tPlease input the length of the rope : “ ); scanf(“%d”,&n); printf("\n\tProperties of rectangle"); printf("\n\tWidth\tlength\tarea"); for (leng=1;leng <=(n/4) ;leng++) /* เนื่องจากความกวา้งและความยาวรวมกันไมเ่กิน n/2 เมตร และความยาวกับความกวา้งมคี่าสลับกันได้ เชน่ เชอืกยาว 100 เมตร กวา้ง 1 ยาว 49 อาจเรยีกวา่ กวา้ง 49 ยาว 1 เมตร ถ้าไมเ่ขา้ใจอาจเขยีนเป็น for (leng=1;leng <=(n/2) ;leng++) */ { area = leng * ( (n/2) - leng); if ( area >= max_area )

(n/2) - leng เมตร

leng เมตร

Page 55: ใบงานที่ - PM-School  · Web viewตัวอย่างที่4.1 โปรแกรม example4_1.c ใช้เป็นโปรแกรมตัวอย่างแสดงผลลัพธ์จากเงื่อนไขต่าง

{ max_area = area; leng_high = leng; } printf("\n\t%d\t%d\t%d",((n/2) - leng),leng,area); } printf("\n The length of the rope = %d maximum area = %d width = %d length = %d",n,max_area,((n/2) - leng_high),leng_high); getch();}เมื่อโปรแกรมทำางาน จะได้ ผลลัพธ ์ดังรูป