บทที่ 5

26
บบบบบ 5 บบบบบบบ บบบบบบบบ (Conditioning Statements) 1 บบบบบบ : บบบบบบบบบบบบ บบบบ บบบบบบบบ

Upload: brittany-herring

Post on 01-Jan-2016

25 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

1

บทท�� 5 คำ��สั่�งเง �อนไข (Conditioning Statements)

ผู้��สั่อน : คำรู�พัชรูนนท� กุ�ลวรูพั�สั่�ษฐ์�

2

หัวข�อ ...คำ��สั่�งเง �อนไขและตัว

ดำ��เน�นกุ�รู คำ��สั่�ง if

คำ��สั่�ง if-else คำ��สั่�ง nested-if

คำ��สั่�ง switchกุ�รูปรูะยุ�กุตั�ใช�

3

คำ��สั่�งเง �อนไข ใช้�ในการตัดสิ นใจเมื่��อมื่�ทางเลื�อก

ชน�ดำของเง �อนไข มื่� 3 ช้น ด 1. เง��อนไขทางเลื�อกจาก 1 ท�ง (if)

5.1 คำ��สั่�งเง �อนไขและตัวดำ��เน�นกุ�รู

conditionyes

statementno

conditionnoyes

statement1 statement2 statement1

condition

statement2 . . .statement3 statementn

n1 2 3

2. เง��อนไขทางเลื�อกจาก 2 ท�ง (if-else)

3. เง��อนไขทางเลื�อกจาก n ท�ง (nested if, switch)

4

ตัวด�าเน นการพื้��นฐานในคำ�าสิงเง��อนไข คำ�อ ตัวดำ��เน�นกุ�รูสั่มพันธ์� (Relational Operators) เช้ น == (equal) != (not equal) < (less than), <= (equal & less than) > (greater than), >= (equal & greater than)

ผู้ลจ�กุเง �อนไข เป็"นได� 2 แบบ คำ�อ ◦ จร ง (TRUE: 1) หร�อ เท&จ (FALSE: 0)

ตัวดำ��เน�นกุ�รู

ตัวดำ��เน�นกุ�รูตัรูรูกุะ (Logical operators) && (AND) || (OR) ! (NOT)

conditionyes

statementno

ถ้�� x = 75x ==

0 ?x != 0 ?x <= 75 ?x > 75 ?

(x > 0) && (x<50) ?(x > 0) && (x<90) ?(x < 10) || (x>90) ?

0 50

0 90

5

รู�ปแบบif (expression) statement;

if (expression) { s1; s2; ... }

5.2 คำ��สั่�ง if

ผลืจาก น�พัจน�ตัรูรูกุะ (Logical Expression) เป็"นได� 2 แบบคำ�อ (TRUE หร�อ FALSE)

ตัวอยุ,�งเช,น if(x >= 60) printf(“pass”);

ถ้�า TRUE จะท�า statement ถ้�า FALSE จะไมื่ ท�า statement

expression yes

statement(s)no

statement

x >= 60 yes

no Print“pass”

6

#include <stdio.h>void main(){ int ID, X;

char Name[20];printf("Enter ID: "); scanf("%d", &ID);printf("Enter Name: "); scanf("%s", &Name);printf("Enter X(0-100): "); scanf("%d", &X);

ตัวอยุ,�ง 5.1

ผู้ลลพัธ์�Enter ID): _53004100

53004100 AAAAA (Pass)

start

Input ID, Name, X

X >= 60yes

end

no

Print ID,Name(Pass)

เข�ยนโป็รแกรมื่ตัรวจสิอบเง��อนไขเพื้��อคำดำเล อกุผู้��ท��สั่อบผู้,�นตัามื่เกณฑ์. (คำะแนน X ³ 60) เมื่��อ Inputs คำ�อ ID, Name, X

if (X >= 60) printf(“%d %s (Pass) \n", ID, Name);

}

Enter Name: _AAAAAEnter X (0 - 100): _75

7

#include <stdio.h>void main(){ int X;

printf("Enter X: "); scanf("%d", &X);

ตัวอยุ,�ง 5.2

ผู้ลลพัธ์�Enter X: _-4

