Tổng quan về giáo trình

Giáo trình Kỹ thuật lập trình C: Căn bản và nâng cao là công trình học thuật do GS. Phạm Văn Ất làm chủ biên, cùng các đồng tác giả ThS. Nguyễn Hiếu Cường, Đỗ Văn Tuấn và Lê Trường Thông biên soạn. Xuất bản phẩm được Nhà xuất bản Bách khoa Hà Nội phối hợp cùng Công ty Cổ phần Văn hóa Huy Hoàng phát hành năm 2021 (Biên mục Thư viện Quốc gia Việt Nam: 005.1330711 - dc23 BKH0073p-CIP).

+-----------------------------------------------------------------------------------+
| THÔNG TIN XUẤT BẢN VÀ ĐẶC ĐIỂM HỌC THUẬT                                          |
+-----------------------------------------------------------------------------------+
| • Tác giả: GS. Phạm Văn Ất (chủ biên), Nguyễn Hiếu Cường, Đỗ Văn Tuấn,            |
|            Lê Trường Thông                                                        |
| • Nhà xuất bản: NXB Bách khoa Hà Nội & Công ty Văn hóa Huy Hoàng (2021)           |
| • Phân loại DDC: 005.1330711 (Ngôn ngữ lập trình / Giáo trình đại học)            |
| • Quy mô: 15 Chương lý thuyết & thực hành, 13 Phụ lục tra cứu chuyên sâu          |
| • Môi trường thực nghiệm: Turbo C 2.0 và Code::Blocks 13.12 (MinGW)               |
+-----------------------------------------------------------------------------------+

Trong chương trình đào tạo kỹ sư và cử nhân công nghệ thông tin tại Việt Nam, ngôn ngữ lập trình C giữ vị trí môn học cơ sở cốt lõi. Môn học này được bố trí giảng dạy ở giai đoạn đầu nhằm xây dựng nền móng tư duy thuật toán và kỹ thuật tổ chức dữ liệu trước khi sinh viên tiếp cận các ngôn ngữ lập trình hướng đối tượng hoặc bậc cao như C++, C# và Java.

Mục tiêu học tập của giáo trình tập trung vào việc:

  1. Trang bị cho người học các quy tắc cú pháp chuẩn của ngôn ngữ C.
  2. Rèn luyện kỹ năng phân bổ và kiểm soát bộ nhớ máy tính trực tiếp.
  3. Cài đặt các cấu trúc dữ liệu và giải thuật từ cơ bản đến phức tạp.

Giáo trình có quy mô gồm 15 chương lý thuyết kết hợp thực hành và 13 phụ lục chuyên đề. Điểm đặc trưng trong cấu trúc là sự kết hợp song song giữa môi trường kinh điển Turbo C 2.0 và môi trường mã nguồn mở hiện đại Code::Blocks 13.12, tạo điều kiện thuận lợi cho việc biên dịch và chạy thử nghiệm trên các hệ điều hành Windows 7 và Windows 8.


Nội dung kiến thức cốt lõi

Các chương và chủ đề chính

