Tài liệu Giáo trình Quản trị mạng (Phần 1): BỘ LAO ĐỘNG - THƯƠNG BINH VÀ XÃ HỘI 
TỔNG CỤC DẠY NGHỀ 
GIÁO TRÌNH 
Môn học: LẬP TRÌNH C 
NGHỀ: QUẢN TRỊ MẠNG 
TRÌNH ĐỘ: CAO ĐẲNG NGHỀ 
( Ban hành kèm theo Quyết định số: 120/QĐ-TCDN ngày 25 tháng 02 năm 2013 của Tổng 
cục trưởng Tổng cục dạy nghề) 
Hà Nội, năm 2013 
TUYÊN BỐ BẢN QUYỀN: 
 Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể 
được phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và 
tham khảo. 
 Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh 
doanh thiếu lành mạnh sẽ bị nghiêm cấm. 
MÃ TÀI LIỆU: MH18 
 LỜI 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 ...
                
              
                                            
                                
            
 
            
                 44 trang
44 trang | 
Chia sẻ: honghanh66 | Lượt xem: 1084 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang mẫu tài liệu Giáo trình Quản trị mạng (Phần 1), để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
BỘ LAO ĐỘNG - THƯƠNG BINH VÀ XÃ HỘI 
TỔNG CỤC DẠY NGHỀ 
GIÁO TRÌNH 
Môn học: LẬP TRÌNH C 
NGHỀ: QUẢN TRỊ MẠNG 
TRÌNH ĐỘ: CAO ĐẲNG NGHỀ 
( Ban hành kèm theo Quyết định số: 120/QĐ-TCDN ngày 25 tháng 02 năm 2013 của Tổng 
cục trưởng Tổng cục dạy nghề) 
Hà Nội, năm 2013 
TUYÊN BỐ BẢN QUYỀN: 
 Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể 
được phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và 
tham khảo. 
 Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh 
doanh thiếu lành mạnh sẽ bị nghiêm cấm. 
MÃ TÀI LIỆU: MH18 
 LỜI 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. 
Môn học này là nền tảng để tiếp thu hầu hết các môn học khác trong 
chương trình đào tạo. Mặt khác, nắm vững ngôn ngữ C là cơ sở để phát triển các 
ứng dụng. 
Học xong môn này, sinh viên phải nắm được các vấn đề sau: 
- Khái niệm về ngôn ngữ lập trình. 
- Khái niệm về kiểu dữ liệu 
- Kiểu dữ liệu có cấu trúc (cấu trúc dữ liệu). 
- Khái niệm về giải thuật 
- Ngôn ngữ biểu diễn giải thuật. 
- Ngôn ngữ sơ đồ (lưu đồ), sử dụng lưu đồ để biểu diễn các giải thuật. 
- Tổng quan về Ngôn ngữ lập trình C. 
- Các kiểu dữ liệu trong C. 
- Các lệnh có cấu trúc. 
- Cách thiết kế và sử dụng các hàm trong C. 
- Một số cấu trúc dữ liệu trong C. 
 Hà Nội, ngày 25 tháng 02 năm 2013 
 Tham gia biên soạn 
 1. Chủ biên Trần Thị Hà Khuê 
 2. Thành viên Võ Thị Ngọc Tú 
 3. Thành viên Dương Hiển Tú 
MỤC LỤC 
LỜI GIỚI THIỆU ........................................................................................... 3 
MỤC LỤC ....................................................................................................... 4 
1. Vị trí, tính chất, ý nghĩa và vai trò môn học:..................................................... 7 
2. Mục tiêu của môn học: ..................................................................................... 7 
3. Nội dung môn học: ........................................................................................... 7 
CHƯƠNG 1: GIỚI THIỆU VỀ NGÔN NGỮ C ........................................ 9 
1.1. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C ............................................. 9 
1.2. KHỞI ĐỘNG VÀ THOÁT KHỎI CHƯƠNG TRÌNH C................................ 11 
1.2.1. KHỞI ĐỘNG CHƯƠNG TRÌNH C ........................................................ 11 
1.2.2. THOÁT KHỎI CHƯƠNG TRÌNH C ...................................................... 12 
1.2.3. CÁC VÍ DỤ ĐƠN GIẢN ........................................................................ 12 
CHƯƠNG 2: CÁC THÀNH PHẦN CƠ BẢN TRONG NGÔN NGỮ C 14 
2.1. Từ khóa .......................................................................................................... 14 
2.1.1. Bộ chữ viết trong C ................................................................................. 14 
2.1.2. Từ khóa ................................................................................................... 15 
2.2. Tên ................................................................................................................. 15 
2.3. Kiểu dữ liệu ................................................................................................... 16 
2.3.1. Kiểu số nguyên ....................................................................................... 16 
2.3.2. Kiểu số thực ............................................................................................ 17 
2.4. Các phép toán................................................................................................. 17 
2.4.1. Các phép toán số học .............................................................................. 17 
2.4.2. Các phép toán quan hệ và logic ............................................................... 18 
2.4.3. Phép toán tăng giảm ................................................................................ 20 
2.4.4. Thứ tự ưu tiên các phép toán ................................................................... 21 
2.5. Ghi chú .......................................................................................................... 22 
2.5.1. Ghi chú ................................................................................................... 22 
2.5.2. Cấu trúc chương trình C .......................................................................... 23 
2.6. Khai báo biến ................................................................................................. 24 
2.6.1. Biến. ....................................................................................................... 24 
2.6.2. Vị trí khai báo biến trong C ..................................................................... 25 
2.6.3. Biểu thức ................................................................................................ 25 
2.7. Nhập/xuất dữ liệu ........................................................................................... 26 
2.7.1. Lệnh gán. ................................................................................................ 26 
2.7.2. Lệnh nhập ............................................................................................... 27 
2.7.3. Lệnh xuất. ............................................................................................... 28 
2.8. Bài tập thực hành ........................................................................................... 29 
CHƯƠNG 3: CẤU TRÚC RẼ NHÁNH CÓ ĐIỀU KIỆN ....................... 30 
3.1. Lệnh và khối lệnh ........................................................................................... 30 
3.1.1. Lệnh ........................................................................................................ 30 
3.1.2. Khối lệnh ................................................................................................ 30 
3.2. Lệnh if ........................................................................................................... 31 
3.2.1. Dạng 1 (if thiếu) ...................................................................................... 31 
3.2.2. Bài tập thực hành .................................................................................... 32 
3.2.3. Dạng 2 (if đủ).......................................................................................... 32 
3.2.4. Bài tập thực hành .................................................................................... 33 
3.2.5. Cấu trúc else if ........................................................................................ 33 
3.2.6. Bài tập thực hành .................................................................................... 35 
3.2.7. Cấu trúc if lồng nhau ............................................................................... 35 
3.2.8. Bài tập thực hành .................................................................................... 37 
3.3. Lệnh switch() ................................................................................................. 37 
3.3.1. Cấu trúc switchcase (switch thiếu) ...................................................... 37 
3.3.2. Bài tập thực hành .................................................................................... 39 
3.3.3. Cấu trúc switchcasedefault (switch đủ) ............................................ 40 
3.3.4. Bài tập thực hành .................................................................................... 42 
3.3.5. Cấu trúc switch lồng ............................................................................... 42 
3.3.6. Bài tập thực hành .................................................................................... 44 
CHƯƠNG 4: CẤU TRÚC VÒNG LẶP ................................................... 45 
4.1. Lệnh for ......................................................................................................... 45 
4.2. Lệnh break ..................................................................................................... 48 
4.3. Lệnh continue ................................................................................................ 49 
4.4. Lệnh while ..................................................................................................... 50 
4.5. Lệnh do..while ............................................................................................... 51 
4.6. Vòng lặp lồng nhau ........................................................................................ 53 
4.7. So sánh sự khác nhau của các vòng lặp. ......................................................... 54 
4.8. Bài tập thực hành ........................................................................................... 54 
CHƯƠNG 5: HÀM .................................................................................... 55 
5.1. Các ví dụ về hàm ............................................................................................ 55 
5.1.1. Khái niệm về hàm ................................................................................... 55 
5.1.2. Các ví dụ về hàm .................................................................................... 57 
5.2. THAM SỐ DẠNG THAM BIẾN VÀ THAM TRỊ ......................................... 61 
5.2.1. Tham số dạng tham trị............................................................................. 61 
5.2.2. Bài tập thực hành về tham trị .................................................................. 63 
5.2.3. Tham số dạng tham biến ......................................................................... 63 
5.2.4. Bài tập thực hành .................................................................................... 64 
5.3. SỬ DỤNG BIẾN TOÀN CỤC ....................................................................... 65 
5.3.1. Sử dụng biến toàn cục ............................................................................. 65 
5.3.2. Bài tập thực hành .................................................................................... 67 
5.4. Dùng dẫn hướng #define ................................................................................ 70 
CHƯƠNG 6: MẢNG VÀ CHUỖI ............................................................ 72 
6.1. GIỚI THIỆU KIỂU DỮ LIỆU “KIỂU MẢNG” TRONG C ........................... 72 
6.2. MẢNG MỘT CHIỀU..................................................................................... 73 
6.2.1. Khai báo .................................................................................................. 73 
6.2.2. Truy xuất từng phần tử của mảng ............................................................ 74 
6.2.3. Bài tập thực hành .................................................................................... 77 
6.3. MẢNG NHIỀU CHIỀU ................................................................................. 78 
6.3.1. Khai báo .................................................................................................. 79 
6.3.2. Truy xuất từng phần tử của mảng hai chiều ............................................. 80 
6.3.3. Bài tập thực hành .................................................................................... 82 
6.4. CHUỖI .......................................................................................................... 83 
6.4.1. KHÁI NIỆM ........................................................................................... 84 
6.4.2. KHAI BÁO ............................................................................................. 84 
6.4.3. CÁC THAO TÁC TRÊN CHUỖI KÝ TỰ .............................................. 85 
6.4.4. Bài tập thực hành .................................................................................... 90 
TÀI LIỆU THAM KHẢO ............................................................................. 93 
MÔN HỌC LẬP TRÌNH C 
Mã môn học: MH18 
1. Vị trí, tính chất, ý nghĩa và vai trò môn học: 
- Vị trí: Môn học được bố trí sau khi sinh viên học xong các môn học 
chung, các môn học cơ sở chuyên ngành đào tạo chuyên môn nghề. 
- Tính chất: Lập trình C là môn học lý thuyết cơ sở nghề. 
- Ý nghĩa và vai trò: Môn học này là nền tảng để tiếp thu hầu hết các môn 
học khác trong chương trình đào tạo. Mặt khác, nắm vững ngôn ngữ C là 
cơ sở để phát triển các ứng dụng. 
2. Mục tiêu của môn học: 
- Trình bày được công dụng của ngôn ngữ lập trình C; 
- Trình bày được cú pháp, công dụng của các câu lệnh trong ngôn ngữ C; 
- Phân tích được chương trình: xác định nhiệm vụ chương trình (phải làm 
gì?). 
- Viết chương trình và thực hiện chương trình đơn giản trong máy tính bằng 
ngôn ngữ C. 
- Bố trí làm việc khoa học đảm bảo an toàn cho người và phương tiện học 
tập. 
3. Nội dung môn học: 
Số 
TT 
Tên chương, mục 
Thời gian 
Tổng 
số 
Lý 
thuyết 
Thực 
hành 
Bài tập 
Kiểm 
tra* (LT 
hoặcTH) 
I Giới thiệu về ngôn ngữ C 1 1 
II Các thành phần trong ngôn ngữ C 7 6 1 
 Từ khóa 
 Tên 
 Kiểu dữ liệu 
 Ghi chú 
 Khai báo biến 
 Nhập/xuất dữ liệu 