เข�ยนโป็รแกรมื่หาคำ า Absolute ของ X (|X|) เช้ น ถ้�า X=-4 จะได� |X|=4 แนวคำ�ดำ ทดสิอบเง��อนไข if X < 0 ป็รบคำ า X = -X)

if (X < 0) printf(“|X| = %d \n", X);

}

|X| = 4

start

Input X

X < 0yes

end

no

Print X

X = -X

8

รู�ปแบบif (expression) { statement1;… }else { statement2; … }

5.3 คำ��สั่�ง if-else

ผลืจาก น�พัจน�ตัรูรูกุะ (Expression) เป็"นได� 2 แบบ คำ�อ (TRUE หร�อ FALSE)

ถ้�า TRUE จะท�า statement 1

ตัวอยุ,�งเช,น ถ้�า FALSE จะท�า statement 2

expressionnoyes

statement 1 statement 2statement 1 statement 2

X >= 80noyes

A not A

if (X>=80) printf (“%d %s A\n”, ID, Name);else printf (“%d %s not A\n”, ID, Name);

X = 75

not A

9

#include <stdio.h>void main(){ int ID; char Name[20], Gender;

printf("Enter ID: "); scanf("%d", &ID);printf("Enter Name: "); scanf("%s", &Name);fflush(stdin); // clear keyboard bufferprintf("Enter Gender: "); scanf("%c", &Gender);

ตัวอยุ,�ง 5.3

start

Input ID,Name,Gender

Gender=‘M’

end

yes

“Male”

no

“Female”

ผู้ลลพัธ์�

เข�ยนโป็รแกรมื่ตัรวจสิอบเง��อนไขเพื้��อแบ,งนกุศึ.กุษ�ออกเป็"น 2 กุล�,ม ตัามื่เพื้ศ (Gender) คำ�อ เพื้ศช้าย (Male) หร�อเพื้ศหญิ ง (Female)

if (Gender == ‘M’) printf("Male\n");

else printf("Female\n");}

Enter ID): _53004100

Female

Enter Name: _AAAAAEnter Gender: _ F

10

#include <stdio.h>void main(){

int X, rem;printf("Enter X: "); scanf("%d", &X);

ตัวอยุ,�ง 5.4

Enter X: _3030 (Even)

start

Input x

rem = 0

end

rem = x%2

yes

“Even”

no

“Odd”

ผู้ลลพัธ์�

เข�ยนโป็รแกรมื่รบคำ า Integer (X) แลืะตัรวจสิอบว า X เป็"นเลืขคำ1 (Even) หร�อเลืขคำ�� (Odd)แนวคำ�ดำ: X เป็"น Even ถ้�า X หารด�วย 2 ลืงตัว

rem = X % 2; // remainder of X/2if (rem == 0) printf("%d (Even)\n", X);else printf("%d (odd)\n", X);

}

11

รู�ปแบบif (exp1) {statement1;…}else if (exp2) {statement2;…}else if (exp3) {statement3;…}...

else if (exp n-1) {statement n-1;…}else statement n;

5.4 คำ��สั่�ง nested-if

ผลืจาก Expression เป็"นได� 2 แบบคำ�อ

ถ้�า TRUE จะท�า statement 2

exp1=true statement 1yes

no

exp2=true statement 2yes

no

...expn-1=true statement n

yes

nostatement n

ถ้�า TRUE จะท�า statement 1 ถ้�า FALSE จะตัรวจสิอบ expression 2 ซึ่3�งได�ผลื 2 แบบ คำ�อ

statement1

statement2

... ทดสิอบเง��อนไขตั อไป็จนถ้3ง expression n-1

statementn-1

statement n

ถ้�า TRUE จะท�า statement n-1 หร�อ FALSE จะท�า statement n

12

เข�ยนโป็รแกรมื่ตัดำเกุรูดำจ�กุคำะแนนสั่อบ (X) ตัามื่เง��อนไข

80 -100 => grade = ‘A’70 - 79 => grade = ‘B’60 - 69 => grade = ‘C’50 - 59 => grade = ‘D’x < 50 => grade = ‘F’

ตัวอยุ,�ง 5.5

