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ẽ:
-
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ằng0x, 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) hay032UU(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>.
- Biểu diễn số nguyên ở các hệ đếm: hệ bát phân (octal - bắt đầu bằng số
-
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ữ.
-
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ảngarray, 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);).
- 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:
-
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úcHinhChuNhatvới các thuộc tínhint 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úcBooksvới bí danhBookgồm các trườngint id; char tieude[50]; char tacgia[50];).
- Kiểu liệt kê
-
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&=,|=,^=,<<=,>>=).
- Phân loại theo số lượng toán hạng: Toán tử 1 ngôi (
-
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.
- 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 (
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 = ++kso vớidem = 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
structvà đóng gói tên kiểu bằngtypedef, 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àmmain(), lệnh incout,printfvà lời gọi hệ thốngsystem("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
078hay 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áchBook), 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.
- 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 (
- 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đếnlong 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
structvàtypedeftạ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
- 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.
- 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++.
- 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:
- Nắm vững các kiểu dữ liệu cơ bản và bảng ký tự thoát.
- Làm chủ hệ thống toán tử, biểu thức và cơ chế ép kiểu.
- Ứ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.