III Cấu trúc rẽ nhánh có điều kiện 12 5 6 1 
 Lệnh và khối lệnh 
 Lệnh if 
 Lệnh switch 
IV Cấu trúc vòng lặp 12 6 6 
 Lệnh for 
 Lệnh Break 
 Lệnh continue 
Số 
TT 
Tên chương, mục 
Thời gian 
Tổng 
số 
Lý 
thuyết 
Thực 
hành 
Bài tập 
Kiểm 
tra* (LT 
hoặcTH) 
 Lệnh while 
 Lệnh dowhile 
 Vòng lặp lồng nhau 
 So sánh sự khác nhau của các vòng 
lặp 
V Hàm 13 5 7 1 
 Các ví dụ về hàm 
 Tham số dạng tham biến và tham trị 
 Sử dụng biến toàn cục 
 Dùng dẫn hướng #define 
VI Mảng và chuỗi 15 7 7 1 
 Mảng 
 Chuỗi 
 Cộng 60 30 27 3 
CHƯƠNG 1: GIỚI THIỆU VỀ NGÔN NGỮ C 
Mã chương: MH18-01 
Ý nghĩa: 
C là ngôn ngữ rất có hiệu quả và được ưa chuộng nhất để viết các phần 
mềm hệ thống, mặc dù nó cũng được dùng cho việc viết các ứng dụng. Ngoài ra, 
C cũng thường được dùng làm phương tiện giảng dạy trong khoa học máy 
tính mặc dù ngôn ngữ này không được thiết kế dành cho người nhập môn. 
Mục tiêu: 
- Trình bày được lịch sử phát triển của ngôn ngữ C; 
- Mô tả được những ứng dụng thực tế của ngôn ngữ C. 
- Một số thao tác cơ bản của trình soạn thảo C. 
- Tiếp cận một số lệnh đơn giản thông qua các ví dụ 
- Thực hiện các thao tác an toàn với máy tính. 
Nội dung: 
1.1. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C 
Mục tiêu: 
- Trình bày được lịch sử phát triển của ngôn ngữ C; 
- Mô tả được những ứng dụng thực tế của ngôn ngữ C. 
- Mô tả những đặc điểm cơ bản của ngôn ngữ C 
C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ 
thống cùng với Assembler và phát triển các ứng dụng. 
Vào những năm cuối thập kỷ 60 đầu thập kỷ 70 của thế kỷ XX, Dennish 
Ritchie (làm việc tại phòng thí nghiệm Bell) đã phát triển ngôn ngữ lập trình C 
dựa trên 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 vào năm 1970 
khi viết hệ điều hành UNIX đầu tiên trên máy PDP-7) và được cài đặt lần 
đầu tiên trên hệ điều hành UNIX của máy DEC PDP-11. Năm 1978, Dennish 
Ritchie và B.W Kernighan đã cho xuất bản quyển “Ngôn ngữ lập trình C” và 
được phổ biến rộng rãi đến nay. 
Lúc ban đầu, C được thiết kế nhằm lập trình trong môi trường của hệ điều 
hành Unix nhằm mục đích hỗ trợ cho các công việc lập trình phức tạp. Nhưng 
về sau, với những nhu cầu phát triển ngày một tăng của công việc lập trình, C 
đã vượt qua khuôn khổ của phòng thí nghiệm Bell và nhanh chóng hội nhập 
vào thế giới lập trình để rồi các công ty lập trình sử dụng một cách rộng rãi. 
Sau đó, các công ty sản xuất phần mềm lần lượt đưa ra các phiên bản hỗ trợ 
cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng được khai sinh từ 
đó. 
Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất 
“mềm dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo 
sẵn. Người lập trình có thể tận dụng các hàm này để giải quyết các bài toán 
mà không cần phải tạo mới. Hơn thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép 
toán nên phù hợp cho việc giải quyết các bài toán kỹ thuật có nhiều công thức 
phức tạp. Ngoài ra, C cũng cho phép người lập trình tự định nghĩa thêm các 
kiểu dữ liệu trừu tượng khác. Tuy nhiên, điều mà người mới vừa học lập trình 
C thường gặp “rắc rối” là “hơi khó hiểu” do sự “mềm dẻo” của C. Dù vậy, C 
được phổ biến khá rộng rãi và đã trở thành một công cụ lập trình khá mạnh, 
được sử dụng như là một ngôn ngữ lập trình chủ yếu trong việc xây dựng 
những phần mềm hiện nay. 
Ngôn ngữ C có những đặc điểm cơ bản sau: 
o Tính cô đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, 
nhưng hầu hết đều được biểu diễn bằng những chuỗi ký tự ngắn gọn. 
o Tính cấu trúc (structured): C có một tập hợp những chỉ thị của lập trình 
như cấu trúc lựa chọn, lặp Từ đó các chương trình viết bằng C được tổ chức 
rõ ràng, dễ hiểu. 
o Tính tương thích (compatible): C có bộ tiền xử lý và một thư viện chuẩn 
vô cùng phong phú nên khi chuyển từ máy tính này sang máy tính khác các 
chương trình viết bằng C vẫn hoàn toàn tương thích. 
o Tính linh động (flexible): C là một ngôn ngữ rất uyển chuyển và cú pháp, 
chấp nhận nhiều cách thể hiện, có thể thu gọn kích thước của các mã lệnh làm 
chương trình chạy nhanh hơn. 
o Biên dịch (compile): C 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à liên kết (link) các đối tượng 
đó lại với nhau thành một chương trình có thể thực thi được (executable) thống 
nhất. 
1.2. KHỞI ĐỘNG VÀ THOÁT KHỎI CHƯƠNG TRÌNH C 
Mục tiêu: 
- Một số thao tác cơ bản của trình soạn thảo C. 
- Tiếp cận một số lệnh đơn giản thông qua các ví dụ 
- Thực hiện các thao tác an toàn với máy tính. 
1.2.1. KHỞI ĐỘNG CHƯƠNG TRÌNH C 
Nhập lệnh tại dấu nhắc DOS: gõ BC  (Enter) (nếu đường dẫn đã được cài 
bằng lệnh path trong đó có chứa đường dẫn đến thư mục chứa tập tin BC.EXE). 
Nếu đường dẫn chưa được cài đặt ta ta tìm xem thư mục BORLAND C (hoặc 
TURBO C) nằm trong ổ đĩa nào. Sau đó ta gõ lệnh sau: 
:\BORLAND C\BIN\BC (Enter) 
Nếu vừa khởi động BC vừa soạn thảo chương trình với một tập tin có tên 
do chúng ta đặt, thì gõ lệnh: BC [đường dẫn], nếu tên 
file cần soạn thảo đã có thì được nạp lên, nếu chưa có sẽ được tạo mới. 
Khởi động tại Windows: Bạn vào menu Start, chọn Run, bạn gõ vào hộp 
Open 1 trong các dòng lệnh như nhập tại DOS. Hoặc bạn vào Window Explorer, 
chọn ổ đĩa chứa thư mục BORLANDC, vào thư mục BORLANDC, vào thư mục 
BIN, khởi động tập tin BC.EXE. 
Ví dụ: gõ D:\BORLANDC\BIN\BIN\BC E:\BAITAP_BC\VIDU1.CPP 
Câu lệnh trên có nghĩa khởi BC và nạp tập tin VIDU1.CPP chứa trong thư 
mục BAITAP_BC trong ổ đĩa E. Nếu tập tin này không có sẽ được tạo mới. 
Màn hình sau khi khởi động thành công: 
Hình 1.1. Màn hình sau khi khởi động C thành công 
1.2.2. THOÁT KHỎI CHƯƠNG TRÌNH C 
Ấn phím F10 (kích hoạt Menu), chọn menu File, chọn Quit; 
Hoặc ấn tổ hợp phím Alt – X 
1.2.3. CÁC VÍ DỤ ĐƠN GIẢN 
1 /* Chuong trinh in ra cau bai hoc C dau tien 
*/ 
2 #include 
3 
4 void main() 
5 { 
6 printf(“Bai hoc C dau tien”); 
7 } 
Kết quả in ra màn hình: 
Bai hoc C dau tien 
Dòng thứ 1: bắt đầu bằng /* và kết thúc bằng */ cho biết hang này là hang 
diễn giải (chú thích). Khi dịch và chạy chương trình, dòng này không được dịch 
và cũng không thi hành lệnh gì cả. Mục đích của việc ghi chú này giúp chương 
trình rõ ràng hơn. Sau này chúng ta đọc lại chương trình biết chương trình làm 
gì. 
Dòng thứ 2: chứa phát biểu tiền xử lý #include . Vì trong chương 
trình này chúng ta sử dụng hàm thư viện của C là printf, do đó chúng ta cần phải 
có khai báo của hàm thư viện này để báo cho trình biên dịch C biết. Nếu không 
khai báo chương trình sẽ báo lỗi. 
Dòng thứ 3: Hằng trắng viết ra với ý đồ làm cho bảng chương trình thoáng, 
dễ đọc. 
Dòng thứ 4: void main(void) là thành phần chính của mọi chương trình C 
(bạn có thể viết main() hoặc void main() hoặc main(void)). Tuy nhiên, bạn nên 
viết theo dạng void main(void) để chương trình rõ rang hơn. Mọi chương trình C 
đều bắt đầu thi hành từ hàm main. Cặp dấu ngoặc () cho biết đây là khối hàm 
(function). Hàm void main(void) có từ khóa void đầu tiên cho biết hàm này 
không trả về giá trị, từ khóa void trong ngoặc đơn cho biết hàm này không nhận 
vào đối số. 
Dòng thứ 5 và 7: cặp dấu ngoặc móc {} giói hạn thân của hàm. Thân hàm 
bắt đầu bằng dấu { và kết thúc bằng dấu }. 
Dòng thứ 6: printf(“Bai hoc C dau tien.”);, chỉ thị cho máy in ra chuỗi ký tự 
nằm trong nháy kép (“”). Hàng này được gọi là một câu lệnh, kết thúc một câu 
lệnh trong C phải là dấu chấm phẩy (;). 
Chú ý: 
- Các từ include, stdio.h, void, main, print phải viết bằng chữ thường. 
- Chuỗi trong nháy kép cần in ra “Bạn có thể viết chữ HOA, thường tùy ý”. 
- Kết thúc câu lệnh phải có dấu chấm phẩy 
- Kết thúc tên hàm không có dấu chấm phẩy hoặc bất cứ dấu gì. 
- Ghi chú phải đặt trong cặp /**/ 
- Thân hàm phải được bao bởi cặp {}. 
- Các câu lệnh trong thân hàm phải viết thụt vào. 
Sau khi nhập xong đoạn chương trình vào máy. Bạn ấn và giữ phím Ctrl, 
gõ F9 để dịch và chạy chương trình. Khi đó chúng ta thấy chương trình chớp rất 
nhanh và không thấy kết quả gì cả. Bạn Ấn và giữ phím Alt, gõ F5 để xem kết 
quả, khi xem xong, ấn phím bất kỳ để quay về màn hình soạn thảo chương trình. 
CHƯƠNG 2: CÁC THÀNH PHẦN CƠ BẢN TRONG 
NGÔN NGỮ C 
Mã chương: MH18-02 
 Ý nghĩa: 
Ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các 
bài toán kỹ thuật có nhiều công thức phức tạp. Ngoài ra, C cũng cho phép người 
lập trình tự định nghĩa thêm các kiểu dữ liệu trừu tượng khác. 
Mục tiêu: 
- Sử dụng được hệ thống kí hiệu và từ khóa 
- Khai báo tên đúng 
- Trình bày được các kiểu dữ liệu 
- Khai báo biến đúng 
- Thực hiện được việc nhập và xuất dữ liệu 
- Thực hiện các thao tác an toàn với máy tính 
2.1. Từ khóa 
Mục tiêu: Hiểu và sử dụng đúng hệ thống ký hiệu và từ khóa. 
2.1.1. Bộ chữ viết trong C 
Ngôn ngữ C được xây dựng trên bộ ký tự sau: 
- 26 chữ cái hoa: A B C .. Z 
- 26 chữ cái thường: a b c .. z 
- 10 chữ số: 0 1 2 .. 9 
- Các ký hiệu toán học: + - * / = ( ) 
- Ký tự gạch nối: _ 
- Các ký tự khác: . , : ; [ ] {} ! \ & % # $ ... 
- Dấu cách (space) dùng để tách các từ. Ví dụ chữ SINH VIEN có 9 ký tự, 
còn SINHVIEN chỉ có 8 ký tự. 
* Chú ý: 
 Khi viết chương trình, ta không được sử dụng bất kỳ ký tự nào khác ngoài 
