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

Tài liệu bài giảng môn học Kỹ thuật lập trình do tác giả Trần Quang biên soạn (bản quyền © 2016) là học liệu phục vụ đào tạo bậc đại học trong khối ngành Công nghệ thông tin và Kỹ thuật máy tính. Trong chương trình đào tạo, môn học Kỹ thuật lập trình giữ vị trí cầu nối quan trọng giữa học phần Nhập môn lập trình và các môn học chuyên sâu về sau như Cấu trúc dữ liệu và giải thuật hay Lập trình hướng đối tượng. Trọng tâm của học liệu là trang bị cho người học bản chất tổ chức và quản lý dữ liệu trong bộ nhớ máy tính thông qua hai ngôn ngữ nền tảng là C và C++.

Mục tiêu học tập của giáo trình hướng tới việc giúp người học:

  • Hiểu rõ cơ chế lưu trữ dữ liệu trong bộ nhớ RAM khi chương trình thực thi.
  • Phân biệt và sử dụng chính xác các hình thức biểu diễn dữ liệu: giá trị cố định (Literals/Fixed values), hằng số (Constants) và biến số (Variables).
  • Nắm vững hệ thống kiểu dữ liệu nguyên thủy (nguyên, thực, ký tự, void) và kiểu dữ liệu do người dùng tự định nghĩa (enum, struct).
  • Vận dụng thành thạo hệ thống toán tử, biểu thức và cơ chế chuyển đổi kiểu dữ liệu (chuyển đổi ngầm định và ép kiểu tường minh).

Về mặt cấu trúc, tài liệu được tiếp cận theo phương pháp từ cấp độ biểu diễn vật lý (bit, byte, hệ đếm bát phân, thập lục phân, địa chỉ bộ nhớ) đến cấp độ trừu tượng hóa dữ liệu (cấu trúc bản ghi, định danh kiểu). Điểm đặc sắc của học liệu nằm ở tính ngắn gọn, trực quan, cô đọng nội dung dưới dạng sơ đồ cú pháp, bảng tra cứu thông số kỹ thuật (kích thước lưu trữ, phạm vi giá trị) và các đoạn mã nguồn C/C++ chuẩn mực.


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

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