Nội dung giáo trình được thiết kế theo tiến trình phát triển từ mức độ cú pháp cơ sở đến can thiệp hệ thống và quản trị bộ nhớ:

  Cài đặt môi trường     Cơ sở dữ liệu,      Hàm, Con trỏ,     Tệp tin, Bộ nhớ,   Tra cứu hàm,
  & Thao tác I/O         Toán tử, Rẽ nhánh   Cấu trúc dữ liệu   Hợp ngữ Assembly   Mô hình bộ nhớ
  • Chương mở đầu và Chương 1 (Các khái niệm cơ bản): Thiết lập môi trường làm việc trên Code::Blocks 13.12 và Turbo C 2.0. Định nghĩa tập ký tự hợp lệ, tập hợp 32 từ khóa chuẩn (int, float, static, extern, struct, union, sizeof...), quy tắc đặt tên định danh (độ dài tối đa mặc định 32 ký tự), hàm điều khiển vào/ra (printf, scanf, fprintf) và quy trình biên dịch tệp mã nguồn gốc (.C) thành tệp thực thi (.EXE).
  • Chương 2 (Hằng, biến và mảng): Khảo sát các kiểu dữ liệu cơ bản, bảng mã ký tự ASCII, cách biểu diễn hằng số (hệ 10, hệ 8, hệ 16, dấu phẩy động), định nghĩa kiểu dữ liệu mới bằng typedef và enum. Phân định phạm vi hoạt động và vòng đời của biến tự động (cục bộ), biến ngoài (toàn cục) và biến tĩnh (static).
  • Chương 3 (Biểu thức và các phép toán): Cung cấp hệ thống toán tử số học, toán tử quan hệ, toán tử logic và các phép thao tác bit mức thấp (&, |, ^, ~, <<, >>).
  • Chương 5 (Toán tử rẽ nhánh và vòng lặp): Trình bày các cấu trúc điều khiển luồng thực thi thuật toán: if, switch, for, while và do...while.
  • Chương 6 và Chương 7 (Hàm, con trỏ và cấu trúc dữ liệu): Kỹ thuật tổ chức hàm, cơ chế truyền tham số, kỹ thuật đệ quy, con trỏ, con trỏ hàm, kiểu cấu trúc (struct), kiểu hợp (union), cấu trúc tự trỏ và cài đặt danh sách liên kết.
  • Chương 10, 11 và 14 (Tệp, bộ nhớ và hợp ngữ): Các thao tác đọc/ghi tệp dữ liệu trên đĩa, cơ chế tổ chức bộ nhớ chương trình, điều khiển biên dịch đa tệp bằng từ khóa extern, và kỹ thuật nhúng lệnh hợp ngữ Assembly trực tiếp qua từ khóa asm.
  • Hệ thống 13 phụ lục: Hướng dẫn sử dụng trình biên dịch TCC từ dòng lệnh DOS, gỡ rối (debug) từng bước (Phụ lục 9), 6 mô hình bộ nhớ (Tiny, Small, Medium, Compact, Large, Huge - Phụ lục 10), xây dựng hàm với số đối bất định (Phụ lục 12), và cài đặt thuật toán đệ quy quay lui, quy hoạch động (Phụ lục 13).

Kiến thức nền tảng được xây dựng

Giáo trình thiết lập hệ thống lý thuyết về tổ chức và lưu trữ dữ liệu trên máy tính:

+-------------------+-------------+------------------------------------+----------------+
| KIỂU DỮ LIỆU      | KÍCH THƯỚC  | PHẠM VI BIỂU DIỄN                  | SỐ CHỮ SỐ CÓ NGHĨA |
+-------------------+-------------+------------------------------------+----------------+
| [signed] char     | 1 Byte      | -128 đến 127                       | 256 ký tự      |
| unsigned char     | 1 Byte      | 0 đến 255                          | 256 ký tự      |
| int               | 2 Byte      | -32768 đến 32767                   | -              |
| unsigned int      | 2 Byte      | 0 đến 65535                        | -              |
| long [int]        | 4 Byte      | -2147483648 đến 2147483647         | -              |
| unsigned long     | 4 Byte      | 0 đến 4294967295                   | -              |
| float             | 4 Byte      | 3.4E-38 đến 3.4E+38                | 7 chữ số       |
| double            | 8 Byte      | 1.7E-308 đến 1.7E+308              | 15 chữ số      |
| long double       | 10 Byte     | 3.4E-4932 đến 1.1E+4932            | 19 chữ số      |
+-------------------+-------------+------------------------------------+----------------+

Song song với bảng phân loại kiểu dữ liệu, các nguyên lý cơ bản gồm có:

  • Tổ chức bộ nhớ mảng: Mảng là tập hợp phần tử liên tiếp trong bộ nhớ. Địa chỉ đầu của mảng tương đương với con trỏ trỏ tới phần tử thứ nhất (a == &a[0]).
  • Phạm vi khối lệnh (Block Scope): Biến khai báo trong khối lệnh { ... } chỉ tồn tại trong thời gian thực thi khối lệnh đó. Sự lồng nhau của các khối lệnh cho phép định nghĩa các biến cùng tên nhưng độc lập về địa chỉ và giá trị.
  • Thời gian tồn tại và khởi tạo: Biến tự động không được khởi tạo tự động sẽ chứa giá trị không xác định (rác); biến ngoài và biến tĩnh được lưu trữ suốt thời gian chạy chương trình và mặc định nhận giá trị 0 nếu không khởi tạo tường minh.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Viết đúng quy chuẩn cú pháp C; sử dụng chính xác các đặc tả định dạng vào/ra (%d, %6d, %0.2f, %c, %s, %x); khai thác toán tử sizeof để tính toán độ lớn bộ nhớ; thao tác trực tiếp với các bit nhị phân để trích xuất byte cao/thấp hoặc kiểm tra trạng thái bit.
  • Kỹ năng phân tích (Analytical skills): Phân tích sự ảnh hưởng của tầm vực biến trong các khối lồng nhau; phân biệt bản chất giữa việc truyền giá trị và truyền địa chỉ biến (&bien); tính toán độ phức tạp và chuyển đổi giải thuật đệ quy sang giải thuật lặp hoặc quy hoạch động.
  • Năng lực thực hành (Practical competencies): Quản lý dự án phần mềm gồm nhiều tệp mã nguồn thông qua công cụ Project hoặc trình biên dịch dòng lệnh TCC; sử dụng công cụ Debug để dò lỗi từng bước (Step-by-step trace); thiết lập các hàm có danh sách tham số bất định.

