Upload
brittany-herring
View
25
Download
0
Embed Size (px)
DESCRIPTION
บทที่ 5. คำสั่งเงื่อนไข (Conditioning Statements). ผู้สอน : ครูพัชร นันท์ กุลว รพิ สิษฐ์. หัวข้อ. คำสั่งเงื่อนไขและตัวดำเนินการ คำสั่ง if คำสั่ง if-else คำสั่ง nested-if คำสั่ง switch การประยุกต์ใช้. condition. condition. statement1. statement 2. yes. condition. no. - PowerPoint PPT Presentation
Citation preview
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"
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