Transcript Document

การเขียนโปรแกรมเบือ้ งต้ นด้ วยภาษาซี
เนื้ อหา
• Dev-C++: ซอฟต์แวร์ช่วยพัฒนาโปรแกรม
• โครงสร้ างโปรแกรมภาษาซี
• ชนิดของข้ อมูล ตัวแปร
• คาสั่งควบคุมการไหลของโปรแกรม
• ฟังก์ชัน
• ข้ อผิดพลาดที่พบบ่อย
2
เริ่มต้นใช้งาน Dev-C++
• สร้ างไฟล์ใหม่จากเมนู
File > New > Source File
• ทดลองกรอกโปรแกรม
ตามตัวอย่างด้ านขวา
• เซฟไฟล์โดยใช้ นามสกุล .c

เช่น first.c
3
เริ่มต้นใช้งาน Dev-C++
• ทดลองคอมไพล์และรันโปรแกรม


โดยคลิ้กปุ่ ม
หรือกด F9
• หากดูผลลัพธ์ไม่ทนั :

เพิ่มคาสั่ง getch() ด้ านท้ ายของโปรแกรม
4
ทาใบงานที่ 1.1
5
ตัวอย่างโปรแกรมภาษาซี
ฟังก์ชัน main ระบุ
จุดเริ่มต้ นของโปรแกรม
คืนค่ากลับเป็ น int
ฟังก์ชันมาตรฐาน printf()
ใช้ พิมพ์ข้อความออกทาง
หน้ าจอ
#include <stdio.h>
อ่านไฟล์ stdio.h เพื่อเอา
ฟังก์ชันมาตรฐานมาใช้
int main()
{
ประกาศตัวแปรแบบ int
int a, b, sum;
printf("Enter A: ");
สามตัวคือ a, b และ sum
scanf("%d", &a);
printf("Enter B: ");
ฟังก์ชันมาตรฐาน scanf()
scanf("%d", &b);
ใช้ รับอินพุทจากแป้ นพิมพ์
sum = a+b;
printf("Sum = %d\n", sum);
getch();
return 0;
เมื่อจบในแต่ละคาสั่งให้ ปิด
}
คืนค่า 0 เพื่อระบุว่า
โปรแกรมจบการทางานโดย
ไม่มีข้อผิดพลาด
ท้ ายด้ วย ;
6
การเขียนหมายเหตุ (Comment)
• เป็ นการเขียนอธิบายการทางานเพื่อให้ เข้ าใจและอ่าน
โปรแกรมได้ ง่ายขึ ้นและจะไม่ถกู ประมวลผล
• รูปแบบการเขียนหมายเหตุ
/*
… ข้ อความที่ต้องการเขียนอธิบาย(หลายบรรทัด)… */
//
เช่น
… ข้ อความที่ต้องการเขียนอธิบาย (หนึง่ บรรทัด) …
/* arithmetic
expression */
// create 22/06/2552
7
ค่าคงที่อกั ขระพิเศษ
\a
ตัวอักษรเรียกความสนใจ (Beep)
\n
ขึ้นบรรทัดใหม่ (newline)
\\
backslash
\?
เครื่ องหมายคาถาม
\’
ฝนทอง
\”
ฟั นหนู
8
โครงสร้างหน่วยความจา
ตาแหน่งที่อยู่ ข้อมูลที่เก็บ
(address)
(data)
32
0000
67
0001
255
0002
0
0003
121
0004
:
:
1 ช่อง = 1 ไบต์ (8 บิต)
9
ชนิดข้อมูล
char
ขนาด
(ไบต์ )
1
short
2
การประกาศ
ค่ าต่าสุด
ค่ าสูงสุด
-128
+127
-32,768
+32,767
-32,768 หรื อ -2,147,483,648
+32,767 หรื อ +2,147,483,647
int
2 หรื อ 4
long
4
-2,147,483,648
+2,147,483,647
float
4
3.4 * 10-38
3.4 * 1038
double
8
1.7 * 10-308
1.7 * 10-308
10
ตัวแปร (Variable)
• ใช้ แทนการอ้ างถึงหน่วยความจา ณ ตาแหน่งหนึ่ง ๆ