các ký tự trên. 
2.1.2. Từ khóa 
Từ khoá là những từ được sử dụng để khai báo các kiểu dữ liệu, để viết các 
toán tử và các câu lệnh. Một số từ khóa của TURBO C được liệt kê như sau: 
asm break case cdecl 
char const continue default 
do double else enum 
extern Far float for 
goto Huge if int 
interrupt Long near pascal 
register return short signed 
sizeof static struct switch 
tipedef union unsigned void 
volatile while 
Chú ý: 
- Không được dùng các từ khoá để đặt tên cho các hằng, biến, mảng, hàm 
... 
- Từ khoá phải được viết bằng chữ thường, ví dụ: viết từ khoá khai báo kiểu 
nguyên là int chứ không phải là INT. 
2.2. Tên 
Mục tiêu: Hiểu và khai báo tên theo đúng nguyên tắc. 
Khái niệm tên rất quan trọng trong quá trình lập trình, nó không những thể 
hiện rõ ý nghĩa trong chương trình mà còn dùng để xác định các đại lượng khác 
nhau khi thực hiện chương trình. 
Tên thường được đặt cho hằng, biến, mảng, con trỏ, nhãn Chiều dài tối 
đa của tên là 32 ký tự. 
Tên biến hợp lệ là một chuỗi ký tự liên tục gồm: Ký tự chữ, số và dấu gạch 
dưới. Ký tự đầu của tên phải là chữ hoặc dấu gạch dưới. Khi đặt tên không được 
đặt trùng với các từ khóa. 
Ví dụ 1 : 
 Các tên đúng: delta, a_1, Num_ODD, Case 
 Các tên sai: 
 3a_1 (ký tự đầu là số) 
 num-odd (sử dụng dấu gạch ngang) 
 int (đặt tên trùng với từ khóa) 
 del ta (có khoảng trắng) 
 f(x) (có dấu ngoặc tròn) 
