GIÁO TRÌNH LẬP TRÌNH C++ – TTRRƯƯỜỜNNGG ĐĐẠẠII HHỌỌCC MMỞỞ TTPP. LÊ PHÚ HIẾU Biên soạn GIÁO TRÌNH – StuDocu

TTRRƯƯỜỜNNGG ĐĐẠẠII HHỌỌCC MMỞỞ TTPP.

LÊ PHÚ HIẾU
Biên soạn

GIÁO TRÌNH LẬP TRÌNH C++

TRƯỜNG ĐẠI HỌC MỞ TP

GIÁO TRÌNH LẬP TRÌNH C++

DÙNG CHO SINH VIÊN

THUỘC KHỐI NGÀNH KỸ THUẬT

KHÔNG CHUYÊN VỀ CÔNG NGHỆ THÔNG TIN

Tác giả Lê Phú Hiếu

THÀNH PHỐ HỒ CHÍ MINH

chương trình. Phần giải bài tập sẽ được thực hiện trong tài
liệu khác. Các chương trình ví dụ minh họa trong tài liệu đã
được thử nghiệm và chạy tốt trong môi trường Visual C++
6.

Giáo trình này có thể được dùng làm tài liệu cho sinh viên
tự học. Giảng viên cũng có thể sử dụng để tham khảo trong
giảng dạy môn lập trình.

Mặc dù có nhiều cố gắng nhưng không thể tránh khỏi thiếu
sót, rất mong nhận được sự nhận xét, phê bình của đồng
nghiệp và bạn đọc để tài liệu được hoàn thiện hơn.

Tác giả

Mục lục

BỘ GIÁO DỤC VÀ ĐÀO TẠO _________________________________ 1

CHƯƠNG 1. MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH _____ 13

1. Thuật toán (Algorithm) ________________________________ 13

  1. Khái niệm ________________________________________ 13 

  2. Các đặc trưng của thuật toán __________________________ 13 

  3. Các công cụ biểu diễn thuật toán _______________________ 14

 

2. Ngôn ngữ lập trình (NNLT) _____________________________ 15

3. Chương trình (máy tính) _______________________________ 16

4. Các bước xây dựng chương trình ________________________ 17

5. Câu hỏi và bài tập _____________________________________ 18

CHƯƠNG 2. CÁC YẾU TỐ CƠ BẢN CỦA NNLT C/C++ __________ 21

1. Bộ ký tự (character set) ________________________________ 21

2. Danh hiệu (identifier) __________________________________ 21

3. Từ khóa (keyword) ____________________________________ 22

4. Chú thích (comment) __________________________________ 22

5. Các kiểu dữ liệu cơ bản (base type) ______________________ 23

  1. Số nguyên ________________________________________ 23 

  2. Toán tử ép kiểu (đã nói ở trên) ________________________ 34 

  3. Toán tử “lấy địa chỉ của” ( & ) ________________________ 34 

  4. Toán tử sizeof: _____________________________________ 34

 

11. Độ ưu tiên và trật tự kết hợp các toán tử (precedence and
associativity) _____________________________________________ 35

12. Câu lệnh (statement, instruction) ________________________ 36

13. Xuất / Nhập dữ liệu đơn giản trong C/C++ ________________ 37

14. Một vài chương trình C/C++ đơn giản ___________________ 39

15. Câu hỏi ______________________________________________ 46

16. Bài tập về phép toán và biểu thức ________________________ 49

CHƯƠNG 3. CÁC CẤU TRÚC ĐIỀU KHIỂN (CONTROL
STRUCTURES) ____________________________________________ 62

1. Cấu trúc rẽ nhánh (if … then … else …) __________________ 62

2. Cấu trúc lựa chọn (switch.. .) ___________________________ 66

3. Cấu trúc lặp while (…) _________________________________ 69

4. Cấu trúc lặp do … while (…) ____________________________ 71

