Siêu thị PDFTải ngay đi em, trời tối mất

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
PREMIUM
Số trang
439
Kích thước
14.2 MB
Định dạng
PDF
Lượt xem
1273

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}

Tải ngay đi em, còn do dự, trời tối mất!