Lưu ý: Trong C, tên phân biệt chữ hoa, chữ thường 
Ví dụ 2 : number khác Number 
 case khác Case 
 (case là từ khóa, do đó bạn đặt tên là Case vẫn đúng) 
2.3. Kiểu dữ liệu 
Mục tiêu: Hiểu và có thể sử dụng kiểu dữ liệu theo đúng mục đích của bài 
toán. 
2.3.1. Kiểu số nguyên 
Trong C cho phép sử dụng số nguyên kiểu int, số nguyên dài kiểu long và 
số nguyên không dấu kiểu unsigned. Kích cỡ và phạm vi biểu diễn của chúng 
được chỉ ra trong bảng dưới đây: 
Kiểu Phạm vi biểu diễn Kích thước 
int -32768 đến 32767 2 byte 
unsigned int 0 đến 65535 2 byte 
long -2147483648 đến 2147483647 4 byte 
unsigned long 0 đến 4294967295 4 byte 
Bảng 2.1. Kích cỡ và phạm vi biểu diễn kiểu dữ liệu số nguyên 
2.3.2. Kiểu số thực 
Trong C cho phép sử dụng số thực gồm 3 kiểu: float, double và long 
double. Kích cỡ và phạm vi biểu diễn của chúng được chỉ ra trong bảng dưới 
đây: 
Kiểu Phạm vi biểu diễn Số chữ số có nghĩa Kích thước 
Float 3.4E-38 đến 3.4E+38 7 đến 8 4 byte 
Double 1.7E-308 đến 1.7E+308 15 đến 16 8 byte 
long double 3.4E-4932 đến 1.1E4932 17 đến 18 10 byte 
Bảng 2.2. Kích cỡ và phạm vi biểu diễn kiểu số thực 
Giải thích: 
Máy tính có thể lưu trữ được các số kiểu float có giá trị tuyệt đối từ 3.4E-
38 đến 3.4E+38. Các số có giá trị tuyệt đối nhỏ hơn3.4E-38 được xem bằng 0. 
Phạm vi biểu diễn của số double được hiểu theo nghĩa tương tự. 
2.4. Các phép toán 
Mục tiêu : Hiểu và có thể thực hiện các phép tính toán trong chương trình. 
2.4.1. Các phép toán số học 
Phép toán Ý nghiã Ví dụ 
Phép toán Ý nghiã Ví dụ 
+ Phép cộng a+b 
- Phép trừ a-b 
* Phép nhân a*b 
/ Phép chia a/b (Chia số nguyên sẽ chặt phần thập phân) 
% Phép lấy phần dư a%b (Cho phần dư của phép chia a cho b) 
Bảng 2.3. Các phép toán số học 
Có phép toán một ngôi - ví du -(a+b) sẽ đảo giá trị của phép cộng (a+b). 
Ví dụ: 
 11/3=3 
 11%3=2 
 -(2+6)=-8 
Các phép toán + và - có cùng thứ tự ưu tiên, có thứ tự ưu tiên nhỏ hơn các 
phép *, /, % và cả ba phép này lại có thứ tự ưu tiên nhỏ hơn phép trừ một ngôi. 
Các phép toán số học được thực hiện từ trái sang phải. Số ưu tiên và khả 
năng kết hợp của phép toán được chỉ ra trong một mục sau này. 
2.4.2. Các phép toán quan hệ và logic 
 Phép toán quan hệ và logic cho ta giá trị đúng (1) hoặc giá trị sai (0). Nói 
cách khác, khi các điều kiện nêu ra là đúng thì ta nhận được giá trị 1, trái lại ta 
nhận giá trị 0. 
Các phép toán quan hệ: 
Phép toán Ý nghĩa Ví dụ 
> So sánh lớn hơn a>b 
4>5 có giá trị 0 
>= So sánh lớn hơn hoặc bằng a>=b 
6>=2 có giá trị 1 
< So sánh nhỏ hơn a<b 
6<=7 có giá trị 1 
<= So sánh nhỏ hơn hoặc bằng a<=b 
8<=5 có giá trị 0 
== So sánh bằng nhau a==b 
6==6 có giá trị 1 
!= So sánh khác nhau a!=b 
9!=9 có giá trị 0 
Bốn phép toán đầu có cùng số ưu tiên, hai phép sau có cùng số thứ tự ưu 
tiên nhưng thấp hơn số thứ tự của bốn phép đầu. 
Các phép toán quan hệ có số thứ tự ưu tiên thấp hơn so với các phép toán 
số học, cho nên biểu thức: i<n-1 được hiểu là i<(n-1). 
2.4.2.1. Các phép toán logic 
Trong C sử dụng ba phép toán logic: 
Phép phủ định một ngôi (!) 
A !a 
khác 0 0 
bằng 0 1 
 Phép và (AND) && - Phép hoặc ( OR ) || 
a B a&&b a||b 
khác 0 khác 0 1 1 
khác 0 bằng 0 0 1 
bằng 0 khác 0 0 1 
bằng 0 bằng 0 0 0 
Các phép quan hệ có số ưu tiên nhỏ hơn so với ! nhưng lớn hơn so với && 
và ||, vì vậy biểu thức sau: 
 (ad) 
có thể viết lại thành: 
 ad 
* Chú ý: Cả a và b có thể là nguyên hoặc thực. 
2.4.3. Phép toán tăng giảm 
C đưa ra hai phép toán một ngôi để tăng và giảm các biến (nguyên và 
thực). Toán tử tăng là ++ sẽ cộng 1 vào toán hạng của nó, toán tử giảm -- thì sẽ 
trừ toán hạng đi 1. 
Ví dụ: 
 n=5 
 ++n Cho ta n=6 
 --n Cho ta n=4 
Ta có thể viết phép toán ++ và -- trước hoặc sau toán hạng như sau: ++n, 
n++, --n, n-- 
Sự khác nhau của ++n và n++ ở chỗ: Trong phép n++ thì tăng sau khi giá 
trị của nó đã được sử dụng, còn trong phép ++n thì n được tăng trước khi sử 
dụng. Sự khác nhau giữa n-- và --n cũng như vậy. 
Ví dụ: 
 n=5 
 x=++n Cho ta x=6 và n=6 
 x=n++ Cho ta x=5 và n=6 
