Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Giáo trình Kỹ thuật lập trình C : Căn bản và nâng cao
Nội dung xem thử
Mô tả chi tiết
gfCÄN BAN
NÂN G l AO
Thư viện - ĐH Quy Nhơn
GIẢO TRĨNH Kỹ th u ậ t Lậ p t r ìn h c
Căn bản & Nâng cao
TRƯ ềN G ĐẠI H fC t u v NHƠ*
THƯ VIỆN
W P - Í 4 W
GIÁO TRÌNH KỸ THUẬT LẬP TRÌNH c
Căn bản & Nâng cao
Xuất bản theo hợp đổng sử dụng hợp đồng giữa
Công ty cổ phần văn hóa Huy Hoàng và tác giả.
m
HUYHOANG
Biên mục trên xuất bản phẩm của Thư viện Quỗc gia Việt Nam
Phạm Văn Ất
Giáo trình kỹ thuật lập trình C: Căn bản và nâng cao / Phạm Văn Ất
(ch.b.), Nguyễn Hiếu Cường, Đỗ Văn Tuấn, Lê Trường Thông. - H. : Bách
khoa Hà N ộ i; Công ty Văn hoá Huy Hoàng, 2020. - 437tr.; 24cm
ISBN 9786049931208
1. Ngôn ngữ lập trình 2. Ngồn ngữ C 3. Giáo trình
005.1330711 -dc23
BKH0073p-CIP
HEM 13- GIAO TRINH
GS. PHẠM VÀN ẤT (chủ biên)
LÊ TRƯỞNG THÔNG •---------
ThS. NGUYỄN HIỂU CUÒNG
-------- - Ths. ĐỖ VÀN TUẤN
CĂN BẢN
NẢNG&CAO
B:*.s a c m a
ỊMỊ 1 1 nhàxuấtbànbáchkhoahanội HUY HOANG '
Hướng dẫn tải file
Bạn đọc có thể chọn một trong các cách sau:
1. Truy cập website Huy Hoàng tại địa chỉ huyhoangbook.vn, gõ tên sách
vào mục “Nhập để tìm kiếm” và tải file theo link đính kèm.
2. Gõ đúng theo link sau: https://www.huyhoangbook.vn/products/-
giao-trinh-ky-thuat-lap-trinh-c-can-ban-nang-cao
3. Dùng smartphone quét mã QR code:
Kỹ thuật lập trình c
... ...9
+ LỜI NOI ĐAU +
Ngôn ngữ lập trình c (C Programming Language) ra đời vào những năm
đầu của thập niên 70 trong một phòng thí nghiệm vẽ lĩnh vực máy tính nổi
tiếng vào bậc nhất thế giới - Bell Lab*. c ra đời với mục đích ban đầu rất rõ
ràng, là để viết hệ điểu hành UNIX. Nhưng rồi, vì những ưu điểm của nó, c
đã nhanh chóng vượt ra khỏi giới hạn của phòng thí nghiệm và lan rông ra
toàn thế giới.
Trên the giơi, tại nhieu nước, c được chọn là ngôn ngữ để dạy về một ngôn
ngữ lập trình và cài đặt thuật toán. Ở Việt Nam, tại các trường'đại học có đao
tạo công nghệ thông tin, c được chọn để dạy ngôn ngữ lập trình trước khi
dạy các ngôn ngữ khác, như C++, c# hay Java,... Thế nhưng, thực tế, C là môt
ngôn ngữ lập trình mạnh, nó được các nhà tin học chuyên nghiệp cũng như
cac lập trình viên, các nhà khoa học sử dụng để lập trình hệ thống, lập trinh
ứng dụng và giải quyết nhiều bài toán khoa học và kỹ thuật.
Giáo trình Kỹ thuật lập trình c này được hình thành qua nhiều năm giảng
dạy của các tác giả. Ngôn ngữ lập trình c là một môn học cơ sở trong chương
trình đào tạo kỹ sư, cử nhân tin học. Ở đây, các sinh viên được trang bị những
kiến thức cơ bản nhất vể lập trình, các kỹ thuật tổ chức dữ liệu. 6
Để đáp ứng nhu cầu học ngôn ngữ lập trình c của sinh viên cũng như nhu
cầu về tài liệu cho mọi người trong nhiều ngành khoa học và kỹ thuât cần
nghiên cứu c để giải quyết các bài toán của mình, chúng tôi biên soan CUOP
sach này. Nội dung cuốn sách gồm 15 chương và 13 phụ lục.
* Bell Lab là nơi quy tụ nhiêu nhà khoa học và nghiên cứu nổi tiếng, hàng đầu vế
lĩnh vực máy tính như: Dennis Ritchie - tác giả của c và đổng tác giả Unix Björne
Stroustrup - tác giả c++, Ken Thompson - đổng tác giả Unix.
{5}
Chương mô đẩu. Giới thiệu một môi trường viết mã nguồn khác với Turbo
c 2.0 truyền thống, phù hợp hơn với các hệ điểu hành Windows đang được
dùng phổ biến nhẫt hiện nay, như Windows 7, Windows 8.
Chương 1. Giới thiệu các khái niệm cơ bản, các chương trình c đơn giản và
cách thực hiện chúng trên máy.
Chương 2. Trình bày các kiểu dữ liệu, cách biểu diễn các giá trị dữ liệu và
cách tổ chức dữ liệu trong biến và mảng, cách xử lý dữ liệu đơn giản nhờ các
phép toán, biểu thức và câu lệnh gán.
Chương 3. Trình bày về biểu thức và các phép toán.
Chương 4. Trình bày các hàm vào ra dữ liệu từ bàn phím, màn hình.
Chương 5. Trình bày về các toán tử rất quan trọng dùng để thể hiện các
thuật toán, đó là các toán tử rẽ nhánh, toán tử tạo lập vòng lặp.
Chương 6. Trình bày cách tổ chức chương trình thành các hàm, các quy tắc
xây dựng và sử dụng hàm. Các vấn để hay và khó ở đây là con trỏ, con trỏ hàm
và kỹ thuật đệ quy.
Chương 7. Trình bày về một kiểu dữ liệu quan trọng là cấu trúc và hợp.
Củng sẽ nói vẽ các hàm trên cấu trúc, cấu trúc tự trỏ và danh sách liên kết.
Chương 8. Trình bày về việc quản lý màn hình và cách xây dựng cửa sổ.
Chương 9. Trình bày các hàm đồ họa để vẽ các hình cơ bản và kỹ thuật tạo
ảnh chuyển động.
Chương 10. Trình bày các thao tác trên tệp như: tạo mới một tệp, ghi dữ
liệu từ bộ nhớ lên tệp, đọc dữ liệu từ tệp vào bộ nhớ.
Chương 11. Trình bày vể cách lưu trữ dữ liệu và tổ chức bộ nhớ của chương
trình.
Chương 12. Trình bày các chỉ thị tiền xử lý giúp việc biên soạn, biên dịch
chương trình hiệu quả hơn.
Chương 13. Trình bày một số ví dụ hay như các hàm đưa thông tin trực tiếp
vào bộ nhớ.
Chương 14. Trình bày cách sử dụng các hàm viết bằng Assembler trong c.
Phụ lục 1 trình bày quy tắc xuống dòng và sử dụng các kí tự trống khi viết
chương trình.
Phụ lục 2 có thể dùng để tra cứu các hàm chuẩn thường dùng của c.
Phụ lục 3 trình bày các bảng mã ASCII và mã quét.
Phụ lục 4 hướng dẫn cách cài đặt Turbo c 2.0.
Phụ lục 5 giới thiệu chung.về môi trường kết hợp của c.
Phụ lục 6 trình bày vế cách sử dụng hệ soạn thảo c dùng để biên soạn
chương trình gốc.
Kỹ thuật ìập trinh c ị
{6}
Kỹ thuật lập trình c
Phụ lục 7 trình bày các dùng menu Project để dịch chương trình viết trên
nhiều tệp.
Phụ lục 8 hướng dẫn cách dùng trình biên dịch TCC để dịch (từ môi trường
DOS) các chương trình lớn viết trên nhiều tệp. Phương pháp này cho phép
biên dịch các chương trình rất lốn viết trên vài ngàn dòng lệnh.
Phụ lục 9 hướng dẫn phương pháp gỡ rối và chạy chưọng trình từng bước
để dò tìm lỗi chương trình.
Phu luc 10 trình bày 6 mô hình bộ nhớ của c. Cũng sẽ nói cách tạo tệp
chương trình đuôi COM bằng cách dịch theo mô hình Tiny trong chế độ dòng
lênh TCC khi biên dịch thường nhận được các tệp chương trình đuôi EXE.
Phu luc 11 trình bày tóm tắt các hàm của Turbo c theo thứ tự ABC.
Phu luc 12 trình bày cách xây dựng các hàm với số đối bất định, như các
hàm printf, scant của c. Công cụ chủ yếu được dùng là con trỏ và danh sách.
Phu lục 13 trình bày một số chương trình minh họa thuật toán đệ quy kiểu
quay lui và thuật toán quy hoạch động có tính chất kinh điển. Chương trình
được tổ chức thành nhiều hàm.
Trong quá trình viết, chúng tôi đã cố gắng để giáo trình được hoàn chỉnh,
song chac chắn không tránh khỏi thiếu sót, vì vậy rất mong nhận được sự góp
ý cua độc giả để cuốn sách ngày một hoàn thiện hơn.
Các tác giả
Ghi chú: Mã nguồn các chương trình trong cuôn sách này chỉ có thể chính thức được
tải vê tù website của Nhà sách Huy Hoàng tại: www.huyhoangbook.vn
{7}
Kỹ thuật lập trình c J
+ CHƯƠNG MỞ ĐẦU +
CODE::BLOCKS
Chương này sẽ giới một môi trường viết mã nguồn khác với
Turbo c 2.0 kinh điển, đó là Coder.Blocks - nó có dung lượng nhỏ
gọn, thân thiện trong viết mã, tích hợp trình biên dịch và có giao
diện bắt mắt, chạy tốt trên hệ điểu hành Windows 7, Windows 8.
§1. GIỚI THIỆU
Turbo c 2.0 là môi trường kinh điển để viết mã nguồn, biên dịch và chạy
các chương trình đối với lập trình ngôn ngữ c. Nó có tính lịch sử và rất tốt đối
với dạy và học. Các chương trình trong cuốn sách này đểu được thử nghiệm
trên Turbo c 2.0.
Tuy nhiên, hiện nay hệ điểu hành Windows 7, Windows 8 của hãng
Microsoft được sử dụng rộng rãi. Việc chạy Turbo c 2.0 với màn hình màu
xanh trên hệ điều hành này ít nhiều có tính cổ hủ. Chính vì thế, chúng tôi
chọn và giới thiệu thêm một môi trường viết mã, tích hợp biên dịch và chạy
khác với Turbo c 2.0 truyền thống, đó là Code::Blocks.
Các chương trình trong cuốn sách này chạy trên Code:Blocks hoàn toàn
tốt, chỉ có một vài khác biệt nhỏ không đáng kể. Khi biên dịch và chạy chương
trình, nếu có lỗi, chúng ta dễ dàng phát hiện và sửa, ví dụ: trong Code-Blocks
lệnh clrscrQ; không khả dụng, chúng ta xóa hoặc ghi chú dòng lệnh này, thì
mã nguổn sẽ chạy bình thường.
Code-Blocks có đặc điểm là mã nguồn mở và miễn phí. Nó có giao diện
đẹp và thân thiện hơn nhiều so với Turbo c 2.0 và nó cũng đủ nhỏ nếu so với
Visual Studio của Microsoft.
§2. CÀI ĐẶT
Phiên bản Code-Blocks chúng tôi sử dụng ở đây là bản 13.12. Các phiên
bản khác, việc cài đặt hoàn toàn tương tự.
{8}
Kỹ thuật lập trình c
Code::Blocks
The open source, cross-platform IDE
13.12
Sau khi chạy tệp cài đặt. Các hộp thoại của tiến trình cài đặt hiện ra, để mặc
định các thông số, lần lượt chọn Next > I Agree > Next > Install > No >
Next > Finish.
§3. SỬ DỤNG C ơ BẢN
1. Tạo mới một tệp chương trình
- Khởi động Code::Blocks.
- Vào File > New > Empty file. Hoặc kích chuột trái vào các biểu tượng
tương ứng. Hoặc sử dụng tổ hợp phím Ctrl + Shift + N.
- Viết mã nguồn của chương trình.
- Biên dịch và chạy chương trình: Vào Build > Build and run. Hoặc kích
chuột trái vào biểu tượng tương ứng trên thanh công cụ. Hoặc sử dụng phím
F9. Xem hình dưới đây.
mainx WtoWoHdp TSEflB B ET
File ịá ầ View Search Eroject guild Debug Fortran wxSrmth lo o k Tọọts* Pjugins Dog
2. Mở m ột tệp chương trình có sẵn
- Khởi động Code::Blocks.
- Vào File > Open. Hoặc kích chuột trái vào biểu tượng Open trên thanh
công cụ. Hoặc dùng phím tắt Ctrl + o.
- Chọn đến thư mục và tệp cẩn mở và chọn Open.
{9}
<ỹ thuật lập trình c
+ CHƯƠNG 1 +
CÁC KHÁI NIỆM C ơ BẢN
Trong chương này sẽ giới thiệu những thành phẩn cơ bản của
ngôn ngữ lập trình c (cũng như của bất kỳ ngôn ngữ lập trình nào
khác) đó là: tập ký tự, từ khóa và tên. Để có thể lập được một chương
trình đẩy đủ, chúng tôi cũng sẽ trình bày một số vấn để vế câu lệnh
gán, các câu lệnh vào ra, toán tử ếinclude và những quy tắc cần lưu
ý khi viết chương trình. Ngoài ra để giúp bạn đọc mau chóng tiếp
cận với máy, chúng tôi sê giới thiệu một sô chương trình đơn giản
nhưng hoàn chỉnh và cách vận hành chúng trên máy đề nhận được
kết quả cuối cùng. Tất cả những vấn đề nói trên là bổ ích và đáng
ghi nhớ vì chúng sẽ được thường xuyên sử dụng sau này. Đọc xong
chương này, bạn có thể lập được một số chương trình đơn giản và
biết cách thực hiện chương trình trên máy.
§1. TẬP KÝ Tự DÙNG TRONG NGÔN NGỮ
Mọi ngôn ngữ lập trình đều được xây dựng từ một bộ ký tự nào đó. Các
cý tự được nhóm lại theo nhiều cách khác nhau để lập lên các từ (xem Phụ
ục 1). Đến lượt mình, các từ lại được liên kết theo một qui tắc nào đó để tạo
:hành các cầu lệnh. Một chương trình bao gổm nhiều cầu lệnh và diễn đạt
■nọt thuật toán để giải một bài toán nào đó. Ngôn ngữ c được xây dựng trên
5Ộ ký tự sau:
26 chữ cái tiếng Anh viết hoa: A B c ... z
26 chữ cái tiếng Anh viết thường: a b c ... z
10 chữ số của hệ thập phân: 0 1 2 ... 9
Các ký hiệu toán học như: +-*/ = ( )
Ký tự gạch dưới: _ (chú ý phân biệt với ký tự - (dấu trừ))
Các ký hiệu đặc biệt khác như:. , ; : [ ] { } ? ..V..V..
Dấu cách (space) thực sự là một khoảng trống dùng để tách các từ. Ví dụ:
TA NOI gốm 6 ký tự, còn HANOI gồm 5 ký tự.
Chú ý: Khi viết chương trình, ta không được sử dụng bất kỳ ký hiệu nào
diác ngoài tập các ký tự nói trên.
10}
Kỹ thuật lập trình c
Chẳng hạn khi giải phương trình bậc hai:
ax2 + bx + c = 0
ta cẩn tính biệt thức:
A = b2 - 4ac
Ký tự A không cho phép dùng trong ngôn ngữ c, vì vậy ta phải dùng một
cách ký hiệu khác như d hay delta.
§2. T ừ KHÓA
Từ khoá là những từ dành riêng của ngôn ngữ lập trình được định nghĩa
trước với ý nghĩa hoàn toàn xác định. Từ khoá thường được dùng để khai báo
biến định nghĩa các kiểu dữ liệu, định nghĩa ra các toán tử, các hàm và viết
các cầu lện h ,...
Các từ khoá của Turbo c 2.0 bao gồm:
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
typedef union unsigned void
volatile while
Ỹ nghĩa và cách sử dụng của chúng sẽ được lẩn lượt giới thiệu ở các mục
sau. Ở đầy ta chỉ cần nhớ hai điếu:
Không được dùng từ khóa để đặt tên cho các hằng, biến, m ảng,...
Từ khóa phải được viết bằng chữ thường. Chẳng hạn không được viết
INT hay Int mà phải viết int.
§3. TÊN
Tên được dùng để xác định các đối tượng khác nhau trong một chương
trình. Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên con trỏ, tên tệp,
tên cấu trúc, tên n h ãn ,... Tên là một khái niệm rất quan trọng. Tên được đặt
theo quy tắc sau:
Tên là một dãy các ký tự: chữ, số và ký tự _ (dấu gạch dưới).
Ký tự đẩu của tên phải là chữ hoặc ký tự _
Không được trùng với từ khóa (xem §2).
{11}
Kỹ thuật tập trình c
Độ dài cực đại của tên mặc định là 32, nhưng có thể đặt lại một giá
trị từ 1 đen 32 trong chức năng: Options -> Compiler -> Source -> Identifier
length trong môi trường phát triển kết hợp của Turbo c 2.0 (xem Phụ lục 5).
Các ví dụ đúng về tên:
a_l, BETA, xl, delta_7, _xl
Các ví dụ sai về tên:
case (trùng với từ khóa)
3XYZ_7 (ký tự đầu tiên là số)
be ta (sử dụng khoảng trống)
f (x) (sử dụng dẫu ngoặc tròn)
r#3 (sử dụng ký tự #)
x-1 (sử dụng dấu trừ)
Chú ý: Trong các tên, chữ hoa và chữ thường được xem là khác nhau, như
vậy tên AB khác tên Ab khác tên ab. Trong c thường dùng chữ hoa e ạt ten
cho các hằng và dùng chữ thường để đặt tên cho hầu het các đoi tượng ^ ac
như biến, mảng, hàm, cấu trúc. Tuy nhiên đây không phai la đieu at uọc.
§4. Ví DỤ VỀ CHƯƠNG TRÌNH c
Dưới đây là các ví dụ nhằm minh họa cấu trúc của một chương tnnh C.
Bạn đọc dễ dàng hiểu được mỗi câu lệnh qua các chú thtch (cotnmen ) vie
giữa cặp dấu I* ... */
Chú ý: Các mã nguồn (source code) chúng tôi trình bày mọt kteu chư rten&
Tât cả các chương trình hoàn chỉnh đã được thử nghiệm chạy tren may V I
Turbo c 2.0.
Ví dụ 1: Viết chương trình cho hiện lên màn hình hai dòng chư:
TURBO c HAN HANH
LAM QUEN VOI BAN
Dưới đây là hai chương trình cùng thực hiện yêu cầu đề ra.
/* Chương trình in 2 dòng chữ. Bản 1 (010401B1.C) */
♦include "stdio.h" /* Sử dụng thư viện vào ra chuẩn */
#include "conio.h"
void main() /* Hàm chinh */
{
clrscrO; /* Xóa màn hình */
/* Xuống dòng (\n) và in: TURBO c HAN HANH */
print f ("\n TURBO c HAN HANH-");
/* Xuống dòng và in: LAM QUEN VOI BAN */
{12}
Kỹ thuật lập trình c
printf("\n LAM QUEN VOI BAN");
getchO; /* Tạm dừng máy để xem kết quả */
}
/* Chuông trinh in 2 dong chu. Ban 2 (010401B2.C) */
#include "stdio.h" /* Su dung thu vien vao ra chuan */
#include "conio.h"
void main() /* Ham chinh */
<
clrscr();
/■* Xuong dong, in: TURBO c HAN HANH,
lai xuong dong roi in: LAM QUEN VOI BAN */
printf("\n TURBO c HAN HANH \
\n LAM QUEN VOI BAN");
getch (); /* Tam dung may de xem ket qua */
}
Nhận xét: Mỗi cậu lệnh printf trong Bản 1 in được một dòng. Cầu lệnh
printf trong Bản 2 in được hai dòng.
Ví dụ 2: Chương trình dưới đây tính chu vi và diện tích hình tròn theo giá
trị bán kính r nhập từ bàn phím.
#include "stdio.h" /* (010402.C) */
#include "conio.h"
#include "math.h" /* Su dung them thu vien cac ham toan hoc
*/
void main()
{
íloat r, cv, dt; /* Khai bao 3 bien thuc */
clrscr ();
/* Dua ra man hinh thong bao ve yeu cau nhap so lieu */
printf ("\n Ban kinh r = ");
/* Nhap mot gia tri thuc dua vao bien r */
scanf("%f", &r);
/* Tinh chu vi va dien tích hình tron,
dung ham M_PI (PI) da dinh nghía trong math.h */
cv = 2 * M_PI * r; dt = M_PI * r * r;
/* In ket qua */
printf("\n Chu vi = %0.2f\n Dien tích = %0.2f", cv, dt) •
getch (); /* Tam dung may de xem ket qua */
}
{13}
§5. MỘT SỐ QUỴ TẮC CẨN NHỚ KHI VIẾT CHƯƠNG TRÌNH
Bây giờ chủng ta vừa giải thích một số vấn đề về ví dụ trên, vừa rút ra mọt
số chú ý khi viết chương trình.
Quy tắc đầu tiên cần nhớ là: Mỗi câu lệnh có thể viết trên một hay nhiều
dòng nhưng phải được kết thúc bằng d ấu ; (dấu chấm phẩy).
Nhìn vào ví dụ 2 của §4 ta thấy:
Câu lệnh printí được viết trên 2 dòng.
Hai câu lệnh gán để tính cv và dt được viết trên một dòng.
Một điểm cần lưu ý ở đây là cách viết một hằng xâu ký tự, day ky tự đạt
trong cặp dấu “ ... ” (dấu nháy kép) trên nhiều dòng. Để báo cho Tur o
biết một chuỗi ký tự vẫn còn tiếp tục ở dòng dưới, ta đặt thêm dau \ trươc 1
xuống dòng. Ví dụ:
printf("\n TURBO c HAN HANH \
\n LAM QUEN VOI BAN");
Những điểu nói trên nằm trong một nguyên lý tổng quát hơn se trinh bay
trong Phụ lục 1: Quy tắc sử dụng dấu cách (space) giữa các từ và quy tac xuong
dòng khi viết chương trình.
Quỵ tắc thứ 2 là quy tắc viết các lời chú thích. Các lời chu thích can được
đặt giữa cặp dấu /* ...* / và có thể được viết:
Trên một dòng.
Trên nhiều dòng.
Trên phần còn lại của một dòng.
Những lời giải thích không có tác dụng đối với sự làm viẹc cua chương
trình trên máy tính. Chúng chỉ có tác dụng đối với người đọc.
Quỵ tắc thứ 3 là quy tắc sử dụng các hàm chuẩn. Trong chương trinh tren
có dùng hàm chuẩn printf(). Hàm này có trong tệp stdio.h (trong thư mục cua
C), vì vậy ở đẩu chương trình cần viết:
#include "stdio.h"
Ta cũng chú ý rằng: Cuổi dòng này không có dấu ; (dấu chẩm phẩy) như
cuối một câu lệnh (lệnh #include trình bày trong Chương 12).
Tóm lại, trước khi sử dụng một hàm cần biết nó nằm trên tệp nào và phải
dùng toán tử #include để gắn tệp đó vào tệp chương trình.
Quỵ tẳc thứ 4 nói về cấu trúc của một chương trình. Một chương trình co
thể chỉ có một hàm chính (hàm mainO) như các ví dụ trên, hoặc có the them
vài hàm khác. Điều này sẽ được trình bày chi tiết trong Chương 6.
Kỹ thuật lập trình c j
{14}