เพื่อใช้ ในการเก็บข้ อมูล (ที่เปลี่ยนค่าได้ ) ในขณะ
ประมวลผล
ตาแหน่ ง
ค่ า
short a, b, sum;
a = 10;
b = 5;
sum = a+b;
b มีค่า 5 (อ้ างถึงค่า)
:
:
1000
10
2
1001
30
0
1002
211
5
1003
5
0
1004
15
8
1005
23
0
:
:
a
b
sum
b มีค่า 1002 (อ้ างถึงตาแหน่ง)
11
กฏในการตั้งชื่อตัวแปร (Variable)

ประกอบด้ วยอักษร ตัวเลข และเครื่ องหมาย underscore

ตัวแรกต้ องเป็ นตัวอักษรหรื อ เครื่ องหมาย underscore
(_)
(_)
ความยาว 1-32 ตัวอักษร
 ห้ ามมีเครื่ องหมายอื่นยกเว้ น $
 Case sensitive
 ห้ ามตังชื
้ ่อซ ้ากับคาสงวน (Reserve words)

12
คาสงวนในภาษา C
auto
double
int
struct
break
else
long
switch
case
enum
register typedef
char
extern
return
union
const
float
short
unsigned
continue for
signed
void
default
while
do
goto sizeof
13
รูปแบบการประกาศชนิดตัวแปร
type variable-list
[=value] ;
• variable-list หมายถึงชื่อตัวแปรที่ต้องการ
ประกาศ ถ้ ามีมากกว่า 1 ตัว แยกกันด้ วยเครื่ องหมาย
คอมม่า ( , )
 type
หมายถึงชนิดของตัวแปร
 value
