ơ ả
ệ
Khái ni m c b n C
ươ
Ch
ng 1
ụ
ụM c Tiêu M c Tiêu
ệ
ươ
Phân bi
ữ t s khác nhau gi a Câu l nh, Ch
ng
ề
ệ ự ầ trình và Ph n m m
ữ
i sao
ệ
ậ
i thu t (algorithms)
ượ
ệ
ư ồ
Bi ế ượ c quá trình hình thành ngôn ng C t đ Bi ạ ế ượ c khi nào dùng C và t t đ N m đ ữ ượ ấ ắ c c u trúc ngôn ng C Hi u rõ khái ni m gi ả ể V l u đ (flowchart) ẽ ư ồ S d ng đ ử ụ
c các ký hi u dùng trong l u đ
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 2 of 26
ề ề
ươ ươ
ng trình, câu ng trình, câu
ầ ầ Ph n m m, ch Ph n m m, ch l nhệl nhệ
Software
Program 2
Program 1
Commands
Commands
Commands
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 3 of 26
ắ ầ ắ ầ B t đ u C B t đ u C
BPCL – Martin Richards
B – Ken Thompson
C – Dennis Ritchie
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 4 of 26
ử
ị
L ch s C
ồ
ầ ượ
ự
ệ ề
ặ
C và Unix có chung ngu n g c ố C ban đ u đ
c xây d ng và cài đ t trên h đi u
hành Unix máy tính PDP11
C (1971). ế ạ ằ
ượ
i b ng C
t l
ắ ọ
ữ
ủ c a BCPL) là ti n thân c a C (không có A)
ữ
ể
ị
Dennis Ritchie là tác gi ả Năm 1973 Unix đ c vi BCPL (gi a nh ng năm60s) hay B (1970, c t g n ữ ủ ề BCPL và B ngôn ng không đ nh ki u, C là ngôn ng ữ
ể
ị đ nh ki u.
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 5 of 26
ử
ị
L ch s C
Năm 1978 Kernighan & Ritchie (1st edition) công b ố
ả
ầ
ủ
ẩ ệ
phiên b n chu n đ u tiên c a C "K&R C“ ỹ
ố
Năm 1983, Vi n tiêu chu n qu c gia M American ẩ ộ ủ
ậ
ể
National Standards Institute (ANSI) thành th p m t y ữ ban đ làm rõ và chu n hóa ngôn ng . ả
ầ
ẩ Năm1988, ANSI C công b phiên b n đ u tiên. ố Năm 1990, ISO thông qua ANSI C không thay đ i – là ổ
ố ế
chu n qu c t
ẩ ề
ờ . ấ ớ
ề
ả
i ích r t l n v tính kh chuy n
ế cho đ n bây gi Đi u này mang đ n l ể ế ợ See http://cm.belllabs.com/cm/cs/who/dmr/chist.html
for more details
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 6 of 26
ự ứ ự ứ
ủ ủ
ụ ụ
Các lĩnh v c ng d ng c a C Các lĩnh v c ng d ng c a C
ể ậ
c dùng đ l p trình h th ng ươ
ộ
ặ
ầ ỗ ợ ủ ệ ề
ệ ề
ươ
ữ
ả ạ ượ ọ c g i là ch
C đ ệ ố ượ M t ch ệ ố ộ ng trình h th ng làm thành m t ph n ệ ệ ề h đi u hành ho c các ti n ích h tr c a h đi u hành H đi u hành (Operating Systems), trình thông ị d ch (Interpreters), trình so n th o (Editors), trình ệ ợ H p Ng (Assembly) đ ng trình h th ng ố
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 7 of 26
ữ ấ ữ ấ Ngôn ng c p trung Ngôn ng c p trung
ữ ấ
Ngôn ng c p cao
C
ữ ợ
ữ
Ngôn ng h p ng
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 8 of 26
ữ ữ
ấ ấ
Ngôn ng có c u trúc Ngôn ng có c u trúc
ổ
C cho phép t ng h p
ữ ệ ợ mã lệnh và d li u
ợ
ả
ẩ
ậ ệ ươ
Nó có kh năng t p h p và n ấ ả t c thông tin, l nh kh i đi t ạ ủ ầ i c a ch ph n còn l ữ ể đ dùng cho nh ng tác v
ỏ ng trình ụ riêng
ươ
ể ượ
ng trình C có th đ
ỏ c chia nh ữ
ữ
ố
Ch thành nh ng hàm (functions) hay nh ng kh i mã (code
blocks).
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 9 of 26
ủ ủ
ặ ặ
ể ể Đ c đi m c a C Đ c đi m c a C
khóa
ế ợ
ủ
ớ
ừ khóa này k t h p v i cú pháp c a C
C có 32 t Nh ng t ừ ữ hình thành ngôn ng Cữ
ụ
ươ
ắ ượ
c áp d ng cho các ch
ng trình
Các quy t c đ
khóa là ch th
ươ ữ ườ t ch th
ể
main() { /* This is a sample Program*/ int i,j; i=100; j=200; : }
ế
C• T t c t ữ ườ ấ ả ừ ng • Ðo n mã trong ch ạ ng trình ệ ng, C có phân bi ữ ch hoa, do while khác DO WHILE •T khóa không th dùng đ t ặ ừ ặ tên bi n (variable name) ho c tên hàm (function name)
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 10 of 26
ấ ấ
ươ ươ
C u trúc ch C u trúc ch
ng trình C ng trình C
ượ
ữ
ỏ
c chia nh thành nh ng
main() Ch ươ ơ
Không k có bao nhiêu hàm trong ch
ng trình C đ ị ọ đ n v g i là hàm ể ệ ề
ề ươ
ộ
ng trình C
ươ ng ề trình, H đi u hành luôn trao quy n đi u khi n cho hàm main() khi m t ch đ
ể ự ượ c th c thi.
ặ ơ ứ
ấ ể
Theo sau tên hàm là d u ngo c đ n D u ngo c đ n có th có ch a hay không ố
ấ ứ
ặ ơ ữ ch a nh ng tham s
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 11 of 26
ấ ấ
ươ ươ
C u trúc ch C u trúc ch
ng trình C (tt.) ng trình C (tt.)
ấ
D u phân cách {…}
ấ
ắ ặ xo n m
ở { ắ
ệ
ế
Sau ph n đ u hàm là d u ngo c ầ ầ Nó cho bi t vi c
ệ thi hành l nh trong hàm b t
ắ ặ xo n đóng
ỉ
} sau câu ế ể đi m k t thúc
đ u ầ T ự ấ ươ ng t , d u ngo c ố ệ l nh cu i cùng trong hàm ch ra ủ c a hàm
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 12 of 26
ấ ấ
ươ ươ
C u trúc ch C u trúc ch
ng trình C (tt.) ng trình C (tt.)
ấ ế
D u k t thúc câu l nh
ệ … ;
ượ ế
ằ
M t câu l nh trong C đ ệ
c k t thúc b ng
ộ ấ ấ d u ch m ph y
ẩ ;
ệ
ố
ị
Trình biên d ch C không hi u vi c xu ng
ắ
ể dòng, kho ng tr ng hay tab
ấ
ộ ẩ ẽ ượ
ằ ệ
M t câu l nh không k t thúc b ng d u ch m ấ ế ỗ ư i trong C
c xem nh dòng l nh l
ả ệ ph y s đ
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 13 of 26
ấ ấ
ươ ươ
C u trúc ch C u trúc ch
ng trình C (tt.) ng trình C (tt.)
/*Dòng chú thích*/
ữ
Nh ng chú thích th
ệ ủ
c vi ệ
ượ ng đ ặ
ả ế ể t đ mô t ộ t, m t hàm
ộ ươ
công vi c c a m t l nh đ c bi hay toàn b ch
ề
ợ
ầ ị ẽ ng h p chú thích nhi u dòng, nó s ế
ườ ằ
ườ ộ ệ ng trình Trình biên d ch s b qua ph n chú thích ẽ ỏ Trong tr ệ ắ ầ b t đ u b ng ký hi u /* và k t thúc là */
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 14 of 26
ư ệ Th vi n C
ị
ề
ứ
ộ
ầ
ẩ ở ậ ế t b i l p ặ c đ t trong c dùng khi c n
ư ệ tế
ộ ố
ầ
ộ ố ộ
ư ệ
T t c trình biên d ch C đ u ấ ả ư ệ ộ ch a m t th vi n hàm chu n M t hàm đ ượ c vi ể ượ trình viên có th đ ượ th vi n và đ thi M t s trình biên d ch cho phép ị ẩ ư ệ thêm hàm vào th vi n chu n M t s trình biên d ch yêu c u ị ạ t o m t th vi n riêng
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 15 of 26
ị ị
ươ ươ
ng ng
Biên d ch và thi hành ch Biên d ch và thi hành ch trình trình
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 16 of 26
ướ ậ ướ ậ
ả ả
ế ấ ế ấ
c l p trình gi c l p trình gi
i quy t v n i quy t v n
Các b Các b đềđề
Phòng h cọ
ả
ộ
ờ
ọ R i phòng h c
ả
ậ ồ ả ợ ộ ậ i thu t g m m t t p h p các Gi ế ằ ệ ự ướ c th c hi n nh m gi b i quy t m t ụ ề ấ v n đ . Thí d sau đây mô ậ ả ộ t i thu t m t gi
ế
ầ Ð n c u thang
Xu ng ố
ầ ầ t ng h m
ế
Ði đ n quán
c th c hiên ế
ự
ăn t
ụ ph c v
ự ướ ườ mu n đi đ n ố i ụ ụ ừ ph c v t
ụ
Ðây là các b ộ khi m t ng ự quán ăn t phòng h cọ
Cafeteria
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 17 of 26
ả ả
ộ ấ ề ộ ấ ề
ế ế
Gi Gi
i quy t m t v n đ i quy t m t v n đ
ể ả
ộ ấ
ế
ề
Ð gi
i quy t m t v n đ
ể
ề
ấ
Hi u v n đ rõ ràng
ậ
ợ
Thu th p thông tin thích h p
ử
X lý thông tin
ạ ượ
ế
Ð t đ
ả c k t qu
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 18 of 26
ả ảMã gi Mã gi
(Pseudocode) (Pseudocode)
ế
ộ
ậ
i thu t
ự
ợ
ậ Không là mã th t. M t ph ộ ậ ử ụ s d ng m t t p h p các t
ươ ng pháp vi ừ ươ t ng t
ả t gi ậ mã th t
BEGIN
DISPLAY ‘Hello World !’
END
ả ắ ầ
ộ ừ
ỗ ể ể
ị
ượ
BEGIN c dùng
ớ ả ph i b t đ u v i m t t ị DISPLAY đ ớ ừ
ả ế
ạ M i đo n mã gi Ð hi n th giá tr nào đó, t k t thúc v i t Mã gi
ừ END
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 19 of 26
ư ồ ư ồ
L u đ (Flowcharts) L u đ (Flowcharts)
ư ồ
ộ
ạ
ả
i
ả L u đ là m t hình nh minh ho cho gi thu tậ
START
DISPLAY ‘Hello World !’
STOP
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 20 of 26
ể ượ ể ượ
Bi u t Bi u t
ư ồ ư ồ ng trong l u đ ng trong l u đ
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 21 of 26
ư ồ ộ ư ồ ộ
ố ố
L u đ c ng hai s L u đ c ng hai s
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 22 of 26
ấ
ấC u trúc IF C u trúc IF
S TAR T
IN P U T n u m
r = n u m M OD 2
BEGIN INPUT num r = num MOD 2 IF r=0
Display “Number is even”
r = 0
No
END IF END
Yes
D IS P L AY "N u m b e r i s E ve n "
S TOP
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 23 of 26
ấ
ấC u trúc IF…ELSE C u trúc IF…ELSE
S TA RT
INP UT num
r = num M O D 2
Yes
No
r = 0
DIS P LAY "Num ber is E ven"
DIS PLA Y "Num ber is O dd"
BEGIN INPUT num r=num MOD 2 IF r=0 DISPLAY “Even Number” ELSE DISPLAY “Odd Number” END IF END
S TOP
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 24 of 26
ề ề
ệ ử ụ AND/OR ệ ử ụ AND/OR
Ða đi u ki n s d ng Ða đi u ki n s d ng
BEGIN INPUT yearsWithUs INPUT bizDone IF yearsWithUs >= 10 AND bizDone >=5000000
DISPLAY “Classified as an MVS”
ELSE
DISPLAY “A little more effort required!”
END IF END
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 25 of 26
ồ ồ
ấ ấ
C u trúc IF l ng nhau C u trúc IF l ng nhau
BEGIN INPUT yearsWithUs INPUT bizDone IF yearsWithUs >= 10
IF bizDone >=5000000
DISPLAY “Classified as an MVS”
ELSE
DISPLAY “A little more effort required!”
END IF ELSE
DISPLAY “A little more effort required!”
END IF END
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 26 of 26
ồ ồ
ấ ấ
C u trúc IF l ng nhau C u trúc IF l ng nhau
(tt.) (tt.)
START
INPUT YearsWithUs
INPUT bizDone
YES
NO
YearsWithUs >= 10
DISPLAY “A Little more effort required”
NO
bizDone > 5000000
YES
DISPLAY “A Little more effort required”
DISPLAY “Classified as an MVS”
STOP
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 27 of 26
Vòng l pặ Vòng l pặ
S TA R T
cn t= 0
No
cn t < 1 0 0 0
BEGIN cnt=0 WHILE (cnt < 1000) DO
Yes
D IS PL A Y " Sc o ob y "
DISPLAY “Scooby” cnt=cnt+1
cn t= c n t+ 1
END DO END
S TOP
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 28 of 26
Bài t pậ
t ế
ế
ể
ậ
Cho tam giác ABC có góc vuông A và cho bi t thu t toán đ tính
ạ
ạ
ạ c nh a và góc B. Hãy vi góc C, c nh b và c nh c
ươ
ủ
Ch dùng phép c ng, tính bình ph ộ
ng c a
ỉ m t sộ ố
ệ
Tính nghi m x p x v i đ chính xác ươ
ủ
ấ 0.000001 c a ph
ỉ ớ ộ ng trình f(x)= e
ε = x x3 = 0
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 29 of 26
Bài t pậ
ế
ử ụ ự
ấ ụ
ươ
ậ
ữ
ng
ấ ị ệ ươ ệ
ỏ ơ
ẽ
S d ng thu t toán chia ậ đôi d a vào tính ch t: n u ộ m t hàm f liên t c trên ạ đo n [a,b] có f(a) và f(b) ng trình f(x) = 0 thì ph ộ ừ nh t đ nh th a nh n m t ằ nghi m c n m gi a [a,b] Ph trình có hai ư nghi m nh trong hình ệ v . Vây nghi m nh h n ạ trong đo n [1,4]
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 30 of 26
Bài t pậ
Ta có f(a)>0, f(b)<0. Thu t toán
ệ
ả
ậ ế chia đôi ti n hành vây ỗ ướ nghi m, m i b gi m kho ng vây đi 2 l n.
c vây, ầ ả ớ 1. Tính f(c) v i c= (a+b)/2.
ả
ế
Không x y ra f(c) = 0. Ti p b
c 2
ướ ế
2. N u f(c)> 0 thay a b i c, sau ệ ướ
ự
đó th c hi n b
ở c 4
Th c hi n b
ở 3. N u f(c) <0 thay b b i c. ế ệ ướ c ti p theo ε, quay v 1, n u ế ề
ế ự ế 4. N u ba >
không làm ti pế ấ
ừ
ệ
5. D ng, l y c làm nghi m
ơ ả ậ ươ L p trình c b n C/Ch ng 1/ 31 of 26