I. Khái niệm thuật toán:
I.1. Khái niệ m:
Thuậ t toá n là tậ p hợp cá c quy tắ c có logic nhằ m giả i một lớp bà i toá n nà o
đó để được một kế t quả xá c định.
I.2.Các tí nh chất đặc trưng của thuật toán:
I.2.1. Tí nh tổng quát :
Thuậ t toá n được lậ p không phả i chỉ để giả i một bà i toá n cụ thể mà thôi mà
còn phả i giả i được một lớp cá c bà i toá n có dạ ng tương tự.
I.2.2. Tí nh giới hạn :
Thuậ t toá n giả i một bà i toá n phả i được thực hiệ n qua một số giới hạ n cá c
thao tá c để đạ t đế n kế t quả .
I.2.3.Tí nh duy nhất :
Toà n bộ quá trì nh biế n đổi, cũng nhưtrậ t tự thực hiệ n phả i được xác định
và là duy nhấ t. Nhưvậ y khi dù ng thuậ t toá n cùng một dữ liệ u ban đầ u phả i cho
cùng một kế t quả .
134 trang |
Chia sẻ: luyenbuizn | Lượt xem: 1098 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Tài liệu Kỹ thuật lập trình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Kỹ thuật lập trì nh 1
CHƯƠNG i ĐạI CƯƠNG Về LậP TRìNH
I. Khái niệm thuật toán:
I.1. Khái niệ m:
Thuậ t toá n là tậ p hợp cá c quy tắ c có logic nhằ m giả i một lớp bà i toá n nà o
đó để được một kế t quả xá c định.
I.2. Các tí nh chất đặc trưng của thuật toán :
I.2.1. Tí nh tổng quát :
Thuậ t toá n được lậ p không phả i chỉ để giả i một bà i toá n cụ thể mà thôi mà
còn phả i giả i được một lớp cá c bà i toá n có dạ ng tương tự.
I.2.2. Tí nh giới hạn :
Thuậ t toá n giả i một bà i toá n phả i được thực hiệ n qua một số giới hạ n cá c
thao tá c để đạ t đế n kế t quả .
I.2.3. Tí nh duy nhất :
Toà n bộ quá trì nh biế n đổi, cũng như trậ t tự thực hiệ n phả i được xá c định
và là duy nhấ t. Như vậ y khi dùng thuậ t toá n cùng một dữ liệ u ban đầ u phả i cho
cùng một kế t quả .
I.3. Phân loại:
Theo cấ u trúc, ta có thể phâ n thà nh ba loạ i thuậ t toá n cơ bả n sau :
- Thuậ t toá n không phâ n nhá nh.
- Thuậ t toá n có phâ n nhá nh.
- Thuậ t toá n theo chu trì nh có bước lặ p xá c định và có bước lặ p không
xá c định.
II. Mô tả thuật toán bằng lưu đồ :
II.1. Lưu đồ :
Lưu đồ là một dạ ng đồ thị dùng để mô tả quá trì nh tí nh toá n một cá ch có
hệ thống. Người ta thường thể hiệ n thuậ t toá n bằ ng lưu đồ.
II.2. Các ký hiệ u trê n lưu đồ :
Tê n khối Ký hiệ u ý nghĩ a
Khối mở đầ u hoặ c kế t
thúc
Dùng mở đầ u hoặ c kế t
thúc chương trì nh
Khối và o ra
Đưa số liệ u và o hoặ c in
kế t quả
Kỹ thuật lập trì nh 2
Khối tí nh toá n
Biể u diễ n cá c công thức
tí nh toá n và thay đổi giá
trị của cá c biế n
Khối điề u kiệ n
Dùng để phâ n nhá nh
chương trì nh
Chương trì nh con
Dùng để gọi chương trì nh
con
Mũi tê n
Chỉ hướng truyề n thông
tin, liê n hệ cá c khối
II.3. Một số ví dụ biể u diễ n thuật toán bằng lưu đồ
II.3.1. Thuật toán không phân nhánh:
Ví dụ 1: Tí nh A = x2 + y2
Begin
Nhaọp (x,y)
A = x2 + y2
Xuaỏt (A)
End
Ví dụ 2 : Tí nh
yx
CByAxS
22 +
++
= ; biế t A,B,C,x,y
Begin
Nhaọp (A, B, C, x,y)
S = (Ax + By + C) / SQRT (x*x + y*y)
Xuaỏt S
End
Kỹ thuật lập trì nh 3
II.3.2. Thuật toán có phân nhánh:
Ví dụ 1: Tì m giá trị max của ba số thực a,b,c
Begin
Nhaọp (a, b, c)
Max = a
Xuaỏt (Max)
End
a > b
Max < c
Max = c
S
S Max = b
ẹ
ẹ
Ví dụ 2: Giả i phương trì nh bậ c nhấ t Ax+B =0 với cá c nghiệ m thực.
Begin
Nhaọp (a, b)
Xuaỏt (‘PTVẹ’)
End
a = 0
S
S Xuaỏt (-b/a)
b = 0 Xuaỏt (‘PTVN’)
ẹ
ẹ
Kỹ thuật lập trì nh 4
Ví dụ 3 : Giả i phương trì nh bậ c hai Ax2+Bx+C =0 với cá c nghiệ m thực.
Begin
Nhaọp (a, b, c)
Xuaỏt (‘X1= ’,(-b + SQRT(Delta)) / (2*a))
Xuaỏt (‘X2= ’,(-b - SQRT(Delta)) / (2*a))
End
a = 0
ẹ
ẹ
PTB1 (b, c)
Delta < 0 Xuaỏt (‘PTVN’)
S
S
Delta = b*b - 4*a*c
ẹ
Delta = 0 Xuaỏt (-b / (2*a))
S
II.3.3. Thuật toán có chu trì nh:
Thuậ t toá n có chu trì nh với cá c bước lặ p xá c định thường được thể hiệ n
bằ ng lưu đồ sau :
i = giaự trũ ban ủaàu
Leọnh S;
Taờng i
i <= n
S
ẹ
với n là giá trị kế t thúc.
Kỹ thuật lập trì nh 5
Ví dụ 4: Tí nhS= i
i
n
x
=
∑
1
, với cá c xi do ta nhậ p và o.
Begin
Nhaọp (n)
i = 1
S = 0
Nhaọp (xi)
End
i = i+1
S = S+xi
i <= n
Xuaỏt (S)
S
ẹ
III. CáC NGôN NGữ LậP TRìNH & CHươNG TRìNH DịCH:
III.1. Ngôn ngữ lập trì nh:
III.1.1. Giới thiệ u: Con người muốn giao tiế p với má y tí nh phả i thông qua
ngôn ngữ. Con người muốn má y tí nh thực hiệ n công việ c, phả i viế t cá c yê u cầ u
đưa cho má y bằ ng ngôn ngữ má y hiể u được. Việ c viế t cá c yê u cầ u ta gọi là lậ p
trì nh (programming). Ngôn ngữ dùng để lậ p trì nh được gọi là ngôn ngữ lậ p trì nh.
Nế u ngôn ngữ lậ p trì nh gầ n với vấ n đề cầ n giả i quyế t, gầ n với ngôn ngữ tự
nhiê n thì việ c lậ p trì nh sẽ đơn giả n hơn nhiề u. Những ngôn ngữ lậ p trì nh có tí nh
chấ t như trê n được gọi là ngôn ngữ cấ p cao. Nhưng máy tí nh chỉ hiể u được ngôn
ngữ riê ng của mì nh, đó là cá c chuỗi số 0 với 1 và như vậ y rõ rà ng là khó khă n
cho lậ p trì nh viê n, vì nó không gầ n gũi với con người.
Hiệ n tạ i, ngôn ngữ lậ p trì nh được chia ra là m cá c loạ i sau:
III.1.2. Phân loại ngôn ngữ lập trì nh:
- Ngôn ngữ má y (machine language)
Kỹ thuật lập trì nh 6
- Hợp ngữ (assembly language)
- Ngôn ngữ cấ p cao (higher-level language)
Do má y tí nh chỉ hiể u được ngôn ngữ má y, cho nê n một chương trì nh viế t
trong ngôn ngữ cấ p cao phả i được biê n dịch sang ngôn ngữ má y. Công cụ thực
hiệ n việ c biê n dịch đó được gọi là chương trì nh dịch.
III.2. Chương trì nh dịch:
Chương trì nh dịch được chia ra là m 2 loạ i : trì nh biê n dịch (compiler) và trì nh
thông dịch (interpreter)
III.2.1. Trì nh biê n dịch: là việ c chuyể n một chương trì nh trong ngôn ngữ
cấ p cao nà o đó (chương trì nh nguồn) sang ngôn ngữ má y (chương trì nh đí ch).
- Thời gian chuyể n một chương trì nh nguồn sang chương trì nh đí ch được
gọi là thời gian dịch.
- Thời gian mà chương trì nh đí ch thực thi được gọi là thời gian thực thi.
Như vậ y, chương trì nh nguồn và dữ liệ u để chương trì nh thực thi được xử
lý trong cá c thời điể m khá c nhau, được gọi là thời gian dịch (compile time) và
thời gian thực thi (run-time)
Chửụng trỡnh
nguoàn
Trỡnh bieõn
dũch
Chửụng trỡnh
ủớch
Maựy tớnh
thửùc hieọn Keỏt quaỷ
Dửừ lieọu
Hì nh I.1. Chương trì nh thực thi theo cơ chế dịch của trì nh biê n dịch
III.2.2. Trì nh thông dịch: quá trì nh dịch và thực thi xả y ra cùng 1 thời
gian, dịch đế n đâ u thi hà nh lệ nh đế n đó.
Chửụng trỡnh
nguoàn
Chửụng trỡnh
thoõng dũch Keỏt quaỷ
Dửừ lieọu
Hì nh I.2. Chương trì nh thực thi theo cơ chế dịch của trì nh thông dịch
Kỹ thuật lập trì nh 7
CHươNG 2 LàM QUEN VớI NGôN NGữ C
* Giới thiệu ngôn ngữ C
Ngôn ngữ C do Dennis Ritchie là người đầ u tiê n đề xuấ t, đ∙ thiế t kế và cà i
đặ t C trong môi trường UNIX. Nó có nguồn gốc từ ngôn ngữ BCPL do Martin
Richards đưa ra và o nă m 1967 và ngôn ngữ B do Ken Thompson phá t triể n từ
ngôn ngữ BCPL nă m 1970 khi viế t hệ điề u hà nh Unix.
C là ngôn ngữ lậ p trì nh đa dụng, cấ p cao nhưng lạ i có khả nă ng thực hiệ n
cá c thao tá c như của ngôn ngữ Assembly. Vì thế ngôn ngữ C nhanh chóng được
cà i đặ t, sử dụng trê n máy vi tí nh và đ∙ trở thà nh một công cụ lậ p trì nh khá mạ nh,
hiệ n nay đang có khuynh hướng trở thà nh một ngôn ngữ lậ p trì nh chí nh cho má y
vi tí nh trê n thế giới.
* Đặc điể m ngôn ngữ C
Ngôn ngữ C có những đặ c điể m cơ bả n sau :
- Tí nh cô đọng (compact) : Ngôn ngữ C chỉ có 32 từ khoá chuẩ n, 40 toá n
tử chuẩ n mà hầ u hế t được biể u diể n bởi cá c d∙ y ký tự ngắ n gọn.
- Tí nh cấ u trúc (structured) : Ngôn ngữ C có một tậ p hợp cá c phá t biể u lậ p
trì nh cấ u trúc như phá t biể u quyế t định hoặ c lặ p. Do đó, nó cho phép chúng ta
viế t chương trì nh có tổ chức và dể hiể u.
- Tí nh tương thí ch (compactable) : Ngôn ngữ C có bộ lệ nh tiề n xử lý và
cá c thư việ n chuẩ n là m cho cá c chương trì nh viế t bằ ng ngôn ngữ C có thể tương
thí ch khi chuyể n từ má y tí nh nà y sang má y tí nh kiể u hoà n toà n khá c.
- Tí nh linh động (flexible) : Ngôn ngữ C là một ngôn ngữ rấ t linh động về
ngữ phá p, nó có thể chấ p nhậ n rấ t nhiề u cá ch thể hiệ n mà không có ở ngôn ngữ
khá c như Pascal, nó giúp cho kí ch thước m∙ lệ nh có thể thu gọn lạ i để chương
trì nh thực thi nhanh chóng hơn.
- Biê n dịch : Ngôn ngữ C được biê n dịch bằ ng nhiề u bước và cho phép
biê n dịch nhiề u tậ p tin chương trì nh riê ng rẽ thà nh cá c tậ p tin đối tượng (object)
và nối cá c đối tượng đó lạ i với nhau (link) thà nh một chương trì nh thực thi thống
nhấ t.
I. CáC KHáI NIệM Cơ BảN
I.1. Cấu trúc cơ bản của một chương trì nh C
[tiề n xử lý]
[Cá c hà m]
main()
Kỹ thuật lập trì nh 8
{ [khai bá o biế n;]
[nhậ p dữ liệ u ;]
[xử lý ;]
[xuấ t ;]
}
Ví dụ : Chương trì nh hiệ n trê n mà n hì nh câ u “Chao cac ban”
void main()
{ printf(“Chao cac ban\n”);
}
Một và i nhậ n xét quan trọng :
- Chương trì nh C bao giờ cũng có một hay nhiề u hà m, trong đó có một
hà m chí nh bắ t buộc phả i có là hà m main(). Đâ y chí nh là hà m được thực hiệ n
đầ u tiê n trong chương trì nh.
- Cặ p dấ u “{ } “ để xá c định một khối lệ nh.
- Hà m printf(“ Chao cac ban \n”) là hà m chuẩ n của C dùng để xuấ t câ u
thông bá o “Chao cac ban” ra mà n hì nh. Ký tự “\n“ là ký tự đặ c biệ t dùng để
xuống dòng.
- Dấ u “;” để chấ m dứt một lệ nh.
- Chương trì nh C có phâ n biệ t chữ thường với chữ hoa. Đa số cá c từ khoá
của C được viế t bằ ng chữ thường, còn một số í t được viế t bằ ng chữ hoa mà ta
phả i tuâ n thủ chặ t chẽ , nế u không thì chương trì nh dịch sẽ không hiể u.
* Một vài ví dụ
Ví dụ 1: In bả ng lũy thừa 2 của cá c số nguyê n từ 10 đế n 50
/* Chương trì nh in bì nh phương cá c số từ 10 đế n 50*/
#include
void main()
{int n; /*Khai bá o biế n n kiể u nguyê n */
n=10; /*Gá n n=10 */
while (n<=50) /*Lặ p từ 10 đế n 50 bằ ng while */
{ printf(“%3d \t %5d\n”,n,n*n); /*in dạ ng 5d là dà nh 5 vị trí để in n và n2 */
n++; /* Tă ng n lê n 1 */
} /*Hế t while*/
} /*Hế t main*/
Kỹ thuật lập trì nh 9
Ví dụ 2 : Tương tự như ví dụ 1 nhưng viế t cá ch khá c :
#include
#define max 50 /*Tiề n xử lý, định nghĩ a max =50*/
void main()
{ int n; /*Khai bá o biế n n kiể u nguyê n*/
for (n=10; n<=max; n++) /*Lặ p từ 10 đế n 50 bằ ng for*/
printf(“%3d \t %5d\n”,n,n*n); /*in n và n2 dạ ng 5d là nă m chữ số*/
} /*Hế t main*/
Ví dụ 3 : Chương trì nh in lũy thừa 2, 3, 4, 5; có dùng hà m để tí nh lũy thừa :
#include
#define max 50 /*Tiề n xử lý, định nghĩ a max =50*/
float luythua(int n, int m) /*Hà m luythua với 2 thông số*/
{ float s=1; /*Khai bá o và khởi tạ o biế n s*/
for ( ;m>0;m--) /*Lặ p giả m dầ n từ m tới 1*/
s=s*n;
return s; /*Trả kế t quả về */
}
void main()
{ int n,n2,n3,n4,n5; /*Khai bá o biế n kiể u nguyê n*/
for (n=10;n<=50;n++) /*Lặ p từ 10 đế n 50 bằ ng for*/
{ n2= luythua(n,2); /*Gọi hà m luythua*/
n3= luythua(n,3);
n4= luythua(n,4);
n5= luythua(n,5);
printf(“%3d \t %5.2f \t %5.2f\t %5.2f\t %5.2f\t %5.2f\n”,
n,n2,n3,n4,n5); /*in n và nm dạ ng 5 chữ số với 2 số lẻ */
}
} /*Hế t main*/
* Hàm xuất chuẩn printf()
Cú pháp :
printf(“chuỗi-địnhdạ ng”,thamso1,thamso2,...)
ý nghĩ a :
Hà m printf() sẽ xem xét chuỗi-địnhdạ ng, lấ y giá trị cá c tham số (nế u cầ n)
để đặ t và o theo yê u cầ u của chuỗi-địnhdạ ng và gởi ra thiế t bị chuẩ n.
Chuỗi-địnhdạ ng là một chuỗi ký tự, trong đó có những ký tự xuấ t ra
nguyê n vẹ n hoặ c xuấ t ở dạ ng đặ c biệ t, và có thể có những chuỗi điề u khiể n
cầ n lấ y giá trị của cá c tham số để thay và o đó khi in ra.
Kỹ thuật lập trì nh 10
- Những ký tự đặc biệ t :
Ký tự Tác dụng Mã ASCII
\n Xuống hà ng mới 10
\t Tab 9
\b Xóa ký tự bê n trá i 8
\r Con trỏ trở về đầ u hà ng 13
\f Sang trang 12
\a Phá t tiế ng còi 7
\\ Xuấ t dấ u chéo ngược 92
\’ Xuấ t dấ u nhá y đơn ‘ 39
\’’ Xuấ t dấ u nhá y kép “ 34
\xdd Xuấ t ký tự có m∙ ASCII dạ ng Hex là dd
\ddd Xuấ t ký tự có m∙ ASCII dạ ng Dec là
ddd
\0 Ký tự NULL 0
- Chuỗi định dạng :
% [ flag][width][.prec][FNhl] type
Type : định kiể u của tham số theo sau chuỗi-địnhdạ ng để lấ y giá trị ra
Type ý nghĩ a
d,i Số nguyê n cơ số 10
u Số nguyê n cơ số 10 không dấ u
o Số nguyê n cơ số 8
x Số nguyê n cơ số 16, chữ thường(a,b,...,f)
X Số nguyê n cơ số 16, chữ in (A,B,...,F)
f Số thực dạ ng [-]dddd.ddd...
e Số thực dạ ng [-]d.ddd e[+/-]ddd
E Số thực dạ ng [-]d.ddd E[+/-]ddd
g,G Số thực dạ ng e(E) hay f tùy theo độ chí nh xá c
c Ký tự
s Chuỗi ký tự tậ n cùng bằ ng ‘\0’
% Dấ u % cầ n in
Kỹ thuật lập trì nh 11
Flag : Dạ ng điề u chỉ nh
Flag ý nghĩ a
nế u không có in dữ liệ u ra với canh phả i
- in dữ liệ u ra với canh trá i
+ Luôn bắ t đầ u số bằ ng + hay -
# in ra tùy theo type, nế u:
0 : Chè n thê m 0 đứng trước giá trị >0
x,X : Chè n thê m 0x hay 0X đứng trước số nà y
e,E,f : Luôn luôn có dấ u chấ m thậ p phâ n
G,g : Như trê n nhưng không có số 0 đi sau
Width : định kí ch thước in ra
Width ý nghĩ a
n Dà nh í t nhấ t n ký tự , điề n khoả ng trắ ng cá c ký tự còn trống
0n Dà nh í t nhấ t n ký tự , điề n số 0 cá c ký tự còn trống
* Số ký tự í t nhấ t cầ n in nằ m ở tham số tương ứng
Prec : định kí ch thước phầ n lẽ in ra
Prec ý nghĩ a
không có độ chí nh xá c như bì nh thường
0 d,i,o,u,x độ chí nh xá c như cũ
e,E,f Không có dấ u chấ m thậ p phâ n
n nhiề u nhấ t là n ký tự (số)
* Số ký tự í t nhấ t cầ n in nằ m ở tham số tương ứng
Các chữ bổ sung :
F Tham số là con trỏ xa XXXX:YYYY
N Tham số là con trỏ gầ n YYYY
h Tham số là short int
l Tham số là long int (d,i,o,u,x,X)
double (e,E,f,g,G)
Ví dụ 1: char c=‘A’;
char s[]=“Blue moon!” ;
Kỹ thuật lập trì nh 12
Dạng Thông số
tương ứng
Xuất Nhận xét
%c c “A” độ rộng 1
%2c c “ A” độ rộng 2, canh phả i
%-3c c “A “ độ rộng 3, canh trá i
%d c “65” M∙ ASCII của ‘A’
%s s “Blue moon!” độ rộng 10
%3s s “Blue moon!” Nhiề u ký tự hơn cầ n thiế t
%.6s s “Blue m” Chí nh xá c 6 ký tự
%-11.8s s “Blue moo “ Chí nh xá c 8, canh trá i
Ví dụ 2: int i = 123;
float x = 0.123456789;
Dạng Thông số
tương ứng
Xuất Nhận xét
%d i “123” độ rộng 3
%05d i “00123” Thê m 2 số 0
%7o” i “ 123” Hệ 8, canh phả i
%-9x i “7b “ Hệ 16, canh trá i
%c i “{“ Ký tự có m∙ ASCII 123
%-#9x i “0x7b “ Hệ 16, canh trá i
%10.5f x “ 0.12346” độ rộng 10, có 5 chữ số thậ p
phâ n
%-12.5e x “1.23457e-01 “ Canh trá i, in ra dưới dạ ng
khoa học
Ví dụ 3: Viế t chương trì nh in hì nh chữ nhậ t kép bằ ng cá c ký tự ASCII
C9 CD BB
C8 CD BC
void main()
{ printf(“\n\xC9\xCD\xBB”);
printf(“\n\xC8\xCD\xBC\n);
}
Kỹ thuật lập trì nh 13
I.2. Kiể u dữ liệ u cơ bản
I.2.1. định nghĩ a:
Kiể u dữ liệ u cơ bả n là kiể u dữ liệ u có giá trị đơn, không phâ n chia được
nữa như số, ký tự
I.2.2. Phân loại:
Tê n kiể u ý nghĩ a Kí ch
thước
Phạm vi
char Ký tự 1 byte -128→ 127
unsigned char Ký tự không dấ u 1 byte 0→255
unsigned short Số nguyê n ngắ n không dấ u 2 bytes 0→65535
enum Số nguyê n có dấ u 2 bytes -32768→32767
short int Số nguyê n có dấ u 2 bytes -32768→32767
int Số nguyê n có dấ u 2 bytes -32768→32767
unsigned int Số nguyê n không dấ u 2 bytes 0 → 65535
long Số nguyê n dà i có dấ u 4 bytes -2147483648 →
2147483647
unsigned long Số nguyê n dà i không dấ u 4 bytes 0→4294967295
float Số thực độ chí nh xá c đơn 4 bytes 3.4 E-38→3.4 E+38
double Số thực độ chí nh xá c kép 8 bytes 1.7 E-308 → 1.7
E+308
long double Số thực độ chí nh xá c hơn
double
10 bytes 3.4 E-4932 → 1.1
E+4932
Chú ý :
1. Ngôn ngữ C không có kiể u logic (boolean như Pascal) mà quan niệ m
0 là false ; Khá c 0 là true
2. Ngôn ngữ C không có kiể u chuỗi như kiể u string trong Pascal
3. Cá c kiể u đồng nhấ t:
int = short int = short = signed int = signed short int
long int = long
signed long int = long
unsigned int = unsigned = unsigned short = unsigned short int
unsigned long int = unsigned long
Kỹ thuật lập trì nh 14
I.3. Biế n
I.3.1. Tê n biế n : Tê n biế n là một chuỗi ký tự bắ t đầ u bằ ng ký tự chữ, ký tự
kế tiế p là ký tự chữ (dấ u gạ ch dưới “_” được xem là ký tự chữ) hoặ c số và không
được trùng với cá c từ khóa của C.
Chú ý : - Ngôn ngữ C phâ n biệ t chữ thường với chữ hoa nê n biế n chữ
thường với chữ hoa là khá c nhau.
Ví dụ : Bien_1 _bien2 là hợp lệ
bi&en 2a a b là không hợp lệ
- Ngôn ngữ C chỉ phâ n biệ t hai tê n hợp lệ với nhau bằ ng n ký tự đầ u tiê n
của chúng. Thông thường n=8, nhưng hiệ n nay nhiề u chương trì nh dịch cho phép
n=32, như Turbo C cho phép thay đổi số ký tự phâ n biệ t từ 8-32)
Ví dụ :Hai biế n sau bị xem là cùng tê n
bien_ten_dai_hon_32_ky_tu_dau_tien_1
bien_ten_dai_hon_32_ky_tu_dau_tien_2
I.3.2. Khai báo biế n
Cá c biế n phả i được khai bá o trước khi sử dụng nhằ m giúp cho chương
trì nh dịch có thể xử lý chúng.
Khai bá o biế n có dạ ng :
Kiể udữliệ u tê nbiế n1 [,tenbiế n2 ...] ;
Ví dụ: int a,b,c;
float x,y,delta;
char c;
* Khai bá o và khởi tạ o biế n:
Kiể u dữ liệ u tê nbiế n = giá trị ;
I.3.3. Hàm nhập dữ liệ u chuẩn
a) Hàm scanf()
Cú pháp: scanf(“chuỗi-địnhdạ ng“,điạ chỉ thamsố1, điạ chỉ thamsố2,...)
- Chuỗi-địnhdạ ng của scanf() gồm có ba loạ i ký tự :
+ Chuỗi điề u khiể n
+ Ký tự trắ ng
+ Ký tự khá c trắ ng
! Chuỗi điề u khiể n có dạ ng :
%[width][h/l] type
Kỹ thuật lập trì nh 15
Với type: xá c định kiể u của biế n địa chỉ tham số sẽ nhậ n giá trị nhậ p và o
Type ý nghĩ a
d,i Số nguyê n cơ số 10 (int)
o Số nguyê n cơ số 8 (int)
u Số nguyê n cơ số 10 không dấ u (unsigned)
x Số nguyê n cơ số 16 (int)
f,e Số thực (float)
c Ký tự (char)
s Chuỗi ký tự
p Con trỏ (pointer)
lf Số thực (double)
Lf Số thực (long double)
Width : xá c định số ký tự tối đa sẽ nhậ n và o cho vùng đó.
Hà m scanf() chỉ nhậ n cho đủ width ký tự hoặ c cho đế n khi gặ p ký tự trắ ng
đầ u tiê n. Nế u chuỗi nhậ p và o nhiề u hơn thì phầ n còn lạ i sẽ dà nh lạ i cho lầ n gọi
scanf() kế tiế p.
Ví dụ 1: scanf(“%3s”,str);
Nế u nhậ p chuỗi ABCDEFG ↵
thì scanf() sẽ nhậ n tối đa 3 ký tự cấ t và o mả ng str, còn DEFG sẽ được lấ y
nế u sau đó có lầ n gọi sanf(“%s”,str) khá c.
Ví dụ 2: unsigned long money;
scanf(“%lu”,&money);
Lưu ý : Nế u scanf(“%ul”, &money) thì giá trị nhậ p và o sẽ không được lưu
trữ trong biế n money, nhưng chương trì nh dịch không bá o lỗi.
Ví dụ 3: Nhậ p và o tê n và bị giới hạ n trong khoả ng [A-Z,a-z]
char name[20];
printf(“Name : ”) ;
scanf(“%[A-Za-z]”,&name);
Trong trường hợp nà y, nế u ta gõ sai dạ ng thì name =””
! Ký tự trắ ng: nế u có trong chuỗi-dạ ng sẽ yê u cầ u scanf() bỏ qua một hay
nhiề u ký tự trắ ng trong chuỗi nhậ p và o. Ký tự trắ ng là ký tự khoả ng trắ ng (‘ ‘),
tab (‘\t’), xuống hà ng (‘\n’). Một ký tự trắ ng trong chuỗi-địnhdạ ng sẽ được hiể u
là chờ nhậ p đế n ký tự khá c trắ ng tiế p theo.
Kỹ thuật lập trì nh 16
Ví dụ 4: scanf(“%d “,&num);
Hà m scanf() cho ta nhậ p một ký tự khá c trắ ng nữa thì mới thoá t ra. Ký tự
đó sẽ nằ m trong vùng đệ m và sẽ được lấ y bởi hà m scanf() hoặ c gets() tiế p theo.
! Ký tự khá c trắ ng: nế u có trong chuỗi-địnhdạ ng sẽ khiế n cho scanf() nhậ n
và o đúng ký tự như thế .
Ví dụ 5: scanf(%d/%d/%d”,&d,&m,&y);
Hà m scanf() chờ nhậ n một số nguyê n, cấ t và o d, kế đế n là dấ u ‘/’, bỏ dấ u
nà y đi và chờ nhậ n số nguyê n kế tiế p để cấ t và o m. Nế u không gặ p dấ u ‘/’ kế
tiế p số nguyê n thì scanf() chấ m dứt.
Chú ý : Hà m scanf() đòi hỏi cá c tham số phả i là cá c địa chỉ của cá c biế n
hoặ c là một con trỏ.
* Toá n tử địa chỉ & : Lấ y địa chỉ của một biế n
Ví dụ 6: int n; → biế n n
&n; → đ ịa chỉ của n
printf(“trị = %d, địa chỉ = %d”,n,&n);
b) Hàm getch():
Hà m getch() dùng để nhậ n một ký tự do ta nhậ p trê n bà n phí m mà không
cầ n gõ Enter với cú phá p :
ch = getch(); Không hiệ n ký tự nhậ p trê n mà n hì nh
ch = getche(); Hiệ n ký tự nhậ p trê n mà n hì nh
Với ch là biế n kiể u char.
Ví dụ 7:
void main()
{ char ch;
printf(“Go vao ky tu bat ky : ‘);
ch = getche();
printf(“\n Ban vua go %c”,ch);
getch();
}
Ví dụ 8: Bạ n nhậ p và o 1 chữ cá i. Nế u chữ cá i nhậ p và o là 'd' thì chương
trì nh sẽ kế t thúc, ngược lạ i chương trì nh sẽ bá o lỗi và bắ t nhậ p lạ i.
#include
#include
void main()
{ char ch;
Kỹ thuật lập trì nh 17
printf("\nBan nhap vao 1 chu cai tu a den e: ");
while ((ch=getche()) != 'd')
{ printf("\nXin loi, %c la sai roi",ch);
printf("\n Thu lai lan nua. \n");
}
}
Lưu ý: Hà m getch() còn cho phép ta nhậ p và o 1 ký tự mở rộng như cá c
phí m F1, F2,.., cá c phí m di chuyể n cursor. Cá c phí m nà y luôn có 2 bytes: byte
thứ nhấ t bằ ng 0, còn byte 2 là m∙ scancode của phí m đó. Để nhậ n biế t ta đ∙ gõ
phí m ký tự hay phí m mở rộng, ta có chương trì nh sau:
void main()
{
int c;
int extended = 0;
c = getch();
if (!c)
extended = getch();
if (extended)
printf("The character is extended\n");
else
printf("The character isn't extended\n");
}
Phí m Mã scancode
F1 59
F2 60
F3 61
F4 62
F5 63
F6 64
F7 65
F8 66
F9 67
F10 68
Home 71
" 72
# 80
$ 75
Kỹ thuật lập trì nh 18
% 77
PgUp 73
PgDn 81
End 79
Ins 82
Del 83
Bả ng m∙ scancode của cá c phí m mở rộng
c. Hàm kbhit(): Hà m int kbhit() sẽ kiể m tra xem có phí m nà o được gõ
và o hay không. Nế u có, hà m kbhit sẽ trả về một số nguyê n khá c 0, và ngược lạ i.
Ký tự mà ta nhậ p và o qua hà m kbhit() có thể lấ y được qua hà m getch()
hoặ c getche().
Ví dụ:
void main()
{
printf("Press any key to continue:");
while (!kbhit()) /* do nothing */ ;
char kytu=getch();
printf("\nKy tu vua an : %c",kytu);
}
I.4 Hằng: Hằ ng là cá c đạ i lượng mà giá trị của nó không thay đổi trong quá
trì nh chương trì nh thực hiệ n.
I.4.1. Phân loại :
a. Hằng số : là cá c giá trị số đ∙ xá c định và không đổi.
int unsigned long hệ 8 hệ 16 float/double
Dạ ng nnnn
-nnnn
nnnnU/u
nnnnL/l
-nnnnl/L
0nnnn 0xnnnn nnnn.nnnn
nnnn.nnnE/e±nnn
Ví dụ 4567
-12
123U
12uL
456789L
-1234L
0345 0x1AB 123.654
123.234E-4
Chú ý :
- Cá c hằ ng số viế t không dấ u hoặ c không số mũ được hiể u là số nguyê n,
ngược lạ i là double.
- Cá c hằ ng số nguyê n lớn hơn int sẽ được lưu trữ theo kiể u long, còn lớn
hơn long thì được lưu trữ theo kiể u double.
- Cá c hằ ng số nguyê n dương lớn hơn long sẽ được lưu trữ theo kiể u double
- Một hằ ng số được lưu trữ theo dạ ng long nế u theo số đó có ký tự l (L),
Kỹ thuật lập trì nh 19
dạ ng unsigned nế u sau đó có chữ u (U), dạ ng thậ p lục phâ n nế u trước số
đó có 0x và dạ ng bá t phâ n nế u trước số đó có 0
Ví dụ: 50000; 10 L; → Long
5U, 100u → unsigned
0x10 → hệ 16 = 1610
010 → hệ 8 = 810
b. Hằng ký tự : là ký tự riê ng biệ t được viế t trong hai dấ u nhá y đơn : ‘A’
Giá trị của hằ ng ký tự là m∙ ASCII của nó.
Ví dụ : printf(“%c có giá trị là %d”,’A’,’A’);
% ‘A’ có giá trị là 65
& Hằ ng ký tự có thể tham gia và o cá c phép toá n như mọi số nguyê n khá c.
Ví dụ :‘9’-’0’=57-48=9
& Hằ ng ký tự có thể là cá c ký tự đặ c biệ t dạ ng ‘\c1’ mà ta đ∙ xét ở hà m
printf() như ‘\n’,’\a’,’\t’ ...
c. Hằng chuỗi : Là một chuỗi ký tự nằ m trong hai dấ u nhá y kép “ “.
Ví dụ : “Day la mot chuoi”
“Hang chuoi co ky tu đạ c biệ t như \ \n \248”
“” → chuỗi rỗng.
Chú ý :
- Phâ n biệ t “A” ≠ ‘A’
Hằ ng: Chuỗi Ký tự
Dạ ng lưu trữ :
A \0 A
- Nhậ n xét: ở dạ ng lưu trữ, ta thấ y tậ n cùng của chuỗi có ký tự NULL ‘\0’
mà không có ở dạ ng ký tự. Chí nh vì vậ y mà không có ký tự rỗng ‘’.
- Một chuỗi có thể được viế t trê n nhiề u hà ng với điề u kiệ n hà ng trê n phả i
có dấ u ‘\’.
Ví dụ :“Day la mot chuoi duoc viet tren \
nhieu hang \n”
d. Hằng biể u thức : Là một biể u thức mà trong đó cá c toá n hạ ng đề u là
cá c hằ ng. Khi đó chương trì nh dịch sẽ tí nh toá n biể u thức trước, và kế t quả được
lưu trữ thẳ ng bằ ng một hằ ng số tương đương.
Ví dụ : 8*20-13 → kế t quả lưu trữ là 173
Kỹ thuật lập trì nh 20
‘a -’A’ → “ là 97-65 = 32
1<8 → “ là 0 (sai)
I.4.2. Khai báo hằng:
Cú pháp: const tê nhằ ng = biể uthức;
Ví dụ : const MAX = 50;
const PI = 3.141593;
Chú ý : - Ta có thể khai bá o hằ ng bằ ng cá ch định nghĩ a 1 macro như sau:
#define tê nhằ ng giá trị
- Lệ nh #define phả i được khai bá o ngoà i hà m và sau nó không có
dấ u ;
I.5. Phép toán
I.5.1. Phép gán:
Cú pháp: biế n = biể u thức;
Chú ý : Phép gá n trong ngôn ngữ C trả về một kế t quả là trị của biể u thức
Ví dụ 1 : c = 10;
a = b = c;
printf(“a=%d , b=%d”,a,b); → a=10,b=10
Ví dụ 2 : x = b + 2*c; ⇔ y= a + (x= b + 2*c)
y = a + x;
Ví dụ 3 : (n+3) = 4+z; (không hợp lệ vì bê n trá i là biể u thức)
‘ ‘= c +’o’; (không hợp lệ vì bê n trá i là hằ ng)
I.5.2. Các phép toán số học :
a. Phép toán hai toán hạng : +, -, *, /, %
Phép toán Kiể u toán hạng Kiể u kế t quả
+, -, * char, int, long, float,
double
Kiể u của toá n hạ ng có kiể u cao nhấ t
/ nguyê n/nguyê n Kiể u nguyê n và là phép chia nguyê n
thực(nguyê n)/thực
(nguyê n)
Kiể u thực và là phép chia thực
% nguyê n/nguyê n Kiể u nguyê n và là phép chia lấ y phầ n dư
Ví dụ :
#include
void main()
Kỹ thuật lập trì nh 21
{ char cv;
int iv = 121;
float fv1,fv2;
printf(“ Chuyể n kiể u :\n\n”);
cv = iv;
printf(“int được gá n cho char : %d → %d (%c)\n\n”,iv,cv,cv);
fv1 = iv/50;
printf(“ int : %d / 50 = %f \n\n”,iv,fv1);
fv1 = iv/50.0;
printf(“ float : %d / 50.0 = %f \n\n”,iv,fv1);
fv1 = 1028.75;
fv2 = fv1 +iv ;
printf(“ %f + %d = %f \n\n”,fv1,iv,fv2);
getch();
}
b. Phép toán một toán hạng : phép tă ng ++, phép giả m --
a++ hoặ c ++a ⇔ a = a+1
a-- hoặ c --a ⇔ a = a
Các file đính kèm theo tài liệu này:
- ki_thuat_lap_trinh.pdf