5. Cấu trúc lặp for (…) ___________________________________ 74

6. Câu lệnh break _______________________________________ 77

7. Câu lệnh continue (ít dùng) _____________________________ 78

8. Câu lệnh goto ________________________________________ 78

9. Câu hỏi ______________________________________________ 79

10. Bài tập ______________________________________________ 91

  1. Cấu trúc rẻ nhánh ___________________________________ 91 

  2. Cấu trúc lựa chọn ___________________________________ 92 

  3. Cấu trúc lặp _______________________________________ 93

 

CHƯƠNG 4. HÀM (FUNCTION) ____________________________ 102

1. Khái niệm __________________________________________ 102

2. Khai báo và định nghĩa hàm ___________________________ 103

3. Lệnh return _________________________________________ 104

4. Các dạng hàm _______________________________________ 104

  1. Hàm không có tham số _____________________________ 104 

  2. Hàm với nhiều tham số _____________________________ 106 

  3. Hàm nguyên mẫu (function prototype) _________________ 107 

  4. Tổ chức một chương trình “C/C++” (trên cùng 1 tập tin) ___ 108

 

5. Các phương pháp truyền tham số _______________________ 109

6. Phạm vi (scope) và cấp lưu trữ (storage class) của các đối
tượng __________________________________________________ 111

  1. Phạm vi _________________________________________ 111 

  2. Xóa một phần tử ra khỏi mảng. _______________________ 142 

  3. Tìm kiếm trên mảng. _______________________________ 143 

    • 6. Câu hỏi _____________________________________________ 5. Sắp xếp mảng. ____________________________________ 145 
    • 7. Bài tập _____________________________________________
  • _Mảng 1 chiều ______________________________________________
  • _Mảng 2 chiều ______________________________________________
  • _CHƯƠNG 6. CON TRỎ (POINTER) ___________________________
    • 1. Khái niệm __________________________________________
    • 2. Khai báo biến con trỏ _________________________________
    • 3. Truy xuất biến trỏ ___________________________________
    • 4. Số học con trỏ _______________________________________
    • 5. Liên hệ giữa con trỏ và mảng __________________________
    • 6. Con trỏ đa cấp _______________________________________
    • 7. Truyền tham số con trỏ cho hàm _______________________
    • 8. Mảng các con trỏ ____________________________________
    • 9. Từ khóa const với con trỏ _____________________________
    • 10. Cấp phát động _______________________________________
    • 11. Con trỏ hàm ________________________________________
    • 12. Con trỏ và chuỗi kí tự ________________________________
    • 13. Ứng dụng con trỏ ____________________________________
    • 14. Sơ lược về kiểu tham chiếu (Reference) – Chỉ có trong C++. _
    • 15. Bài tập _____________________________________________
  • _CHƯƠNG 7. KIỂU STRUCT _________________________________
    • 1. Khái niệm __________________________________________
    • 2. Khai báo và truy xuất biến struct trong ‘C’ ______________
    • 3. Lệnh typedef ________________________________________
    • 4. Kiểu enum __________________________________________
  • _Khai báo __________________________________________________
    • 5. Mảng các struct ______________________________________
    • 6. Con trỏ trỏ đến biến kiểu struct ________________________
    • 7. Truyền tham số kiểu struct cho hàm ____________________
    • 8. Kiểu union __________________________________________
    • 9. Bài tập _____________________________________________
  • _CHƯƠNG 8. File ___________________________________________
    • 1. Giới thiệu chung _____________________________________

