Tải bản đầy đủ (.pdf) (162 trang)

Hướng dẫn lập trình c từ căn bản đến nâng cao

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.93 MB, 162 trang )


TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
KHOA CÔNG NGHỆ THÔNG TIN & TOÁN ỨNG DỤNG

#"










MÔN HỌC
LẬP TRÌNH C CĂN BẢN


GIẢNG VIÊN: ThS. DƯƠNG THỊ THÙY VÂN




1
LẬP TRÌNH C CĂN BẢN
Th.S Dương Thị Thùy Vân
Khoa CNTT & TƯD
CHƯƠNG 0
GIỚI THIỆU
2


•Giảiquyếtnhững bài toán cơ bảnvớichương
trình máy tính.
• Các khái niệm, kiếnthứccơ bảnvề lập trình.
• Các nguyên lý, kỹ thuậtlậptrìnhcơ bản.
• Dùng ngôn ngữ lậptrìnhC để viết.
• Cú pháp, ngữ nghĩa ngôn ngữ C/C++.
Mục tiêu
Nội dung
Ch1- Thuậttoán
Ch2- Các khái niệmcơ bản
Ch3- Biếnvàhằng
Ch4- Phép toán và biểuthức
Ch5- Cấutrúcđiều khiểnrẽ nhánh, lặp(*)
Ch6- Hàm (*)
3
Tài liệuthamkhảo
1. NguyễnCaoTrí, Bài giảng cơ sở lậptrình
2. Quách TuấnNgọc (1998), Ngôn ngữ lậptrìnhC,
NXB Giáo Dục.
3. Hoàng Kiếm (2001), Giảimột bài toán trên máy
tính như thế nào ?, tập1, NXB GiáoDục.
4. Brian W.Kernigan & Dennis M.Ritchie (2000),
The C Programming Language.
5. H.M. Deitel and P.J. Deitel (1998), C++ How to
program, 2nd Edition, Prentice Hall.
Đánh giá
 Bài tậptrênlớp, BT về nhà, kiểm tra, …, 10%
 KT giữa kì: kiểmtrathực hành trên máy, 20%
 Thi cuối kì: kiểmtraviếttrêngiấy, 70%
4

LẬP TRÌNH C CĂN BẢN
Th.S Dương Thị Thùy Vân
Khoa CNTT & TƯD
•Giảiquyếtnhững bài toán cơ bảnvớichương
trình máy tính.
• Các khái niệm, kiếnthứccơ bảnvề lập trình.
• Các nguyên lý, kỹ thuậtlậptrìnhcơ bản.
• Dùng ngôn ngữ lậptrìnhC để viết.
• Cú pháp, ngữ nghĩa ngôn ngữ C/C++.
Mục tiêu
5
Nội dung
Ch1- Thuậttoán
Ch2- Các khái niệmcơ bản
Ch3- Biếnvàhằng
Ch4- Phép toán và biểuthức
Ch5- Cấutrúcđiều khiểnrẽ nhánh, lặp(*)
Ch6- Hàm (*)
Ch7- Cấutrúcmảng mộtchiều
Tài liệuthamkhảo
1. Quách TuấnNgọc (1998), Ngôn ngữ lậptrìnhC,
NXB Giáo Dục.
2. Hoàng Kiếm (2001), Giảimột bài toán trên máy
tính như thế nào ?, tập1, NXB GiáoDục.
3. Brian W.Kernigan & Dennis M.Ritchie (2000),
The C Programming Language.
4. H.M. Deitel and P.J. Deitel (1998), C++ How to
program, 2nd Edition, Prentice Hall.
6
Đánh giá

 Bài tậptrênlớp, BT về nhà, kiểm tra, …, 10%
 KT giữa kì: kiểmtrathực hành trên máy, 20%
 Thi cuối kì: kiểmtraviếttrêngiấy, 70%