2.4.4. Thứ tự ưu tiên các phép toán 
Các phép toán có độ ưu tiên khác nhau, điều này có ý nghĩa trong cùng một 
biểu thức sẽ có một số phép toán này được thực hiện trước một số phép toán 
khác. 
Thứ tự ưu tiên của các phép toán được trình bày như sau: 
TT Phép toán Trình tự kết hợp 
1 () [] -> Trái qua phải 
2 ! ~ & * - ++ -- (type ) sizeof Phải qua trái 
3 * ( phép nhân ) / % Trái qua phải 
4 + - Trái qua phải 
5 > Trái qua phải 
6 >= Trái qua phải 
7 = = != Trái qua phải 
8 & Trái qua phải 
9 ^ Trái qua phải 
TT Phép toán Trình tự kết hợp 
10 | Trái qua phải 
11 && Trái qua phải 
12 || Trái qua phải 
13 ?: Phải qua trái 
14 = += -= *= /= %= >= 
&= ^= |= 
Phải qua trái 
15 , Trái qua phải 
Bảng 2.4. Thứ tự ưu tiên của các phép toán 
Chú thích: 
- Các phép toán tên một dòng có cùng thứ tự ưu tiên, các phép toán ở hàng 
trên có số ưu tiên cao hơn các số ở hàng dưới. 
- Đối với các phép toán cùng mức ưu tiên thì trình tự tính toán có thể từ trái 
qua phải hay ngược lại được chỉ ra trong cột trình tự kết hợp. 
Ví dụ: 
 *--px=*(--px) (Phải qua trái) 
 8/4*6=(8/4)*6 (Trái qua phải) 
 Nên dùng các dấu ngoặc tròn để viết biểu thức một cách chính xác. 
2.5. Ghi chú 
Mục tiêu : Biết cách ghi chú khi viết chương trình. 
2.5.1. Ghi chú 
Trong khi lập trình cần phải ghi chú để giải thích các biến, hằng, thao tác 
xử lý giúp cho chương trình rõ ràng dễ hiểu, dễ nhớ, dễ sửa chữa và để người 
đọc dễ hiểu. Trong C có các ghi chú sau: // hoặc /* nội dung ghi chú */ 
 Ví dụ: 
 void main() 
 { 
 int a, b; //khai bao bien t kieu int 
 a = 1; //gan 1 cho a 
 b =3; //gan 3 cho b 
 /* thuat toan tim so lon nhat la 
 neu a lon hon b thi a lon nhat 
 nguoc lai b lon nhat */ 
 if (a > b) printf("max: %d", a); 
 else printf("max: %d", b); 
getch(); 
 } 
 Khi biên dịch chương trình, C gặp cặp dấu ghi chú sẽ không dịch ra ngôn 
ngữ máy. 
Tóm lại, đối với ghi chú dạng // dùng để ghi chú một hàng và dạng /* . */ 
có thể ghi chú một hàng hoặc nhiều hàng. 
2.5.2. Cấu trúc chương trình C 
Một chương trình C bao gồm các phần như: Các chỉ thị tiền xử lý, khai báo 
biến ngoài, các hàm tự tạo, chương trình chính (hàm main). 
Cấu trúc có thể như sau: 
- Các chỉ thị tiền xử lý (Preprocessor directives) 
#include 
#define . 
Định nghĩa kiểu dữ liệu (phần này không bắt buộc): dùng để đặt tên lại 
cho một kiểu dữ liệu nào đó để gợi nhớ hay đặt 1 kiểu dữ liệu cho riêng mình 
dựa trên các kiểu dữ liệu đã có. 
Cú pháp: typedef 
Ví dụ: typedef int SoNguyen; // Kiểu SoNguyen là kiểu int 
Khai báo các prototype (tên hàm, các tham số, kiểu kết quả trả về, của 
các hàm sẽ cài đặt trong phần sau, phần này không bắt buộc): phần này chỉ là 
các khai báo đầu hàm, không phải là phần định nghĩa hàm. 
Khai báo các biến ngoài (các biến toàn cục) phần này không bắt buộc: phần 
này khai báo các biến toàn cục được sử dụng trong cả chương trình. 
- Chương trình chính ( phần này bắt buộc phải có) 
 main() 
{ 
Các khai báo cục bộ trong hàm main: Các khai báo này chỉ tồn tại trong 
hàm mà thôi, có thể là khai báo biến hay khai báo kiểu. 
Các câu lệnh dùng để định nghĩa hàm main. 
return ; // Hàm phải trả về kết quả 
} 
Cài đặt các hàm 
 function1( các tham số) 
{ 
Các khai báo cục bộ trong hàm. 
Các câu lệnh dùng để định nghĩa hàm. 
return ; 
} 
Một chương trình C bắt đầu thực thi từ hàm main (thông thường là từ câu 
lệnh đầu tiên đến câu lệnh cuối cùng). 
2.6. Khai báo biến 
Mục tiêu : Biết cách khai báo biến theo đúng nguyên tắc đặt tên. 
2.6.1. Biến. 
Mỗi biến cần phải được khai báo trước khi đưa vào sử dụng. Việc khai báo 
biến được thực hiện theo mẫu sau: 
Kiểu dữ liệu của biến tên biến ; 
Ví dụ : 
int a,b,c; Khai báo ba biến int là a,b,c 
long dai,mn; Khai báo hai biến long là dai và mn 
char kt1,kt2; Khai báo hai biến ký tự là kt1 và kt2 
float x,y; Khai báo hai biến float là x và y 
double canh; Khai báo một biến double là canh 
Biến kiểu int chỉ nhận được các giá trị kiểu int. Các biến khác cũng có ý 
nghĩa tương tự. Các biến kiểu char chỉ chứa được một ký tự. Để lưu trữ được 
một xâu ký tự cần sử dụng một mảng kiểu char. 
2.6.2. Vị trí khai báo biến trong C 
Khi lập trình, chúng ta phải nắm rõ phạm vi của biến. Nếu khai báo và sử 
dụng không đúng, không rõ ràng sẽ dẫn đến sai sót khó kiểm soát được, vì vậy 
cần phải xác định đúng vị trí, phạm vi sử dụng biến trước khi sử dụng biến. 
Khai báo biến ngoài (biến toàn cục): Vị trí biến đặt bên ngoài tất cả các 
hàm, cấu trúc... Các biến này có ảnh hưởng đến toàn bộ chương trình. Chu trình 
sống của nó là bắt đầu chạy chương trình đến lúc kết thúc chương trình. 
Khai báo biến trong (biến cục bộ): Vị trí biến đặt bên trong hàm, cấu 
trúc. Chỉ ảnh hưởng nội bộ bên trong hàm, cấu trúc đó. Chu trình sống của nó 
bắt đầu từ lúc hàm, cấu trúc được gọi thực hiện đến lúc thực hiện xong. 
2.6.3. Biểu thức 
Biểu thức là một sự kết hợp giữa các phép toán và các toán hạng để diễn 
đạt một công thức toán học nào đó. Mỗi biểu thức có sẽ có một giá trị. Như vậy 
hằng, biến, phần tử mảng và hàm cũng được xem là biểu thức. 
Trong C, ta có hai khái niệm về biểu thức: 
 Biểu thức gán. 
 Biểu thức điều kiện . 
Biểu thức được phân loại theo kiểu giá trị: nguyên và thực. Trong các mệnh 
đề logic, biểu thức được phân thành đúng (giá trị khác 0) và sai (giá trị bằng 0). 
Biểu thức thường được dùng trong: 
 Vế phải của câu lệnh gán. 
 Làm tham số thực sự của hàm. 
 Làm chỉ số. 
 Trong các toán tử của các cấu trúc điều khiển. 
2.7. Nhập/xuất dữ liệu 
Mục tiêu: Biết thực hiện lệnh nhập dữ liệu và xuất dữ liệu ra màn hình. 
2.7.1. Lệnh gán. 
Biểu thức gán là biểu thức có dạng: 
 v=e 
