BÀI GIẢNG HỌC PHẦN
KỸ THUẬT LẬP TRÌNH
CHƯƠNG 2: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C
Nội dung
2
2.1. Lịch sử phát triển ngôn ngữ lập trình C 2.2. Môi trường lập trình 2.3. Các phần tử cơ bản của ngôn ngữ lập trình C 2.4. Cấu trúc của chương trình
2.1. Lịch sử phát triển ngôn ngữ lập trình C
3
• Lịch sử phát triển ngôn ngữ lập trình C • Đặc điểm của ngôn ngữ lập trình C
Lịch sử phát triển ngôn ngữ lập trình C (1)
Dennis M. Ritchie (1941-2011). Là một nhà khoa học máy tính, công tác tại Bell Labs (Mỹ); được xem là cha đẻ của ngôn ngữ lập trình C và có ảnh hưởng lớn đến các hệ điều hành Multics, Unix. Các giải thưởng lớn: Giải thưởng Turing (1983), chương Hamming (1990), Giải Huy thưởng Nhà nước về Công nghệ (1999)
• Được phát triển bởi Dennis MacAlistair Ritchie và các cộng sự tại phòng thí của nghiệm Bell tập đoàn AT&T (Mỹ)
4
• Giai đoạn phát triển khởi 1969- đầu: 1973, trong đó giai đoạn sáng tạo nhất là trong năm 1972
Lịch sử phát triển ngôn ngữ lập trình C (2)
• C được phát triển dựa trên nền ngôn ngữ B và BCPL. Tên ngôn ngữ C được xem là sự tiếp nối của ngôn ngữ B
• Năm 1978, Ritchie và Brian Kernighan xuất bản
• Năm 1973, Ritchie & Thompson đã viết lại hệ điều hành UNIX bằng ngôn ngữ C - phiên bản phổ biến và là cơ sở quan trọng nhất để phát triển các hệ điều hành phổ biến hiện nay, điển hình là Linux và Mac OS của Apple
5
cuốn “The C programming language”
Lịch sử phát triển ngôn ngữ lập trình C (3)
bản
chuẩn
ngôn
của
• Sau 1978, C được bổ sung thêm những tính năng mới trong nhiều phiên bản khác nhau nhưng không tương thích với nhau
6
• Năm 1989, Viện tiêu chuẩn quốc gia Hoa Kỳ (ANSI - American National Standards Institue) đã công bố phiên ngữ C: hóa “Programming Language C” ANSI X3.159-1989, phiên bản này thường được nhắc đến với tên gọi ANSI C, còn gọi là C “chuẩn” hay C89. ANSI C được hỗ trợ bởi hầu hết các chương trình dịch
Lịch sử phát triển ngôn ngữ lập trình C (4)
• Năm 1990, tiêu chuẩn ANSI C đã được tiêu chuẩn tế về Tiêu chuẩn hóa bởi Tổ chức Quốc hóa (ISO): phiên bản ISO/IEC 9899:1990, còn gọi là ISO C hay C99. Phiên bản này được hỗ trợ bởi GCC và nhiều chương trình dịch khác, tuy nhiên không được hỗ trợ bởi các chương trình dịch của Microsoft và Borland
7
• C hiện là một trong những ngôn ngữ lập trình thông dụng và là nguồn gốc xây dựng các ngôn ngữ lập trình “mạnh” và phổ biến khác như C++, Java
Đặc điểm của ngôn ngữ lập trình C
• Là một ngôn ngữ lập trình có cấu trúc:
chương trình để dùng cho tác vụ riêng
- Cho phép tập hợp mã lệnh và cấu trúc - Cho phép ẩn lệnh, thông tin khỏi phần còn lại của
- Chương trình có thể chia nhỏ thành các hàm
• Có tính khả chuyển, linh hoạt cao • Có thế mạnh trong việc xử lý dữ liệu số, văn bản, cơ
(functions) hoặc các khối lệnh (code blocks)
• Được xem như ngôn ngữ lập trình hệ thống, sử dụng để xây dựng các chương trình hệ thống, trình điều khiển thiết bị, xử lý ảnh, …
8
sở dữ liệu, …
2.2. Môi trường lập trình (1)
9
• Xây dựng chương trình:
2.2. Môi trường lập trình (2)
Development Evironment): - Soạn thảo (biên tập chương trình nguồn – edit) - Biên dịch (compile) - Thực thi (runtime) - Sửa lỗi (gỡ rối - debug) • Các môi trường điển hình:
- Turbo C++ và Borland C++ của Borland, Inc - MSC và VC của Microsoft Corp - GCC của GNU project - …
10
• Môi trường phát triển tích hợp (IDE – Integrated
2.2. Môi trường lập trình (3)
- Lập trình viên không bắt buộc phải lập trình
• Lưu ý:
trong môi trường IDE
11
- Có thể sử dụng một phần mềm soạn thảo chuyên dụng để tạo file nguồn (ví dụ: Notepad++), sau đó sử dụng trình biên dịch thích hợp (ví dụ: BCC 5.5) để biên dịch và tạo file thực thi
2.3. Các phần tử cơ bản của ngôn ngữ lập trình C
12
• Tập ký tự • Từ khóa • Tên • Hằng • Biến • Hàm • Biểu thức • Toán tử • Câu lệnh • Các kiểu dữ liệu cơ sở
Tập ký tự (1)
chương trình: - Tổ hợp các ký tự từ - Liên kết các từ theo cú pháp câu lệnh - Tổ chức các câu lệnh chương trình
13
• Là phần tử cơ bản, bắt buộc phải có để tạo nên
Tập ký tự (2)
• Tập ký tự của ngôn ngữ C gồm: - 26 chữ cái in hoa: A, B, …, Z - 26 chữ cái in thường: a, b, ..., z - 10 chữ số: 0, 1, …, 9 - Các ký hiệu toán học: + - * / = < > … - Ký tự gạch nối _ - Dấu cách - Các ký hiệu đặc biệt: . , ; : ? ! \ & | % # $ () [] {}
14
…
Từ khóa
• Là các từ dành riêng của ngôn ngữ lập trình, được
sử dụng với mục đích xác định
• Người lập trình không được phép sử dụng các từ khóa vào các mục đích khác như đặt tên cho các đối tượng mới: biến, hàm, hằng, …
• Các từ khóa trong C được viết bằng chữ thường • Một số từ khóa thông dụng:
- typedef, const, signed, unsigned, struct, enum,
void, sizeof, static
15
- char, int, short, long, float, double - default, if, else, case, switch, for, while, do - break, continue, goto, return, interrupt - …
Tên
• Tên (định danh): là dãy các ký tự dùng để xác định các đối tượng trong chương trình như: biến, hằng, hàm, kiểu dữ liệu, …
• Quy tắc đặt tên:
- Không được trùng với các từ khóa - Tên được đặt có tính gợi nhớ - Gồm các ký tự chữ, số và dấu gạch nối, ký tự đầu
Ví dụ đặt tên đúng: a, b, x, y, PI, … Ví dụ đặt tên sai: int, char, tinh giai thua
tiên phải là ký tự chữ hoặc dấu gạch nối
16
• Lưu ý: ngôn ngữ C phân biệt chữ hoa và chữ thường
Hằng (1)
chương trình
• Là đại lượng không đổi trong suốt quá trình thực thi
• Cú pháp khai báo 1:
#define tên_hằng giá_trị
#define MAX 100 #define PI 3.14 • Cú pháp khai báo 2:
Ví dụ:
Ví dụ:
const kiểu_dữ_liệu tên_hằng = giá_trị;
17
const int MAX=100; const float PI=3.14;
Hằng (2)
• Lưu ý:
- Không thể thay đổi giá trị của hằng trong quá
- Giá trị của hằng phải được xác định ngay khi
trình thực hiện chương trình
khai báo
- #define là chỉ thị tiền xử lý (preprocessing
18
directive). Ưu điểm của cú pháp khai báo này: + Dễ đọc, dễ thay đổi + Dễ chuyển đổi giữa các nền tảng phần cứng + Tốc độ nhanh
Biến (1)
đặt tên thông qua việc khai báo biến
• Là đại lượng do người lập trình định nghĩa, được
• Dùng để chứa dữ liệu, giá trị của biến có thể bị thay
đổi trong quá trình thực thi chương trình
kiểu_dữ_liệu tên_biến;
• Cú pháp khai báo:
hoặc
Ví dụ:
kiểu_dữ_liệu tên_biến1, …, tên_biếnn;
19
int a,b; float x,y,z; char c;
Biến (2)
trị cho biến theo cú pháp:
• Lưu ý: - Cần khai báo tất cả các biến trước khi sử dụng - Có thể kết hợp khai báo biến với việc khởi tạo giá
kiểu_dữ_liệu tên_biến=giá_trị;
Ví dụ:
int a=4,b=5; float x,y,z=10.9;
20
- Tùy mục đích sử dụng, biến có thể được khai báo ở ngoài hàm, đầu hàm (ngay sau ký hiệu { để bắt đầu thân hàm) hoặc đầu khối lệnh (ngay sau ký hiệu { bắt đầu khối lệnh)
Hàm
21
• Là một đơn vị độc lập của chương trình, cho phép nhận dữ liệu vào, xử lý dữ liệu và trả về kết quả Ví dụ: pow(x,y), sin(x), cos(x), … • Một chương trình có thể có nhiều hàm • Hàm main() là bắt buộc phải có, chương trình bắt đầu thực hiện từ câu lệnh đầu tiên của hàm main() • Ngôn ngữ C không cho phép xây dựng hàm bên trong một hàm khác; tuy nhiên có thể truyền dữ liệu/kết quả từ hàm này sang hàm khác qua các tham số/biến ngoài
Biểu thức (1)
• Được tạo thành từ sự kết hợp các toán tử (operater) và các toán hạng (operand) để thể hiện một công thức tính toán - Toán tử: tác động lên các toán hạng và trả về giá trị thuộc một kiểu nhất định. Các toán tử : +, -, *, /, …
- Toán hạng: hằng, biến, phần tử mảng, lời gọi
hàm, …
• Mỗi biểu thức có một giá trị thuộc kiểu xác định - Ví dụ:
22
4+5*2, (a+b)*2, x-y/9, …
Biểu thức (2)
- Biểu thức số học
• Có 3 dạng biểu thức cơ bản:
Ví dụ: 9/3-1, 2*a+5, …
- Biểu thức logic
- Biểu thức quan hệ (một trường hợp riêng của
Ví dụ: !1, a && b || c, …
23
biểu thức logic) Ví dụ: 9!=5, a>b, …
Biểu thức (3)
- Dùng làm vế phải trong các lệnh gán giá trị - Dùng làm toán hạng trong các biểu thức khác - Dùng làm tham số thực sự trong các lời gọi hàm - Dùng làm chỉ số trong các cấu trúc lặp for, while,
do while
• Sử dụng biểu thức:
- Dùng làm biểu thức kiểm tra trong các cấu trúc
rẽ nhánh if, switch
24
- …
Toán tử
25
• Các toán tử số học • Các phép thao tác trên bit • Các toán tử quan hệ • Các toán tử logic • Các toán tử đặc biệt • Thứ tự ưu tiên của các toán tử
Các toán tử số học (1)
• Các toán tử 1 ngôi:
Toán tử
Ý nghĩa
Kiểu toán hạng
Ví dụ
-
Đảo dấu
Nguyên hoặc thực
-5, -12
++
Tăng 1 đơn vị Nguyên hoặc thực ++4, x++
--
Giảm 1 đơn vị Nguyên hoặc thực
--4, x--
Lưu ý: Với các toán tử ++/--, nếu đặt toán tử trước toán hạng thì thực hiện tăng/giảm giá trị trước, đặt toán tử sau toán hạng thì thực hiện tăng/giảm giá trị sau Ví dụ:
26
x=9; y=x++; z=x--; Kết quả: x=9, y=9, z=10 x=9; y=++x; z=--x; Kết quả: x=9, y=10, z=9
Các toán tử số học (2)
• Các toán tử 2 ngôi:
Toán tử
Ý nghĩa
Kiểu toán hạng
Ví dụ
+
Phép cộng
Nguyên hoặc thực 3+5, x+1.25
-
Phép trừ
Nguyên hoặc thực 9-1, y-4.5
*
Phép nhân
Nguyên hoặc thực 3*4, x*2.5
/
Phép chia
Nguyên hoặc thực 11.0/3.0, x/y 11.0/3, 11/3.0
/
2 số nguyên
11/3
%
2 số nguyên
11%3
Phép chia lấy phần nguyên Phép chia lấy phần dư
27
Các phép thao tác trên bit (1)
• Gồm các phép thao tác:
Ý nghĩa
Ví dụ
Toán tử
Kiểu toán hạng
& Phép và theo
2 số nhị phân 0&0, 0&1, 1&0,
1&1, 100&101
|
2 số nhị phân 0|0, 0|1, 1|0, 1|1,
100|101
^
bit Phép hoặc theo bit Phép hoặc loại trừ theo bit
2 số nhị phân 0^0, 0^1, 1^0, 1^1, 100^101
<< Dịch trái
số nhị phân
a<<2, 101<<2
>> Dịch phải
số nhị phân
a>>2, 101>>2
~
Lấy phần bù
số nhị phân
~0, ~1, ~101
28
Các phép thao tác trên bit (2)
• Lưu ý: Đối với các phép dịch chuyển số học, nếu thực hiện trên giá trị thuộc kiểu số nguyên có dấu thì bảo toàn bit dấu (bit cực trái), nếu thực hiện trên thuộc kiểu số nguyên không dấu các giá trị (unsigned) thì bit dấu không có ý nghĩa và cũng bị dịch chuyển như các bit khác Ví dụ:
29
(-256)<<2 = -1024 (-256)>>2 = -64
Các toán tử quan hệ
• Gồm các toán tử:
Toán tử
Ý nghĩa
Kiểu toán hạng
Ví dụ
>
Lớn hơn
Nguyên hoặc thực 5>3, a>b
>=
Nguyên hoặc thực 2>=2, a>=b
< <=
Nguyên hoặc thực 1<3, a
Lớn hơn hoặc bằng Nhỏ hơn Nhỏ hơn hoặc bằng
==
Bằng
Nguyên hoặc thực 3==4, a==b
!=
Khác
Nguyên hoặc thực 3!=4, a!=b
30
Các toán tử logic
• Gồm các toán tử:
Toán tử
Ý nghĩa
Kiểu toán hạng
Ví dụ
Phép phủ định 1 biểu thức logic !1, !(a>b)
!
&&
Phép và
2 biểu thức logic 1&&0, a>=11
&& a<=99
Phép hoặc
2 biểu thức logic 1||0, a<-9 ||
||
a==0
31
Các toán tử đặc biệt
32
• Toán tử điều kiện • Toán tử gán • Dấu , • Phép lấy địa chỉ của biến • Phép ép kiểu
Toán tử điều kiện
Biểu thức 1 ? Biểu thức 2 : Biểu thức 3
• Cú pháp:
33
Ý nghĩa: Biểu thức 1 nhận giá trị đúng thì toán tử trả về giá trị là Biểu thức 2, ngược lại toán tử trả về giá trị là Biểu thức 3 Ví dụ: a>b?a:b
Toán tử gán (1)
Ý nghĩa: gán giá trị của biểu_thức cho tên_biến Ví dụ:
• Cú pháp: tên_biến=biểu_thức;
int a,b,c; a=5; b=4; c=a*b;
• Lưu ý: - Biểu thức gán tên_biến=biểu_thức (Lưu ý: không kết thúc bằng dấu ;) được sử dụng như các biểu thức thông thường khác Ví dụ: c=(a=5)*(b=4);
34
a=b=c=20;
Toán tử gán (2)
Toán tử gán: x=x+y; Dạng thu gọn: x+=y; • Lưu ý: Dạng thu gọn này áp dụng được với tất cả các phép toán 2 ngôi +, -, *, /, % và các phép thao tác trên bit &, |, ^, <<, >>
35
• Toán tử gán dạng thu gọn:
Dấu ,
x=(a++,b=a+b);
• Xét ví dụ:
↔ a++; b=a+b; x=b; • Các biểu thức con trong cặp dấu ngoặc đơn () đặt ngăn cách nhau bởi dấu , sẽ được tính theo chiều từ trái sang phải
• Biểu thức dùng để gán giá trị cho x là biểu thức con
36
ngoài cùng bên phải
Phép lấy địa chỉ của biến
của biến
• Tên biến được xem như tên vùng nhớ lưu trữ giá trị
• Vùng nhớ được đánh địa chỉ biến có địa chỉ • Cú pháp: &tên_biến
int a=125;
Ví dụ:
37
&a trả về địa chỉ vùng nhớ lưu giá trị của biến a
Phép ép kiểu
• Sử dụng khi biểu thức gồm các toán hạng khác kiểu hoặc khi cần gán giá trị thuộc kiểu này cho một biến thuộc kiểu khác
• Cú pháp:
hoặc Ví dụ: với khai báo int a,b;
(kiểu_dữ_liệu_mới) tên_biến (kiểu_dữ_liệu_mới) (biểu thức)
((float)a)/b trả về kết quả phép chia chính xác theo
(int) (a+0.5) trả về một kết quả theo kiểu số nguyên • Lưu ý: kiểu dữ liệu mới phải “cao hơn” kiểu dữ liệu
kiểu số thực
38
hiện tại, tránh ép kiểu từ “cao” xuống “thấp”
Thứ tự ưu tiên của các toán tử (1)
Mức
Các toán tử
1 () [] -> . :: 2 ! ~ - ++ -- & * (type) sizeof 3 * / % 4 + - 5 << >> 6 < <= > >= 7 == != 8 & 9 ^ 10 | 11 && 12 || 13 ? : 14 = *= /= %= += -= <<= >>= &= ^= |= 15 ,
Trình tự kết hợp Trái qua phải Phải qua trái Trái qua phải Trái qua phải Trái qua phải Trái qua phải Trái qua phải Trái qua phải Trái qua phải Trái qua phải Trái qua phải Trái qua phải Phải qua trái Phải qua trái Trái qua phải
39
Thứ tự ưu tiên của các toán tử (2)
dấu ngoặc () một cách hợp lý trong biểu thức Ví dụ: - n = 1+2*3 có thể viết thành n = 1+(2*3) - a>=11 && a<=99
có thể viết thành (a>=11) && (a<=99)
40
• Để việc tính toán được dễ dàng nên bổ sung các cặp
Câu lệnh (1)
• Là một chỉ thị hoàn chỉnh yêu cầu máy tính thực
hiện một/một nhóm thao tác nào đó
lệnh
• Chương trình được tạo thành từ một dãy các câu
• Phân loại - Lệnh đơn: không chứa các câu lệnh khác (lệnh gán
giá trị, …) Ví dụ: a=4; b=5;
- Lệnh phức: chứa nhiều lệnh (khối lệnh, …)
y=8.9;}
41
Ví dụ: {x=3.2;
Câu lệnh (2)
• Lưu ý: - Trình biên dịch bỏ qua các dấu cách, Tab và các ký
hiệu xuống dòng được chèn vào trong các lệnh Ví dụ:
- Một khối lệnh có thể chứa nhiều khối lệnh khác - Thân hàm cũng được xem là một khối lệnh không
int a; a=125; a = 125; a = 125;
42
nằm trong bất kỳ khối lệnh nào khác
Câu lệnh (3)
• Lưu ý (tiếp): - Biến được khai báo ở đầu khối lệnh: + Chỉ có phạm vi hoạt động trong nội bộ khối lệnh + Được cấp phát bộ nhớ khi chương trình bắt đầu thực hiện khối lệnh, bộ nhớ này được giải phóng khi khối lệnh đã được thực hiện xong
- Các biến khai báo ngoài khối lệnh mà không trùng tên với các biến khai báo bên trong khối lệnh thì có thể sử dụng cả bên trong và bên ngoài khối lệnh 43
+ Có thể đặt trùng tên với các biến được khai báo bên ngoài khối lệnh, khi đó các biến trùng tên được khai báo trong khối lệnh sẽ được ưu tiên sử dụng trong phạm vi khối lệnh
Các kiểu dữ liệu cơ sở
44
• Khái niệm kiểu dữ liệu • Phân loại kiểu dữ liệu • Các kiểu dữ liệu cơ sở
Khái niệm kiểu dữ liệu
• Kiểu dữ liệu: xác định tập các giá trị mà một đối tượng thuộc kiểu đó có thể nhận được, cách thức lưu trữ dữ liệu và các phép toán có thể thực hiện Ví dụ: Kiểu dữ liệu int 2 byte: - Biểu diễn các số nguyên có dấu trong miền giá trị
-32768..32767
45
- Chiếm kích thước 2 byte khi lưu trữ - Có thể thực hiện các phép toán: phép đảo dấu -, các phép toán số học + - * / %, các phép so sánh < <= == > >= !=
Phân loại kiểu dữ liệu (1)
- Kiểu ký tự - Kiểu số nguyên - Kiểu số thực
• Các kiểu dữ liệu cơ bản:
- Kiểu liệt kê
46
• Kiểu do người dùng tự định nghĩa:
Phân loại kiểu dữ liệu (2)
- Kiểu mảng - Kiểu xâu ký tự - Kiểu cấu trúc - Kiểu hợp - Kiểu tệp • Kiểu con trỏ
47
• Các kiểu dữ liệu có cấu trúc:
Các kiểu dữ liệu cơ sở
48
• Kiểu ký tự • Kiểu số nguyên • Kiểu số thực
Kiểu ký tự (1)
• Gồm 2 kiểu:
Kích thước lưu trữ Miền giá trị
1 byte 1 byte
-128..127 0..255
• Dùng để biểu diễn các ký tự trong bảng mã ASCII
Tên kiểu [signed] char unsigned char
(256 ký tự)
• Không lưu trực tiếp các ký tự mà lưu mã ASCII tương ứng (giá trị số) kiểu ký tự có thể được dùng như kiểu số nguyên
• Các hằng ký tự đặt trong cặp dấu nháy đơn ' ', các
49
hằng xâu ký tự đặt trong cặp dấu nháy kép " "
Kiểu ký tự (2)
'\0' null '\n' đưa con trỏ xuống đầu dòng tiếp theo '\t' tab '\b' backspace '\r' carriage return – đưa con trỏ màn hình về đầu dòng '\f' line feed – sang trang
50
• Một số hằng ký tự điều khiển:
Kiểu số nguyên
• Gồm 6 kiểu: Tên kiểu
Kích thước
Miền giá trị
int
2 byte hoặc 4 byte
-32768..32767 hoặc -2147483648.. 2147483647
unsigned int
2 byte hoặc 4 byte
0..65535 hoặc 0..4294967295
short
2 byte
-32768..32767
unsigned short
2 byte
0..65535
long
4 byte
-2147483648.. 2147483647
unsigned long
4 byte
0..4294967295
51
• Các hằng số nguyên được viết bình thường
Kiểu số thực (1)
• Gồm 2 kiểu:
Tên kiểu
Kích thước
Miền giá trị
float double
4 byte 8 byte
±3.4*10-38.. ±3.4*1038 ±1.7*10-308.. ±1.7*10308
52
Kiểu số thực (2)
• Có 2 cách biểu diễn hằng số thực - Biểu diễn theo dạng thập phân:
phần_nguyên.phần_thập_phân
Ví dụ: 1.25, 910.5
phần_định_trịEphần_mũ (có thể thay ký hiệu E bằng e) Ví dụ: 1.25E3, 3.14E-2, -5.4e2, -8.5e-3
53
- Biểu diễn theo dạng khoa học hay dạng mũ:
Chú ý
logic: - FALSE (sai): 0 - TRUE (đúng): giá trị khác 0 (thường là 1)
54
• Ngôn ngữ C ngầm định không tường minh 2 giá trị
2.4. Cấu trúc chương trình
55
• Cấu trúc chương trình • Một vài chương trình đơn giản • Các quy tắc xây dựng chương trình
Cấu trúc chương trình
56
• Gồm các phần theo thứ tự sau: - Khai báo các tệp tiêu đề - Khai báo các macro - Định nghĩa các kiểu dữ liệu mới - Khai báo nguyên mẫu của các hàm - Khai báo các biến toàn cục - Hàm main() - Định nghĩa các hàm (đã khai báo nguyên mẫu)
Khai báo các tệp tiêu đề (1)
- Gồm nhiều tệp tiêu đề chứa các chương trình con (hàm) được xây dựng sẵn. Muốn sử dụng hàm nào cần khai báo tệp tiêu đề của thư viện chứa hàm đó
• Cú pháp khai báo tệp tiêu đề:
• Thư viện chuẩn:
57
#include
Khai báo các tệp tiêu đề (2)
• Các tệp tiêu đề cơ bản:
Tệp tiêu đề
Chức năng
Các hàm vào/ra cơ bản
stdio.h
conio.h
math.h ctype.h string.h
Các hàm giao tiếp người dùng sử dụng MS- DOS API Các hàm toán học cơ bản Các hàm xử lý ký tự Các hàm xử lý xâu
stdlib.h time.h
Các hàm tiện ích Các hàm điều khiển thời gian
58
Khai báo các tệp tiêu đề (3)
- Người lập trình cũng có thể xây dựng sẵn các hàm và đặt vào trong thư viện để dùng khi cần thiết
• Lưu ý:
59
- Một số trình biên dịch cho phép thêm hàm do người lập trình xây dựng vào thư viện chuẩn. Một số trình biên dịch yêu cầu người lập trình phải tạo thư viện riêng
Khai báo các macro
#define tên giá_trị
• Cú pháp:
Ví dụ: #define N 100
60
#define length (3+5) #define max(a,b) (a)>(b)?(a):(b)
Định nghĩa các kiểu dữ liệu mới
typedef khai báo kiểu dữ liệu mới;
• Cú pháp:
Ví dụ:
• Lưu ý: Sau khi định nghĩa các kiểu dữ liệu mới, có thể dùng tên kiểu dữ liệu mới để khai báo các biến, mảng, cấu trúc Ví dụ:
soluong a,b; mang100 c;
61
typedef int soluong; typedef int mang100[100];
Khai báo nguyên mẫu của các hàm
• Cú pháp:
kiểu_dữ_liệu_trả_về tên_hàm(danh sách kiểu_dữ _liệu tên_tham_số); Ví dụ: int tong(int a,int b);
float max(float a,float b,float c);
• Lưu ý: - Không bắt buộc phải khai báo nguyên mẫu các hàm - Việc khai báo nguyên mẫu cho phép trình biên dịch phát hiện lỗi khi gọi hàm (số lượng tham số không đúng) hoặc tự động chuyển đổi kiểu dữ liệu (ví dụ: chuyển từ kiểu int trong lời gọi hàm sang kiểu float của tham số)
62
- Trong nguyên mẫu có thể bỏ qua tên các tham số
Khai báo các biến toàn cục
kiểu_dữ_liệu tên_biến;
• Cú pháp:
Ví dụ:
• Lưu ý: Có thể khởi tạo giá trị cho các biến ngay khi
int a,b; float x,y;
khai báo biến Ví dụ:
63
int a=4, b=5; float x, y=9.25;
Hàm main()
• Cú pháp:
các khai báo, các lệnh;
kiểu_dữ_liệu_trả_về main(void) {
}
Lưu ý: kiểu_dữ_liệu_trả_về là int
Ví dụ:
int main(void) {
printf("Xin chao!"); printf("\nDay la chuong trinh thu nghiem."); return 0;
64
}
Định nghĩa các hàm (1)
định nghĩa ở đây Ví dụ: int tong(int a,int b)
• Các hàm đã được khai báo nguyên mẫu cần được
int s; s=a+b; printf("Tong la: %d", s); return s;
}
65
{
Định nghĩa các hàm (2)
Ví dụ (tiếp): float max(float a,float b,float c)
{
float m; m=a>b?a:b; return (m>c?m:c);
66
}
Một vài chương trình đơn giản (1)
#include
• Chương trình viết câu thông báo ra màn hình:
printf("Xin chao!"); printf("\nDay la chuong trinh thu nghiem."); return 0;
67
}
Một vài chương trình đơn giản (2)
#include
• Chương trình tính tổng 2 số nguyên a, b:
int a,b,tong; printf("Hay nhap 2 so nguyen a, b:\n"); scanf("%d %d",&a,&b); tong = a+b; printf("Tong a + b = %d",tong); return 0;
68
}
Các quy tắc xây dựng chương trình
- Mỗi câu lệnh phải được kết thúc bằng dấu ; - Mỗi câu lệnh nên đặt trên một dòng - Khối lệnh gồm nhiều lệnh đơn phải đặt trong cặp
dấu { }
• Quy tắc viết lệnh:
• Quy tắc viết chú thích:
- Trên một dòng: //Lời chú thích - Viết trên nhiều dòng: /* Lời chú thích */
69
• Căn lề