Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 95 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
95
Dung lượng
2,34 MB
Nội dung
Đại học quốc gia hà nội
khoa công nghệ
giáo trình tinhọccơsở
phần lậptrìnhtrênngônngữC
vũ bá duy
hà nội tháng 1 năm 2003
Gi¸o tr×nh tin häc c¬ së II - NgônngữC
2
Bạn đọc trên mạng của Đại học Quốc gia Hà Nội được phép
đọc, in và download tài liệu này từ thư viện điện tử của Khoa
Công nghệ về sử dụng nhưng không được phép sử dụn
g
với mục
đích vụ lợi.
Bản quyền thuộc nhóm tác giả thực hiện chương trìnhTin
học cơsở
Đây là phiên bản đầu tiên, có thể còn nhi
ề
u sai sót. Chun
g
tôi
mong nhận được ý kiến đóng góp của bạn đọc. Các ý ki
ế
n
g
ửi v
ề
theo địa chỉ dkquoc@vnu.edu.vn
hoặc dkquoc@ỵahoo.com .
Cảm ơn bạn đọc đóng góp để hoàn thiện giáo trình.
Thay mặt các tác giả
Đào Kiến Quốc
Gi¸o tr×nh tin häc c¬ së II - NgônngữC
3
MÔC LÔC
I. Mở ĐầU 4
I.1. Bảng chữ cái, tên và từ khoá 4
I.2.Các bước lậptrình giải bài toán 5
II. BIếN, HằNG VÀ CÁC KIểU Dữ LIệU TRONG C 8
II.1.Biến 8
II.2. Hằng 10
II.3. Các kiểu dữ liệu chuẩn đơn giản trong C 11
II.4. Biểu thức và các phép toán 13
III. CHƯƠNG TRÌNHC 26
III.1.Cấu trúc chương trình 27
III.2.Câu lệnh và dòng chú thích 31
III.3.Nhập và xuất dữ liệu 33
IV - CÁC CấU TRÚC ĐIềU KHIểN CHƯƠNG TRÌNH 41
IV. Cấu trúc tuần tự
41
IV.2.Cấu trúc rẽ nhánh 42
IV.3.Cấu trúc switch 46
IV.4.Cấu trúc while 48
IV.5.Cấu trúc do while 53
IV.6.Cấu trúc for 57
IV.7.Câu lệnh continue và break 63
V - MảNG VÀ CON TRỏ 65
V.1. Khái niệm Mảng 65
V.2. Mảng 1 chiều 65
V.3 - Mảng 2 chiều 74
V.4 - Con trỏ và mảng 79
VI – CÁC VấN Đề CƠ BảN Về HÀM 88
VI.1 - Nguyên mẫu (prototype) hàm 88
VI.2 - Định nghĩa hàm 89
VI.3 - Lời gọi hàm và truyền tham số 90
TÀI LIệU THAM KHảO 95
Gi¸o tr×nh tin häc c¬ së II - NgônngữC
4
I. Mở đầu
C là ngônngữlậptrình được thiết kế bởi Dennis Ritchie tại phòng thí nghiệm Bell
Telephone năm 1972. Nó được viết với mục tiêu chính là xây dựng hệ điều hành UNIX.
Vì thế ban đầu nó không hướng tới sự tiện dụng cho người lập trình. C được phát triển từ
một ngônngữlậptrìnhcó tên là B (B là ngônngữlậptrình được viết bởi Ken Thompson
tại Bell Labs, và tên ngônngữ lấy theo tên của Bell Labs).
C là ngônngữ mạnh và mềm dẻo, linh hoạt, nó nhanh chóng trở thành ngônngữ phổ
biến không chỉ trong phạm vi của Bell, C được các lậptrình viên sử dụng viết nhiều loại
ứng dụng ở các mức độ khác nhau.
Cũng vì nó được dùng nhiều nơi nên xuất hiện những đặc điểm khác nhau, các phiên
bản phát triển không thống nhất. Để giải quyết vấn đề này, năm 1983 Viện tiêu chuẩn Mỹ
(ANSI) đã thành lập một chuẩn cho C và có tên ANSI C (ANSI standard C). Nói chung
các chương trình dịch C ngày nay đều tuân theo chuẩn này ngoại trừ một số khác biệt nhỏ.
Hiện nay có rất nhiều ngônngữlậptrình bậc cao như C, Pascal, BASIC, mỗi ngôn
ngữ đều có điểm mạnh riêng của nó và phù hợp cho một số lĩnh vực nào đó, C cũng
không ngoại lệ, C được phổ biến bởi nó có các đặc điểm sau:
• C là ngônngữ mạnh và mềm dẻo. Có thể nói rằng sự hạn chế của C chỉ phụ thuộc
vào người lập trình, tức là với C bạn có thể làm tất cả những điều theo ý tưởng của bạn. C
được dùng cho những dự án từ nhỏ tới lớn như: Hệ điều hành, Đồ hoạ, Chương trình
dịch,
• C dễ chuyển đổi sang hệ hệ thống khác (tính khả chuyển), tức là một chương trình
C được viết trên hệ thống này có thể dễ dàng dịch lại chạy được trên hệ thống khác
• C là ngônngữcô đọng, số lượng từ khoá không nhiều.
• C là ngônngữlậptrình cấu trúc. Mã lệnh của chương trìnhC được viết thành các
hàm, các hàm này có thể sử dụng lại trong các ứng dụng khác.
Với các đặc điểm trênC là ngônngữ tốt cho việc họclập trình, hơn nữa sau này
chúng ta còn có thể tiếp cận với lậptrình hướng đối tượng, và một trong những ngônngữ
lập trình chúng ta lựa chọn đầu tiên cho lậptrình hướng đối tượng là C++, những kiến
thức về C vẫn có ích cho bạn vì C++ là ngônngữ được phát triển từ C và bổ sung đặc tính
hướng đối tượng.
I.1. Bảng chữ cái, tên và từ khoá
• Bảng chữ cái: Mọi ngônngữlậptrình đều được xây dựng từ một bộ kí tự nào đó
và các quy tắc trên đó để xây dựng các từ, các câu lệnh và cấu trúc chương trình. Ngôn
ngữ lậptrìnhC sử dụng bộ ký tự ASCII (American Standard Code for Informations
Interchange). Theo chuẩn này, bộ kí tự gồm có 256 kí tự đó là:
Gi¸o tr×nh tin häc c¬ së II - NgônngữC
5
- Các chữ cái: A, ,Z, a, ,z
- Các chữ số: 0, ,9
- Các dấu phép toán số học: +,-,*,/,
- Các dấu ngoặc: (, ), [, ],
- Các ký tự khác
Mỗi kí tự có tương ứng 1 số duy nhất gọi là mã, trong đó có 128 kí tự đầu (có mã từ 0 tới
127) là kí tự cố định và 128 kí tự còn lại (có mã từ 128 tới 255) là các kí tự mở rộng, tức
là nó có thể thay đổi tuỳ theo ngônngữ mỗi quốc gia sử dụng.
• Từ khoá và tên: Tên là một xâu (dãy) các kí tự, trong ngônngữlậptrình nói chung
đều yêu cầu tên phải tuân theo những ràng buộc nhất định.
Với C tên là xâu kí tự chỉ có thể gồm
- các chữ cái
- chữ số
- dấu gạch nối
Tên phải bắt đầu bằng chữ cái hoặc dấu gạch dưới, độ dài không quá 32 kí tự, không được
trùng với từ khoá của ngôn ngữ. Và vì Cphân biệt chữ hoa và chữ thường nên các tên chữ
hoa như XY và xy là khác nhau.
Mỗi ngônngữ đều có riêng một tập các từ với ý nghĩa đặc biệt đó là các từ khoá,
chúng được dùng với mục đích định trước như tên kiểu dữ liệu, tên toán tử,
Sau đây là một số từ khoá của C
asm enum signed
auto extern sizeof
break float static
case for struct
char goto switch
const if typedef
continue int union
default long unsigned
do register void
double return volatile
else short while
I.2.Các bước lậptrình giải bài toán
Để giải một bài dù mức nào thì bước đầu tiên chúng ta cũng phải phát biểu bài toán,
tức là chúng ta phải hiểu bài toán yêu cầu gì thì mới có thể tìm được thuật giải, và cài đặt
thuật toán đó và sau khi đã có chương trình bạn phải chạy để kiểm nghiệm tính đúng đắn
của nó.
Như vậy để giải bài toán bằng chương trình chúng ta theo các bước sau:
1. Xác định đối tượng của chương trình
Giáo trìnhtinhọccơsở II - Ngụn ng C
6
2. Xỏc nh phng phỏp v thut gii
3. Vit chng trỡnh (lp trỡnh)
4. Chy chng trỡnh v kim tra kt qu.
cú mt chng trỡnh chỳng ta cn phi vit cỏc lnh (lp trỡnh) trong mt ngụn
ng lp trỡnh no ú, nh C chng hn, nhng mỏy tớnh khụng chy trc tip c chng
trỡnh vit bng cỏc ngụn ng lp trỡnh bc cao (gi l chng trỡnh ngun), nú ch cú th
thc hin c cỏc chng trỡnh dng mó mỏy (chng trỡnh ớch). Vỡ vy sau khi ó cú
chng trỡnh ngun, chỳng ta cn thc hin chuyn chng trỡnh ngun thnh chng
trỡnh ớch, cụng vic ny chỳng ta cn n trỡnh biờn dch (compiler) v liờn kt (linker).
Nh vy ta thy chu trỡnh phỏt trin mt chng trỡnh nh sau:
1. Son tho chng trỡnh ngun
Chỳng ta cú th s dng mt trỡnh son tho vn bn chun (ASCII) no ú son
tho chng trỡnh, sau ú ghi vo file chng trỡnh ngun (ngm nh vi phn m rng
l .C).
Do C cng nh hu ht cỏc ngụn ng lp trỡnh ph bin u s dng bng ch cỏi
ASCII nờn bn cú th s dng bt k mt h son tho vn bn chun vit chng
trỡnh, tuy nhiờn hu ht cỏc trỡnh biờn dch ca C trờn mụi trng MS-DOS hoc
WINDOWS u cú tớch hp trỡnh son tho v bn nờn s dng trỡnh son tho tớch hp
ny s thun li hn.
2. Biờn dch chng trỡnh ngun
Hin nay cú rt nhiu chng trỡnh dch cho C nh: Turbo C, BC, Microsoft C, mc
ớch ca bc ny l chuyn chng trỡnh ngun thnh chng trỡnh mó i tng
(object). Sau bc ny (nu thnh cụng) chỳng ta thu c file chng trỡnh i tng
(cú phn m rng l .OBJ)
3. Liờn kt chng trỡnh
Sau bc biờn dch hon thnh ta cú chng trỡnh i tng, õy cha phi l chng
trỡnh cú th chy c trờn mỏy tớnh, bc ny chỳng ta phi s dng mt trỡnh liờn kt
liờn kt cỏc hm th vin vi chng trỡnh i tng to ra chng trỡnh ớch . Bn cú
th s dng trỡnh liờn kt c lp no ú, nhng vi cỏc trỡnh biờn dch ca C trờn mụi
trng DOS hay WINDOWS u cú sn trỡnh liờn kt.
4. Chy v kim tra kt qu chng trỡnh
Khi ó cú chng trỡnh ớch, chỳng ta cn phi kim tra tớnh ỳng n ca nú. bn
chy chng trỡnh vi cỏc b d liu mu v kim tra kt qu cú nh d kin hay khụng,
nu cú sai sút thỡ phi xỏc nh nguyờn nhõn gõy li v quay li bc 1 hiu chnh. v
chỳng ta lp li quỏ trỡnh ny cho ti khi c chng trỡnh gii ỳng bi toỏn mong i.
Gi¸o tr×nh tin häc c¬ së II - NgônngữC
7
Hình 1 – Các bước phát triển chương trình
Hiện nay có rất nhiều chương trình dịch cho C và hầu hết (trên nền DOS hoặc Windows)
trong đó được tích hợp cả trình soạn thảo, biên dịch, liên kết - gọi là môi trường tích hợp.
Trong giáotrình này chúng ta sử dụng BC (Borland C) hoặc turbo C làm môi trường lập
trình.
Giáo trìnhtinhọccơsở II - Ngụn ng C
8
II. Bin, hng v cỏc kiu d liu trong C
II.1.Bin
ắ Khỏi nim
Bin l i lng cú giỏ tr thuc mt kiu d liu no ú m c chp nhn bi
ngụn ng (xem phn cỏc kiu d liu), giỏ tr ca bin cú th thay i trong thi gian tn
ti ca bin (hay ta núi trong vũng i ca bin).
Cỏc thnh phn ca chng trỡnh s c lu trong b nh trong v bin cng khụng
ngoi l. Tc l bin cng c cp phỏt mt vựng nh lu gi giỏ tr thuc mt kiu
d liu xỏc nh. Vỡ th theo mt khớa cnh no ú cú th núi bin l mt cỏi tờn i din
cho ụ nh trong mỏy tớnh, chng trỡnh cú th truy xut ụ nh (ly hoc ghi giỏ tr) thụng
qua tờn bin.
Mt bin núi chung phi cú cỏc c trng sau:
- Tờn bin
- Kiu d liu: kiu ca bin
- Giỏ tr hin ti nú ang lu gi (giỏ tr ca bin)
( tuy nhiờn sau ny chỳng ta thy trong C cú bin kiu void, ban u coi õy l bin
khụng kiu nhng dn quan nim ú cng l 1 tờn kiu v l kiu khụng xỏc nh)
ắ Tờn bin
Trong C cng nh cỏc ngụn ng lp trỡnh khỏc cỏc bin u phi cú tờn, cỏc tờn bin
hay núi chung l tờn (gm tờn bin, tờn hng, tờn hm, hoc t khoỏ) l mt xõu kớ t v
phi tuõn theo cỏc quy nh ca ngụn ng ú l:
Tờn ch cú th cha kớ t l ch cỏi (a , ,z; A, ,Z); ch s( 0, ,9) v kớ
t gch di (_), s kớ t khụng quỏ 32.
Kớ t u tiờn ca tờn phi l ch cỏi hoc kớ t gch di
Trong tờn phõn bit ch hoa v ch thng. Tc l hai xõu cựng cỏc kớ t nhng
khỏc nhau bi loi ch hoa hoc ch thng l hai tờn khỏc nhau, vớ d nh vi 2 xõu kớ
t AB v Ab l hai tờn hon ton phõn bit nhau.
Cỏc t khoỏ ca ngụn ng khụng c dựng lm tờn bin, tờn hng, hay tờn hm.
Hay núi khỏc i, trong chng trỡnh cú th bn phi dựng n tờn, tờn ny do bn t theo
ý tng ca bn nhng khụng c trựng vi cỏc t khoỏ.
ắ Vớ d cỏc tờn hp l v khụng hp l
Tờn bin hp l / khụng hp l
Percent hp l
Gi¸o tr×nh tin häc c¬ së II - NgônngữC
9
y2x5__fg7h hợp lệ
ho_ten hợp lệ
_1990_tax hợp lệ
A hợp lệ
ngay-sinh không hợp lệ vì có kí tự -(dấu trừ)
double không hợp lệ vì trùng với từ khoá
9winter
không hợp lệ vì kí tự đầu tiên
là số
¾ Câu lệnh định nghĩa biến
Trong ngônngữlậptrìnhcó cấu trúc nói chung và trong C nói riêng, mọi biến đều
phải được định nghĩa trước khi sử dụng. Câu lệnh định nghĩa biến báo cho chương trình
dịch biết các thông tin tên, kiểu dữ liệu và có thể cả giá trị khởi đầu của biến.
Cú pháp khai báo biến :
<kiểu_dữ_liệu> <biến_1> [ = <giá_trị_1>] [, <biến_2>[ = <giá_trị_2>, ];
trong đó:
• <kiểu_dữ_liệu> là tên một kiểu dữ liệu đã tồn tại, đó có thể là tên kiểu dữ liệu
chuẩn hoặc kiểu dữ liệu định nghĩa bởi người lập trình.
• <biến_1>, <biến_2> là các tên biến cần khai báo, các tên này phải tuân theo quy
tắc về tên của ngôn ngữ.
• <giá_tri_1>, <giá_trị_2> là các giá trị khởi đầu cho các biến tương ứng <biến_1>,
<biến_2>. Các thành phần này là tuỳ chọn, nếu có thì giá trị này phải phù hợp với kiểu
của biến.
Trên một dòng lệnh định nghĩa có thể khai báo nhiều biến cùng kiểu, với tên là
<biến_1>, <biến_2>, các biến cách nhau bởi dấu phẩy (,) dòng khai báo kết thúc bằng
dấu chấm phẩy (;).
Ví dụ:
int a = 4, b = 6;
float x =4.5,y,z;
unsigned u ;
char c =’A’;
Khi gặp các lệnh định nghĩa biến, chương trình dịch sẽ cấp phát vùng nhớ có kích
thước phù hợp với kiểu dữ liệu của biến, nếu có thành phần khởi đầu thì sẽ gán giá trị
khởi đầu vào vùng nhớ đó.
Giáo trìnhtinhọccơsở II - Ngụn ng C
10
II.2. Hng
Khỏi nim
Hng l i lng cú giỏ tr thuc mt kiu d liu nht nh, nhng giỏ tr ca hng
khụng th thay i trong thi gian tn ti ca nú.
Cú hai loi hng mt l cỏc hng khụng cú tờn (chỳng ta s gi l hng thng) ú l
cỏc giỏ tr c th tc thi nh : 8, hay 9.5 hoc d.
Loi th hai l cỏc hng cú tờn ( gi l hng ký hiu). Cỏc hng ký hiu cng phi
nh ngha trc khi s dng, tờn ca hng c t theo quy tc ca tờn. Sau õy nu
khụng cú iu gỡ c bit thỡ chỳng ta gi chung l hng
nh ngha hng
Cỏc hng c nh ngha bng t khoỏ const vi cỳ phỏp nh sau:
const <kiu_d_liu> <tờn_hng> = <giỏ_tr>;
hoc const <tờn_hng> = <giỏ_tr>;
Trong dng th hai, chng trỡnh dch t ng n nh kiu ca hng l kiu ngm
nh, vi BC hay TC l int v nh vy chng trỡnh dch s t ng chuyn kiu ca
<giỏ_tr> v kiu int.
Vớ d:
const int a = 5; // nh ngha hng a kiu nguyờn, cú giỏ tr l 5
const float x = 4; // hng x kiu thc, cú giỏ tr l 4.0
const d = 7; // hng d kiu int, giỏ tr l 7
const c = 1; // hng c kiu int giỏ tr = 49
const char * s = Ngonngu C;// s l hng con tr, tr ti xõu Ngo nguC
Cỏc hng s trong Cc ngm hiu l h 10, nhng bn cú th vit cỏc hng trong
h 16 hoc 8 bng cỳ phỏp, giỏ tr s h 16 c bt u bng 0x, vớ d nh 0x24, 0xA1
cỏc s h 8 bt u bi s 0, vớ d 025, 057.
Cỏc hng kớ t c vit trong cp du vớ d a, 2 cỏc giỏ tr ny cC hiu l
s nguyờn cú giỏ tr bng mó ca kớ t; a cú giỏ tr l 97, B cú giỏ tr bng 66.
Cỏc xõu kớ t l dóy cỏc kớ t c vit trong cp , vớ d Ngonngu C, a (xõu kớ
t s c gii thiu trong phn sau)
Chỳ ý: Cỏc bin, hng cú th c nh ngha ngoi mi hm, trong hm hoc trong
mt khi lnh. Vi C chun thỡ khi nh ngha bin, hng trong mt khi thỡ dũng nh
ngha phi cỏc dũng u tiờn ca khi, tc l trc tt c cỏc lnh khỏc ca khi,
nhng trong C++ bn cú th t dũng nh ngha bt k v trớ no.
[...]... trinh khong co nghiem thuc); } III.2.3 Li chỳ thớch Trong chng trỡnh chỳng ta c th thờm cc li chỳ thớch gii thớch c u lnh hoc chc nng ca chng trỡnh , nhm cho chng trỡnh d c 32 Giáo trìnhtin h ccsở II - Ngụn ng CCc chỳ thớch c t gia cp /* v */, c th trờn mt hoc nhiu dũng Vi cc chng trỡnh dch ca C+ + bn c th s dng // ghi mt chỳ thớch trong chng trỡnh, vi c ch ny ni dung li chỳ thớch bt u sau... th dựng phộp chuyn kiu nh int (a) l u tiờn cc toỏn t Trong biu thc c th c nhiu toỏn t, vy iu gỡ giỳp cho chng trỡnh dch thc hin cc toỏn t mt c ch ỳng n? Trong cc biu thc nu ccc cp (), thỡ nú s quyt nh th t thc hin cc phộp toỏn: trong ngoc trc, ngoi ngoc sau Nhng c nhng kh nng du ngoc khụng choc khụng quyt nh tt ccc trng hp thỡ khi ú C thc hin cc toỏn t cn c vo u tiờn ca chỳng v s dng.. .Giáo trìnhtin h ccsở II - Ngụn ng C II.3 Cc kiu d liu chun n gin trong C Mt trong mc ớch ca cc chng trỡnh l x lý, bin i thụng tin, cc thụng tin cn x lý phi c biu din theo mt cu tr c x c nh no ú ta gi l cc kiu d liu Cc kiu d liu ny c quy nh bi ngụn ng lp trỡnh, hay núi kh c i mi ngụn ng c tp cc kiu d liu kh c nhau Khụng hon ton ging nh khỏi nim kiu d liu trong toỏn hc, trong cc ngụn... kh c nhau) Khi nhp d liu bng hm ny bn phi x c nh a ch (vựng nh, hay bin) lu d liu v kiu ca d liu cn nhp c phỏp int scanf(const char * format, ds _c c_ con_tr); chc nng 33 Giáo trìnhtin h ccsở II - Ngụn ng C Hm scanf cho phộp chỳng ta nhp d liu t bn phớm theo khuụn dng c x c nh bi xõu kớ t format, d liu nhp vo s lu vo cc bin hoc vựng nh c a ch tng ng l cc con tr trong ds _c c_ con_tr ( c th c ... núi cc kh c void l mt kiu nhng l kiu khụng x c nh II.4 Biu thc v cc phộp toỏn Biu thc 13 Giáo trìnhtin h ccsở II - Ngụn ng C Biu thc l s kt hp gia cc toỏn hng v toỏn t theo mt c ch phự hp din t mt c ng thc toỏn hc no ú Cc toỏn hng c th l hng, bin, hay li gi hm hay mt biu thc con Cc toỏn t thuc vo tp cc toỏn t m ngụn ng h tr Biu thc c phỏt biu nh sau: Cc hng, bin, li gi hm l biu thc Nu... ngoc [] l cc thnh phn tu chn) a Cc bao hm tp (dũng 1) Trong chng trỡnh C (trong hm main cng nh cc hm kh c do ngi lp trỡnh vit) c th s dng cc hm, hng, kiu d liu, (gi chung l cc thnh phn) ó c nh ngha trong th vin ca C s dng cc thnh phn ny chỳng ta phi ch dn cho chng trỡnh dch bit cc thụng tin v cc thnh cn s dng, cc thụng tin ú c khai bỏo trong tp gi l tp tiờu (c phn m rng l H vit tt ca... nhng dch cc bit ca sang phi, cc bit bờn trỏi s c in bng 0, cc bit bờn phi s b ghi ố bi bit bờn trỏi Minh ho toỏn t >> Khi dch s n sang phi k bit, kt qu thu c( n/2k) e Cc phộp toỏn tớch lu (gỏn s hc) Trong cc biu thc toỏn s hc chỳng ta rt hay gp cc biu thc dng nh a = a +k, tc l chỳng ta tng a lờn mt lng bng k, hoc nh a = a . trình C đư c viết thành c c
hàm, c c hàm này c thể sử dụng lại trong c c ứng dụng kh c.
Với c c đ c điểm trên C là ngôn ngữ tốt cho vi c h c lập trình, . Bảng chữ c i: Mọi ngôn ngữ lập trình đều đư c xây dựng từ một bộ kí tự nào đó
và c c quy t c trên đó để xây dựng c c từ, c c câu lệnh và c u tr c chương trình.