Giáo Trình Kỹ Thuật Lập Trình C (Căn Bản & Nâng Cao) - GS. Phạm Văn Ất

Tài liệu Kỹ thuật lập trình c: từ cơ bản đến nâng cao toàn tập tổng hợp lý thuyết và thực hành, phục vụ học tập ngành tại Việt Nam

Trường đại học

Đại học Quy Nhơn

Chuyên ngành

Công nghệ thông tin

Người đăng

Ẩn danh

Thể loại

Giáo trình

2020

439
0
0

Phí lưu trữ

75 Point

Tóm tắt

I. Giới Thiệu Về Ngôn Ngữ Lập Trình C

Ngôn ngữ lập trình C ra đời vào những năm đầu của thập niên 70 tại Bell Lab, được tạo ra bởi Dennis Ritchie với mục đích ban đầu là viết hệ điều hành UNIX. Vì những ưu điểm vượt trội, C nhanh chóng lan rộng ra khắp thế giới và trở thành một trong những ngôn ngữ lập trình quan trọng nhất. Tại các trường đại học, C được chọn làm ngôn ngữ cơ sở để dạy lập trình trước khi học C++, C# hay Java. Lập trình C là một môn học cơ bản trong chương trình đào tạo kỹ sư, cử nhân công nghệ thông tin, giúp sinh viên nắm vững kiến thức cơ sở về lập trình và tổ chức dữ liệu.

1.1. Lịch Sử Phát Triển Của C

Ngôn ngữ C được phát triển tại Bell Lab, nơi quy tụ những nhà khoa học hàng đầu. Ban đầu, C được thiết kế để viết hệ điều hành UNIX, nhưng nhờ tính linh hoạt và hiệu quả, nó đã vượt ra khỏi phòng thí nghiệm. Ngày nay, C là ngôn ngữ lập trình mạnh được chuyên gia, lập trình viên chuyên nghiệp sử dụng để phát triển hệ thống và ứng dụng.

1.2. Tầm Quan Trọng Của C Trong Đào Tạo

Ở Việt Nam, kỹ thuật lập trình C được chọn làm môn học bắt buộc tại các trường đại học công nghệ thông tin. Lập trình C cơ bản cung cấp nền tảng vững chắc để học sinh hiểu về cấu trúc chương trình, quản lý bộ nhớ và thuật toán. Nó là tiền đề để học các ngôn ngữ lập trình cao cấp khác.

II. Nội Dung Cơ Bản Của Kỹ Thuật Lập Trình C

Giáo trình kỹ thuật lập trình C bao gồm 15 chương chi tiết với 13 phụ lục hỗ trợ. Nội dung được chia thành hai phần chính: cơ bản và nâng cao. Phần cơ bản giới thiệu các khái niệm như kiểu dữ liệu, biến, mảng, biểu thức và câu lệnh điều khiển. Phần nâng cao đi sâu vào con trỏ, hàm, cấu trúc dữ liệu, xử lý tệp và lập trình hệ thống. Lập trình C từ cơ bản đến nâng cao giúp học viên từng bước xây dựng kỹ năng từ dễ tới khó, áp dụng vào giải quyết các bài toán thực tế.

2.1. Phần Cơ Bản Của C

Kỹ thuật lập trình C cơ bản bao gồm: kiểu dữ liệu (int, float, char), cách khai báo biến, sử dụng mảng lưu trữ dữ liệu, các phép toán số học và logic, biểu thức và câu lệnh gán. Toán tử rẽ nhánh (if-else) và toán tử vòng lặp (for, while) là các khái niệm quan trọng. Học viên cũng học cách nhập xuất dữ liệu từ bàn phím và màn hình.

2.2. Phần Nâng Cao Của C

Lập trình C nâng cao tập trung vào con trỏ, hàm, đệ quy, cấu trúc dữ liệu và tệp. Con trỏ trong C là một chủ đề phức tạp nhưng rất quan trọng. Hàm và đệ quy giúp tổ chức chương trình hiệu quả. Cấu trúc và hợp cho phép quản lý dữ liệu phức tạp. Xử lý tệp cung cấp kỹ năng lưu trữ dữ liệu bền vững.

III. Các Chủ Đề Quan Trọng Trong Lập Trình C

Lập trình C có nhiều chủ đề quan trọng cần nắm vững. Con trỏ (pointer) là nền tảng của nhiều kỹ thuật lập trình nâng cao, cho phép truy cập và thao tác trực tiếp bộ nhớ. Hàm (function) giúp modularize code, tăng tính tái sử dụng và dễ bảo trì. Đệ quy (recursion) là kỹ thuật mạnh để giải quyết bài toán có tính chất tự tương tự. Cấu trúc dữ liệu như mảng, danh sách liên kết, stack và queue là công cụ không thể thiếu. Xử lý tệp cho phép làm việc với dữ liệu trong bộ nhớ ngoài bền vững.

3.1. Con Trỏ Và Quản Lý Bộ Nhớ