Trong đó v là một biến (hay phần tử mảng), e là một biểu thức. Giá trị của 
biểu thức gán là giá trị của e, kiểu của nó là kiểu của v. Nếu đặt dấu ; vào sau 
biểu thức gán ta sẽ thu được phép toán gán có dạng: 
 v=e; 
Biểu thức gán có thể sử dụng trong các phép toán và các câu lệnh như các 
biểu thức khác. Ví dụ như khi ta viết 
 a=b=5; 
thì điều đó có nghĩa là gán giá trị của biểu thức b=5 cho biến a. Kết quả là 
b=5 và a=5. 
Hoàn toàn tương tự như: a=b=c=d=6; gán 6 cho cả a, b, c và d 
Ví dụ : 
 z=(y=2)*(x=6); {ở đây * là phép toán nhân} 
gán 2 cho y, 6 cho x và nhân hai biểu thức lại cho ta z=12. 
2.7.2. Lệnh nhập 
Hàm scanf là hàm đọc thông tin từ thiết bị vào chuẩn (bàn phím), chuyển 
dịch chúng (thành số nguyên, số thực, ký tự vv..) rồi lưu trữ nó vào bộ nhớ theo 
các địa chỉ xác định. 
Cú pháp : scanf(« chuỗi định dạng»,đối số 1, đối số 2, ...); 
Khi sử dụng hàm phải khai báo tiền xử lý #include 
- scanf: tên hàm, phải viết bằng chữ thường. 
- chuỗi định dạng: được đặt trong cặp nháy kép (" ") là hình ảnh dạng dữ 
liệu nhập vào. 
- đối số 1, đối số 2: là danh sách các đối mục cách nhau bởi dấu phẩy, 
mỗi đối mục sẽ tiếp nhận giá trị nhập vào. 
Sau đây là các dấu mô tả định dạng: 
%c : Ký tự đơn 
%s : Chuỗi 
%d : Số nguyên thập phân có dấu 
%f : Số chấm động (ký hiệu thập phân) 
%e : Số chấm động (ký hiệu có số mũ) 
%g : Số chấm động (%f hay %g) 
%x : Số nguyên thập phân không dấu 
%u : Số nguyên hex không dấu 
%o : Số nguyên bát phân không dấu 
l: Tiền tố dùng kèm với %d, %u, %x, %o để chỉ số nguyên dài (ví dụ : %ld) 
Ví dụ1: scanf("%d", &i); 
Nhập vào 12abc, biến i chỉ nhận giá trị 12. Nhập 3.4 chỉ nhận giá trị 3. 
Ví dụ 2: scanf("%d%d", &a, &b); 
 Nhập vào 2 số a, b phải cách nhau bằng khoảng trắng hoặc enter. 
Ví dụ 3: scanf("%d/%d/%d", &ngay, &thang, &nam); 
Nhập vào ngày, tháng, năm theo dạng ngay/thang/nam (20/12/2002) 
2.7.3. Lệnh xuất. 
Cú pháp : prinf(“chuỗi định dạng”, đối số 1, đối số 2, ...); 
Khi sử dụng hàm phải khai báo tiền xử lý #include 
- printf: tên hàm, phải viết bằng chữ thường. 
- đối số 1, đối số 2: là các mục dữ kiện cần in ra màn hình. Các đối số 
này có thể là biến, hằng hoặc biểu thức phải được định trị trước khi in ra. 
- chuỗi định dạng: được đặt trong cặp nháy kép (" "), gồm 3 loại: 
+ Đối với chuỗi kí tự ghi như thế nào in ra giống như vậy. 
+ Đối với những kí tự chuyển đổi dạng thức cho phép kết xuất giá trị của 
các đối mục ra màn hình tạm gọi là mã định dạng. (Ta đã có bảng mã định dạng 
ở mục 2) 
* Các ký tự điều khiển và ký tự đặc biệt : 
\n : Nhảy xuống dòng kế tiếp canh về cột đầu tiên. 
\t : Canh cột tab ngang. 
\r : Nhảy về đầu hàng, không xuống hàng. 
\a : Tiếng kêu bip. 
\\ : In ra dấu \ 
\" : In ra dấu " 
\' : In ra dấu ' 
%%: In ra dấu % 
Ví dụ 1 : printf("\" Nang suat tang : %d % \" ",30); 
 Kết quả in ra màn hình : 
 "Nang suat tang : 30%" 
Ví dụ 2 : float x=25.5, y=-47.335 
 printf("%f\n%*.2f",x,y); 
 Kết quả in ra màn hình : 
 25.500000 
 -47.34 
2.8. Bài tập thực hành 
1. Viết chương trình đổi một số nguyên hệ 10 sang hệ 2. 
2. Viết chương trình đổi một số nguyên hệ 10 sang hệ 16. 
3. Viết chương trình đọc vào 2 số nguyên và in ra kết quả của phép (+), 
phép trừ (-), phép nhân (*), phép chia (/). Nhận xét kết quả chia 2 số nguyên. 
4. Viết chương trình nhập vào bán kính hình cầu, tính và in ra diện tích, 
thể tích của hình cầu đó. Hướng dẫn: S = 4πR2 và V = (4/3)πR3 
5. Viết chương trình nhập vào một số a bất kỳ và in ra giá trị bình phương 
(a2), lập phương (a3) của a và giá trị a4 
6. Viết chương trình đọc từ bàn phím 3 số nguyên biểu diễn ngày, tháng, 
năm và xuất ra màn hình dưới dạng "ngay/thang/nam" (chỉ lấy 2 số cuối của 
năm). 
7. Viết chương trình nhập vào số giây từ 0 đến 86399, đổi số giây nhập 
vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số. 
Ví dụ: 02:11:05 
CHƯƠNG 3: CẤU TRÚC RẼ NHÁNH CÓ ĐIỀU KIỆN 
Mã chương: MH18-03 
Ý nghĩa: 
Như là một ngôn ngữ mệnh lệnh, C phụ thuộc vào các mệnh đề (câu lệnh) 
để làm hầu hết các việc. Hầu hết các mệnh đề lại là các mệnh đề biểu thức mà 
một cách đơn giản chúng tạo nên việc đánh giá các biểu thức đó -- và trong quá 
trình này, các biến nhận được các giá trị mới hoặc các giá trị này được trả ra. 
Các mệnh đề dòng điều khiển cũng có hiệu lực cho việc thực thi có điều kiện 
hay có lặp lại, mà chúng được cấu tạo với các từ khóa như là if, else, switch, do, 
while và for. Các nhảy dòng cũng có thể thực hiện qua câu lệnh goto. Nhiều 
phép toán khác nhau được cung cấp sẵn để thực thi trên các phép tính cơ sản về 
số học, lô gíc, so sánh, kiểu bit, chỉ số của mảng, và phép gán giá trị. Các biểu 
thức cũng gọi các hàm, bao gồm một số lượng lớn các hàm thư viện, để tiến 
hành các thao tác chung. 
Mục tiêu: 
- Trình bày ý nghĩa của lệnh và khối lệnh ; 
- Trình bày cú pháp, công dụng của lệnh if, lệnh switch ; 
- Giải một số bài toán sử dụng lệnh if, lệnh switch ; 
- Sử dụng được các cấu trúc lồng nhau. 
- Thực hiện các thao tác an toàn với máy tính. 
3.1. Lệnh và khối lệnh 
Mục tiêu: Trình bày ý nghĩa của lệnh và khối lệnh 
3.1.1. Lệnh 
Là một tác vụ, biểu thức, hàm, cấu trúc điều khiển 
Ví dụ 1: 
x = x + 2; 
printf("Day la mot lenh\n"); 
3.1.2. Khối lệnh 
Là một dãy các câu lệnh được bọc bởi cặp dấu { } 
Ví dụ 2: 
{ //dau khoi 
a = 5; 
b = 6; 
printf("Tong %d + %d = %d", a, b, a+b); 
} //cuoi khoi 
3.2. Lệnh if 
Mục tiêu: 
- Trình bày cú pháp, công dụng của lệnh if 
- Giải một số bài toán sử dụng lệnh if 
- Sử dụng được các cấu trúc if lồng nhau. 
- Thực hiện các thao tác an toàn với máy tính. 
Câu lệnh if cho phép lựa chọn một trong hai nhánh tùy thuộc vào giá trị của 
biểu thức luận lý là đúng (true) hay sai (false) hoặc khác không hay bằng không. 
3.2.1. Dạng 1 (if thiếu) 
Quyết định sẽ thực hiện hay không một khối lệnh. 
 Cú pháp lệnh 