Chương 1
THUẬT TOÁN
7
Nội dung
•1. Vấn đề, bài toán
•2. Thuậttoán
•3. Giải bài toán trên máy tính
1. Vấn đề, bài toán
Vấn đề
) Những vướng mắc, khó khăntrongcuộcsống
mà ta cầngiải quyết.
Bài toán
) Mộtloạivấn đề mà để giảiquyết, cần đếntính
toán (phép toán số, luận lí, quan hệ).
8
Giải quyếtvấn đề, bài toán
•Bấtkỳ vấn đề, bài toán ngoài đờinàocũng có thể
được chia thành trình tự nhiều công việcnhỏ hơn.
•Trìnhtự các công việcnhỏ này đượcgọilàgiải
thuậtgiải quyết công việc ngoài đời.
•Mỗi công việcnhỏ hơncũng có thểđượcchianhỏ
hơnnữanếunócònphứctạp,
•Vấn đề mấuchốtcủaviệcdùngmáytínhgiải
quyết công việc ngoài đờilàlập trình.
2. Thuậttoán
Thuật toán
) Là cách biểudiễnlờigiải "bài toán“ rõ ràng,

chi tiết để có thể thựcthiđược trên máy tính.
) Là mộtdãyhữuhạn các bướcnhằmxácđịnh các thao
tác mà máy tính có thể thựchiện được sao cho sau
khoảng thờigianhữuhạnthìchorakếtquả.
 Bài toán giảiphương trình bậc1-1 ẩn. (??)
9
Các đặctrưng củathuậttoán(1)
- Tính hữuhạn: có hữuhạnbướcvàphảidừng.
- Tính xác định: các bướcrõràng, thựcthiđược.
- Tính đúng: quá trình thựcthitheocácbước đãchỉ
ra phải đi đếnkếtquả như ý.
- Tính hiệuquả: khốilượng, không gian, thờigian
tính toán không quá “lớn”.
- Tính tổng quát: áp dụng đượcchomọitrường hợp
củabàitoán.
Các đặctrưng củathuậttoán(2)
10
Phương pháp biểudiễnthuật toán
•Thuậttoánthường đượcbiểudiễnbằng
các ngôn ngữ sau:
– Dùng ngôn ngữ tự nhiên (NNTN)
– Dùng mã giả (NNTN + NN LT)
– Dùng lưu đồ -sơđồkhối
Biểudiễnbằng NNTN
• Dùng ngôn ngữ thường ngày để liệt kê các bướccủa
thuật toán.
• Không thể hiệnrõcấutrúccủathuậttoán
• Dài dòng, có thể gây hiểulầmhoặc khó hiểu
• Không yêu cầungườiviếthay đọcnắm quy tắc.
− Không có một quy tắccốđịnh

•Tínhdễđọc:
− viết các bước con lùi vào bên phải
− đánh số bước theo quy tắc phân cấpnhư 1, 1.1,
11
Biểudiễnbằng mã giả (1)
• Vay mượn các cú pháp củamột ngôn ngữ lậptrình
– dùng mộtphần ngôn ngữ tự nhiên
–bị phụ thuộc vào ngôn ngữ lập trình.
•Mọi ngôn ngữ lậptrìnhđềucónhững thao tác cơ
bản
–xử lý, rẽ nhánh và lặp
–tậndụng được các khái niệm trong ngôn ngữ lập trình,
•Dễ dàng nắmbắtnội dung thuậttoán
Biểudiễnbằng mã giả (2)
Một đoạnmãgiả củathuật toán giảipt bậchai
if Delta > 0 then begin
x1=(-b-sqrt(delta))/(2*a)
x2=(-b+sqrt(delta))/(2*a)
xuấtkếtquả : phương trình có hai nghiệm là x1 và x2
end
else
if delta = 0 then
xuấtkếtquả : phương trình có nghiệmképlà
-b/(2*a)
else {trường hợp delta < 0 }
xuấtkếtquả : phương trình vô nghiệm
12
Biểudiễnbằng lưu đồ (1)
Đường đi
Terminator