Nội dung trọng tâm được trích xuất trực tiếp từ Chương 03: Tổ chức dữ liệu trong chương trình, bao gồm 8 phân vùng kiến thức có tính liên kết chặt chẽ:

  1. Dữ liệu cố định (Literals/Fixed Values) và Hằng số (Constants):

    • Biểu diễn số nguyên ở các hệ đếm: hệ bát phân (octal - bắt đầu bằng số 0, ví dụ: 0165, -0203), hệ thập lục phân (hexadecimal - bắt đầu bằng 0x, ví dụ: 0x3D, -0x3AF8), hệ thập phân (decimal, ví dụ: 169, -2053).
    • Biểu diễn số thực dấu chấm động (floating point, ví dụ: 3.1E-9).
    • Quy tắc sử dụng hậu tố (suffix) xác định kiểu số nguyên: U (Unsigned) và L (Long), ví dụ: 30 (int), 30u (unsigned int), 30l (long), 30ul (unsigned long), đồng thời chỉ rõ các trường hợp không hợp lệ như 078 (chứa chữ số 8 ngoài hệ bát phân) hay 032UU (lặp lại hậu tố).
    • Ký tự (đặt trong nháy đơn '', ví dụ: 'A', '7', '\101') và chuỗi ký tự (đặt trong nháy kép "", ví dụ: "Dai Hoc Bach Khoa", "LAP TRINH C/C++").
    • Bảng ký tự điều khiển (Escape sequence): \\ (ký tự \), \' (nháy đơn), \" (nháy kép), \? (dấu hỏi), \a (chuông cảnh báo), \b (lùi một khoảng trắng), \f (sang trang), \n (xuống dòng mới), \r (về đầu dòng), \t (tab ngang), \v (tab dọc), \ooo (số bát phân 1-3 chữ số), \xhh (số thập lục phân).
    • Khai báo hằng qua từ khóa const (cú pháp: const <type> <name> = <value>;) hoặc chỉ thị tiền xử lý #define <ConstName> <value>.
  2. Biến số và quản lý bộ nhớ:

    • Bản chất của biến là vùng nhớ được đặt tên trong RAM để đọc/ghi dữ liệu thay cho địa chỉ vật lý.
    • Cú pháp khai báo biến: <type> <VariableName> [=<ConstExpr>];.
    • Các hình thức khai báo đặc biệt: biến từ module khác (extern <type> <variable>;) và biến tĩnh nội bộ (static <type> <variable> [=<ConstExpr>];).
    • Quy tắc đặt tên định danh: ký tự đầu tiên phải là chữ cái hoặc dấu gạch dưới (_), các ký tự tiếp theo là chữ cái, chữ số hoặc _; tuyệt đối không chứa ký tự đặc biệt (!@#$%^&*...) và không trùng với bảng từ khóa ngôn ngữ.
  3. Hệ thống kiểu dữ liệu:

    • Phân loại 3 nhóm chính: Kiểu cơ bản (fundamental), kiểu người dùng định nghĩa (user-defined: struct, enum), kiểu dẫn xuất (derived: mảng array, con trỏ pointer).
    • Kiểu số nguyên: char (1 byte, phạm vi -128 đến 127 hoặc 0 đến 255), unsigned char (1 byte, 0 đến 255), signed char (1 byte, -128 đến 127), int (2 hoặc 4 bytes, từ -32,768 đến 32,767 hoặc -2,147,483,648 đến 2,147,483,647), unsigned int (0 đến 65,535 hoặc 0 đến 4,294,967,295), short (2 bytes), unsigned short (2 bytes), long (4 bytes), unsigned long (4 bytes).
    • Toán tử/hàm sizeof() đo kích thước bộ nhớ và quy tắc ràng buộc chuẩn:
      $$1 == \text{sizeof(char)} \le \text{sizeof(short)} \le \text{sizeof(int)} \le \text{sizeof(long)} \le \text{sizeof(long long)}$$
    • Kiểu số thực: float (4 bytes, độ chính xác 6 chữ số thập phân), double (8 bytes, độ chính xác 15 chữ số thập phân), long double (10 bytes, độ chính xác 19 chữ số thập phân, phạm vi $3.4\text{E}-4932$ đến $1.1\text{E}+4932$), hỗ trợ qua thư viện chuẩn <float.h>.
    • Kiểu void: sử dụng cho hàm không trả về giá trị (void exit(int status);), hàm không nhận tham số (int rand(void);), và con trỏ tổng quát (void *malloc(size_t size);).
  4. Kiểu dữ liệu do người dùng định nghĩa và từ khóa typedef:

    • Kiểu liệt kê enum: tập hợp các hằng số nguyên có tên định danh, gán tự động tăng dần từ 0 hoặc gán thủ công (ví dụ: enum Days { sun=1, mon, tue, wed, thu, fri, sat };).
    • Kiểu cấu trúc struct: kết hợp nhiều thành phần dữ liệu có kiểu khác nhau thành một kiểu phức hợp mới (ví dụ minh họa: cấu trúc HinhChuNhat với các thuộc tính int dai; int rong;).
    • Từ khóa typedef: định nghĩa bí danh mới cho kiểu dữ liệu có sẵn (ví dụ: typedef unsigned char BYTE; hoặc định nghĩa cấu trúc Books với bí danh Book gồm các trường int id; char tieude[50]; char tacgia[50];).
  5. Toán tử và biểu thức:

    • Phân loại theo số lượng toán hạng: Toán tử 1 ngôi (-, !, ++, --), 2 ngôi (*, %, +, -), 3 ngôi (toán tử điều kiện: condition ? result1 : result2).
    • Các nhóm toán tử: Số học (+, -, *, /, %), gán và gán phức hợp (=, +=, -=, *=, /=, %=), toán tử tăng/giảm tiền tố (++k, --k) và hậu tố (k++, k--), toán tử so sánh (==, !=, >, <, <=, >=), toán tử luận lý (!, &&, ||), toán tử thao tác bit (Bitwise: &, |, ^, ~, <<, >>, cùng các phép gán bit &=, |=, ^=, <<=, >>=).
  6. Chuyển đổi kiểu dữ liệu (Type Conversion):

    • Chuyển đổi ngầm định (Implicit conversion): xảy ra tự động khi kiểu nguồn có kích thước bit nhỏ hơn kiểu đích (char $\to$ short $\to$ int $\to$ long long $\to$ double).
    • Ép kiểu tường minh (Explicit type casting): sử dụng cú pháp dạng hàm int(x) hoặc dạng C truyền thống (int)x.

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

Học liệu xây dựng các nguyên lý lập trình hệ thống cốt lõi:

  • Cơ chế biểu diễn số học dưới cấp độ bit: Phân biệt ý nghĩa của bit có trọng số lớn nhất (MSB - Most Significant Bit) giữa số nguyên có dấu (signed - bit MSB biểu thị dấu âm/dương) và không dấu (unsigned - bit MSB tham gia vào độ lớn giá trị).
  • Mô hình cấp phát bộ nhớ tĩnh và tự động: Cơ chế chương trình tự động cấp phát ô nhớ khi phát hiện lệnh khai báo biến và quy tắc liên kết bộ nhớ giữa các file mã nguồn qua extern.
  • Đại số logic và bảng chân trị: Định nghĩa giá trị boolean trong C/C++ (mọi giá trị khác 0 là true, giá trị bằng 0 là false) làm cơ sở thực thi các toán tử luận lý &&, ||, !.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật: Khai báo, khởi tạo và thao tác chuẩn xác trên các kiểu dữ liệu sơ cấp; sử dụng đúng các ký tự thoát và hậu tố hằng số; xây dựng các biểu thức tính toán nhiều ngôi phức tạp.
  • Kỹ năng phân tích: Đánh giá thứ tự ưu tiên của toán tử, tính toán chính xác sự biến đổi giá trị của biến khi sử dụng toán tử tiền tố/hậu tố trong biểu thức gán (dem = ++k so với dem = k--).
  • Năng lực thực hành: Tự thiết kế các kiểu dữ liệu bản ghi bằng struct và đóng gói tên kiểu bằng typedef, tối ưu hóa tài nguyên bộ nhớ thông qua việc lựa chọn phạm vi kiểu số nguyên và số thực phù hợp.

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

Giáo trình áp dụng phương pháp sư phạm diễn dịch: trình bày khái niệm nền tảng, định nghĩa cú pháp tổng quát, minh họa qua ví dụ mã nguồn cụ thể và đối chiếu các trường hợp biên/sai cú pháp.

  • Ví dụ minh họa trực tiếp: Tác giả tích hợp các đoạn chương trình hoàn chỉnh sử dụng thư viện <iostream>, <string.h> cùng hàm main(), lệnh in cout, printf và lời gọi hệ thống system("pause"); để người học quan sát trực quan kết quả.
  • Bài tập đối chiếu tính hợp lệ: Tài liệu đưa ra các trường hợp sai điển hình (như khai báo sai hệ đếm 078 hay lặp hậu tố 032UU) để rèn luyện tư duy biên dịch và kiểm soát lỗi tĩnh.
  • Phương pháp đánh giá:
    • Kiểm tra lý thuyết: Yêu cầu tính toán giá trị biểu thức logic, xác định giá trị của biến sau các phép gán kết hợp (+=, *=, %=), chuyển đổi hệ cơ số bát phân/thập lục phân.
    • Kiểm tra thực hành: Xây dựng cấu trúc dữ liệu cho bài toán thực tế (quản lý hình học phẳng HinhChuNhat, quản lý thông tin sách Book), thao tác gán và truy xuất trường dữ liệu qua toán tử chấm (.), thực hiện ép kiểu an toàn.
  • Hướng dẫn tự học: Người học cần chủ động cài đặt các đoạn mã ví dụ vào môi trường phát triển (IDE), sử dụng toán tử sizeof() để kiểm tra kích thước các kiểu dữ liệu thực tế trên hệ điều hành đang dùng, và viết các chương trình kiểm chứng bảng chân trị của các phép toán bitwise (&, |, ^, ~, <<, >>).

Điểm nổi bật và tính ứng dụng

Tài liệu thể hiện rõ các quy chuẩn kỹ thuật của ngôn ngữ C/C++ chuẩn:

  • Tính chính xác về mặt kỹ thuật: Liệt kê đầy đủ các bảng tham chiếu chuẩn gồm 13 ký tự thoát (escape sequences), bảng dung lượng bộ nhớ từ char, short, int, long đến long double, và chỉ định rõ thư viện hỗ trợ <float.h>.
  • Rõ ràng trong phân định ngữ nghĩa: Phân tách mạch lạc giữa hai khái niệm dễ nhầm lẫn là giá trị cố định (Literal), hằng số có tên (Constant) và biến số (Variable).
  • Trực quan hóa toán tử cấp thấp: Trình bày chi tiết bảng chân trị của từng bit cho các phép toán AND, OR, XOR, NOT, giúp người học nắm bắt cơ chế thao tác dữ liệu ở cấp độ phần cứng.
  • Tính ứng dụng thực tế: Kỹ thuật tổ chức dữ liệu qua struct và typedef tạo nền tảng trực tiếp cho việc xử lý các tệp dữ liệu, lập trình nhúng, quản lý bộ đệm I/O và chuyển tiếp sang lập trình hướng đối tượng với lớp (class) trong C++.

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

  1. Sinh viên đại học:
    • Sinh viên năm thứ nhất hoặc năm thứ hai chuyên ngành Khoa học Máy tính, Kỹ thuật Phần mềm, Công nghệ Thông tin, Hệ thống Thông tin, Kỹ thuật Mạng và An toàn Thông tin.
    • Điều kiện tiên quyết: Đã tiếp cận kiến thức tin học đại cương, hiểu biết cơ bản về biểu diễn nhị phân và tư duy giải thuật sơ cấp.
  2. Giảng viên:
    • Sử dụng làm đề cương bài giảng lý thuyết trên lớp và tài liệu hướng dẫn bài tập phòng máy cho học phần Kỹ thuật lập trình hoặc Cơ sở lập trình C/C++.
  3. Người tự học và nghiên cứu:
    • Dùng làm tài liệu tra cứu nhanh về cú pháp, kích thước kiểu dữ liệu, các phép toán thao tác bit và cơ chế ép kiểu trong C/C++.

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

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

Tài liệu được thiết kế cho sinh viên đại học khối ngành công nghệ - kỹ thuật đang học môn Kỹ thuật lập trình, cũng như người học cần tài liệu chuẩn hóa về tổ chức dữ liệu và quản lý bộ nhớ trong C/C++.

2. Cần kiến thức nền nào trước khi học tài liệu này?

Người học cần nắm được kiến thức tin học căn bản, các hệ đếm cơ số (nhị phân, bát phân, thập phân, thập lục phân) và các khái niệm sơ khởi về giải thuật trước khi đi sâu vào tổ chức dữ liệu.

3. Điểm khác biệt của tài liệu so với các bài giảng nhập môn thông thường là gì?

Tài liệu đi sâu vào bản chất vật lý của dữ liệu trên RAM, phân tích chi tiết bit MSB, cung cấp bảng đặc tính kỹ thuật chính xác của các kiểu dữ liệu số nguyên/số thực, và hệ thống hóa toàn diện các toán tử thao tác bit (bitwise operators).

4. Làm sao để tự học hiệu quả với tài liệu này?

Người học nên kết hợp đọc lý thuyết với việc gõ và chạy trực tiếp từng ví dụ mã nguồn trên trình biên dịch C/C++; chủ động dùng hàm sizeof() để in kích thước bộ nhớ trên máy tính cá nhân và giải lại các bài tập tính giá trị biểu thức.

5. Có tài liệu bổ trợ nào kèm theo nội dung này?

Nội dung bài giảng liên kết với các thư viện chuẩn của C/C++ như <iostream>, <string.h>, <float.h> và các chương tiếp theo của học phần Kỹ thuật lập trình (như mảng, con trỏ, hàm, tập tin).


Kết luận

Chương 03: "Tổ chức dữ liệu trong chương trình" thuộc học phần Kỹ thuật lập trình của tác giả Trần Quang (2016) cung cấp hệ thống lý thuyết chuẩn xác, chặt chẽ về cách thức biểu diễn và xử lý dữ liệu trong C/C++.

Lộ trình học tập đề xuất:

  1. Nắm vững các kiểu dữ liệu cơ bản và bảng ký tự thoát.
  2. Làm chủ hệ thống toán tử, biểu thức và cơ chế ép kiểu.
  3. Ứng dụng kiểu dữ liệu tự định nghĩa (struct, enum, typedef) vào giải quyết bài toán quản lý thông tin phức hợp.

Người học nên kết hợp tài liệu này với tài liệu đặc tả chuẩn ngôn ngữ C/C++ và môi trường biên dịch tiêu chuẩn để tối ưu hóa hiệu quả thực hành.