Tải bản đầy đủ (.doc) (106 trang)

bài giảng ngôn ngữ lập trình bậc cao c++ - pgs.ts nguyễn hữu công

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1013.41 KB, 106 trang )

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP
KHOA ĐIỆN TỬ
BỘ MÔN KỸ THUẬT PHẦN MỀM
BÀI GIẢNG MÔN HỌC
NGÔN NGỮ LẬP TRÌNH BẬC CAO
Theo chương trình 150 TC
Số tín chỉ: 03
(Lưu hành nội bộ)
THÁI NGUYÊN 2010
2
BỘ MÔN KỸ THUẬT PHẦN MỀM
BÀI GIẢNG MÔN HỌC
NGÔN NGỮ LẬP TRÌNH BẬC CAO
Theo chương trình 150 TC
Số tín chỉ: 03
(Lưu hành nội bộ)
Thái Nguyên, ngày….…tháng 12 năm 2010
TRƯỞNG BỘ MÔN TRƯỞNG KHOA ĐIỆN TỬ
Ths. Nguyễn Thị Hương PGS. TS Nguyễn Hữu Công
MỤC LỤC
ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN 4
CHƯƠNG 1. GIỚI THIỆU NGÔN NGỮ C++ 11
CHƯƠNG 2. THÀNH PHẦN CƠ BẢN, KIỂU DỮ LIỆU CƠ SỞ VÀ PHÉP TOÁN 17
A. Phần lý thuyết 17
B. Phần thảo luận, bài tập 41
CHƯƠNG 3. CÁC THAO TÁC XỬ LÝ INPUT/OUTPUT 42
A. Phần lý thuyết 42
B. Phần thảo luận, bài tập 54
CHƯƠNG 4. CÁC CẤU TRÚC ĐIỀU KHIỂN 55
A. Phần lý thuyết 55
B. Phần thảo luận, bài tập 65


CHƯƠNG 5. HÀM TRONG C++ 66
A. Phần lý thuyết 66
B. Phần thảo luận, bài tập 77
CHƯƠNG 6. CÁC KIỂU DỮ LIỆU CÓ CẤU TRÚC 78
A. Phần lý thuyết 78
B. Phần thảo luận, bài tập 102
3
ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC
KỸ THUẬT CÔNG NGHIỆP
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
CHƯƠNG TRÌNH GIÁO DỤC ĐẠI HỌC
NGÀNH ĐÀO TẠO: ĐIỆN TỬ
CHUYÊN NGÀNH: CÁC KHỐI NGÀNH KỸ THUẬT
ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN NGÔN NGỮ LẬP TRÌNH BẬC CAO
(HỌC PHẦN BẮT BUỘC)
1. Tên học phần: Ngôn ngữ lập trình bậc cao
2. Số tín chỉ: 03; 3(3;1,5;6)/12
3. Trình độ:
4. Phân bổ thời gian:
- Lên lớp lý thuyết: 3 (tiết/tuần) x 12 (tuần) = 36 tiết.
- Thảo luận, thực hành: 1,5 (tiết/tuần) x 12 (tuần) = 18 tiết.
+ Thảo luận: 10 tiết
+ Thực hành: 8 tiết
- Hướng dẫn bài tập lớn (dài):
- Khác: Không.
- Tổng số tiết thực dạy: (3+1,5)x12 = 54 tiết thực hiện.
- Tổng số tiết chuẩn: 3x12+1,5x12/2 = 45 tiết chuẩn.

5. Các học phần học trước: Toán cao cấp
6. Học phần thay thế, học phần tương đương: Không
7. Mục tiêu của học phần:
Trang bị cho sinh viên kiến thức nâng cao trong lĩnh vực tin học, cụ thể: giúp
cho sinh viên nắm chắc được quy trình xây dựng chương trình để giải quyết một bài
toán cụ thể, đặc biệt là trong lĩnh vực kỹ thuật. Từ khâu đặt vấn đề của bài toán,
phân tích yêu cầu của bài toán, xây dựng thuật toán, mã hóa chương trình trên ngôn
ngữ bậc cao (C++), kiểm thử và khai thác sử dụng.
8. Mô tả vắn tắt nội dung học phần:
Môn học cung cấp các kiến thức chi tiết về ngôn ngữ lập trình C++ nhằm
giải quyết các bài toán kỹ thuật. Cụ thể:
- Các thành phần của ngôn ngữ.
- Cấu trúc của một chương trình C++.
- Biến và các kiểu dữ liệu đơn giản trong C++.
4
- Biểu thức, câu lệnh và các phép toán.
- Câu lệnh đơn giản và câu lệnh có cấu trúc.
- Hàm, đệ quy và truyền tham số.
- Các kiểu dữ liệu có cấu trúc: mảng, xâu, cấu trúc, file.
9. Nhiệm vụ của sinh viên:
- Dự lớp ≥ 80 % tổng số thời lượng của học phần.
- Làm bài tập ở nhà.
- Chuẩn bị thảo luận
10.Tài liệu học tập:
- Sách, giáo trình chính:
[1]. Tống Đình Quỳ, Ngôn ngữ lập trình C++, NXB Thống kê 2000.
[2]. Tống Đình Quỳ, Bài tập ngôn ngữ lập trình C++, NXB Thống kê
2000.
- Tài liệu tham khảo:
[3]. Quách Tuấn Ngọc, Ngôn ngữ lập trình C, NXB Giáo Dục, 1998.