Phương pháp giảng dạy và học tập

                    MÔ HÌNH SƯ PHẠM VÀ THỰC HÀNH CỦA GIÁO TRÌNH
                                        
    - Cú pháp chuẩn                 - Chương trình hoàn chỉnh  - Biên dịch Code::Blocks / TC
    - Cấp phát bộ nhớ               - Chú thích /* ... */      - Quan sát kết quả màn hình
    - 13 Phụ lục kỹ thuật           - Phụ lục 9: Step trace    - Bài toán thực tế / Lập trình
    - Thư viện hàm chuẩn            - Sửa lỗi cú pháp          - Phát hiện lỗi sai logic

Cách tiếp cận sư phạm

Giáo trình triển khai phương pháp đi từ trực quan đến bản chất: mỗi khái niệm lý thuyết (như từ khóa, kiểu dữ liệu, cấu trúc lặp, con trỏ) đều đi kèm các ví dụ mã nguồn hoàn chỉnh có thể biên dịch trực tiếp. Mã nguồn được định dạng bằng kiểu chữ riêng biệt và giải thích chi tiết chức năng thông qua các khối chú thích /* ... */.

Bài tập và bài toán ứng dụng

Hệ thống bài tập cuối mỗi chương được thiết kế đa dạng nhằm củng cố cả tư duy thuật toán lẫn kỹ năng phát hiện lỗi:

  • Tính toán số học và kỹ thuật: Chương trình giải phương trình bậc hai $ax^2 + bx + c = 0$ (sử dụng hằng số $\Delta$ thay thế cho ký tự không hợp lệ); tính chu vi và diện tích hình tròn bằng hằng số M_PI trong thư viện math.h; tính hàm lũy thừa qua hàm pow(x, y).
  • Bài toán nghiệp vụ thực tế: Chương trình tính lương kỳ hai của cán bộ dựa trên dữ liệu nhập từ bàn phím theo công thức: $$\text{lk2} = \frac{\text{bl} \times n}{26} - \text{lk1}$$ (trong đó $\text{bl}$ là bậc lương, $n$ là số ngày công trong tháng, $\text{lk1}$ là tiền lĩnh kỳ một).
  • Thao tác mức bit: Đoạn mã kiểm tra trạng thái bit thứ $n$ của biến nguyên $a$:
    b = a >> n;
    if (0x01 & b) printf("\n Khac khong");
    else printf("\n Bang khong");
    
    hoặc trích byte thấp và byte cao bằng mặt nạ bit: b_thap = a & 0xff; và b_cao = a >> 8;.
  • Bài tập phát hiện lỗi sai: Yêu cầu người học nhận diện và sửa chữa các lỗi cú pháp thường gặp, chẳng hạn khai báo biến sau câu lệnh thực thi, gán chỉ số mảng vượt quá kích thước cấp phát (float a[3]; a[10] = 4;), hoặc in biến chưa được khởi tạo.

Hướng dẫn tự học và đánh giá

Người học được hướng dẫn phương pháp đối chiếu kết quả in ra trên màn hình với bảng kết quả mẫu trong giáo trình. Khi phát sinh lỗi biên dịch hoặc lỗi logic, người học sử dụng quy trình chạy từng bước (Trace) theo hướng dẫn tại Phụ lục 9 hoặc tra cứu chức năng hàm theo Phụ lục 2 và Phụ lục 11 để hoàn thiện chương trình.