#include <stdio.h>void main(){ int ID, 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);

}

start

Grade = ‘F’

end

Input ID, Name,X

x >= 80yes

Grade = ‘A’

x >= 50yes

Grade = ‘D’

Grade

x >= 70yes

Grade = ‘B’

x >= 60yes

Grade = ‘C’

Enter ID: _53004100

Grade = B

ผู้ลลพัธ์�Enter Name: _AAAAAEnter X (0-100): _ 75

X=75

Grade=‘B’

13

เข�ยนโป็รแกรมื่อ าน Binary Expression (+, -, *, /) เช้ น 123.5+59.3 ท��มื่�ร1ป็แบบข�อมื่1ลืเข�า คำ�อ X Op Y

แนวคำ�ดำ: ทดสิอบคำ า Op ว าเป็"น +, -, *, หร�อ /

ตัวอยุ,�ง 5.6

#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 > 0else else printf(“%c \aUnknown operator\n”, op); printf("= %.2f\n", result);

}

start

Unknown Op

end

Input X,Op,Y

Op = ‘+’yes

result = X+Y

Op = ‘\’yes

result = X/Y

result

Op = ‘-’yes

result = X-Y

Op = ‘*’yes

result = X*Y

Enter ID: _123.5 + 59.3182.80

ผู้ลลพัธ์�

result=182.8

Op=‘+’

14

รู�ปแบบswitch (expression) { case value1: statement1; break;

5.5 คำ��สั่�ง switch

exp=1 st1yes

no

exp=2 st2yes

no...exp=n st n

yes

nost

st1

exp

st2 ...st3 st nn1 2 3

หัม�ยุเหัตั� switch = nested if

st1 st2 st3 st n

case value2: statement2; break;

ผลืจาก expression เป็"นได� n แบบคำ�อ ถ้�าคำ า expression ตัรงกบ value i จะท�า statement i คำ�าสิ�ง break (มื่�ผลืท�าให�จบ case ของคำ�าสิ�ง switch) คำ�าสิ�ง default (เป็"นกรณ�อ��นๆ ท��ไมื่ มื่�ในเง��อนไข 1-n)

... case value n: statementn; break; default: statement; break;}

15

ตัวอยุ,�งกุ�รูเข�ยุนโปรูแกุรูม รู��นเหัล��ไฮเทคำ “ ”โดำยุใช�ฟั2งกุ�ช�น if-elseเง �อนไข ถ้��อ�ยุ�ม�กุกุว,� 18

เช3คำเพัศึ หัญิ�ง หัรู อ ช�ยุ- ถ้��เพัศึช�ยุ ใหั�ไป โซนข�ยุเหัล��- ถ้��เพัศึหัญิ�ง ใหั�ไป โซนข�ยุไวท�- ถ้��อ�ยุ�น�อยุกุว,� 18 หั��มเข��

ใช� If-else สั่องช6น

16

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

17

อนน�6 แบบท��สั่อง 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