**CHƯƠNG 1. MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ LẬP
TRÌNH

  1. Thuật toán (Algorithm)
  2. Khái niệm**
  • Thuật toán là khái niệm cơ sở của toán học và tin học.
  • Thuật toán là phương pháp thể hiện lời giải của vấn đề – bài
    toán.
  • Thuật toán là dãy các thao tác, các hướng dẫn rõ ràng, được
    sắp xếp theo một trình tự xác định, sao cho 2 bộ xử lý
    (người/máy) khác nhau, với cùng điều kiện đầu vào như
    nhau thì sau một số bước hữu hạn thực hiện, sẽ cho kết quả
    giống nhau mà không cần biết ý nghĩa của các thao tác này.
    Cần chú ý là không phải mọi dãy thao tác, chỉ dẫn nào cũng
    đều tạo ra thuật toán. Phương pháp nấu ăn, cách dùng thuốc,.
    .. đều không phải là thuật toán do các thao tác, các chỉ dẫn là
    không xác định, không rõ ràng.

1. Các đặc trưng của thuật toán

Tính xác định : Các thao tác của thuật toán phải xác định, không
được nhập nhằng, mơ hồ để có thể dễ dàng cài đặt trên một hệ tự động
hóa.

Tính dừng : Thuật toán phải dừng sau một số hữu hạn bước thực
hiện.

Tính đúng đắn : Thuật toán phải cho kết quả đúng theo yêu cầu
của bài toán đặt ra.

Tính phổ dụng : Thuật toán có thể được sử dụng lại để giải một
lớp bài toán tương tự.

Tính hiệu quả : Thuật toán cần tối ưu về sử dụng bộ nhớ và đáp
ứng yêu cầu của bài toán trong thời gian ngắn nhất có thể được. Thực
tế rất khó đạt được cả 2 yêu cầu này trong một thuật toán.

1. Các công cụ biểu diễn thuật toán

Ngôn ngữ tự nhiên : là ngôn ngữ liệt kê các bước, mô tả thuật
toán theo ngôn ngữ tự nhiên của con người.

Ví dụ: Thuật toán xác định trị lớn nhất trong 5 số nguyên.

B1. Gọi a, b, c, d, e là 5 biến lưu trữ các trị nguyên cho trước (nhập từ
bàn phím).

B2. Gọi max là biến lưu trữ trị lớn nhất trong 5 số nguyên trên, và giả
sử a có trị lớn nhất.

B3. Lần lượt so sánh trị của max với các biến b, c, d, e còn lại. Nếu trị
của max nhỏ hơn bất kỳ biến nào thì gán trị của biến đó cho max.

B4. Xuất kết quả trị biến max ra màn hình

Lưu đồ thuật toán hay sơ đồ khối (Flow chart) : là công cụ cho
phép biểu diễn thuật toán một cách trực quan. Thường chỉ có thể dùng
công cụ lưu đồ đối với các thuật toán tương đối ngắn, có thể được biểu
diễn trong một trang giấy. Các hình cơ bản sử dụng trong lưu đồ:

với sự phát triển của ngành tin học. Mỗi loại NNLT phù hợp với một
số lớp bài toán nhất định.

Phân loại NNLT:

  • Ngôn ngữ máy (machine language) hay còn gọi là NNLT
    cấp thấp có tập lệnh phụ thuộc vào một hệ máy cụ thể.
    Chương trình viết bằng ngôn ngữ máy sử dụng bảng chữ cái
    chỉ gồm 2 kí tự 0, 1. Chương trình ngôn ngữ máy được nạp
    trực tiếp vào bộ nhớ và thực hiện ngay.
  • Ngôn ngữ lập trình cấp cao nói chung không phụ thuộc vào
    loại máy tính cụ thể. Chương trình viết bằng NNLT cấp cao
    sử dụng bộ kí tự phong phú hơn, và phải được chuyển đổi
    sang dạng mã máy để máy tính có thể hiểu được bằng
    chương trình dịch. Một số NNLT cấp cao thông dụng hiện
    nay: Pascal, C, C++, Java, Smalltalk, Basic, Ruby, Fortran,
    Algol, Lisp, Prolog, Cobol, …

3. Chương trình (máy tính)