Điểm nổi bật và cập nhật

  • Bổ sung môi trường phát triển Code::Blocks 13.12: Khác với các tài liệu truyền thống chỉ sử dụng Turbo C 2.0 trên môi trường DOS, giáo trình bổ sung Chương mở đầu hướng dẫn chi tiết quy trình cài đặt và vận hành Code::Blocks 13.12 trên hệ điều hành Windows 7 và Windows 8. Môi trường này cung cấp giao diện đồ họa hiện đại, tích hợp trình biên dịch GCC/MinGW và hỗ trợ phím tắt chuẩn (F9 để Build and Run, Ctrl + Shift + N để tạo tệp mới).
+---------------------------+------------------------------------+------------------------------------+
| TIÊU CHÍ SO SÁNH          | TURBO C 2.0 (KINH ĐIỂN)            | CODE::BLOCKS 13.12 (CẬP NHẬT)      |
+---------------------------+------------------------------------+------------------------------------+
| Giao diện / Nền tảng      | Màn hình DOS xanh cổ điển          | GUI đa nền tảng, Windows 7, 8      |
| Phím tắt biên dịch/chạy   | Ctrl + F9                          | F9 (Build and Run)                 |
| Trình biên dịch           | TCC tích hợp sẵn                   | GNU GCC / MinGW                    |
| Hỗ trợ hàm xóa màn hình   | Khả dụng lệnh `clrscr()`           | Không khả dụng `clrscr()`          |
| Khả năng quản lý dự án    | Menu Project, TCC command line     | Quản lý Workspace / Project trực quan|
+---------------------------+------------------------------------+------------------------------------+
  • Xử lý tính tương thích giữa các trình biên dịch: Giáo trình lưu ý rõ các điểm khác biệt khi chuyển đổi mã nguồn giữa hai môi trường. Điển hình như lệnh xóa màn hình clrscr() trong thư viện <conio.h> chỉ hoạt động trên Turbo C 2.0, khi chuyển sang Code::Blocks cần được loại bỏ hoặc chú thích lại để chương trình biên dịch thành công.
  • Khả năng kết nối hệ thống và lập trình cấp thấp: Giáo trình không dừng lại ở mức ngôn ngữ lập trình giải thuật đơn thuần mà đi sâu vào kiến trúc máy tính thông qua việc trình bày 6 mô hình quản lý bộ nhớ (Phụ lục 10), kỹ thuật tạo tệp nhị phân .COM bằng mô hình Tiny, cơ chế ghi thông tin trực tiếp vào vùng nhớ (Chương 13) và tích hợp khối lệnh hợp ngữ Assembly (Chương 14).

Đối tượng sử dụng giáo trình

  • Sinh viên chuyên ngành Công nghệ thông tin và Kỹ thuật: Sinh viên năm thứ nhất và năm thứ hai theo học các văn bằng Kỹ sư, Cử nhân Tin học, Điện tử - Viễn thông, Tự động hóa và Toán - Tin. Giáo trình cung cấp kiến thức nền tảng cho học phần Kỹ thuật lập trình và Ngôn ngữ lập trình C.
  • Yêu cầu kiến thức tiên quyết (Prerequisites): Người học cần nắm vững kiến thức toán học phổ thông (đại số, lượng giác, logic toán) và kỹ năng vận hành máy tính cơ bản. Không yêu cầu kiến thức lập trình từ trước.
  • Giảng viên đại học và cao đẳng: Giảng viên có thể sử dụng cấu trúc 15 chương để xây dựng đề cương bài giảng lý thuyết và khai thác hệ thống bài tập, câu hỏi sửa lỗi cuối chương cùng 13 phụ lục để biên soạn nội dung thực hành tại phòng máy.
  • Kỹ sư và người nghiên cứu tự học: Lập trình viên hệ thống, kỹ sư tính toán khoa học kỹ thuật cần tài liệu để nắm bắt sâu cấu trúc dữ liệu, giải thuật, thao tác bit và phương pháp can thiệp bộ nhớ mức thấp.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với những ai?

Giáo trình được thiết kế chuẩn mực cho sinh viên đại học, cao đẳng ngành Công nghệ thông tin và các ngành kỹ thuật cần học ngôn ngữ lập trình đầu tiên, đồng thời là tài liệu tham khảo cho kỹ sư nghiên cứu lập trình hệ thống và tính toán kỹ thuật.