if (biểu thức luận lý) khối lệnh; 
Lưu ý: Từ khóa if phải viết bằng chữ thường, kết quả của biểu thức luận lý 
phải là đúng (≠ 0) hoặc sai (= 0) 
 Lưu đồ 
 
Biểu thức 
luận lý 
Khối lệnh 
Vào 
Ra 
Đúng 
Sai 
 Giải thích: 
Nếu biểu thức luận lý đúng thì thực hiện khối lệnh và thoát và thoát khỏi if, 
ngược lại không làm gì cả khỏi if. 
Lưu ý: Nếu khối lệnh bao gồm từ 2 lệnh trở lên thì phải đặt trong dấu { } 
3.2.2. Bài tập thực hành 
1.Viết chương trình nhập vào số nguyên dương, in ra thông báo số chẵn hay 
lẻ. 
Hướng dẫn: Nhập vào số nguyên dương x. Kiểm tra nếu x chia hết cho 2 
thì x là số chẵn (hoặc chia cho 2 dư 0), nếu x không chia hết cho 2 (hoặc chia cho 
2 dư 1) là số lẻ. 
2.Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất. 
Hướng dẫn: Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y 
của 2 cặp (a, b) và (c, d). Sau đó so sánh 2 số nguyên x, y để tìm ra số nguyên 
lớn nhất. 
3.2.3. Dạng 2 (if đủ) 
Quyết định sẽ thực hiện 1 trong 2 khối lệnh cho trước. 
 Cú pháp lệnh 
if (biểu thức luận lý) khối lệnh 1 else khối lệnh 2; 
 Lưu đồ 
Biểu thức 
luận lý 
Khối lệnh 1 
Vào 
Ra 
Đúng Sai 
Khối lệnh 2 
 Giải thích: 
Nếu biểu thức luận lý đúng thì hực hiện khối lệnh 1 và thoát khỏi if ngược lại 
thực hiện khối lệnh 2 và thoát khỏi if. 
3.2.4. Bài tập thực hành 
1.Viết chương trình nhập vào số nguyên dương, in ra thông báo số chẵn hay 
lẻ. 
Hướng dẫn: Nhập vào số nguyên dương x. Kiểm tra nếu x chia chẵn cho 
hai thì x là số chẵn (hoặc chia cho 2 dư 0) ngược lại là số lẻ. 
2.Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất. 
Hướng dẫn: Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y 
của 2 cặp (a, b) và (c, d). Sau đó so sánh 2 số nguyên x, y để tìm ra số nguyên 
lớn nhất. 
3.2.5. Cấu trúc else if 
Quyết định sẽ thực hiện 1 trong n khối lệnh cho trước. 
 Cú pháp lệnh: 
if (biểu thức luận lý 1) khối lệnh 1; 
else if (biểu thức luận lý 2) 
khối lệnh 2;  
else if (biểu thức luận lý n-1) 
khối lệnh n-1; 
else 
khối lệnh n; 
 Lưu đồ: 
 Giải thích: 
Nếu biểu thức luận lý 1 đúng thì thực hiện khối lệnh 1 và thoát khỏi cấu 
trúc if 
Ngược lại Nếu biểu thức luận lý 2 đúng thì thực hiện khối lệnh 2 và thoát 
khỏi cấu trúc if 
Ngược lại Nếu biểu thức luận lý n-1 đúng thì thực hiện khối lệnh n-1 và 
thoát khỏi cấu trúc if 
Ngược lại thì thực hiện khối lệnh n. 
3.2.6. Bài tập thực hành 
1. Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0, với a, b, c 
nhập vào từ bàn phím. 
Hướng dẫn: Nhập vào 3 biến a, b, c. Tính Delta = b*b - 4*a*c 
Nếu Delta < 0 thì 
Phương trình vô nghiệm 
Ngược lại 
Nếu Delta = 0 thì 
x1 = x2 = - b/(2*a) Ngược lại 
x1 = (- b - sqrt(Delta))/(2*a) 
x2 = (- b + sqrt(Delta))/(2*a) Hết Nếu 
Hết Nếu 
2. Viết chương trình nhập vào giờ phút giây (hh:mm:ss). Cộng thêm số 
giây nhập vào và in ra kết quả dưới dạng hh:mm:ss. 
Hướng dẫn: Nhập vào giờ phút giây vào 3 biến gio, phut, giay và nhập và 
giây công thêm vào biến them: 
Nếu giay + them < 60 thì giay = giay + them 
Ngược lại 
giay = (giay + them) - 60 phut = phut + 1 
Nếu phut >= 60 thì 
phut = phut - 60 gio = gio + 1 
Hết nếu 
Hết nếu 
3.2.7. Cấu trúc if lồng nhau 
Quyết định sẽ thực hiện 1 trong n khối lệnh cho trước. 
 Cú pháp lệnh 
Cú pháp là một trong 3 dạng trên, nhưng trong 1 hoặc nhiều khối lệnh 
bên trong phải chứa ít nhất một trong 3 dạng trên gọi là cấu trúc if lồng nhau. 
Thường cấu trúc if lồng nhau càng nhiều cấp độ phức tạp càng cao, chương trình 
chạy càng chậm và trong lúc lập trình dễ bị nhầm lẫn. 
Chú ý: Các lệnh ifelse lồng nhau thì else sẽ luôn luôn kết hợp với if nào 
chưa có else gần nhất. Vì vậy khi gặp những lệnh if không có else, Bạn phải đặt 
chúng trong những khối lệnh rõ ràng để tránh bị hiểu sai câu lệnh. 
Ví dụ: Viết chương trình nhập vào 2 số nguyên a và b . Nếu a > b thì hoán 
đổi giá trị a và b , ngược lại không hoán đổi.In ra giá trị của a và b. 
/*Chuong trinh nhap vao 2 so nguyen a va b 
Neu a>b thi hoan doi gia tri a va b,nguoc lai khong hoan 
doi 
In ra man hinh a va b 
*/ 
#include 
#include 
void main(void) 
{ 
 int ia,ib,itam;//Khai bao cac bien 
 //Nhap vao ia 
 printf("a="); 
 scanf("%d",&ia); 
 //Nhap vao ib 
 printf("b="); 
 scanf("%d",&ib); 
 if(ia>ib) 
 { 
 //Hoan vi a va b 
 tam=ia; 
 ia=ib; 
 b=itam; 
 } 
 printf("a=%d ; b=%d\n",ia,ib); 
 getch(); 
} 
3.2.8. Bài tập thực hành 
1. Viết chương trình giải phương trình bậc 1: ax + b = 0, với a, b nhập 
vào từ bàn phím. 
Hướng dẫn: Nhập vào 2 biến a, b 
Nếu a=0 thì (xét hệ số b) 
 Nếu b=0 thì kết luận phương trình vô số nghiệm 
 Ngược lại thì kết luận phương trình vô nghiệm 