หมายถึงค่าเริ่ มต้ นที่ต้องการกาหนดให้ กบั
ตัวแปร
14
ตัวอย่าง การประกาศชนิดตัวแปร
int a=1;
int lower;
float
man,ratio;
double point;
char
ch,c=‘5’,name;
15
ค่าคงที่
#include <stdio.h>
#define PI 3.414
int main()
{
printf("%.3f",PI);
getch();
return 0;
}
const.c
3.414
16
นิพจน์ (Expression)
• นิพจน์ หมายถึง การนาตัวแปร ค่าคงที่ มาสัมพันธ์กนั
โดยใช้ เครื่องหมายอย่างหนึ่งอย่างใดเป็ นตัวเชื่อม เช่น
นิพจน์คณิตศาสตร์
นิพจน์ภาษา C
a+b
cd
(a+b)/ (c*d)
10x + 3xy + 10y
10 * x + 3*x*y + 10*y
17
กฎเกณฑ์ในการเขียนนิพจน์
• 1. ห้ ามเขียนตัวแปร 2 ตัวติดกันโดยไม่มีเครื่องหมาย
เช่น ab ในภาษา C ต้ องเขียน a*b จะเขียนเป็ น ab
ไม่ได้ เพราะจะถือเป็ นชื่อตัวแปรตัวเดียวชื่อ ab ไม่ใช่
ค่า a คูณ b
• 2. ถ้ าเขียนนิพจน์โดยมีค่าของตัวแปรหรือค่าคงที่
ต่างชนิดกันในนิพจน์เดียวกัน ภาษา C จะเปลี่ยน
ชนิดของข้ อมูลที่มีขนาดเล็กให้ เป็ นชนิดของข้ อมูลที่
ใหญ่ข้ นึ เช่น
18
ถ้ าใช้
char
“
“
“
“
“
“
“
“
float
int
int
int
int
long
อะไร
อะไร
กับ
กับ
กับ
กับ
กับ
กับ
กับ
กับ
กับ
int
จะเปลี่ยนเป็ น
int
double
float
long
double
unsigned
double
long
long double
“
“
“
“
“
“
“
“
double
float
long
double
unsigned
double
long
long double
19
ข้ อมูลชนิดตัวอักษร
• ตัวอักษร A-Z, 0-9 และสัญลักษณ์ตา่ ง ๆ ข้ อมูล
ชนิด
ตัวอักษรจะใช้ จานวน 8 บิตในการเก็บตัวอักษร 1 ตัว ซึง่ ใน
ภาษาซีไม่มีข้อมูลชนิดข้ อความ หรื อ สตริ ง (String) ข้ อมูลชนิด
ข้ อความจะประกอบด้ วยตัวอักษรหลาย ๆ ตัวเรี ยงติดกันเป็ น
ข้ อความ โดยใช้ อาร์ เรย์ (Array) ในการจัดเก็บ ซึง่ เราเรี ยกว่า
Array of Character อาร์ เรย์ที่ใช้ เก็บข้ อมูลชนิดข้ อความ จะต้ อง
มีจานวนมากกว่าความยาวของข้ อความ หรื อสตริ งอย่างน้ อย
1 ตัวอักษร เพื่อใช้ เก็บสตริ งศูนย์ (Null String) เพื่อบอกให้ ทราบ
ว่า สิ ้นสุดความยาวของข้ อความ ซึง่ ในภาษาซีจะใช้ \0 แทน
สตริ งศูนย์
20
เครื่ องหมายคณิตศาสตร์
• เครื่ องหมายคณิตศาสตร์ (Arithmetic Operators)
เครื่ องหมาย
+
*
/
%
--
++
ความหมาย
การบวก
การลบ
การคูณ
การหาร
การหารเอาแต่เศษไว้
ตัวอย่าง
A+B
A-B
A*B
A/B
5%3 = 2
(Modulus)
การลดค่าลงครัง้ ละ 1
A--
มีคา่ เท่ากับ
A = A-1
การเพิ่มค่าขึ ้นครัง้ ละ 1
A++
มีคา่ เท่ากับ
A = A+1
21
นิพจน์ คณิตศาสตร์ (Expression)
• นิพจน์คณิตศาสตร์ ประกอบด้ วย ตัวแปร หรื อ ค่าคงที่ ทีเ่ ชื่อม
กันด้ วยเครื่ องหมายคณิตศาสตร์ การเขียนนิพจน์คณิตศาสตร์
จะคล้ ายกับสมการคณิตศาสตร์ เช่น
x = (n1 + n2) x10
• เมื่อเขียนเป็ นนิพจน์คณิตศาสตร์ จะได้ ดงั นี ้
x = (n1 + n2) * 10
• นิพจน์ที่อยูช่ นในสุ
ั ้ ดจะถูกประมวลผลก่อน เครื่ องหมาย
คณิตศาสตร์ ที่มีลาดับเดียวกันจะถูกประมวลผลจากซ้ ายไปขวา
22
2. ตัวดำเนินกำรเลขคณิ ต (arithmetic operators)
เป็ นตัวดำเนินกำรที่ทำให้ เกิดกำรกระทำทำงคณิตศำสตร์ ประกอบด้ วย
operator
ควำมหมำย
+
กำรบวก
-
กำรลบ และ unary operator
*
กำรคูณ
/
กำรหำร ซึ่งจะเป็ นกำรหำผลลัพธ์ จำกกำรหำร
%
( modulo)
กำรหำเศษ(remainder) ที่เป็ นจำนวนเต็มจำกกำรหำร
(operand ต้องเป็ นจำนวนเต็มทั้งคู่)
23
ตัวอย่าง แสดงขั้นตอนการทางานของ
ตัวดาเนินการ
• 4+3*2
4+ 6
• 9 * 2 - 15/3 + 7
18 - 5 + 7
13 + 7
20
24
จงหำค่ ำนิพจน์ ต่อไปนี้
-(-5+(2*4-1))+((6+2)*5+8)/4
-(-5+(8-1))+(8*5+8)/4
-(-5+7)+(40+8)/4
-(2)+48/4
-2+12
10
25
ลาดับการประมวลผลเครื่องหมายคณิตศาสตร์
เครื่องหมายทาง
คณิตศาสตร์
++, --
ลาดับการประมวลผล
- (เครื่ องหมายลบหน้ า
ตัวเลข)
*/%
2
+-
4
1
3
26
ตัวอย่าง เช่ น
•
•
•
•
•
•
2+8*2 = 18 นา 8 คูณ 2 ได้ 16 แล้ วบวกด้ วย 2
(2+8)*2 = 20 นา 8 บวก 2 ได้ 10 แล้ วคูณด้ วย 2
4/2*3
= 6 นา 4 หารด้ วย 2 ได้ 2 แล้ วคูณด้ วย 3
++ n
หมายถึง เพิ่มค่า n อีก 1
-- n
หมายถึง ลดค่า n ลง 1
y = x+1
หมายถึง การเพิ่มค่า y อีก 1 หรื อมีคา่
เท่ากับ y = x++ หรื อ ++x
• y = x-1
หมายถึง การลดค่า y ลง 1 หรื อมีคา่
เท่ากับ y = x-- หรื อ --x
27
แบบฝึ กหัดท้ายบท
1. จงหาผลลัพธ์ของนิพจน์ตอ่ ไปนี ้ เมื่อกาหนดให้ n1=5 และ n2=10
1.1 x = (n1 + n2) / 3
1.2 x = n1 + n2 / 3
1.3 x = n2%n1
1.4 x = n1-1.5 x = n2++
2. จงหาค่าของนิพจน์ตอ่ ไปนี ้ ถ้ ากาหนดให้ a = 2, b = 3, c = 4,
d = 5, e = 6 และ f = 8
2.1
2.2
2.3
2.4
a + e / f -- * c
(f - e) * (c / a)
a*d/a+e/b
a * (d / (a + e)) / b
28
แบบฝึ กหัดท้ายบท
29
ทาใบงานที่ 2.1
30
อาร์เรย์และสตริง
• ข้ อมูลแบบอาร์เรย์เป็ นการรวมกลุ่มข้ อมูลชนิดเดียวกันไว้
เป็ นแถวลาดับ
• จัดเป็ นตัวแปรแบบตัวชี้ประเภทหนึ่ง
short arr[3];
arr[0] = 50;
arr[2] = 89;
arr มีค่า 20
arr[0] มีค่า 50
arr[1] มีค่า 211
arr[2] มีค่า 89
ตาแหน่ ง
ค่ า
:
:
0020
50
2
0021
30
0
0022
211
0023
5
0024
89
8
0025
23
0
0026
33
0027
12
:
:
arr
31
ข้อมูลประเภทสายอักขระ (สตริง)
• “สตริง”
คืออาร์เรย์ของอักขระโดด (array of char)
char s[5] = "Hello";
printf("%c %c %c\n", s[0], s[1], s[2]);
S
0 1 2 3 4
H e l l o
ผลลัพธ์:
H e l
32
การรับ/แสดงผล
• ฟังก์ชันมาตรฐาน (เพื่อการรับ/แสดงผลข้ อมูล) ถูก
เตรียมไว้ ในเฮดเดอร์ไฟล์ “stdio.h”
• ฟังก์ชันรับข้ อมูล