Module – CT con
Quyết định
Xuất
Xử lý
Nhập
Ý nghĩaBiểutượng
Biểudiễnbằng lưu đồ (2)
•Côngcụ trựcquandiễn đạtthuật toán.
–Biểudiễnbằng mô hình – hình vẽ
• Theo dõi được:
–sự phân cấp các trường hợp
– quá trình xử lý củathuậttoán
•Phânbiệthailoạithaotác:
– Chọnlựa theo một điềukiệnnàođó
– Xử lý, hành động
13
Biểudiễnbằng lưu đồ (3)
• Chọnlựa theo một điềukiệnnàođó:
–Biểudiễnbằng một hình thoi, bên trong chứa
biểuthức điềukiện.
–Vídụ: thao tác "nếua = b thìthựchiện thao tác
B2, ngượclạithựchiệnB4"là thao tác chọnlựa
a = b
Δ = 0
Biểudiễnbằng lưu đồ (4)
• Thao tác chọnlựa: có thể có hai hướng đi
–mộthướng ứng với điềukiệnthỏa
–mộthướng ứng với điềukiện không thỏa.
– 2 cung có nhãn
• Đ/Đúng,Y/Yes

• S/Sai,N/No
14
Biểudiễnbằng lưu đồ (5)
• Xử lý, hành động:
–Biểudiễnbằng mộthìnhchữ nhật, bên trong
chứanội dung xử lý.
–Vídụ: "Chọnmộtmônhọcvàin ra." là một
thao tác thuộcloạihànhđộng.
tăng i lên 1 chọn1 hộpbấtkỳ
Biểudiễnbằng lưu đồ (6)
•Quátrìnhthựchiện các thao tác:
– Đường đi–route
–Biểudiễnbằng cung có hướng
•nốigiữa 2 thao tác: thựchiệnlầnlượt
15
Biểudiễnbằng lưu đồ (7)
•Ðiểmcuối (terminator)
–Biểudiễnbằng hình ovan
– Điểmkhởi đầu
•chỉ có cung đira
• bên trong ovan ghi chữ: bắt đầu/start/begin
– Điểmkếtthúc
•Chỉ có cung đivào
• bên trong ovan ghi chữ: kếtthúc/end
•Mỗilưu đồ chỉ có 1 điểmbắt đầuvà1 điểmkết
thúc.
Phương trình thuật toán giảipt
bậc2. Đường chấm ứng với
trường hợpnghiệm kép, ví dụ:
a=1,b=2,c=1

16
Biểudiễnbằng lưu đồ (8)
• Điểmnối (connector)
–Nối các phần khác nhau củamột
lưu đồ
–Nối sang trang
–Sử dụng vớilưu đồ phứctạp
•Giảm độ rắcrối
• Đặtkýhiệu
liên hệ giữa các
điểmnối
3. Giải bài toán trên máy tính (1)
Các bướcgiảiquyếtvấn đề, bài toán bằng máy tính
điệntử (MTĐT):
1) Xác định vấn đề, bài toán: xác định rõ yêu cầucủabài
toán, bài toán cho gì (Input) và yêu cầu tìm gì (Output).
2) Lựachọnphương pháp giải: Có thể có nhiều cách
khác nhau để giải bài toán. Các phương pháp có thể
khác nhau về thờigianthựchiện, chi phí lưutrữ dữ
liệu, độ chính xác, … => tùy theo nhu cầucụ thể mà
chọnphương pháp giải thích hợp.
17
3. Giải bài toán trên máy tính (2)
3) Xây dựng thuật toán: xây dựng mô hình chặtchẽ,
chính xác hơnvàchi tiếthơn cho phương pháp giải
đãchọn. Xác định rõ ràng dữ liệu vào, ra cho các
bướcthựchiệncơ bảnvàtrậttự thựchiện các bước
đó. Nên áp dụng phương pháp thiếtkế có cấutrúc, từ
thiếtkế tổng thể tiến hành làm mịndầntừng bước.
4) Cài đặtchương trình: mô tả thuậtgiảibằng chươ