Là tập hợp hữu hạn các chỉ thị máy được bố trí, sắp xếp theo một
trật tự xác định, nhằm giải quyết yêu cầu của bài toán đặt ra. Chương
trình được viết bằng một NNLT cụ thể nào đó.

Các chương trình C/C++ (trong môi trường DOS) được tạo ra
bằng 1 trình soạn thảo văn bản (EDITOR) như: SK, NC Editor, VRES
… Hiện nay, các chương trình dịch đều tích hợp sẵn editor riêng cho
phép USER soạn thản, biên dịch, kiểm lỗi, liên kết và thực hiện
chương trình một cách dễ dàng.

Các chương trình này (mã nguồn – source code), thực chất là ở
dạng ngôn ngữ tự nhiên, do đó phải được biên dịch lại dưới dạng mã
máy (object code) mà máy tính có thể hiểu được. Việc này được thực
hiện bởi chương trình dịch.

Có 2 loại chương trình dịch:

Trình thông dịch (interpreter) : mỗi lệnh được dịch sang mã máy
và cho thực hiện ngay.

Trình biên dịch (compiler): toàn bộ chương trình nguồn được
dịch sang mã máy (tập tin), sau đó trình liên kết (linker) sẽ
kết nối các module chương trình để tạo thành tập tin EXE.

Nói chung, một chương trình máy tính được bố cục thành 3 phần:

4. Các bước xây dựng chương trình

B1. Xác định đúng yêu cầu của bài toán : Cần xác định phạm vi, các
giới hạn, ràng buộc, các giả thiết của bài toán. Đặc biệt cần khắc
phục sức ì về mặt tâm lý trong quá trình tìm hiểu bài toán.

B2. Xây dựng thuật giải : Cần có kiến thức liên quan đến vấn đề đang
giải quyết. Cần xác định rõ thuật toán sẽ tác động trên những đối
tượng (thông tin) nào? Có bao nhiêu đối tượng (biến) cần xử lý?
Mỗi biến có thể được lưu trữ dưới dạng nào, kiểu gì? Giá trị ban
đầu của các biến? Hình dung trước kết xuất DL sau khi xử lý sẽ
như thế nào?

Nhập Xử lý Xuất

  • Từ khóa là gì?

− Đặc điểm của các từ khóa trong NNLT “C/C++”?

  • Kiểu dữ liệu (Data type)

− Trình bày các kiểu dữ liệu đơn giản mà Anh (Chị) đã
biết.

  • Hằng (Constant)

− Hằng là gì?
− Hằng được sử dụng khi nào?
− Cho biết cách thức khai báo một hằng?
− Cho ví dụ về cách biểu diễn hằng nguyên, thực, ký tự,
chuỗi kí tự.

  • Biến (Variable)

− Biến là gì?
− Biến được sử dụng để làm gì?
− Cho biết cách thức khai báo một biến?
− Hãy cho biết cách thức làm thay đổi nội dung (giá trị) của
một biến?

  • Biểu thức (Expression)

− Biểu thức là gì?
− Kiểu của biểu thức do…………… .. quyết định?

  • Khi nào xảy ra việc ép kiểu tự động?

− Khi nào cần phải sử dụng toán tử ép kiểu?

− Trình bày nguyên tắc NNLT “C/C++” tính trị các biểu
thức?

  • Toán tử

− Hãy trình bày các toán tử mà Anh (Chị) biết.
− Cho ví dụ về toán tử điều kiện (.. .? .. ..: .. .).

  • Hãy viết biểu thức tương đương không có toán tử ‘!’:

−! (x <= 5)
−! (x > 5)
−! (x > 2 && y!= 3)
−! (x > 2 || y == 3)
−! (x == 1 &&! (x!= 3) || x > 10)
−! (x > 100 || x < 0 &&! (x == 0))

  • Câu lệnh (Statement, Instruction)

− Cho biết các loại câu lệnh trong “C/C++”? Cho ví dụ.