scanf สาหรับตัวแปรทุกชนิด (ระบุด้วย %format)
• ฟังก์ชันแสดงผลข้ อมูล (Output Function)

printf สาหรับตัวแปรทุกชนิด (ระบุด้วย %format)
33
การแสดงผลข้อมูล
• ทุกอย่างในหน่วยความจาล้ วนเป็ นตัวเลข
• การแสดงผลลัพธ์ด้วยฟังก์ชัน printf จึงต้ องระบุ
รูปแบบตามที่เราต้ องการจะเห็น
int c = 65;
printf("c (as a number) = %d\n", c);
printf("c (as a character) = %c\n", c);
หน่ วยความจา
:
2
30
65
ผลลัพธ์:
c (as a number) = 65
c (as a character) = A
c
5
8
23
:
34
%format ใน scanf และ printf
ชนิดข้อมูล
จานวนเต็ม
จานวนมีทศนิยม
อักขระโดด
สตริง
ชนิดตัวแปร
%format
int
%d
long
%ld
long long
%lld
unsigned int
%u
unsigned long
%lu
unsigned long long
%llu
float
%f
double
%lf
char
%c
char array[]
%s
35
ตัวอย่างการใช้ scanf
char name[20];
int age;
printf("Enter your name and age: ");
scanf("%s %d", name, &age);
printf("Hello %s.
name, age);
You are %d years old.\n",
ผลลัพธ์:
Enter your name and age: Tony 38
Hello Tony. You are 38 years old.
36
การไหลของโปรแกรม
• โปรแกรมแบบง่าย ทางานรวด
เดียวจากบนลงล่าง
START
Statement1
START
Statement
Statement2
Statement3
END
Statementn
โปรแกรมที่มคี าสั่ งเดียว
END
โปรแกรมที่มหี ลายคาสั่ ง
37
Relational Operators
• ใช้ สาหรับเปรียบเทียบความสัมพันธ์ของค่าคงที่หรือตัวแปร
(Operand) ที่กาหนดให้
Operator
คาอธิบาย
<
<=
>
>=
==
!=
เครื่องหมาย น้ อยกว่า
เครื่องหมาย น้ อยกว่าหรือเท่ากับ
เครื่องหมาย มากกว่า
เครื่องหมาย มากกว่าหรือเท่ากับ
เครื่องหมาย เท่ากับ
เครื่องหมาย ไม่เท่ากับ
38
Expression
• ใช้ เรียกแทนการนาค่าคงที่ หรือตัวแปร(Operand) เขียนร่วมกับ
ตัวดาเนินการ (Operator)
A = 10; B = 3; C = 20;
Expression
A+B
(A + B) – C
(C*B)+(A*B)
ผลลัพธ์
13
-7
90
39
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
40
Logical (Bitwise) Operators
• ใช้ สาหรับเปรียบเทียบ ค่าคงที่หรือตัวแปร(Operand) เขียน
ร่วมกับตัวดาเนินการทางตรรกะ (Logical Operator)
Operator
คาอธิบาย
&&
เครื่องหมาย AND แปลว่า และ
||
เครื่องหมาย OR แปลว่า หรือ
41
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
42
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
43
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
44
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
45
ตัวอย่างการเปรียบเทียบ
• ตัวอย่างการเปรียบเทียบ
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
46
ลาดับความสาคัญ (Precedence)
ของตัวดาเนินการ
• แสดงลาดับความสาคัญ จากมากไปหาน้ อย ในการประมวลผล
ตัวดาเนินการต่างๆ
ประเภท
unary operators
multiply, divide and remainder
add and subtract
relational
equality
Operators
ทิศทาง
- , ++ , -- , ! , sizeof()
*,/,%
+,< , <= , > , >=
== , !=
R->L
L->R
L->R
L->R
L->R
47
ลาดับความสาคัญ (Precedence)
ของตัวดาเนินการ (ต่อ)
• แสดงลาดับความสาคัญ จากมากไปหาน้ อย ในการประมวลผล
ตัวดาเนินการต่างๆ
ประเภท
and
or
assignment operators
Operators
ทิศทาง
&&
||
=, +=, -=, *=, /=, %=
L->R
L->R
R->L
48
ตัวอย่างการประมวลผล
โดยพิจารณาลาดับความสาคัญ
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
49
การควบคุมการไหลของโปรแกรม
• คาสั่งกาหนดเงื่อนไข
โครงสร้ าง if
 โครงสร้ าง if…else
 โครงสร้ าง if แบบหลายเงื่อนไข
 โครงสร้ าง switch-case