[4]. GS. Phạm Văn Ất, Kỹ thuật lập trình C, NXB KH&KT, 1999.
[5]. Leendert Ammeraal, Programs and Data Structures in C, John Willey
& Sons Press.
[6]. N. Wirth, Cẩm nang lập trình tập 1, tập 2, NXB Thống kê 1981.
[7]. Đỗ Xuân Lôi, Cấu trúc dữ liệu và giải thuật, NXB Thống kê 1996.
11.Tiêu chuẩn đánh giá sinh viên:
- Dự lớp: ≥ 80% tổng số giờ môn học.
- Thảo luận.
- Kiểm tra giữa học phần.
- Thi kết thúc học phần.
* Thang điểm
- Thực hành: Trọng số 0.1
- Kiểm tra giữa học phần: Trọng số 0.2
- Thi kết thúc học phần: Trọng số 0.8
12.Nội dung chi tiết học phần:
- Người biên soạn:
KS Võ Phúc Nguyên
KS Đỗ Duy Cốp
ThS Nguyễn Tuấn Anh
5
CHƯƠNG 1. GIỚI THIỆU NGÔN NGỮ C++
(Tổng số tiết 1; Lý thuyết 1)
1.1. Lịch sử ngôn ngữ C và C++
1.2. Cài đặt C++
1.3. Môi trường Borland C++
1.4. Thiết lập cấu hình cho môi trường
CHƯƠNG 2. CÁC THÀNH PHẦN CƠ BẢN, CÁC KIỂU DỮ LIỆU CƠ SỞ VÀ CÁC
PHÉP TOÁN
(Tổng số tiết 9; Lý thuyết 6; Thảo luận 2)
2.1. Các thành phần cơ bản

2.1.1. Bộ ký tự
2.1.2. Tên
2.1.3. Từ khoá
2.1.4. Lời giải thích
2.1.5. Cấu trúc của một chương trình C++ và quy tắc viết chương trình
2.2. Các kiểu dữ liệu và cách khai báo
2.2.1. Kiểu dữ liệu cơ sở
2.2.1.1. Kiểu số nguyên
2.2.1.2. Kiểu số thực
2.2.1.3. Kiểu ký tự
2.2.2. Sự tương thích giữa các kiểu
2.2.3. Định nghĩa và khai báo hằng
2.2.4. Các biến tham chiếu
2.2.5. Biến con trỏ
2.3. Biểu thức, câu lệnh và các phép toán
2.3.1. Biểu thức và các phép toán
2.3.2. Thứ tự thực hiện các phép toán
2.3.3. Câu lệnh
2.3.4. Lệnh hợp thành
2.3.5. Một số hàm số học
CHƯƠNG 3. CÁC THAO TÁC XỬ LÝ INPUT/OUTPUT
(Tổng số tiết 6; Lý thuyết 3; Thảo luận 2 Thực hành 1)
3.1. Hàm in ra màn hình printf()
3.2. Hàm đọc ký tự từ bàn phím scanf()
3.3. Thực hiện Input/Output với dòng tin trong C++
6
3.3.1. Input
3.3.2. Output
3.4. Thiết lập khuôn dạng - trình bày màn hình
CHƯƠNG 4. CÁC CẤU TRÚC ĐIỀU KHIỂN

(Tổng số tiết 15; Lý thuyết 12; Thảo luận 2, Thực hành 1)
4.1. Cấu trúc if
4.2. Cấu trúc switch
4.3. Cấu trúc for
4.4. Cấu trúc while
4.5. Cấu trúc do
4.6. Câu lệnh break
4.7. Câu lệnh continue
CHƯƠNG 5. HÀM TRONG C++
(Tổng số tiết 8; Lý thuyết 5; Thảo luận 2, Thực hành 1)
5.1. Hàm trong C++
5.2. Truyền tham số cho hàm
5.3. Đệ quy
5.4. Hàm inline
CHƯƠNG 6. CÁC KIỂU DỮ LIỆU CÓ CẤU TRÚC
(Tổng số tiết 15; Lý thuyết 12; Thảo luận 2, Thực hành 1)
6.1. Mảng dữ liệu
6.1.1. Mảng một chiều
6.1.2. Mảng nhiều chiều
6.2. Xâu ký tự và các hàm xử lý xâu
6.3. Cấu trúc (structure)
6.4. Cấu trúc động của dữ liệu (union)
6.5. Các kiểu dữ liệu tự định nghĩa khác
13.Lịch trình giảng dạy
- Số tuần dạy lý thuyết: 08 tuần
- Số tuần thảo luận, bài tập: 04 tuần
- Số tuần thực dạy: 12 tuần
+ 6 Tuần 5 tiết/tuần (4 tuần lý thuyết, 2 tuần thảo luận)
+ 6 Tuần 4 tiết/tuần (4 tuần lý thuyết, 2 tuần thực hành)
7

