muốn học tốt VĐK viết bằng Keil C ta phải tìm hiểu (học)
lập trình C ,
trước tiên ta phải biết cấu trúc chương trình, cách viết một CT, ký hiệu ,khai báo dữ liệu (data) , cấu trúc hàm, mảng.v.v......, và đây là giáo trình bằng tiếng việt của APTECH
trước tiên ta phải biết cấu trúc chương trình, cách viết một CT, ký hiệu ,khai báo dữ liệu (data) , cấu trúc hàm, mảng.v.v......, và đây là giáo trình bằng tiếng việt của APTECH
bắt đầu:
Giới
thiệu
Ngày nay, khoa học máy tính thâm nhập vào mọi lĩnh vực. Tự động hóa hiện đang là ngành chủ chốt điều hướng sự phát triển thế giới. Bất cứ ngành nghề nào cũng cần phải hiểu biết ít nhiều về Công nghệ Thông tin và lập trình nói chung. Cụ thể, C là một ngôn ngữ lập trình cấp cao mà mọi lập trình viên cần phải biết. Vì thế, trong giáo trình này, chúng ta sẽ nghiên cứu chi tiết cấu trúc ngôn ngữ C. Ðầu tiên chúng ta tìm hiểu sự khác nhau của những khái niệm: Lệnh (Command), Chương trình (Program) và Phần mềm (Software).
C - Ngôn ngữ cấu
trúc
Thuật
ngữ ngôn ngữ cấu trúc khối (block-structured language) không áp dụng với C. Ngôn
ngữ cấu trúc khối cho phép thủ tục (procedures) hay hàm (functions) được khai
báo bên trong các thủ tục và hàm khác. C không cho phép việc tạo hàm trong hàm
nên nó không phải là ngôn ngữ cấu trúc khối. Tuy
nhiên, nó được xem là ngôn ngữ cấu trúc vì nó có nhiều điểm giống với ngôn ngữ
cấu trúc ALGOL, Pascal và một số ngôn ngữ
tương tự khác.
C
cho phép có sự tổng hợp của mã lệnh và dữ liệu. Ðiều này là một đặc điểm riêng
biệt của ngôn ngữ cấu trúc. Nó liên quan đến khả năng tập hợp cũng như ẩn dấu
tất cả thông tin và các lệnh khỏi phần còn lại của chương trình để dùng cho
những tác vụ riêng biệt. Ðiều này có thể thực hiện qua việc dùng các hàm hay các
khối mã lệnh (Code Block). Các hàm được dùng để định nghĩa hay tách rời
những tác vụ được yêu cầu trong chương trình. Ðiều này cho phép những chương
trình hoạt động như trong một đơn vị thống nhất. Khối mã lệnh là một nhóm các
câu lệnh chương trình được nối kết với nhau theo một trật tự logic nào đó và
cũng được xem như một đơn vị thống nhất. Một khối mã lệnh được tạo bởi một tập
hợp nhiều câu lệnh tuần tự giữa dấu ngoặc mở và đóng xoắn như dưới
đây:
do
{
i = i + 1;
.
.
.
} while (i < 40);
Ngôn
ngữ cấu trúc hỗ trợ nhiều cấu trúc dùng cho vòng lặp (loop) như là while,
do-while, và for. Những cấu trúc lặp này giúp lập trình viên điều khiển hướng
thực thi trong chương trình.
Cấu trúc chương
trình C
C
có một số từ khóa, chính xác là 32. Những từ khóa này kết hợp với cú pháp của C
hình thành ngôn ngữ C. Nhưng nhiều trình biên dịch cho C đã thêm vào những từ
khóa dùng cho việc tổ chức bộ nhớ ở những giai
đoạn tiền xử lý nhất định.
Vài
quy tắc khi lập trình C như sau :
- Tất cả từ khóa là chữ thường (không
in hoa)
- Ðoạn mã trong chương trình C có phân
biệt chữ thường và chữ hoa. Ví dụ : do while thì khác với DO
WHILE
- Từ khóa không thể dùng cho các mục
đích khác như đặt tên biến (variable name) hoặc tên hàm (function
name)
- Hàm main() luôn là hàm đầu tiên được gọi đến khi
một chương trình bắt đầu chạy (chúng ta sẽ xem xét kỹ hơn ở phần
sau)
Xem
xét đoạn mã chương trình:
main
()
{
/* This is a sample program
*/
int i = 0;
i = i + 1;
.
.
}
Ghi chú: Những khía cạnh khác
nhau của chương trình C được xem xét qua đoạn mã trên. Ðoạn mã này xem như là
đoạn mã mẫu, nó sẽ được dùng lại trong suốt phần còn lại của giáo trình
này.
Ðịnh nghĩa
Hàm
Chương
trình C được chia thành từng đơn vị gọi là hàm. Ðoạn mã mẫu chỉ có duy nhất một hàm main(). Hệ điều hành
luôn trao quyền điều khiển cho hàm main() khi một chương trình C được thực thi.
Tên hàm luôn được theo sau là cặp dấu ngoặc đơn (). Trong dấu ngoặc đơn có thể
có hay không có những tham số (parameters).
Dấu
phân cách (Delimiters)
Sau
định nghĩa hàm sẽ là dấu ngoặc xoắn mở { Nó thông báo điểm bắt đầu của hàm.
Tương tự, dấu ngoặc xoắn đóng } sau câu lệnh cuối trong hàm chỉ ra điểm kết thúc
của hàm. Dấu ngoặc xoắn mở đánh dấu điểm bắt đầu của một khối mã lệnh, dấu ngoặc
xoắn đóng đánh dấu điểm kết thúc của khối mã lệnh đó. Trong đoạn mã mẫu có 2 câu
lệnh giữa 2 dấu ngoặc xoắn.
Hơn
nữa, đối với hàm, dấu ngoặc xoắn cũng dùng để phân định những đoạn mã trong
trường hợp dùng cho cấu trúc vòng lặp và lệnh điều kiện..
Dấu
kết thúc câu lệnh (Terminator)
Dòng int i = 0; trong đoạn mã mẫu là một câu lệnh
(statement). Một câu lệnh trong C thì được kết thúc bằng dấu chấm phẩy (;). C
không hiểu việc xuống dòng dùng phím Enter, khoảng trắng dùng phím spacebar hay
một khoảng cách do dùng phím tab. Có thể có nhiều hơn một câu lệnh trên cùng một
hàng nhưng mỗi câu lệnh phải được kết thúc bằng dấu chấm phẩy. Một câu lệnh
không được kết thúc bằng dấu chấm phẩy được xem như một câu lệnh
sai.
Dòng chú thích
(Comment)
Những
chú thích thường được viết để mô tả công việc của một lệnh đặc biệt, một hàm hay
toàn bộ chương trình. Trình biên dịch sẽ không dịch chúng. Trong C, chú thích
bắt đầu bằng ký hiệu /* và kết thúc bằng */. Trường hợp chú thích có nhiều dòng,
ta phải chú ý ký hiệu kết thúc (*/), nếu thiếu ký hiệu này, toàn bộ chương trình
sẽ bị coi như là một chú thích. Trong đoạn mã
mẫu dòng chữ "This is a sample program" là dòng chú thích. Trong trường hợp chú
thích chỉ trên một dòng ta có thể dùng //.
Ví
dụ:
int
a = 0; // Biến ‘a’ đã được khai báo như là một kiểu số nguyên
(interger)
Thư viện C
(Library)
Tất
cả trình biên dịch C chứa một thư viện hàm chuẩn dùng cho những tác vụ chung.
Một vài bộ cài đặt C đặt thư viện trong một tập tin (file) lớn trong khi đa số
còn lại chứa nó trong nhiều tập tin nhỏ. Khi lập trình, những hàm được chứa
trong thư viện có thể được dùng cho nhiều loại tác vụ khác nhau. Một hàm (được viết
bởi một lập trình viên) có thể được đặt trong thư viện và được dùng bởi nhiều
chương trình khi được yêu cầu. Vài trình biên dịch cho phép hàm được thêm vào
thư viện chuẩn trong khi số khác lại yêu cầu tạo một thư viện
riêng.
Biên dịch và thực
thi một chương trình (Compiling and
Running)
Những
bước khác nhau của việc dịch một chương trình C từ mã nguồn thành mã thực thi
được thực hiện như sau :
Ø Soạn thảo/Xử lý từ
Ta
dùng một trình xử lý từ (word processor) hay trình soạn thảo (editor) để viết mã
nguồn (source code). C chỉ chấp nhận loại mã nguồn viết dưới dạng tập tin văn
bản chuẩn. Vài trình biên dịch (compiler) cung cấp môi trường lập trình (xem phụ
lục) gồm trình soạn thảo.
Ø Mã
nguồn
Ðây
là đoạn văn bản của chương trình mà người dùng có thể đọc. Nó là đầu vào của
trình biên dịch C.
Ø Bộ tiền xử lý
C
Từ
mã nguồn, bước đầu tiên là chuyển nó qua bộ tiền xử lý của C. Bộ tiền xử lý này
sẽ xem xét những câu lệnh bắt đầu bằng dấu #. Những câu lệnh này gọi là các chỉ
thị tiền biên dịch (directives). Điều này sẽ được giải thích sau. Chỉ thị tiền
biên dịch thường được đặt nơi bắt đầu chương trình mặc dù nó có thể được đặt bất
cứ nơi nào khác. Chỉ thị tiền biên dịch là những tên ngắn gọn được gán cho một
tập mã lệnh.
Ø Mã nguồn mở rộng
C
Bộ
tiền xử lý của C khai triển các chỉ thị tiền biên dịch và đưa ra kết quả. Ðây
gọi là mã nguồn C mở rộng, sau đó nó được chuyển cho trình biên dịch
C.
Ø Trình biên dịch C
(Compiler)
Trình
biên dịch C dịch mã nguồn mở rộng thành ngôn ngữ máy để máy tính hiểu
được.
Nếu
chương trình quá lớn nó có thể được chia thành những tập tin riêng biệt và mỗi
tập tin có thể được biên dịch riêng rẽ. Ðiều này giúp ích khi mà một tập tin bị
thay đổi, toàn chương trình không phải biên dịch lại.
Ø Bộ liên kết
(Linker)
Mã
đối tượng cùng với những thủ tục hỗ trợ trong thư viện chuẩn và những hàm được
dịch riêng lẻ khác kết nối lại bởi Bộ liên kết để cho ra mã có thể thực thi
được.
Ø Bộ nạp
(Loader)
Mã
thực thi được thi hành bởi bộ nạp của hệ thống.
Tiến
trình trên được mô tả qua lưu đồ 1.2 sau :
Cấu trúc chương
trình C
Ghi chú: Những khía cạnh khác
nhau của chương trình C được xem xét qua đoạn mã trên. Ðoạn mã này xem như là
đoạn mã mẫu, nó sẽ được dùng lại trong suốt phần còn lại của giáo trình
này.
Hơn nữa, đối với hàm, dấu ngoặc xoắn cũng dùng để phân định những đoạn mã trong trường hợp dùng cho cấu trúc vòng lặp và lệnh điều kiện..
Biên dịch và thực
thi một chương trình (Compiling and
Running)