ng
trình. Dựavàothuậtgiải đã đượcxâydựng, căncứ
quy tắccủamột ngôn ngữ lậptrìnhđể soạnthảora
chương trình thể hiệngiảithuậtthiếtlập ở bước3.
3. Giải bài toán trên máy tính (3)
5) Hiệuchỉnh chương trình: Cho chương trình
chạythửđểphát hiệnvàđiềuchỉnh sai sót nếu
tìm thấy. Có hai loạilỗi: lỗi cú pháp và lỗingữ
nghĩa.
6) Thựchiệnchương trình: Cho MTĐT thựchiện
chương trình. Tiếnhànhphântíchkếtquả thu
được. Việc phân tích kếtquả nhằmkhẳng định
kếtquảđó có phù hợp hay không. Nếu không,
cầnkiểmtralạitoànbộ các bướcmộtlầnn
ữa.
18
Bài tập
Một công ty, mỗigiờ làm việccủamột công nhân được
trả 10,000 đồng/giờ trong 8 giờđầulàmviệc theo qui
định.
Nếulàmtăng ca (phải làm nhiềuhơn8 giờ qui định),
thì mỗigiờ vượtqui định đượctrả thêm 30%.
Tính tiền công cho một công nhân tùy theo giờ làm
việccủahọ.
CHƯƠNG 2
CÁC KHÁI NIỆM CƠ BẢN
Th.S Dương Thị Thùy Vân
Khoa CNTT & TƯD
19
Nội dung

1. Ngôn ngữ lậptrình
2. Chương trình dịch
3. Soạnthảomãnguồn-Biên dịch-Liên kếtvà
thựcthi
4. Ví dụ chương trình C
5. Các thành phầncủachương trình C đơngiản
1. Ngôn ngữ lậptrình(1)
•Con người liên lạcvới nhau dùng:
– ngôn ngữ tự nhiên: các mẫutừ ngữ và âm thanh
•Con người “nói chuyện” với máy tính dùng:
– Ngôn ngữ lậptrình: tậptừ ngữ và ký hiệu
• Tuântheocácluật đượcgọilàcúpháp(syntax)
•Córấtnhiềungônngữ lậptrìnhđang đượcsử
dụng.
20
1. Ngôn ngữ lậptrình(2)
•Dựavàomức độ chi tiết hóa việcmôtả các thao
tác, người ta chia ngôn ngữ lập trình thành các
lớp:
– Ngôn ngữ máy,
–Hợpngữ,
– Ngôn ngữ cấp cao.
• Các ngôn ngữ cấp cao gầnvới ngôn ngữ tự nhiên
nên rấttiệnlợichoviệcmôtả các thao tác và dễ
học, dễ nhớ.
1. Ngôn ngữ lậptrình(3)
Ngôn ngữ máy
Hợpngữ
Ngôn ngữ cấpcao
+1300042774

+1400593419
+1200274027
LOAD A
ADD B
STORE C
C=A+B
21
Ngôn ngữ máy (1)
• Là ngôn ngữ nềntảng củabộ vi xử lý, còn được
gọilàmãmáy.
•Tậplệnh của ngôn ngữ máy phụ thuộcvàoloạivi
xử lý nên ngôn ngữ máy sẽ khác nhau trên những
máytínhcósử dụng bộ vi xử lý khác nhau.
• Các chương trình đượcviếtbằng các loại ngôn
ngữ khác cuốicùngđều được chuyển thành ngôn
ngữ máy trước khi chương trình đó được thi hành.
Ngôn ngữ máy (2)
• Ưu điểmviếtchương trình bằng ngôn ngữ máy:
– điềukhiểnmáytínhtrựctiếp
• đạt được chính xác điềumìnhmuốnlàm.
•hiệuquả về tốc độ thi hành, kích thướcchương trình nhỏ
=> ngôn ngữ máy cho phép khai thác triệt để khả
năng của máy tính.
•Bấtlợicủachương trình ngôn ngữ máy
–Tốnrấtnhiềuthờigianđể viết,
–Rất khó đọc, khó theo dõi để tìm lỗi
–Chỉ chạy đượctrênnhững máy tính có cùng bộ vi xử lý.
=> ngôn ngữ máy đượcgọi là ngôn ngữ cấpthấp.
22
Hợpngữ

