Transcript know1

การไหลของโปรแกรม
• โปรแกรมแบบง่าย ทางานรวดเดียวจาก
บนลงล่าง
START
Statement1
START
Statement
Statement2
Statement3
END
Statementn
โปรแกรมที่มคี ำสั่ งเดียว
END
โปรแกรมที่มหี ลำยคำสั่ ง
1
1
Relational Operators
• ใช้ สาหรับเปรี ยบเทียบความสัมพันธ์ของค่าคงที่หรือตัวแปร
(Operand) ที่กาหนดให้
Operator
คำอธิบำย
<
<=
>
>=
==
!=
เครื่องหมำย น้ อยกว่ำ
เครื่องหมำย น้ อยกว่ำหรือเท่ำกับ
เครื่องหมำย มำกกว่ำ
เครื่องหมำย มำกกว่ำหรือเท่ำกับ
เครื่องหมำย เท่ำกับ
เครื่องหมำย ไม่เท่ำกับ
2
Expression
• ใช้ เรี ยกแทนการนาค่าคงที่ หรื อตัวแปร(Operand) เขียน
ร่วมกับตัวดาเนินการ (Operator)
A = 10; B = 3; C = 20;
Expression
A+B
(A + B) – C
(C*B)+(A*B)
ผลลัพธ์
13
-7
90
3
Relational Operators
• ตัวอย่างการประมวลผลของ Relational Operators
i = 1; j = 2; k = 3;
Expression
ผลลัพธ์ท่ไี ด้
ค่ำที่ได้
i<j
(i + j) >= k
(j + k) > (i + 5)
k != 3
j == 2
true
true
false
false
true
1
1
0
0
1
4
Logical (Bitwise) Operators
• ใช้ สาหรับเปรี ยบเทียบ ค่าคงที่หรื อตัวแปร(Operand) เขียน
ร่วมกับตัวดาเนินการทางตรรกะ (Logical Operator)
Operator
คำอธิบำย
&&
เครื่องหมำย AND แปลว่ำ และ
||
เครื่องหมำย OR แปลว่ำ หรือ
5
AND Operators
• ตัวดาเนินการ และ จะเป็ นจริ งก็ตอ่ เมื่อ ตัวแปรทุกตัวมีคา่ เป็ น
จริ ง นอกจากนันเป็
้ นเท็จทังหมด
้
A
True
True
False
False
B
True
False
True
False
A && B
ผลลัพธ์
ค่ำที่ได้
T && T
T && F
F && T
F && F
True
False
False
False
1
0
0
0
6
AND Operators
• ตัวอย่างการประมวลผลของ AND Operators
i = 8; j = 4.5; k = ‘z’; // ascii ของ z เท่ากับ 122
Expression
(i >= 6) && (k == ‘z’)
(i >= 6) && (k == 122)
(j >= 0) && (j != 4.5)
(k > 0) && (j != 5)
(i < 0) && (j > 0) && (k > 0)
ผลลัพธ์ท่ไี ด้
T && T == T
T && T == T
T && F == F
T && T == T
F && T && T == F
ค่ำที่ได้
1
1
0
1
0
7
OR Operators
• ตัวดาเนินการ หรื อ จะเป็ นเท็จก็ตอ่ เมื่อ ตัวแปรทุกตัวมีคา่ เป็ น
เท็จ นอกจากนันเป็
้ นจริ งทังหมด
้
A
True
True
False
False
B
True
False
True
False
A || B
ผลลัพธ์
ค่ำที่ได้
T || T
T || F
F || T
F || F
True
True
True
False
1
1
1
0
8
OR Operators
• ตัวอย่างการประมวลผลของ OR Operators
i = 8; j = 4.5; k = ‘z’; // ascii ของ z เท่ากับ 122
Expression
(i >= 6) || (k == ‘z’)
(i >= 6) || (k != 122)
(j < 0) || (j != 4.5)
(k > 0) || (j != 5)
ผลลัพธ์ท่ไี ด้
T || T == T
T || F == T
F || F == F
T || T == T
ค่ำที่ได้
1
1
0
1
9
ตัวอย่างการเปรี ยบเทียบ
• ตัวอย่างการเปรี ยบเทียบ
i = 7; f = 4.5;
Expression
f>5
!(f > 5)
i <= 3
!(i <=3)
i > (f + 1)
!(i > (f + 1))
ผลลัพธ์ทีไ่ ด้
ค่าทีไ่ ด้
False
True
False
True
True
False
0
1
0
1
1
0
10
ลาดับความสาคัญ (Precedence)
ของตัวดาเนินการ
• แสดงลาดับความสาคัญ จากมากไปหาน้ อย ในการประมวลผล
ตัวดาเนินการต่างๆ
ประเภท
unary operators
multiply, divide and remainder
add and subtract
relational
equality
Operators
ทิศทำง
- , ++ , -- , ! , sizeof()
*,/,%
+,< , <= , > , >=
== , !=
R->L
L->R
L->R
L->R
L->R
11
ลาดับความสาคัญ (Precedence)
ของตัวดาเนินการ (ต่อ)
• แสดงลาดับความสาคัญ จากมากไปหาน้ อย ในการประมวลผล
ตัวดาเนินการต่างๆ
ประเภท
and
or
assignment operators
Operators
ทิศทำง
&&
||
=, +=, -=, *=, /=, %=
L->R
L->R
R->L
12
ตัวอย่างการประมวลผล
โดยพิจารณาลาดับความสาคัญ
i = 8; j = 4.5; k = ‘z’; // ascii ของ z เท่ากับ 122
Expression
ผลลัพธ์ท่ไี ด้
False
i + j <= 10
True && True == True
i >= 8 && k == ‘z’
True || False == True
k != ‘a’ || i + j <= 10
True || False && False
k != ‘a’ || i < j && k < i
== True && False
(ตัวอย่ำงที่ไม่ถูกต้ อง)
k != ‘a’ || i < j && k < i
(ตัวอย่ำงที่ถูกต้ อง)
== False
True || False && False
== True || False
== True
ค่ำที่ได้
0
1
1
0
1
13
การควบคุมการไหลของโปรแกรม
• คาสัง่ กาหนดเงื่อนไข
– โครงสร้ าง if
– โครงสร้ าง if…else
– โครงสร้ าง if แบบหลายเงื่อนไข
– โครงสร้ าง switch-case
• คาสัง่ วนซ ้า
– โครงสร้ าง while loop
– โครงสร้ าง do…while loop
– โครงสร้ าง for loop
• โปรแกรมย่อย (ฟั งก์ชนั )
14
14
โครงสร้าง if
Flowchart
C Syntax
if (condition)
{
statement1;
:
statementN;
}
• ส่วนของ condition ตีความเป็ น
ข้ อมูลแบบ int
• ทาคาสัง่ ใน {} หาก condition
เป็ นจริ ง (ไม่เป็ นศูนย์)
• หากมีคาสัง่ เดียวไม่จาเป็ นต้ องใช้
วงเล็บปี กกา
START
condition
false
true
Statement
Statement
END
15
15
ตัวอย่าง if
#include <stdio.h>
int main()
{
int i=101,j=100;
if(i>j)
printf("I > J");
getch();
return 0;
}
if1.cpp
I>J
16
16
โครงสร้าง if…else
Flowchart
C Syntax
START
true
condition
false
Statementt1
Statementf1
Statementt2
Statementf2
END
if (condition)
{
statementt1;
statementt2;
}
else
{
statementf1;
statementf2;
}
17
17
ตัวอย่าง if…else
#include <stdio.h>
int main()
{
int i=101,j=102;
if(i>j)
printf("I > J");
else
printf("I <= J");
getch();
return 0;
}
ifelse1.cpp
I <= J
18
18
โครงสร้าง if แบบหลายเงื่อนไข
x==1
true
Action1;
true
Action2;
true
Action3;
true
Action4;
false
x==2
false
x==3
false
x==4
false
Default_Action;
if (x==1)
Action1;
else if (x==2)
Action2;
else if (x==3)
Action3;
else if (x==4)
Action4;
else
Default_Action;
19
19
ตั
ว
อย่
า
ง
if
แบบหลายเงื
่
อ
นไข
#include <stdio.h>
int main()
{
int i=7;
if(i>7) printf("> 7");
else if(i>6) printf("> 6");
else if(i>5) printf("i> 5");
else printf("1 , 2 , 3");
getch();
return 0;
}
ifelse2.cpp
>6
20
20
โครงสร้าง switch-case
x==1
true
Action1;
true
Action2;
true
Action3;
true
Action4;
false
x==2
false
x==3
false
x==4
false
Default_Action;
switch (x)
{
case 1: Action1;
break;
case 2: Action2;
break;
case 3: Action3;
break;
case 4: Action4;
break;
default: Default_Action;
break;
}
21
21
ตัวอย่าง switch-case
#include <stdio.h>
int main()
{
int i=2;
switch(i)
{
case 2 : printf("2");
break;
case 1 : printf("1");
break;
default : printf("NO MATCH");
break;
}
getch();
return 0;
}
switch1.cpp
2
22
22
ทำใบงำนที่ 3.1-3.5
23
การกาหนดค่าตัวนับ
ตัวอย่าง
i++
i-i+=5
i-=5
= i = i+1
= i = i-1
= i = i+5
= i = i-5
24
โครงสร้าง while ลูป
while (condition)
{
stmt1;
stmt2;
:
stmtN;
}
• วนทาคาสัง่ stmt1 ถึง stmtN
ตราบเท่าที่ condition เป็ น
จริ ง
START
condition
false
true
Statement
Statement
END
25
25
ลูปวนนับ (Counting Loop)
• หากพิจารณาโครงสร้ างของลูปที่ใช้ ในโปรแกรมส่วนใหญ่ มักจะเป็ นลูป
แบบวนนับ
• ลูปวนนับจะมีสว่ นประกอบดังตัวอย่างต่อไปนี ้เสมอ
ตัวแปรที่ใช้ นับ
คำสั่งที่ถูกทำซำ้
กำรปรับค่ำตัวนับ
int i, sum = 0;
i = 1;
while (i <= 10)
{
sum = sum + i;
i = i + 1;
}
printf("Sum = %d\n", sum);
ส่วนกำหนดค่ำ
เริ่มต้ น
เงื่อนไขของตัวนับ
26
26
ตัวอย่างโครงสร้าง while ลูป
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
printf("Hello %d\n",i);
i++;
}
getch();
return 0;
}
while1.c
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
Hello 10
27
27
โครงสร้
า
ง
while
ลู
ป
(INFINITY
LOOP)
#include <stdio.h>
int main()
{
int i=1;
while(1)
{
printf("Hello %d\n",i);
if(i==10)
break;
i++;
}
getch();
return 0;
while2.c
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
Hello 10
28
}
28
โครงสร้าง do…while ลูป
do
{
START
stmt1;
stmt2;
:
stmtN;
} while (condition);
• ทาคาสัง่ stmt1...stmtN
และวนทาซ ้าอีกตราบเท่าที่
condition ยังคงเป็ นจริ ง
• นัน่ คือ stmt1...stmtN จะถูก
กระทาอย่างน้ อยหนึง่ ครัง้
Statement1
StatementN
true
condition
false
END
29
29
ตัวอย่าง do…while ลูป
#include <stdio.h>
int main()
{
int i=1;
do
{
printf("Hello %d\n",i);
i++;
}
while(i<=10);
getch();
return 0;
}
dowhile1.c
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
Hello 10
30
30
โครงสร้าง for ลูป
• เป็ นโครงสร้ างที่ให้ ความสะดวกในการเขียนลูปวนนับ
for (init_stmt; condition; update_stmt)
{
statement1;
statement2;
:
statementN;
}
• การทางาน
1. ทาคาสัง่ init_stmt หนึง่ ครัง้
2. ถ้ า condition เป็ นจริง ทาคาสัง่ statement1...statementN
31
31
การทางานของ for ลูป
START
init_stmt
for (init_stmt; condition; update_stmt)
{
statement1;
statement2;
:
statementN;
}
condition
false
true
Statement1
StatementN
update_stmt
END
32
32
ตัวอย่าง for ลูป
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=10;i++)
{
printf("Hello %d",i);
printf("\n");
}
getch();
return 0;
}
for1.c
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
Hello 10
33
33
โปรแกรมย่อย (Subroutine)
• ในภาษาซีเรี ยกว่า "ฟั งก์ชนั " (Function)
• เป็ นส่วนของโปรแกรมที่มีหน้ าที่การทางานชัดเจนในตัวเอง ซึง่
ถูกเรี ยกใช้ ในโปรแกรมหลักอีกทีหนึง่
• การเขียนโปรแกรมโดยแยกเป็ นฟั งก์ชนั มีข้อดีหลายประการ
– ช่วยแบ่งงานที่ซบั ซ้ อนเป็ นงานย่อยหลายงาน
– ลดการเขียนโค้ ดที่ซ ้าซ้ อน
– ซ่อนรายละเอียดไว้ ในส่วนอื่น ทาให้ โปรแกรมเข้ าใจได้ ง่ายขึ ้น
– ฟั งก์ชนั ที่เขียนขึ ้นมาสามารถนาไปใช้ ในโปรแกรมอื่นได้
34
34
ชนิดของฟังก์ชนั
• ฟั งก์ชนั มาตรฐาน (Standard Functions)
– เป็ นฟั งก์ชนั ที่อยูใ่ นชุดไลบรารี ของภาษาซี เรี ยกใช้ ได้ ทนั ที
– เช่น printf(), scanf(), ...
• ฟั งก์ชนั ที่ผ้ ใู ช้ กาหนด (User Defined Functions)
– เป็ นฟั งก์ชนั ที่ผ้ ใู ช้ สร้ างขึ ้นเอง
– เรี ยกใช้ ใน main() หรื อจากฟั งก์ชนั อื่นๆ ได้ เหมือนฟั งก์ชนั มาตรฐาน
35
35
ตัวอย่างฟังก์ชนั มาตรฐาน
กลุ่มฟังก์ชนั
เฮดเดอร์ไฟล์
จัดกำรอินพุท/เอำท์พุท
stdio.h
คณิตศำสตร์
math.h
แยกประเภทข้ อมูลอักขระ
ctype.h
จัดกำรกับสตริง
string.h
ตัวอย่างฟังก์ชนั
scanf, printf,
gets, puts
sin, cos, exp, pow
isalpha, isdigit,
islower, isupper
strlen, strcpy,
อื่น ๆ
stdlib.h
rand, atoi, atof
strcmp
36
36
ฟังก์ชนั ที่ผใู้ ช้กาหนดเอง
• แบบไม่สง่ ค่ากลับ
– ระบุชนิดข้ อมูล void
– ไม่ต้องมีคาสัง่ return
• แบบส่งค่ากลับ
– ระบุชนิดข้ อมูลที่ต้องการ
– ใช้ คาสัง่ return ส่งค่าคืนตาม
ชนิดที่ระบุ
void say_hi(char *name)
{
printf("Hi, %s\n", name);
}
int max(int a, int b)
{
if (a > b)
return a;
else
return b;
}
37
37
การไหลของโปรแกรมเมื่อใช้ฟังก์ชนั
#include <stdio.h>
int incr(int i)
{
int j;
j = i + 1;
return j;
}
function1.c
int main()
{
int k, m = 4;
k = incr(m);
printf ("k = %d, m = %d\n", k, m);
getch();
return 0;
}
38
38
โปรแกรมแสดงข้อความ (Function)
แบบไม่ส่งค่ากลับ
#include <stdio.h>
void print1()
{
printf(“Hello”);
printf(“\n”);
}
function2.c
int main()
{
print1();
print1();
getch();
return 0;
}
39
39
โปรแกรมคานวณภาษี (Function)
แบบส่ งค่ากลับ
#include <stdio.h>
float cal_tax(float i)
{
float ctax;
ctax = i*0.07;
return ctax;
}
function3.c
int main()
{
float money=7290,ff;
ff = cal_tax(money);
printf(“%f”,ff);
getch();
return 0;
}
40
40
ขั้นตอนวิธีกบั การโปรแกรม
• การออกแบบขันตอนวิ
้
ธีเป็ นส่วนสาคัญในการพัฒนาโปรแกรม
• การ "เขียนโปรแกรม" เป็ นเพียงการแปลงขันตอนวิ
้
ธีให้ อยูใ่ นรู ปที่ยอมรับ
ได้ โดยตัวภาษา
41
41
ตัวอย่าง
• เขียนโปรแกรมเพื่อรับตัวเลขระบุขนาด และพิมพ์รูปสามเหลี่ยมที่มี
ขนาดตามที่กาหนด
Enter N: 3
*
**
***
Enter N: 5
*
**
***
****
*****
42
42
ข้อผิดพลาดที่พบบ่อย
#include <stdio.h>
int main ()
{
int i;
scanf("%d", i);
if (i = 0)
puts("false");
else
puts("true");
ส่งค่ำ i ให้ scanf แทนที่จะส่ง
ตำแหน่ง
ใช้ คำสั่งกำหนดค่ำ (=) แทน
กำรเปรียบเทียบ (==)
return 0;
}
43
43
THANK YOU
QUESTION ?
44