1 / 24

บทที่ 5

บทที่ 5. คำสั่งเงื่อนไข (Conditioning Statements). ผู้สอน : ครูพัชร นันท์ กุลว รพิ สิษฐ์. หัวข้อ. คำสั่งเงื่อนไขและตัวดำเนินการ คำสั่ง if คำสั่ง if-else คำสั่ง nested-if คำสั่ง switch การประยุกต์ใช้. condition. condition. statement1. statement 2. yes. condition. no.

siusan
Download Presentation

บทที่ 5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่5 คำสั่งเงื่อนไข (Conditioning Statements) ผู้สอน :ครูพัชรนันท์กุลวรพิสิษฐ์

  2. หัวข้อ ... • คำสั่งเงื่อนไขและตัวดำเนินการ • คำสั่ง if • คำสั่ง if-else • คำสั่ง nested-if • คำสั่ง switch • การประยุกต์ใช้

  3. condition condition statement1 statement2 yes condition no statement yes no n 1 2 3 . . . statement1 statement2 statement3 statementn 5.1 คำสั่งเงื่อนไขและตัวดำเนินการ • คำสั่งเงื่อนไข ใช้ในการตัดสินใจเมื่อมีทางเลือก • ชนิดของเงื่อนไข มี 3 ชนิด 1.เงื่อนไขทางเลือกจาก1 ทาง(if) 2.เงื่อนไขทางเลือกจาก 2 ทาง(if-else) 3.เงื่อนไขทางเลือกจาก nทาง(nested if, switch)

  4. yes condition no statement 0 50 0 90 ตัวดำเนินการ • ตัวดำเนินการพื้นฐานในคำสังเงื่อนไข คือ ตัวดำเนินการสัมพันธ์(Relational Operators)เช่น == (equal) != (not equal) < (less than), <= (equal & less than) > (greater than), >= (equal & greater than) • ผลจากเงื่อนไข เป็นได้ 2แบบ คือ • จริง (TRUE: 1) หรือ เท็จ (FALSE: 0) ถ้า x = 75 x == 0 ? x != 0 ? x <= 75 ? x > 75 ? • ตัวดำเนินการตรรกะ(Logical operators) • && (AND) • || (OR) • ! (NOT) (x > 0) && (x<50) ? (x > 0) && (x<90) ? (x < 10) || (x>90) ?

  5. expression statement(s) no no yes yes x >= 60 Print “pass” 5.2คำสั่งif • รูปแบบ if(expression)statement; if(expression) { s1;s2; ... } statement • ผลจากนิพจน์ตรรกะ(Logical Expression)เป็นได้ 2 แบบคือ(TRUE หรือ FALSE) • ถ้าTRUEจะทำstatement • ถ้าFALSE จะไม่ทำ statement • ตัวอย่างเช่น • if(x >= 60) printf(“pass”);

  6. start Input ID, Name, X no X >= 60 yes Print ID,Name (Pass) end ตัวอย่าง5.1 • เขียนโปรแกรมตรวจสอบเงื่อนไขเพื่อคัดเลือกผู้ที่สอบผ่านตามเกณฑ์ (คะแนนX ³ 60) • เมื่อ Inputs คือ ID, Name, X #include <stdio.h> void main() { intID, X; char Name[20]; printf("Enter ID: "); scanf("%d", &ID); printf("Enter Name: "); scanf("%s", &Name); printf("Enter X(0-100): "); scanf("%d", &X); ผลลัพธ์ Enter ID): _ 53004100 Enter Name: _ AAAAA Enter X (0 - 100): _ 75 53004100 AAAAA (Pass) if(X >= 60) printf(“%d %s (Pass) \n", ID, Name); }

  7. start Input X yes X < 0 X = -X no Print X end ตัวอย่าง5.2 • เขียนโปรแกรมหาค่า Absolute ของ X(|X|) เช่น ถ้า X=-4 จะได้ |X|=4 • แนวคิด ทดสอบเงื่อนไข if X < 0 ปรับค่า X = -X) #include <stdio.h> void main() { intX; printf("Enter X: "); scanf("%d", &X); ผลลัพธ์ Enter X: _ -4 |X| = 4 if(X < 0) printf(“|X| = %d \n", X); }

  8. A statement 1 statement2 not A expression X >= 80 yes yes no no 5.3คำสั่งif-else statement 1 statement2 • รูปแบบ if (expression){statement1;… } else{statement2; … } • ผลจากนิพจน์ตรรกะ(Expression)เป็นได้2แบบ คือ(TRUEหรือFALSE) X = 75 • ถ้าTRUEจะทำstatement 1 • ถ้าFALSEจะทำstatement 2 not A • ตัวอย่างเช่น if (X>=80) printf (“%d %s A\n”, ID, Name); elseprintf (“%d %s not A\n”, ID, Name);

  9. Input ID, Name,Gender no start Gender=‘M’ yes “Female” “Male” end ตัวอย่าง5.3 • เขียนโปรแกรมตรวจสอบเงื่อนไขเพื่อแบ่งนักศึกษาออกเป็น 2 กลุ่มตามเพศ (Gender) คือ เพศชาย (Male) หรือเพศหญิง (Female) #include <stdio.h> void main() { intID; char Name[20], Gender; printf("Enter ID: "); scanf("%d", &ID); printf("Enter Name: "); scanf("%s", &Name); fflush(stdin); // clear keyboard buffer printf("Enter Gender: "); scanf("%c", &Gender); ผลลัพธ์ if(Gender == ‘M’) printf("Male\n"); elseprintf("Female\n"); } Enter ID): _ 53004100 Enter Name: _ AAAAA Enter Gender: _ F Female

  10. start yes Input x no rem = 0 rem = x%2 “Odd” “Even” end ตัวอย่าง 5.4 • เขียนโปรแกรมรับค่า Integer (X) และตรวจสอบว่า Xเป็นเลขคู่ (Even) หรือเลขคี่ (Odd) • แนวคิด: X เป็น Even ถ้า X หารด้วย 2 ลงตัว #include <stdio.h> void main() { int X, rem; printf("Enter X: "); scanf("%d", &X); ผลลัพธ์ 30 Enter X: _ 30 (Even) rem = X % 2; // remainder of X/2 if(rem == 0) printf("%d (Even)\n", X); elseprintf("%d (odd)\n", X); }

  11. exp2=true expn-1=true exp1=true yes yes yes statement n statement 1 statement 2 ... no no no statement n 5.4คำสั่งnested-if statement1 statement2 • รูปแบบ if (exp1){statement1;…} else if(exp2){statement2;…} else if(exp3){statement3;…} ... else if(exp n-1){statement n-1;…} else statement n; statementn-1 statement n • ผลจากExpression เป็นได้ 2 แบบคือ • ถ้าTRUEจะทำstatement 1 • ถ้าFALSEจะตรวจสอบexpression 2 ซึ่งได้ผล 2 แบบ คือ • ถ้า TRUE จะทำ statement 2 • ... ทดสอบเงื่อนไขต่อไปจนถึงexpression n-1 • ถ้า TRUE จะทำ statement n-1 หรือ FALSE จะทำ statement n

  12. Grade = ‘A’ Grade = ‘B’ Grade = ‘C’ Grade = ‘D’ yes yes yes yes start Input ID, Name,X x >= 80 x >= 60 x >= 50 x >= 70 Grade = ‘F’ Grade end ตัวอย่าง5.5 ผลลัพธ์ • เขียนโปรแกรมตัดเกรดจากคะแนนสอบ (X)ตามเงื่อนไข 80 -100 => grade = ‘A’ 70 - 79 => grade = ‘B’ 60 - 69 => grade = ‘C’ 50 - 59 => grade = ‘D’ x < 50 => grade = ‘F’ Enter ID: _ 53004100 Enter Name: _ AAAAA Enter X (0-100): _ 75 Grade = B #include <stdio.h> void main() { intID, X; char Name[20], Grade; printf("Enter ID: "); scanf("%d", &ID); printf("Enter Name: "); scanf("%s", &Name); printf("Enter X: "); scanf("%d", &X); if (X >= 80) Grade = 'A'; else if (X >= 70) Grade = 'B'; else if (X >= 60) Grade = 'C'; else if (X >= 50) Grade = 'D'; else Grade = 'F'; printf("Grade = %c\n", Grade); } X=75 Grade=‘B’

  13. result = X/Y result = X*Y result = X+Y result = X-Y yes yes yes yes start Input X,Op,Y Op = ‘*’ Op = ‘-’ Op = ‘+’ Op = ‘\’ Unknown Op result end ตัวอย่าง5.6 • เขียนโปรแกรมอ่าน BinaryExpression(+, -, *, /)เช่น 123.5+59.3 ที่มีรูปแบบข้อมูลเข้า คือ X Op Y • แนวคิด:ทดสอบค่าOp ว่าเป็น +, -, *, หรือ / ผลลัพธ์ Op=‘+’ Enter ID: _ 123.5 + 59.3 182.80 #include <stdio.h> void main() { float X, Y, result=0; char Op; printf("Enter expression: "); scanf("%f %c %f", &X, &Op, &Y); if (Op == ‘+’) result = X+Y; else if (Op == ‘-’) result = X-Y'; else if (Op == ‘*’) result = X*Y; else if (Op = ‘/’) result = X/Y; // Y > 0 elseelseprintf(“%c \aUnknown operator\n”, op); printf("= %.2f\n", result); } result=182.8

  14. exp=1 exp=n yes yes yes st1 st2 st n ... st1 st2 st3 stn no no no exp 1 2 3 n exp=2 ... st 5.5คำสั่งswitch st1 st2 st3 st n • รูปแบบ switch (expression){ case value1: statement1; break; หมายเหตุ switch = nested if case value2: statement2; break; ... case value n:statementn; break; default: statement; break; } • ผลจากexpression เป็นได้ nแบบคือ • ถ้าค่าexpression ตรงกับvalue iจะทำ statement i • คำสั่งbreak(มีผลทำให้จบ caseของคำสั่ง switch) • คำสั่ง default (เป็นกรณีอื่นๆ ที่ไม่มีในเงื่อนไข1-n)

  15. ตัวอย่างการเขียนโปรแกรม “ร้านเหล้าไฮเทค”โดยใช้ฟังก์ชั่น if-else ใช้ If-else สองชั้น เงื่อนไข ถ้าอายุมากกว่า 18 เช็คเพศ หญิง หรือ ชาย- ถ้าเพศชาย ให้ไป โซนขายเหล้า- ถ้าเพศหญิง ให้ไป โซนขายไวท์- ถ้าอายุน้อยกว่า 18 ห้ามเข้า

  16. โปรแกรม #include [stdio.h] // เปลี่ยน [ , ] เป็น < , > int main(){    char name[50];   // เก็บชื่อ เป็นข้อความจึงต้องประกาศเป็น string (char แบบหลายช่อง)char sex;             // เก็บเพศ (m/f) เป็นอักษรตัวเดียว ประกศchar ธรรมดาพอint age;               // เก็บอายุ จริงๆแล้วใช้ char ก็ได้ เพราะ char ก็เก็บเลขได้ แต่นิยม intprintf("What's your name : "); // คำถามgets(name)        // รับค่าชื่อ+สกุล ซึ่งมีช่องว่างคั่นอยู่ จึงต้องใช้ getsprintf("How old are you : ");scanf("%d",&age); // รับค่าอายุ เป็นตัวเลขprintf("Male/Female (m/f) : ");scanf("%c",&sex);  // รับค่าเพศ เป็นอักษรตัวเดียวif(age<18) {  // ถ้าอายุน้อยกว่า 18 ห้ามเข้าprintf("Sorry you can'tenter this website");    }    else {  // ถ้าอายุไม่น้อยกว่า 18 ให้เช็คเพศif(sex=='m') {    // ถ้าผู้ชาย ไปโซนขายเหล้าprintf("Hi Mr.%s welcome to exteen bar. enjoy with our spirits",name);        }        else {  // ถ้าไม่ใช่(ก็คือเป็นหญิง) ไปโซนไวน์printf("Hello Mrs.%s welcome to exteen bar. enyou with our wine",name);        }    }scanf(" ");    return 0;}

  17. อันนี้ แบบที่สอง if(age<18) {printf("Sorry, You can't enter this website");}else if(sex=='m') {printf("Hi Mr.%s welcome to exteen bar. enjoy with our spirits",name);}else {printf("Hello Mrs.%s welcome to exteen bar. enyou with our wine",name);}

  18. บทนี้จะสอนการเช็คเงื่อนไขในอีกลักษณะ เรียกว่า switch...case เช่น สร้างโปรแกรมที่มีเมนู กด 1 ให้ทำอันนึง กด 2 ให้ทำอันนึง กด 0 ให้ออก เป็นต้น นักเรียนจำทำยังไง ถ้าเราทำแบบที่เคยเรียนกันมา เราก็ต้องรับค่าจากผู้ใช้ ว่ากดอะไร แล้วมาเข้า if..elseสมมติให้ตัวแปรชื่อ menu เก็บค่าเมนูที่ผู้ใช้เลือก (สมมติว่ารับค่าจาก scanf ) เวลาเช็คก็ทำงี้ if(menu==1) printf("You choose 1"); else if(menu==2) printf("You choose 2");else if(menu==0) printf("You want to exit");else printf("Wrong choosing"); ถ้าเมนูมีมากกว่า 3 อย่าง เราก็เพิ่มส่วน else if ไปเยอะๆ แต่เขียนแบบนี้บางทีมันยาว เราเลยจะใช้ switch...case ซึ่งมีรูปแบบ แบบนี้ switch(ตัวแปร) {case ค่า : คำสั่งที่จะให้ทำ;    // case ค่า ตามด้วยโคลอน(กด shft+เซมิโคลอน)break;    case ค่า : คำสั่ง; break;    default :คำสั่ง }

  19. switch(menu) { // ต้องการดูค่าใน menu     case 1 : printf("Choose 1");  // ถ้า menu มีค่าเป็น 1 ให้ printfตรงนี้มากกว่า 1 คำสั่งได้              break; // ใส่ break ก่อนขึ้นเคสต่อไปcase 2 : printf("Choose 2 ");                break;    case 0 : printf("exit");                break;    default : printf("Wrong"); // ถ้าไม่ตรงเลย จะมาทำหลัง default ซึ่งไม่ต้องมี break ก็ได้}

  20. result = X*Y result = X-Y result = X/Y result = X+Y yes yes yes yes start Input X,Op,Y Op = ‘+’ Op = ‘\’ Op = ‘-’ Op = ‘*’ Unknown Op result end ตัวอย่าง5.7 • เขียนโปรแกรมอ่าน BinaryExpression(+, -, *, /)เช่น 123.5+59.3 ที่มีรูปแบบข้อมูลเข้า คือ X Op Y • แนวคิด:ทดสอบค่าOp ว่าเป็น +, -, *, หรือ / โดยใช้คำสั่ง switch ผลลัพธ์ #include <stdio.h> void main() { float X, Y, result=0; char Op; printf("Enter expression: "); scanf("%f %c %f", &X, &Op, &Y); switch (Op) { case ‘+’: result = X+Y; break; case ‘-’: result = X-Y'; break; case ‘*’: result = X*Y; break; case ‘/’: result = X/Y; break; // Y > 0 default: printf(“%c \aUnknown operator\n”, op); printf("= %.2f\n", result); } Enter ID: _ 123.5 + 59.3 182.80

  21. start D Input D 1 2 7 Print “Sun” Print “Mon” Print “Sat” end ตัวอย่าง5.8 • เขียนโปรแกรมรับค่าวันเป็นตัวเลข(1-7)และพิมพ์ผลเป็นข้อความ(Sun,Mon,Tue,Wed,Thu,Fri,Sat)เช่น D=7 พิมพ์ Sat ผลลัพธ์ #include <stdio.h> void main() { intD; printf("Enter an integer (1-7): "); scanf("%d", &D); Enter an integer (1-7): _ 7 Sat switch(D) { case 1:printf("Sun\n"); break; case 2:printf("Mon\n"); break; case 3:printf("Tue\n"); break; case 4:printf("Wed\n"); break; case 5:printf("Thu\n"); break; case 6:printf("Fri\n"); break; case 7:printf("Sat\n"); break; default:printf(“\a unknown integer %d\n", D); } }

  22. Case Study-1 0: A,E,I,O,U,H,W,Y 1: B,F,P,V • เขียนโปรแกรมสร้างรหัส Soundex Codeที่แปลงรหัสตัวอักษรเป็น รหัสเลขกลุ่ม 6กลุ่ม #include <stdio.h> #include <ctype.h> void main() { char ch; intgroup; printf("Enter a character: "); scanf("%c", &ch); ch = toupper(ch); 2: C,G,J,K,Q,S,X,Z 3: D,T 4: L 5: M,N 6: R switch(ch) { case ‘A’: case ‘E’: case ‘I’: case ‘O’: case ‘U’: case ‘H’: case ‘W’: case ‘Y’: group = 0; break; case ‘B’: case ‘F’: case ‘P’: case ‘V’:group = 1; break; case ‘C’: case ‘G’: case ‘J’: case ‘K’: case ‘Q’: case ‘S’: case ‘X’: case ‘Z’: group = 2;break; case ‘D’: case ‘T’:group = 3; break; case ‘L’: group = 4;break; case ‘M’: case ‘N’:group = 5; break; case ‘R’: group = 6;break; default: group = 9; break; } if (group != -9) printf(“Soundex code = %d\n”, group); else printf(“\a%c is not a character (a-z, A-Z)\n”); }

  23. Case Study-2 ผลลัพธ์ #include <stdio.h> void main() { char File[500]; inti, n[30]={0}; printf("Enter text File: "); gets(File); while(File[i]!=‘\0’) { • เขียนโปรแกรมนับตัวอักษรแต่ละตัวใน Text File Enter text File: _ C Programming #a=1, #b=0, #c=1,#d=0,#e=0, #f=0, #g=2, #h=0,#i=1,#j=0, #k=0, #l=0, #m=2,#n=1,#o=1, switch(File[i]) { case ‘a’: case ‘A’: n[0]++; break; case ‘b’: case ‘B’: n[1]++; break; case ‘c’: case ‘C’: n[2]++; break; case ‘d’: case ‘D’: n[3]++; break; case ‘e’: case ‘E’: n[4]++; break; case ‘f’: case ‘F’: n[5]++; break; case ‘g’: case ‘G’: n[6]++; break; case ‘h’: case ‘H’: n[7]++; break; ... case ‘z’: case ‘Z’: n[25]++; break; case ‘0’: case ‘1’: case ‘2’: case ‘3’: … case ‘9’: n[26]++; break; default: n[27]++; break; } i++; // move to next character for(i=0; i<=25; i++) printf(“#%c=%d, “, 97+i, n[i]); // ASCII ‘a’ = 97 printf(“\n#0-9=%d, #others=%d”, n[26], n[27]); } #p=1, #q=0, #r=2,#s=0,#t=0, #u=0, #v=0, #w=0,#x=0,#y=0, #z=0, #0-9=0, #others=1

  24. Case Study-2 จิตตั้งมั่น

More Related