Tuần
thứ
Nội dung
Tài liệu học
tập, tham khảo
Hình thức
học
1
CHƯƠNG 1. GIỚI THIỆU NGÔN NGỮ C++
1.1. Lịch sử ngôn ngữ C và C++
1.2. Cài đặt C++
1.3. Môi trường Borland C++
1.4. Thiết lập cấu hình cho môi trường
CHƯƠNG 2. CÁC THÀNH PHẦN CƠ BẢN,
CÁC KIỂU DỮ LIỆU CƠ SỞ VÀ CÁC PHÉP
TOÁN
2.1. Các thành phần cơ bản
2.1.1. Bộ ký tự
2.1.2. Tên
2.1.3. Từ khoá
2.1.4. Lời giải thích
2.1.5. Cấu trúc của một chương trình
C++ và quy tắc viết chương trình
2.2. Các kiểu dữ liệu và cách khai báo
2.2.1. Kiểu dữ liệu cơ sở
2.2.1.1. Kiểu số nguyên
2.2.1.2. Kiểu số thực
2.2.1.3. Kiểu ký tự
2.2.2. Sự tương thích giữa các kiểu
2.2.3. Định nghĩa và khai báo hằng

2.2.4. Các biến tham chiếu
2.2.5. Biến con trỏ
[1] - [8] Giảng
2
2.3. Biểu thức, câu lệnh và các phép
toán
2.3.1. Biểu thức và các phép toán
2.3.2. Thứ tự thực hiện các phép toán
2.3.3. Câu lệnh
2.3.4. Lệnh hợp thành
2.3.5. Một số hàm số học
CHƯƠNG 3. CÁC THAO TÁC XỬ LÝ
INPUT/OUTPUT
3.1. Hàm in ra màn hình printf()
3.2. Hàm đọc ký tự từ bàn phím scanf()
3.3. Thực hiện Input/Output với dòng
tin trong C++
[1] - [8] Giảng
8
3.3.1. Input
3.3.2. Output
3.4. Thiết lập khuôn dạng - trình bày
màn hình
3
CHƯƠNG 4. CÁC CẤU TRÚC ĐIỀU
KHIỂN
4.1. Cấu trúc if
4.2. Cấu trúc switch
4.3. Cấu trúc for
[1] - [8] Giảng

4
4.4. Cấu trúc while
4.5. Cấu trúc do
4.6. Câu lệnh break
4.7. Câu lệnh continue
[1] - [8] Giảng
5
CHƯƠNG 5. HÀM TRONG C++
5.1. Hàm trong C++
5.2. Truyền tham số cho hàm
5.3. Đệ quy
5.4. Hàm inline
[1] - [8] Thảo luận
6
Thảo luận và làm các bài tập từ chương 1
đến chương 4
[1] - [8] Thảo luận
7 Kiểm tra giữa kỳ
8
CHƯƠNG 6. CÁC KIỂU DỮ LIỆU CÓ CẤU
TRÚC
6.1. Mảng dữ liệu
6.1.1. Mảng một chiều
6.1.2. Mảng nhiều chiều
[1] - [8] Giảng
9
6.2. Xâu ký tự và các hàm xử lý xâu
6.3. Cấu trúc (structure)
[1] - [8] Giảng
10

6.4. Cấu trúc động của dữ liệu (union)
6.5. Các kiểu dữ liệu tự định nghĩa khác
[1] - [8] Giảng
11 Thực hành [1] - [8] Phòng máy
12 Thực hành [1] - [8] Phòng máy
13
Thảo luận và làm các bài tập từ chương 5
đến chương 6
[1] - [8] Giảng
14.Ngày phê duyệt:
15.Cấp phê duyệt:
9
Đề cương chi tiết học phần đã được Hội đồng khối ngành Điện – Điện tử và SPKT
Điện – Tin học phê duyệt.
Trưởng bộ môn
Kỹ thuật phần mềm
ThS. Nguyễn Thị Hương
Chủ tịch Hội đồng
KH&GD Khoa Điện tử
PGS.TS. Nguyễn Hữu Công
Chủ tịch Hội đồng
Khối ngành Điện - Điện tử
và SPKT Điện – Tin học
PGS.TS Nguyễn Như Hiển
10
CHƯƠNG 1. GIỚI THIỆU NGÔN
NGỮ C++
1.1. Lịch sử ngôn ngữ C++
Lịch sử ngôn ngữ lập trình C: là một ngôn ngữ mệnh lệnh được phát triển từ đầu
thập niên 1970 bởi Ken Thompson và Dennis Ritchie tại phòng thí nghiệm Bell