•Tương tự như ngôn ngữ máy nhưng sử dụng các
ký hiệugợinhớđểbiểudiễnchomãlệnh của
máy.
• Cho phép định địachỉ hình thức (dùng tên hoặcký
hiệu để tham chiếutớimộtvị trí bộ nhớ) thay vì
phảisử dụng địachỉ thựcsự (bằng con số nhị
phân) như ngôn ngữ máy.
• Được phát triểnnhằmgiúplập trình viên dễ nhớ
các lệnh củach
ương trình.
• Các chương trình hợpngữđược chuyển sang mã
máy thông qua trình hợpdịch (assembler).
Ngôn ngữ cấpcao
•Hợpngữ vẫncònrấtgầnvớitừng thiếtkế củamáy
tính.
•Cầncónhững ngôn ngữ lậptrìnhgầnvới ngôn
ngữ tự nhiên hơn, đượcgọi là ngôn ngữ cấp cao.
• Ngôn ngữ cấp cao bao gồm: danh từ, động từ, ký
hiệutoánhọc, liên hệ và thao tác luận lý. Các yếu
tố nàycóthểđượcliênkếtvới nhau tạo thành câu
lệnh.
• Ưu điểmviếtchương trình bằng ngôn ng
ữ cấp
cao:
–Dễđọcvàdễ học
– Không phụ thuộcvàomáytính
23
VD01
// Chuong trinh tinh bieu thuc y= 3e^cos(t+1)
#include<iostream.h>

#include<math.h>
void main()
{
double t, y;
cout<<”Moi ban nhap 1 so thuc t: ”;
cin>>t;
y= 3*exp(cos(t+1));
cout<<”Gia tri cua bieu thuc can
tinh la: ”<< y;
}
Các thành phầncủa ngôn ngữ
lậptrình
•Mỗi ngôn ngữ lậptrìnhthường có ba thành phầncơ
bản:
– Bảng chữ cái: là tậphợp các kí tựđược dùng khi viết
chương trình, ngoài các kí tự này không được phép dùng bất
kì kí tự nào khác.
– Cú pháp: là bộ quy tắc để viếtchương trình. Dựavào
chúng, ngườilập trình và chương trình dịch biết đượctổ
hợpnàocủa các kí tự trong bảng chữ cái là hợplệ và tổ hợp
nào là không hợplệ. Nhờđó, có thể mô tả chính xác thuật
toán để máy thựchiện.
– Ngữ nghĩa
: xác định ý nghĩathaotáccầnphảithựchiện,
ứng vớimỗitổ hợpkítự và dựavàongữ cảnh của nó.
24
Ví dụ
•Hầunhư các ngôn ngữ lậptrìnhđềucókítự + chỉ
phép cộng. Xét các biểuthức:
A + B (1)

I + J (2)
•Giả thiết A, B là các biếnthựcvàI, J làcácbiến
nguỵên.
•Khiđódấu trong biểuthức(1) sẽđượchiểulàcộng
hai số nguyên, dấu + trong biểuthức(2) sẽđượchiểu
là cộng hai số thực.
•Như vậy, cú pháp cho biết cách viếtmộtchương
trình hợplệ,
• Còn ngữ nghĩaxácđịnh tính chất, thuộctínhc
ủa các
tổ hợpkítự trong chương trình.
2. Chương trình dịch
•Chuyển đổichương trình từ NN cấpcao
(hợpngữ) thành NN máy.
•Cóhaikỹ thuậtchính:
– Trình biên dịch (compiler),
– Trìnhthôngdịch (interpreter).

×