2. Người học cần chuẩn bị kiến thức nền tảng nào?

Người học chỉ cần kiến thức toán học cơ sở và kỹ năng sử dụng máy tính căn bản. Các khái niệm lập trình được trình bày tuần tự từ tập ký tự, từ khóa, biến số đến cấu trúc dữ liệu phức tạp.

3. Giáo trình này có điểm gì khác biệt về mặt cấu trúc so với các tài liệu khác?

Giáo trình có hệ thống 13 phụ lục học thuật mở rộng, bao quát các vấn đề nâng cao như 6 mô hình bộ nhớ của C, biên dịch dòng lệnh DOS bằng TCC cho các chương trình lớn hàng ngàn dòng lệnh, cơ chế xây dựng hàm có số đối bất định, và thuật toán đệ quy quay lui kết hợp quy hoạch động.

+-----------------------------------------------------------------------------------+
| DANH MỤC 13 PHỤ LỤC TRA CỨU VÀ MỞ RỘNG TRONG GIÁO TRÌNH                           |
+-----------------------------------------------------------------------------------+
| Phụ lục 1: Quy tắc xuống dòng và sử dụng ký tự trống                              |
| Phụ lục 2: Bảng tra cứu các hàm chuẩn thường dùng của C                           |
| Phụ lục 3: Bảng mã ASCII và mã quét bàn phím                                      |
| Phụ lục 4: Hướng dẫn chi tiết cài đặt Turbo C 2.0 (thư mục C:\TC)                 |
| Phụ lục 5: Giới thiệu môi trường phát triển kết hợp của C                         |
| Phụ lục 6: Hướng dẫn sử dụng hệ soạn thảo mã nguồn C                              |
| Phụ lục 7: Sử dụng menu Project để biên dịch chương trình trên nhiều tệp           |
| Phụ lục 8: Dùng trình biên dịch TCC từ dòng lệnh DOS cho chương trình quy mô lớn   |
| Phụ lục 9: Phương pháp gỡ rối (Debug) và chạy từng bước để dò lỗi                 |
| Phụ lục 10: Chi tiết 6 mô hình bộ nhớ của C và kỹ thuật tạo tệp đuôi .COM         |
| Phụ lục 11: Tóm tắt danh mục hàm Turbo C theo thứ tự ABC                          |
| Phụ lục 12: Xây dựng hàm có số đối bất định (tương tự printf, scanf)             |
| Phụ lục 13: Minh họa thuật toán đệ quy quay lui và quy hoạch động kinh điển       |
+-----------------------------------------------------------------------------------+

4. Phương pháp tự học giáo trình như thế nào để đạt hiệu quả cao?

Người học nên cài đặt đồng thời Code::Blocks 13.12 và Turbo C 2.0, tự gõ lại các chương trình mẫu trong văn bản, đối chiếu kết quả hiển thị, thực hiện bài tập tìm lỗi sai cuối chương và áp dụng phương pháp gỡ rối từng bước theo Phụ lục 9.

5. Mã nguồn của giáo trình được cung cấp qua kênh nào?

Mã nguồn các chương trình mẫu trong giáo trình được lưu trữ và tải trực tiếp từ website chính thức của Nhà sách Huy Hoàng (huyhoangbook.vn) theo liên kết đính kèm hoặc quét mã QR in trên xuất bản phẩm.


Kết luận

Giáo trình Kỹ thuật lập trình C: Căn bản và nâng cao của GS. Phạm Văn Ất cùng các cộng sự là tài liệu học thuật hoàn chỉnh, kết hợp chặt chẽ giữa lý thuyết ngôn ngữ lập trình cấu trúc và kỹ thuật can thiệp bộ nhớ máy tính.

LỘ TRÌNH TIẾP CẬN KIẾN THỨC THEO GIÁO TRÌNH:

  Giai đoạn 1 (Chương Mở đầu - Chương 5)

  Giai đoạn 2 (Chương 6 - Chương 9)

  Giai đoạn 3 (Chương 10 - Chương 15 & 13 Phụ lục)

Toàn bộ hệ thống bài tập, mã nguồn thực nghiệm và bảng tra cứu phụ lục chuẩn mực trong giáo trình tạo thành một hệ thống tài liệu toàn diện, đáp ứng đầy đủ yêu cầu đào tạo môn học trong chương trình đại học và cao học kỹ thuật.