Telephone để dùng trong hệ điều hành UNIX; theo Ritchie thì thời gian sáng tạo
nhất là vào năm 1972. Nó được đặt tên là C vì nhiều đặc tính của nó rút ra từ một
ngôn ngữ trước đó là B. Từ dó, ngôn ngữ này đã lan rộng ra nhiều hệ điều hành
khác và trở thành một những ngôn ngữ phổ dụng nhất. C là ngôn ngữ rất có hiệu
quả và được ưa chuộng nhất để viết các phần mềm hệ thống, mặc dù nó cũng được
dùng cho việc viết các ứng dụng. Ngoài ra, C cũng thường được dùng làm phương
tiện giảng dạy trong khoa học máy tính mặc dù ngôn ngữ này không dược thiết kế
dành cho người nhập môn.
C++ là gì? Có thể thấy rằng ngôn ngữ lập trình C được phát triển đầu tiên sau đó
C++ mới được phát triển. Vậy C++ nó là cái gì? Nó có mối quan hệ thế nào với C.
Câu trả lời là: C++ cơ bản là C ở một mức độ mới. Sự khác biệt quan trọng duy
nhất là C++ hỗ trợ hướng đối tượng. Các đoạn mã viết bằng C được dịch và chạy tốt
với hầu hết các chương trình dịch của C++ nhưng điều ngược lại không đúng. C++
hỗ trợ tất cả các lệnh của C và có mở rộng.
Lịch sử ngôn ngữ lập trình C++: Bjarne Stroustrup của Bell Labs đã phát triển
C++ (mà tên nguyên thủy là "C với các lớp" trong suốt thập niên 1980 như là một
bản nâng cao của ngôn ngữ C. Những bổ sung nâng cao bắt đầu với sự thêm vào
của khái niệm lớp, tiếp theo đó là các khái niệm hàm ảo, toán tử quá tải, đa kế thừa,
tiêu bản, và xử lý ngoại lệ. Tiêu chuẩn của ngôn ngữ C++ đã được thông qua trong
năm 1998 như là ISO/IEC 14882: 1998. Phiên bản hiện đang lưu hành là phiên bản
2003, ISO/IEC 14882: 2003.
Năm 1983, thì tên C với các lớp được đổi thành C++. các chức năng mới được
thêm vào bao gồm hàm ảo, quá tải hàm và toán tử, tham chiếu, hằng, khả năng kiểm
soát bộ nhớ của lưu trữ tự do, nâng cao việc kiểm soát kiểu, và lệnh chú giải kiểu
(//).
Năm 1989 phiên bản C++ 2.0 phát hành. Các tính năng mới bao gồm đa kế thừa,
lớp trừu tượng, hàm tĩnh, hàm thành viên hằng, và thành viên bảo tồn.
11
Phiên bản xuất bản sau đó có thêm các chức năng tiêu bản, ngoại lệ, không gian
tên, chuyển kiểu cho toán tử new, và kiểu Boolean.

Khi C++ hình thành, thì thư viện chuẩn hoàn thiện với nó. Thư viện C++ đầu tiên
thêm vào là IOSttream cung cấp cơ sở để thay thế các hàm C truyền thống như là
printf và scanf. Sau này, trong những thư viện chuẩn quan trọng nhất được thêm
vào là Thư viện Tiêu bản Chuẩn.
Sau nhiều năm làm việc, có sự cộng tác giữa ANSI và hội đồng tiêu chuẩn hoá
C++ của ISO để soạn thảo tiêu chuẩn ISO/IEC 14882: 1998. Phiên bản tiêu chuẩn
này được phát hành năm 1989, hội đồng tiếp tục xử lí các báo cáo trục trặc, và ấn
hành một phiên bản sửa sai của chuẩn C++ trong năm 2003.
Không ai là chủ nhân của ngôn ngữ C++, nó hoàn toàn miễn phí khi dùng. Mặc
dù vậy, các văn bản tiêu chuẩn thì không miễn phí.
C++ về bản chất được xây dựng trên nền của ngôn ngữ lập trình C. C++ nguyên
là sự kết thừa từ C. Mặc dù vậy, không phải mọi chương trình trong C đều hợp lệ
trong C++. Vì là hai ngôn ngữ độc lập, số lượng không tương thích giữa hai ngôn
ngữ này đã tăng lên. [2]. Phiên bản cuối cùng C99 đã tạo ra thêm nhiều tính năng
xung đột (giữa C và C++). Các sự khác nhau này tạo ra khó khăn để viết các
chương trình và thư viện để có thể được dịch và hoạt động chính xác trong cả hai
loại mã C hay C++, đồng thời gây nhầm lẫn cho những người lập trình dùng cả hai
ngôn ngữ này. Sự chênh lệch này cũng gây khó khăn cho ngôn ngữ này có thể tiếp
thu các tính năng của ngôn ngữ kia.
1.2. Cài đặt Borland C++ 4.5
Bước 1: Chạy file install.exe
12
Bước 2: Chọn nút Continue
Bước 3: Chọn nút Continue
Bước 4: Chọn nút Continue
13
14
Bước 5: Chọn nút Yes
Bước 6: Chọn nút Continue
Bước 7: Chọn nút Install

Bước 8: Chọn nút Continue
15
Bước 9: Sau khi chọn nút OK ta đã cài xong chương trình Borland C++ 4.5.
Giao diện chương trình Borland C++ 4.5
16
CHƯƠNG 2. THÀNH PHẦN CƠ
BẢN, KIỂU DỮ LIỆU CƠ SỞ VÀ PHÉP TOÁN
A. Phần lý thuyết
2.1. Các thành phần cơ bản
2.1.1. Bộ ký tự (Character Set)
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 ký tự
được nhóm lại theo nhiều cách khác nhau để tạo nên các từ. Các từ lại được liên kết
với nhau theo một qui tắc nào đó để tạo nên các câu lệnh. Một chương trình bao
gồm nhiều câu lệnh và thể hiện mộ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 bộ ký tự sau:
- 26 chữ cái hoa: A B C Z
- 26 chữ cái thường: a b c… z
- 10 chữ số: 0 1 2… 9
- Các ký hiệu toán học: + - * / =()
- Ký tự gạch nối: _
- Các ký tự khác:.,: ; [ ] {} ! \ & % # $
Dấu cách (space) dùng để tách các từ. Ví dụ chữ VIET NAM có 8 ký tự, còn
VIETNAM chỉ có 7 ký tự.
Chú ý: Khi viết chương trình, ta không được sử dụng bất kỳ ký tự nào khác ngoài
các ký tự trên.
Ví dụ như khi lập chương trình giải phương trình bậc hai ax
2
+bx+c=0, ta cần
tính biệt thức Delta ∆= b
2

- 4ac, trong ngôn ngữ C++ không cho phép dùng ký tự ∆,
vì vậy ta phải dùng ký hiệu khác để thay thế.
2.1.2. Tên (Identifier)
Tên là một khái niệm rất quan trọng, nó dùng để xác định các đại lượ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 nhãn,
Tên được đặt theo qui tắc sau:
17
Tên là một dãy các ký tự bao gồm chữ cái, số và gạch nối. Ký tự đầu tiên của tên
phải là chữ hoặc gạch nối. Tên không được trùng với khoá. Độ dài cực đại của tên
theo mặc định là 32 và có thể được đặt lại là một trong các giá trị từ 1 tới 32 nhờ
chức năng: Option-Compiler-Source-Identifier length khi dùng TURBO C++.
Các tên đúng: a_1 delta x1 _step GAMA
Các tên sai:
3MN Ký tự đầu tiên là số
m#2 Sử dụng ký tự #
f(x) Sử dụng các dấu ()
do Trùng với từ khoá
te ta Sử dụng dấu trắng
Y-3 Sử dụng dấu -
Chú ý:
Trong TURBO C++, tên bằng chữ thường và chữ hoa là khác nhau ví dụ tên AB
khác với ab. Trong C++, ta thường dùng chữ hoa để đặt tên cho các hằng và dùng
chữ thường để đặt tên cho hầu hết cho các đại lượng khác như biến, biến mảng,
hàm, cấu trúc. Tuy nhiên đây không phải là điều bắt buộc.
2.1.3. Từ khoá (Keywords)
Từ khoá là những từ được sử dụng để khai báo các kiểu dữ liệu, để viết các toán
tử và các câu lệnh. Bảng dưới đây liệt kê các từ khoá của TURBO C++:
asm break case cdecl
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
tipedef union unsigned void
volatile while
Chú ý:
- Không được dùng các từ khoá để đặt tên cho các hằng, biến, mảng, hàm
- Từ khoá phải được viết bằng chữ thường, ví dụ: viết từ khoá khai báo kiểu
nguyên là int chứ không phải là int.
18
2.1.4. Lời giải thích (Comments)
Các chú thích được các lập trình viên sử dụng để ghi chú hay mô tả trong các
phần của chương trình. Trong C++ có hai cách để chú thích:
//Chú thích theo dòng
/*Chú thích theo khối
Dòng chú thích 1
Dòng chú thích 2
*/
Chú thích theo dòng bắt đầu từ cặp dấu xổ (//) cho đến cuối dòng. Chú thích theo
khối bắt đầu bằng /*và kết thúc bằng */ và có thể bao gồm nhiều dòng. Chúng ta sẽ
thêm các chú thích cho chương trình:
Ví dụ 2.
//Ví dụ về ghi chú trong C++
#include <iostream.h>
void main(){
//In ra màn hình dòng Hello World!
cout<<"Hello World! ";

//In ra màn hình dòng I'm a C++ program
cout<<"I'm a C++ program";
}
2.1.5. Cấu trúc của một chương trình C++
Chúng ta xem xét ví dụ sau đây:
Ví dụ 2.
//My first program in C++
#include <iostream.h>
int main()
{
cout<<"Hello World!";
return 0;
}
Chương trình trên đây là chương trình đầu tiên mà hầu hết những người học nghề
lập trình viết đầu tiên và kết quả của nó là viết câu "Hello, World" lên màn hình.
Đây là một trong những chương trình đơn giản nhất có thể viết bằng C++ nhưng nó
đã bao gồm những phần cơ bản mà mọi chương trình C++ có. Hãy cùng xem xét
từng dòng một:
19
//My first program in C++
Đây là dòng chú thích. Tất cả các dòng bắt đầu bằng hai dấu sổ (//) được coi là
chút thích mà chúng không có bất kì một ảnh hưởng nào đến hoạt động của chương
trình. Chúng có thể được các lập trình viên dùng để giải thích hay bình phẩm bên
trong mã nguồn của chương trình. Trong trường hợp này, dòng chú thích là một giải
thích ngắn gọn những gì mà chương trình chúng ta làm.
#include <iostream.h>
Câu lệnh #include <iostream.h> báo cho trình dịch biết cần phải "include" thư
viện iostream. Đây là một thư viện vào ra cơ bản trong C++ và nó phải được
"include" vì nó sẽ được dùng trong chương trình. Đây là cách cổ điển để sử dụng
thư viện iostream

int main()
Dòng này tương ứng với phần bắt đầu khai báo hàm main. Hàm main là điểm mà
tất cả các chương trình C++ bắt đầu thực hiện. Nó không phụ thuộc vào vị trí của
hàm này (ở đầu, cuối hay ở giữa của mã nguồn) mà nội dung của nó luôn được thực
hiện đầu tiên khi chương trình bắt đầu. Thêm vào đó, do nguyên nhân nói trên, mọi
chương trình C++ đều phải tồn tại một hàm main.
Theo sau main là một cặp ngoặc đơn bởi vì nó là một hàm. Trong C++, tất cả các
hàm mà sau đó là một cặp ngoặc đơn () thì có nghĩa là nó có thể có hoặc không có
tham số (không bắt buộc). Nội dung của hàm main tiếp ngay sau phần khai báo
chính thức được bao trong các ngoặc nhọn ({ }) như trong ví dụ của chúng ta.
cout<<"Hello World";
Dòng lệnh này làm việc quan trọng nhất của chương trình. cout là một dòng
(stream) output chuẩn trong C++ được định nghĩa trong thư viện iostream và những
gì mà dòng lệnh này làm là gửi chuỗi kí tự "Hello World" ra màn hình.
Chú ý rằng dòng này kết thúc bằng dấu chấm phẩy (;). Kí tự này được dùng để
kết thúc một lệnh và bắt buộc phải có sau mỗi lệnh trong chương trình C++ của bạn
(một trong những lỗi phổ biến nhất của những lập trình viên C++ là quên mất dấu
chấm phẩy).
return 0;
Lệnh return kết thúc hàm main và trả về mã đi sau nó, trong trường hợp này là 0.
Đây là một kết thúc bình thường của một chương trình không có một lỗi nào trong
quá trình thực hiện. Như bạn sẽ thấy trong các ví dụ tiếp theo, đây là một cách phổ
biến nhất để kết thúc một chương trình C++.
20
Chương trình được cấu trúc thành những dòng khác nhau để nó trở nên dễ đọc
hơn nhưng hoàn toàn không phải bắt buộc phải làm vậy. Ví dụ, thay vì viết
int main()
{
cout<<" Hello World ";
return 0;

}
ta có thể viết
int main() { cout<<" Hello World "; return 0; }
cũng cho một kết quả chính xác như nhau.
Trong C++, các dòng lệnh được phân cách bằng dấu chấm phẩy (Việc chia
chương trình thành các dòng chỉ nhằm để cho nó dễ đọc hơn mà thôi).
2.2. Các kiểu dữ liệu và cách khai báo
2.2.1. Khái niệm về kiểu dữ liệu
C++ chia thành hai tập hợp kiểu dữ liệu chính:
Kiểu xây dựng sẵn (built- in) mà ngôn ngữ cung cấp cho người lập trình và kiểu
được người dùng định nghĩa (user-defined) do người lập trình tạo ra. 2 tập hợp
kiểu dữ liệu này phân làm 2 loại kiểu dữ liệu giá trị (value) và kiểu dữ liệu tham
chiếu(reference). Trong đó Tất cả các kiểu dữ liệu xây dựng sẵn là kiểu dữ liệu giá
trị ngoại trừ các đối tượng và chuỗi. Và tất cả các kiểu do người dùng định nghĩ
ngoại trừ kiểu cấu trúc đều là kiểu dữ liệu tham chiếu.
Các đối tượng thuộc 1 kiểu dữ liệu có thể được chuyển đổi sang một kiểu dữ liệu
khác qua cơ chế chuyển đổi tường minh hoặc chuyển đổi ngầm định. Việc chuyển
đổi ngầm định được thực hiện tự động và phải đảm bảo không mất thông tin. Nghĩa
là kiểu được chuyển đổi phải có kích thước lơn hơn.
Ta có thể gán ngầm định một số kiểu short vào một số kiểu int nhưng không thể
làm ngược lại vì kích thước của kiểu int lớn hơn kích thước của kiểu short.
2.2.2. Kiểu dữ liệu cơ sở
 Kiểu số nguyên
Trong C++ cho phép sử dụng số nguyên kiểu int, số nguyên dài kiểu long và số
nguyên không dấu kiểu unsigned. Kích cỡ và phạm vi biểu diễn của chúng được chỉ
ra trong bảng dưới đây:
Kiểu Phạm vi biểu diễn Kích thước
21
unsigned int 0 đến 65535 2 byte
Short int -32768 đến 32767 2 byte

int -32768 đến 32767 2 byte
long -2147483648 đến 2147483647 4 byte
unsigned long 0 đến 4294967295 4 byte
Chú ý: Kiểu ký tự cũng có thể xem là một dạng của kiểu nguyên.
 Kiểu số thực
Trong C++ cho phép sử dụng ba loại dữ liệu dấu phảy động, đó là float, double
và long double. Kích cỡ và phạm vi biểu diễn của chúng được chỉ ra trong bảng
dưới đây:
Kiểu Phạm vi biểu diễn
Số chữ số
có nghĩa
Kích thước
float 3.4E-38 đến 3.4E+38 7 đến 8 4 byte
double 1.7E-308 đến 1.7E+308 15 đến 16 8 byte
long double
3.4E-4932 đến
1.1E4932
17 đến 18 10 byte
Giải thích: Máy tính có thể lưu trữ được các số kiểu float có giá trị tuyệt đối từ
3.4E-38 đến 3.4E+38. Các số có giá trị tuyệt đối nhỏ hơn3.4E-38 được xem bằng 0.
Phạm vi biểu diễn của số double được hiểu theo nghĩa tương tự.
 Kiểu ký tự
Một giá trị kiểu char chiếm 1 byte (8 bit) và biểu diễn được một ký tự thông qua
bảng mã ASCII.
22
Ví dụ 2.
Ký tự Mã ASCII
0 048
1 049
2 050

A 065
B 066
A 097
B 098
Có hai kiểu dữ liệu char: kiểu signed char và unsigned char.
Kiểu Phạm vi biểu diễn Số ký tự Kích thước
char (signed char) -128 đến 127 256 1 byte
unsigned char 0 đến 255 256 1 byte
Ví dụ sau minh hoạ sự khác nhau giữa hai kiểu dữ liệu trên: Xét đoạn chương
trình sau:
char ch1;
unsigned char ch2;

ch1=200; ch2=200;
Khi đó thực chất:
ch1=-56;
ch2=200;
Nhưng cả ch1 và ch2 đều biểu diễn cùng một ký tự có mã 200.
Có thể chia 256 ký tự làm ba nhóm:
Nhóm 1: Nhóm các ký tự điều khiển có mã từ 0 đến 31. Chẳng hạn ký tự mã 13
dùng để chuyển con trỏ về đầu dòng, ký tự 10 chuyển con trỏ xuống dòng dưới (trên
cùng một cột). Các ký tự nhóm này nói chung không hiển thị ra màn hình.
Nhóm 2: Nhóm các ký tự văn bản có mã từ 32 đến 126. Các ký tự này có thể
được đưa ra màn hình hoặc máy in.
Nhóm 3: Nhóm các ký tự đồ hoạ có mã số từ 127 đến 255. Các ký tự này có thể
đưa ra màn hình nhưng không in ra được (bằng các lệnh DOS).
 Biểu boolean
C++ không có kiểu Boolean xây dựng sẵn. Vì vậy ta có thể sử dụng kiểu int cho
mục đích này với “0” là false và các số khác là true.
23

2.2.3. Sự tương thích giữa các kiểu
Việc chuyển đổi một kiểu đã xác định thành một kiểu khác về cơ bản sẽ thay đổi
một hay cả hai tính chất của kiểu nhưng không làm thay đổi hình mẫu bit nền tảng.
Kích cỡ kiểu có thể rộng hơn hay hẹp hơn và tất nhiên cách hiểu về kiểu sẽ thay
đổi. Một số phép chuyển đổi là không an toàn, về cơ bản trình biên dịch sẽ cảnh báo
điều đó, việc chuyển đổi từ kiểu dữ liệu rộng hơn sang một kiểu dữ liệu hẹp hơn là
một hình thái chuyển đổi kiểu không an toàn.
2.2.4. Định nghĩa và khai báo hằng
a) Định nghĩa và khai báo hằng
Định nghĩa hằng:
Bạn có thể định nghĩa các hằng với tên mà bạn muốn để có thể sử dụng thường
xuyên mà không mất tài nguyên cho các biến bằng cách sử dụng chỉ thị #define.
Đây là dạng của nó:
#define <tên hằng> [giá trị]
Ví dụ 2.
#define PI 3.14159265
#define NEWLINE '\n'
#define WIDTH 100
Chúng định nghĩa ba hằng số mới. Sau khi khai báo bạn có thể sử dụng chúng
như bất kì các hằng số nào khác, ví dụ:
circle = 2 * PI * r;
cout<<NEWLINE;
Trong thực tế việc duy nhất mà trình dịch làm khi nó tìm thấy một chỉ thị #define
là thay thế các tên hằng tại bất kì chỗ nào chúng xuất hiện (như trong ví dụ trước,
PI, NEWLINE hay WIDTH) bằng giá trị mà chúng được định nghĩa.
Chỉ thị #define không phải là một lệnh thực thi, nó là chỉ thị tiền xử lý
(preprocessor), đó là lý do trình dịch coi cả dòng là một chỉ thị và dòng đó không
cần kết thúc bằng dấu chấm phẩy. Nếu bạn thêm dấu chấm phẩy vào cuối dòng, nó
sẽ được coi là một phần của giá trị định nghĩa hằng.
Khai báo các hằng (const):

Với tiền tố const bạn có thể khai báo các hằng với một kiểu xác định như là bạn
làm với một biến:
const int width = 100;
24
const to char tab = '\t';
const zip = 12440;
b) Các loại hằng
Hằng int:
Hằng int là số nguyên có giá trị trong khoảng từ -32768 đến 32767.
Ví dụ 2.
#define number1 -50 Định nghiã hằng int number1 có giá trị là -50
#define sodem 2732 Định nghiã hằng int sodem có giá trị là 2732
Chú ý:
Cần phân biệt hai hằng 5056 và 5056.0: ở đây 5056 là số nguyên còn 5056.0 là
hằng thực.
Hằng long:
Hằng long là số nguyên có giá trị trong khoảng từ -2147483648 đến
2147483647. Hằng long được viết theo cách:
1234L hoặc 1234l (thêm L hoặc l vào đuôi)
Một số nguyên vượt ra ngoài miền xác định của int cũng được xem là long.
Ví dụ 2.
#define sl 8865056L Định nghĩa hằng long sl có giá trị là 8865056
#define sl 8865056 Định nghiã hằng long sl có giá trị là 8865056
Hằng ký tự:
Hằng ký tự là một ký tự riêng biệt được viết trong hai dấu nháy đơn, ví dụ 'a'.
Giá trị của 'a' chính là mã ASCII của chữ a. Như vậy giá trị của 'a' là 97. Hằng ký
tự có thể tham gia vào các phép toán như mọi số nguyên khác.
Ví dụ: '9'-'0'=57-48=9
Chú thích:
#define kt 'a' Định nghĩa hằng ký tự kt có giá trị là 97

Hằng ký tự còn có thể được viết theo cách sau: '\c1c2c3', trong đó c1c2c3 là một
số hệ 8 mà giá trị của nó bằng mã ASCII của ký tự cần biểu diễn.
Ví dụ: chữ a có mã hệ 10 là 97, đổi ra hệ 8 là 0141. Vậy hằng ký tự 'a' có thể viết
dưới dạng '\141'. Đối với một vài hằng ký tự đặc biệt ta cần sử dụng cách viết sau
(thêm dấu \):
25

×