Ngược lại (hệ số a#0), kết luận phương trình có 1 nghiệm x=-b/a 
3.3. Lệnh switch() 
Mục tiêu: 
- Trình bày cú pháp, công dụng của lệnh switch ; 
- Giải một số bài toán sử dụng lệnh switch ; 
- Sử dụng được các cấu trúc switch lồng nhau. 
- Thực hiện các thao tác an toàn với máy tính. 
Lệnh switch cũng giống cấu trúc else if, nhưng nó mềm dẻo hơn và linh 
động hơn nhiều so với sử dụng if. Tuy nhiên, nó cũng có mặt hạn chế là kết quả 
của biểu thức phải là giá trị hằng nguyên (có giá trị cụ thể). Một bài toán sử 
dụng lệnh switch thì cũng có thể sử dụng if, nhưng ngược lại còn tùy thuộc vào 
giải thuật của bài toán. 
3.3.1. Cấu trúc switchcase (switch thiếu) 
Chọn thực hiện 1 trong n lệnh cho trước. 
 Cú pháp lệnh 
switch (biểu thức) 
{ 
case giá trị 1 : lệnh 1; 
break; 
case giá trị 2 : lệnh 2; 
break; 
case giá trị n : lệnh n; 
[break;] 
} 
Lưu ý: từ khóa switch, case, break phải viết bằng chữ thường; biểu thức 
phải là có kết quả là giá trị hằng nguyên (char, int, long,); Lệnh 1, 2n có thể 
gồm nhiều lệnh, nhưng không cần đặt trong cặp dấu { } 
 Lưu đồ 
Khi giá trị của biểu thức bằng giá trị i thì lệnh i sẽ được thực hiện. Nếu sau 
lệnh i không có lệnh break thì sẽ tiếp tục thực hiện lệnh i + 1Ngược lại thoát 
khỏi cấu trúc switch. 
Ví dụ: Viết chương trình nhập vào một tháng và cho biết tháng đó thuộc 
quý mấy. 
/* 
 Chương trình nhập vào một tháng và in ra quý của tháng đó 
*/ 
#include 
#include 
void main(void) 
{ 
 int iThang; 
 //Nhập vào tháng 
 printf("Thang : "); 
 scanf("%d",&iThang); 
 //Kiểm tra tháng thuộc quý nào để nhập vào 
 if(iThang>0 && iThang<=12) 
 { 
 switch(iThang) 
 { 
 case 1 : 
 case 2 : 
 case 3 : 
 printf("Thang %d thuoc quy 1\n",iThang); 
 break; 
 case 4 : 
 case 5 : 
 case 6 : 
 printf("Thang %d thuoc quy 2\n",iThang); 
 break; 
 case 7 : 
 case 8 : 
 case 9 : 
 printf("Thang %d thuoc quy 3\n",iThang); 
 break; 
 case 10 : 
 case 11 : 
 case 12 : 
 printf("Thang %d thuoc quy 4\n",iThang); 
 break; 
 } 
 } 
 else 
 printf("Thang ban nhap vao khong hop le\n"); 
 getch(); 
} 
3.3.2. Bài tập thực hành 
1.Viết chương trình nhập vào tháng, in ra tháng đó có bao nhiêu ngày. 
Hướng dẫn: Nhập vào tháng 
Nếu là tháng 1, 3, 5, 7, 8, 10, 12 thì có 30 ngày 
Nếu là tháng 4, 6, 9, 11 thì có 31 ngày 
Nếu là tháng 2 và là năm nhuận thì có 29 ngày ngược lại 28 ngày 
(Năm nhuận là năm chia chẵn cho 4) 
2. Viết chương trình xác định biến ký tự color rồi in ra thông báo 
- RED, nếu color = 'R' hoặc color = 'r' 
- GREEN, nếu color = 'G' hoặc color = 'g' 
- BLUE, nếu color = 'B' hoặc color = 'b' 
- BLACK, nếu color = 'K' hoặc color = 'l' 
3.3.3. Cấu trúc switchcasedefault (switch đủ) 
Chọn thực hiện 1 trong n + 1 lệnh cho trước. 
 Cú pháp lệnh 
switch (biểu thức) 
{ 
case giá trị 1 : lệnh 1; break; 
case giá trị 2 : lệnh 2; break; 
case giá trị n : lệnh n; break; 
default : lệnh; [break;] 
} 
Lưu ý: 
- Từ khóa switch, case, break , default phải viết bằng chữ thường. 
- Biểu thức phải là có kết quả là giá trị nguyên (char, int, long,) 
- Lệnh 1, 2 .. n có thể gồm nhiều lệnh, nhưng không cần đặt trong dấu {} 
 Lưu đồ 
Ví dụ: Viết lại ví dụ trên sử dụng switch đủ 
/* 
 Chương trình nhập vào một tháng và in ra quý của tháng đó 
*/ 
#include 
#include 
void main(void) 
{ 
 int iThang; 
 //Nhập vào tháng 
 printf("Thang : "); 
 scanf("%d",&iThang); 
 //Kiểm tra tháng thuộc quý nào để nhập vào 
 { 
 switch(iThang) 
 { 
 case 1 : 
 case 2 : 
 case 3 : 
 printf("Thang %d thuoc quy 1\n",iThang); 
 break; 
 case 4 : 
 case 5 : 
 case 6 : 
 printf("Thang %d thuoc quy 2\n",iThang); 
 break; 
 case 7 : 
 case 8 : 
 case 9 : 
 printf("Thang %d thuoc quy 3\n",iThang); 
 break; 
 case 10 : 
 case 11 : 
 case 12 : 
 printf("Thang %d thuoc quy 4\n",iThang); 
 break; 
 default : 
 printf("Ban nhap vao thang khong hop le"); 
 break; 
 } 
 } 
 getch(); 
} 
3.3.4. Bài tập thực hành 
1. Viết chương trình xác định biến ký tự color rồi in ra thông báo 
- RED, nếu color = 'R' hoặc color = 'r' 
- GREEN, nếu color = 'G' hoặc color = 'g' 
- BLUE, nếu color = 'B' hoặc color = 'b' 
- BLACK, nếu color có giá trị khác. 
3.3.5. Cấu trúc switch lồng 
 Quyết định sẽ thực hiện 1 trong n khối lệnh cho trước. 
 Cú pháp lệnh: 
Cú pháp là một trong 2 dạng trên, nhưng trong một nhiều lệnh bên trong 
phải chứa ít nhất 1 trong 2 dạng trên. Switch lồng có cấp độ càng cao thì thì 
chương trình càng phức tạp và chạy chậm và trong lúc lập trình sẽ dễ phát sinh 
nhầm lẫn. 
 Lưu đồ: 
 Tương tự 2 dạng trên nhưng trong mỗi lệnh có thể có một hay nhiều cấu 
trúc switch ở hai dạng trên. 
Ví dụ : Viết chương trình menu 2 cấp 
/* 
 Chương trình menu 2 cấp 
*/ 
#include 
#include 
void main(void) 
{ 
 int iMenu,iSunMenu; 
 //In menu 
 printf(-----------------------------\n); 
 printf( MAIN MENU \n); 
 printf(------------------------------\n); 
 printf("1.File\n"); 
 printf("2.Edit\n"); 
 printf("3.Search\n"); 
 //Lua chon chuc nang 
 printf("Moi ban chon chuc nang : "); 
 scanf(("%d",&iMenu); 
 //Kiem tra chuc nang nhap vao 
 switch(iMenu) 
 { 
 case 1 : 
 printf("Ban da chon chuc nang File\n"); 
 printf(-----------------------------\n); 
 printf( MENU FILE \n); 
 printf(------------------------------\n); 
 printf("1.New\n"); 
 printf("2.Open\n"); 
 //Lua chon chuc nang 
 printf("Moi ban chon chuc nang : "); 
 scanf(("%d",&iSubMenu); 
 //Kiem tra chuc nang da nhap vao 
 switch(iSubMenu) 
 { 
 case 1 : 
 printf("Ban da chon chuc nang New\n"); 
 break; 
 case 2 : 
 printf("Ban da chon chuc nang Open\n"); 
 break; 
 default : 
 printf("Chuc nang ban chon khong co\n"); 
 break; 
 } 
 break; 
 case 2 : 
 printf("Ban da chon chuc nang Edit\n"); 
 break; 
 case 3 : 
 printf("Ban da chon chuc nang Search\n"); 
 break; 
 default : 
 printf("Chuc nang ban chon khong co\n"); 
 break; 
 } 
 getch(); 
} 
3.3.6. Bài tập thực hành 
1.Viết chương trình trò chơi One-Two-Three ra cái gì ra cái này theo điều 
kiện: 
- Búa (B) thắng Kéo, thua Giấy. 
- Kéo (K) thắng Giấy, thua Búa. 
- Giấy (G) thắng Búa, thua Kéo. 
Hướng dẫn: Dùng lệnh switch lồng nhau 
            Các file đính kèm theo tài liệu này:
 giao_trinh_quan_tri_mang_p1_4963.pdf giao_trinh_quan_tri_mang_p1_4963.pdf