• คาสั่งวนซา้
โครงสร้ าง while loop
 โครงสร้ าง do…while loop
 โครงสร้ าง for loop

• โปรแกรมย่อย (ฟังก์ชัน)
50
โครงสร้าง if
Flowchart
C Syntax
if (condition)
{
statement1;
:
statementN;
}
• ส่วนของ condition ตีความเป็ น
ข้ อมูลแบบ int
• ทาคาสั่งใน {} หาก condition
เป็ นจริง (ไม่เป็ นศูนย์)
• หากมีคาสั่งเดียวไม่จาเป็ นต้ องใช้
วงเล็บปี กกา
START
condition
false
true
Statement
Statement
END
51
ตัวอย่าง if
#include <stdio.h>
int main()
{
int i=101,j=100;
if(i>j)
printf("I > J");
getch();
return 0;
}
if1.c
I>J
52
โครงสร้าง if…else
Flowchart
C Syntax
START
true
condition
false
Statementt1
Statementf1
Statementt2
Statementf2
END
if (condition)
{
statementt1;
statementt2;
}
else
{
statementf1;
statementf2;
}
53
ตั
ว
อย่
า
ง
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.c
I <= J
54
โครงสร้าง 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;
55
ตั
ว
อย่
า
ง
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.c
>6
56
โครงสร้าง 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;
}
57
ตัวอย่าง 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.c
2
58
ทาใบงานที่ 3.1-3.5
59
การกาหนดค่าตัวนับ
ตัวอย่าง
i++
i-i+=5
i-=5
=
=
=
=
i = i+1
i = i-1
i = i+5
i = i-5
60
โครงสร้าง while ลูป
while (condition)
{
stmt1;
stmt2;
:
stmtN;
}
• วนทาคาสั่ง stmt1 ถึง stmtN
ตราบเท่าที่ condition เป็ น
จริง
START
condition
false
true
Statement
Statement
END
61
ลูปวนนับ (Counting Loop)
• หากพิจารณาโครงสร้ างของลูปที่ใช้ ในโปรแกรมส่วนใหญ่
มักจะเป็ นลูปแบบวนนับ
• ลูปวนนับจะมีส่วนประกอบดังตัวอย่างต่อไปนี้เสมอ
ตัวแปรที่ใช้ นับ
คาสั่งที่ถูกทาซา้
การปรับค่าตัวนับ
int i, sum = 0;
i = 1;
while (i <= 10)
{
sum = sum + i;
i = i + 1;
}
printf("Sum = %d\n", sum);
ส่วนกาหนดค่า
เริ่มต้ น
เงื่อนไขของตัวนับ
62
ตั
ว
อย่
า
งโครงสร้
า
ง
while
ลู
ป
#include <stdio.h>
while1.c
int main()
{
int i=1;
while(i<=10)
{
printf("Hello %d\n",i);
i++;
}
getch();
return 0;
}
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
Hello 10
63
โครงสร้
า
ง
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
64
โครงสร้าง do…while ลูป
do
{
START
stmt1;
stmt2;
:
stmtN;
} while (condition);
Statement1
StatementN
• ทาคาสั่ง stmt1...stmtN
และวนทาซา้ อีกตราบเท่าที่
condition ยังคงเป็ นจริง
• นั่นคือ stmt1...stmtN จะถูก
กระทาอย่างน้ อยหนึ่งครั้ง
true
condition
false
END
65
ตัวอย่าง 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
66
โครงสร้าง for ลูป
• เป็ นโครงสร้ างที่ให้ ความสะดวกในการเขียนลูปวนนับ
for (init_stmt; condition; update_stmt)
{
statement1;
statement2;
:
statementN;
}
• การทางาน
1. ทาคาสั่ง init_stmt หนึ่งครั้ง
2. ถ้ า condition เป็ นจริง ทาคาสั่ง statement1...statementN
3. ทาคาสั่ง update_stmt จากนั้นกลับไปทาข้ อ 2
67
การทางานของ for ลูป
START
init_stmt
for (init_stmt; condition; update_stmt)
{
statement1;
statement2;
:
statementN;
}
condition
false
true
Statement1
StatementN
update_stmt
END
68
ตั
ว
อย่
า
ง
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
69
โปรแกรมย่อย (Subroutine)
• ในภาษาซีเรียกว่า "ฟังก์ชัน" (Function)
• เป็ นส่วนของโปรแกรมที่มหี น้ าที่การทางานชัดเจนในตัวเอง ซึ่ง
ถูกเรียกใช้ ในโปรแกรมหลักอีกทีหนึ่ง
• การเขียนโปรแกรมโดยแยกเป็ นฟังก์ชันมีข้อดีหลายประการ