บทน�6จะสั่อนกุ�รูเช3คำเง �อนไขในอ�กุลกุษณะ เรู�ยุกุว,� switch...case เช,น สั่รู��งโปรูแกุรูมท��ม�เมน� กุดำ 1 ใหั�ท��อนน.ง กุดำ 2 ใหั�ท��อนน.ง กุดำ 0 ใหั�ออกุ เป7นตั�น นกุเรู�ยุนจ��ท��ยุงไง ถ้��เรู�ท��แบบท��เคำยุเรู�ยุนกุนม� เรู�กุ3ตั�องรูบคำ,�จ�กุผู้��ใช� ว,�กุดำอะไรู แล�วม�เข�� if..else สั่มมตั�ใหั�ตัวแปรูช �อ menu เกุ3บคำ,�เมน�ท��ผู้��ใช�เล อกุ (สั่มมตั�ว,�รูบคำ,�จ�กุ scanf ) เวล�เช3คำกุ3ท��ง�6if(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 อยุ,�ง เรู�กุ3เพั��มสั่,วน else if ไปเยุอะๆ แตั,เข�ยุนแบบน�6บ�งท�มนยุ�ว เรู�เลยุจะใช� switch...case ซ.�งม�รู�ปแบบ แบบน�6switch(ตัวแปรู) {    case คำ,� : คำ��สั่�งท��จะใหั�ท��;    // case คำ,� ตั�มดำ�วยุโคำลอน(กุดำ shft+เซม�โคำลอน)                   break;    case คำ,� : คำ��สั่�ง;                    break;    default :คำ��สั่�ง }

19

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

20

ตัวอยุ,�ง 7.9 (ใช�คำ��สั่�ง Swith Case)โปรูแกุรูมรูบรูะดำบผู้ลกุ�รูเรู�ยุนหัรู อเกุรูดำม�จ�กุแป;นพั�มพั� แล�วน��ม�พั�จ�รูณ�ตัรูวจสั่อบว,� เกุรูดำท��รูบเข��ม�น6นตัรูงกุบตัวอกุษรูใดำแล�วแสั่ดำงผู้ลดำงน�6

               ถ้��เป7น A แสั่ดำงข�อคำว�ม "Excellent"               ถ้��เป7น B แสั่ดำงข�อคำว�ม "Good"               ถ้��เป7น C แสั่ดำงข�อคำว�ม "So so"               ถ้��เป7น D แสั่ดำงข�อคำว�ม "Fails"               ถ้��เป7น E แสั่ดำงข�อคำว�ม "Get lost"               ถ้��เป7นตัวอกุษรูอ �น ๆ แสั่ดำงข�อคำว�ม "Invalid data"

21

สิามื่ารถ้น�ามื่าเข�ยนผงงานได�ดงน��

22

จากผงงานน�ามื่าเข�ยนโคำ�ดได�ดงน��

23

เข�ยนโป็รแกรมื่อ าน Binary Expression (+, -, *, /) เช้ น 123.5+59.3 ท��มื่�ร1ป็แบบข�อมื่1ลืเข�า คำ�อ X Op Y

แนวคำ�ดำ: ทดสิอบคำ า Op ว าเป็"น +, -, *, หร�อ / โดยใช้�คำ�าสิ�ง switch

ตัวอยุ,�ง 5.7

#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.3182.80

ผู้ลลพัธ์�

start

Unknown Op

end

Input X,Op,Y

Op = ‘+’yes

result = X+Y

Op = ‘\’yes

result = X/Y

result

Op = ‘-’yes

result = X-Y

Op = ‘*’yes

result = X*Y

24

เข�ยนโป็รแกรมื่รบคำ าวนเป็"นตัวเลข (1-7) แลืะพื้ มื่พื้.ผลืเป็"นข�อคำว�ม (Sun,Mon,Tue,Wed,Thu,Fri,Sat) เช้ น D=7 พื้ มื่พื้. Sat

ตัวอยุ,�ง 5.8

start

Input D

D

end

Print “Mon”

2

Print “Sat”

7

Print “Sun”

1

#include <stdio.h>void main(){ int D;

printf("Enter an integer (1-7): "); scanf("%d", &D);

Enter an integer (1-7): _7Sat

ผู้ลลพัธ์�

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); }

}

25

เข�ยนโป็รแกรมื่สิร�างรหสิ Soundex Code ท��แป็ลืงรหสิตัวอกษรเป็"น รหสิเลืขกลื6 มื่ 6 กลื6 มื่

Case Study-1

#include <stdio.h>#include <ctype.h>void main(){ char ch; int group;

printf("Enter a character: "); scanf("%c", &ch);ch = toupper(ch);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”);

}

0: A,E,I,O,U,H,W,Y1: B,F,P,V2: C,G,J,K,Q,S,X,Z3: D,T4: L5: M,N6: R

26

เข�ยนโป็รแกรมื่นบตัวอกุษรูแตั ลืะตัวใน Text File Case Study-2

#include <stdio.h>void main(){ char File[500]; int i, n[30]={0};

printf("Enter text File: "); gets(File);while(File[i]!=‘\0’) {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 characterfor(i=0; i<=25; i++)

printf(“#%c=%d, “, 97+i, n[i]); // ASCII ‘a’ = 97printf(“\n#0-9=%d, #others=%d”, n[26], n[27]);

}

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,#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