11. 3.4โครงสร้าง หรือ รูปแบบ ที่ใช้ if ซ้อนกัน หรือ อาจเรียกว่า nested if
โครงสร้าง nested if เพิ่ม if เข้ามาในคาสั่ง if ทาให้ใช้คาสั่ง if เพิ่มได้ตามที่ต้องการ ใช้กับการ
ตัดสินใจที่มีทางเลือกมากกว่า 2 ทางเลือก อาจเขียนผังงานได้เป็น (มีได้หลายแบบ)
4. คาสั่งควบคุมแบบมีทางเลือก
คาสั่งswitchใช้ควบคุมการทางานแบบมีทางเลือก กรณีที่ทางเลือกการทางานมีจานวนมาก ภาษาซี
ออกแบบคาสั่งswitch ให้ทางานลักษณะวิเคราะห์ตรวจสอบค่าของตัวแปรหรือนิพจน์ว่าตรงกับค่าภายใน
คาสั่ง case ใด จะทางานตามคาสั่งภายใต้การควบคุมของคาสั่งcaseนั้น แต่หากตรวจสอบแล้วไม่ตรงกับ
คาสั่งใดเลย จะทางานภายใต้คาสั่งdefault
** เงื่อนไขที่ใช้กับคาสั่ง switch ต้องเป็นคาสั่งแบบประโยคเงื่อนไขแบบ1ประโยค การทางานของswitch
จะต้องมีคาสั่งbreak เพื่อออกจากการทางานของcaseนั้นโดยไม่ต้องผ่านcaseถัดไป
12. 4.1 รูปแบบการเขียนคาสังและแนวทางผังงานแบบswitch
่
การใช้คาสั่งswitch
switch ( ver / expression)
{
case ค่าที่ 1 : คาสั่งชุดที่ 1 ;
break ;
case ค่าที่ 2 : คาสั่งชุดที่ 2 ;
break ;
…
case ค่าที่ n : คาสั่งชุดที่ n ;
break ;
default : คาสั่ง ;
}
**หากแต่ละทางเลือกมีมากกว่า1คาสั่ง ต้องใช้เครื่องหมาย { }กั้นขอบเขต
แนวการเขียนผังงานคาสั่งswitch
13. ตัวอย่างการใช้คาสั่ง switch
ตัวอย่างที่ 1 การใช้คาสั่ง switch โดยไม่ใช้คาสั่ง break ในแต่ละ case
#include <stdio.h>
main()
{
/*printf("n");*/
switch (getchar())
{
case '9': printf("9 9 9 9 9 9 9 9 9n");
case '8': printf(" 8 8 8 8 8 8 8 8n");
case '7': printf(" 7 7 7 7 7 7 7n");
case '6': printf(" 6 6 6 6 6 6n");
case '5': printf(" 5 5 5 5 5n");
case '4': printf(" 4 4 4 4n");
case '3': printf(" 3 3 3n");
case '2': printf(" 2 2n");
case '1': printf(" 1n");
default: printf("0000000000000000000");
}
getch();
}
14. เมือโปรแกรมทางานจะได้ผล ในลักษณะทานองในรูป
่
ตัวอย่างที่ 2 แสดงการใช้คาสั่ง switch โดยมีการใช้คาสั่ง break ในแต่ละ case
#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("nt result tof t%0.2f t%c t%02.2ftis t %.2f",num1,operate,num2,num1+num2);
break;
case '-' :
printf("nt result tof t%0.2f t%c t%02.2ftis t %.2f",num1,operate,num2,num1 - num2);
15. break;
case '*' :
printf("nt result tof t%0.2f t%c t%02.2ftis t %.2f",num1,operate,num2,num1+num2);
break;
case '/' :
printf("nt result tof t%0.2f t%c t%02.2ftis t %.2f",num1,operate,num2,num1+num2);
break;
default :
printf("unknown operator");
} /* end switch */
Getch();
} /* end main() */
โดยการทางานของโปรแกรมนี้เป็นไปในลักษณะ ดังรูป
5.กรณีศึกษาการมใช้คาสังควบคุมแบบมีทางเลือก
่
กรณีใช้คาสั่ง switch
โจทย์ : จงเขียนงานโปรแกรมในลักษณะเมนูเลือกการทางาน ด้วยคาสั่ง switch ดังนี้
กาหนดให้ กด1 คานวณพื้นที่สี่เหลี่ยมจัตุรัส
กด 2 คานวณพื้นที่สามเหลี่ยม
กด 3 ออกจากระบบงาน
นอกเหนือจากนี้ แจ้งข้อความการกดหมายเลขผิดพลาด
16. ขั้นตอนการพัฒนางานโปรแกรม
1. การวิเคราะห์ระบบงานเบื้องต้น
1.1 สิ่งที่ต้องการ โปรแกรมเมนูเลือกการคานวณพื้นที่สี่เหลี่ยม และพื้นที่สามเหลี่ยม
1.2 สมการคานวณ พื้นที่สี่เหลี่ยม = กว้าง x ยาว
พื้นที่สามเหลี่ยม = ฐาน x สูง /2
1.3 ข้อมูลนาเข้า ตัวเลือกเมนู
ความกว้าง ความยาว
หรือฐานกับสูง
1.4 การแสดงผลตามโจทย์กาหนด
1.5 กาหนดคุณสมบัติตวแปร
ั
ข้อมูล ชื่อหน่วยความจา ชนิดข้อมูล
ความกว้าง w ตัวเลขทศนิยม
ความยาว l ตัวเลขทศนิยม
ฐาน b ตัวเลขทศนิยม
สูง h ตัวเลขทศนิยม
พื้นที่ area ตัวเลขทศนิยม
ตัวเลือกเมนู ans อักขระ
1.6 ลาดับขั้นตอนการทางาน (action)
1) เริ่มต้นการทางาน
2) แสดงส่วนเมนูเลือกงาน
3) ป้อนค่าตัวเลือกเมนู (ans)
4) เลือกทางานด้วยคาสั่ง switch ( ans )
4.1) ถ้า ans เป็น ‘1’ ให้ทางานกลุ่มคาสั่ง ดังนี้
- ป้อนคาสั่ง w, l
- คานวณ area = w * l
- พิมพ์ area
17. (ออกไปทางานข้อ 5)
4.2) ถ้า ans เป็น ‘2’ ให้ทางานกลุ่มคาสั่ง ดังนี้
- ป้อนคาสั่ง b, h
- คานวณ area = b * h/2
- พิมพ์ area
(ออกไปทางานข้อ 5)
4.3) ถ้า ans เป็น ‘3’ ให้ทางานกลุ่มคาสั่ง ดังนี้
- ออกจากส่วนการทางาน
(ออกไปทางานข้อ 5)
4.4) นอกเหนือจากนี้ พิมพ์ข้อความแจ้งข้อผิดพลาด
(ออกไปทางานข้อ 5)
5) สิ้นสุดการทางาน
2.แผนผังงาน