Con trỏ trong C là biến lưu địa chỉ bộ nhớ của một biến khác. Kỹ thuật con trỏ cho phép truy cập động bộ nhớ, tạo cấu trúc dữ liệu linh hoạt. Toán tử & (address-of) lấy địa chỉ, toán tử * (dereference) lấy giá trị. Cấp phát bộ nhớ động với malloc/free là kỹ năng quan trọng trong lập trình C nâng cao.

3.2. Hàm Đệ Quy Và Cấu Trúc Dữ Liệu

Hàm trong C giúp chia chương trình thành các module nhỏ, dễ kiểm tra và tái sử dụng. Đệ quy là kỹ thuật gọi hàm từ chính nó, hiệu quả cho các bài toán như tính giai thừa, Fibonacci. Cấu trúc dữ liệu như danh sách liên kết, stack, queue được xây dựng từ con trỏ, cho phép lưu trữ và xử lý dữ liệu linh hoạt.

IV. Ứng Dụng Thực Tiễn Và Kỹ Năng Lập Trình C

Kỹ thuật lập trình C không chỉ là lý thuyết mà còn cần thực hành thường xuyên. Lập trình C từ cơ bản đến nâng cao cung cấp các ví dụ thực tế, bài tập ứng dụng để học viên rèn luyện kỹ năng. Xử lý tệp trong C cho phép tạo ứng dụng quản lý dữ liệu, cơ sở dữ liệu đơn giản. Kỹ thuật lập trình hệ thống sử dụng C để viết driver, hệ điều hành, phần mềm tối ưu hiệu suất. Học viên cũng học chỉ thị tiền xử lý để biên dịch chương trình hiệu quả, sử dụng thư viện chuẩn để phát triển ứng dụng nhanh chóng.

4.1. Thực Hành Và Dự Án Lập Trình

Lập trình C thực hành yêu cầu viết code, biên dịch, chạy chương trình trên máy tính. Môi trường lập trình C hiện đại như Visual Studio Code hay Dev-C++ thay thế Turbo C truyền thống. Bài tập lập trình C từ cơ bản (tính tổng, sắp xếp) đến phức tạp (xây dựng danh sách liên kết) giúp rèn luyện tư duy thuật toán.

4.2. Hướng Phát Triển Và Học Tập Tiếp Theo

Sau khi nắm vững lập trình C cơ bản và nâng cao, học viên có thể chuyển sang C++, C#, Java. Kỹ thuật lập trình C là nền tảng vững chắc cho các ngôn ngữ lập trình khác. Lập trình hệ thống, ứng dụng desktop, web service đều yêu cầu kiến thức C. Tiếp tục học cấu trúc dữ liệu, thuật toán, lập trình cơ sở dữ liệu sẽ giúp trở thành lập trình viên chuyên nghiệp.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI. Nếu bạn thấy nội dung không chính xác hoặc có vấn đề, vui lòng Báo lỗi nội dung.

21/12/2025

Trích đoạn nội dung tài liệu

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. 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 Bc. 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 n h ư:. 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. 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 c d ecl 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 ản g ,. 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. 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. 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.

V í DỤ VỀ CHƯƠNGTRÌNHc Dưới đây là các ví dụ nhằm m inh họa cấu trúc của một chương tn n h 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. 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ữ.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.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 */ } N hậ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.h" /* Su dung them thu vien cac ham toan hoc */ void m a in() { í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", cv, dt) • getch (); /* Tam dung may de xem ket qua */ } {13} Kỹ thuật lập trình c j §5. M ỘT SỐ QUỴ TẮC CẨN N H Ớ 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). N hì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.

{14 } Kỹ thuật lập trình c §6. KHAI BÁO VÀ TOÁN TỬ GÁN Vấn đê' khai báo sẽ nói kỹ trong Chương 2. Ở đây chúng ta chỉ cần biết một số điều sơ lược. Thứ nhất là: Mọi biến trước khi sử dụng đều phải khai báo để xác định kiểu của nó.

Để khai báo các biến nguyên (kiểu int) ta dùng từ khoá int. Đối với biến thực (kiểu float) ta dùng từ khóa float. Ví dụ: int a, b, c; /* Khai báo các biến a, b, c kiểu int */ float X , y, z; /* Khai báo các biến X , y, z kiểu float */ Sự khác nhau giữa biến kiểu int và biến kiểu float là ở chỗ: biến kiểu int luôn luôn nhận giá trị nguyên trong quá trình tính toán còn biến kiểu float có thể nhận cả các giá trị không nguyên. Cầu lệnh gán sẽ nói kỹ trong Chương 2.

Ở đây ta có thể hiểu toán tử gán có dạng: b = bt; Trong đó b là một biến, còn bt là một biểu thức toán học nào đó. Tác dụng của câu lệnh này là: Trước tiên tính biểu thức bt và sau đó gán giá trị tính được cho biến b. Ví dụ: Sau khi thực hiện đoạn chương trình: float x; X = 1 0. 5; biến X sẽ nhận giá trị là 18.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