ช่วยแบ่งงานที่ซับซ้ อนเป็ นงานย่อยหลายงาน
ลดการเขียนโค้ ดที่ซา้ ซ้ อน
ซ่อนรายละเอียดไว้ ในส่วนอื่น ทาให้ โปรแกรมเข้ าใจได้ ง่ายขึ้น
ฟังก์ชันที่เขียนขึ้นมาสามารถนาไปใช้ ในโปรแกรมอื่นได้
70
ชนิดของฟังก์ชนั
• ฟังก์ชันมาตรฐาน (Standard Functions)
เป็ นฟังก์ชันที่อยู่ในชุดไลบรารีของภาษาซี เรียกใช้ ได้ ทนั ที
 เช่ น printf(), scanf(), ...

• ฟังก์ชันที่ผ้ ูใช้ กาหนด (User Defined Functions)
เป็ นฟังก์ชันที่ผ้ ูใช้ สร้ างขึ้นเอง
 เรียกใช้ ใน main() หรือจากฟั งก์ชันอื่นๆ ได้ เหมือนฟั งก์ชัน
มาตรฐาน

71
ตัวอย่างฟังก์ชนั มาตรฐาน
กลุ่มฟังก์ชนั
เฮดเดอร์ไฟล์
จัดการอินพุท/เอาท์พุท
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
72
ฟังก์ชนั ทีผ่ ูใ้ ช้กาหนดเอง
• แบบไม่ส่งค่ากลับ
ระบุชนิดข้ อมูล 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;
}
73
การไหลของโปรแกรมเมือ่ ใช้ฟังก์ชนั
#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;
}
74
โปรแกรมแสดงข้อความ (Function)
แบบไม่ส่งค่ากลับ
#include <stdio.h>
void print1()
{
printf(“Hello”);
printf(“\n”);
}
function2.c
int main()
{
print1();
print1();
getch();
return 0;
}
75
โปรแกรมคานวณภาษี (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;
}
76
ขั้นตอนวิธีกบั การโปรแกรม
• การออกแบบขั้นตอนวิธเี ป็ นส่วนสาคัญในการพัฒนา
โปรแกรม
• การ "เขียนโปรแกรม" เป็ นเพียงการแปลงขั้นตอนวิธีให้
อยู่ในรูปที่ยอมรับได้ โดยตัวภาษา
77
ตัวอย่าง
• เขียนโปรแกรมเพื่อรับตัวเลขระบุขนาด และพิมพ์รูป
สามเหลี่ยมที่มีขนาดตามที่กาหนด
Enter N: 3
*
**
***
Enter N: 5
*
**
***
****
*****
78
ข้อผิดพลาดทีพ่ บบ่อย
#include <stdio.h>
int main ()
{
int i;
scanf("%d", i);
if (i = 0)
puts("false");
else
puts("true");
ส่งค่า i ให้ scanf แทนที่จะส่ง
ตาแหน่ง
ใช้ คาสั่งกาหนดค่า (=) แทน
การเปรียบเทียบ (==)
return 0;
}
79
THANK YOU
QUESTION ?
80