Giáo trình Lập trình C/C++ giúp người học tìm hiểu thế giới của ngôn ngữ C/C++ từ những khái niệm ban đầu cơ bản nhất. Giáo trình gồm có 12 chương với những nội dung cụ thể của từng chương như sau: Chương 1: ngôn ngữ lập trình & phương pháp lập trình; chương 2: làm quen lập trình c/c++ qua các ví dụ đơn giản; chương 3: các thành phần trong ngôn ngữ c/c++; chương 4: biểu thức; chương 5: nhập - xuất dữ liệu; chương 6: cấu trúc điều khiển; chương 7: vòng lặp; chương 8: hàm; chương 9: mảng và con trỏ; chương 10: chuỗi; chương 11: kiểu dữ liệu cấu trúc; chương 12: tập tin – file.
Trang 1ỦY BAN NHÂN THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG CAO ĐẲNG GIAO THÔNG VẬN TẢI
Trang 3Kỹ thuật điều khiển và tự động hóa là ngành nghiên cứu, ứng dụng các kỹ thuật
cơ khí hiện đại, kỹ thuật điều khiển, kỹ thuật máy tính vào việc vận hành, điều khiển quá trình sản xuất nhằm thực hiện một công việc mà không cần đến sự can thiệp trực tiếp của con người
Vậy để thực hiện những công việc này thì bắt buộc chúng ta phải lập trình tạo ra những chương trình vận hành mà C/C++
là ngôn ngữ lập trình vạn năng có thể giúp chúng ta giải quyết các vần đề này
Sử dụng thành thạo ngôn ngữ C/C++ còn giúp sinh viên học tốt các môn học Lập trình PLC và lập trình vi xử lý
Giáo trình này chúng ta đi tìm hiểu thế giới của ngôn ngữ C/C++ từ những khái niệm ban đầu cơ bản nhất
Trang 5.MỤC LỤC
Chương 1: NGÔN NGỮ LẬP TRÌNH & PHƯƠNG PHÁP LẬP TRÌNH 1
1.1 Ngôn ngữ lập trình (Programming Language) 1
1.2 Các bước lập trình 1
1.3 Kỹ thuật lập trình 1
I-P-O Cycle (Input-Process-Output Cycle) (Quy trình nhập-xử lý-xuất) 1
Sử dụng lưu đồ (Flowchart) 3
1.4 Bài tập 6
Chương 2: LÀM QUEN LẬP TRÌNH C/C++ QUA CÁC VÍ DỤ ĐƠN GIẢN 7
2.1 Khởi động Dev C++ 7
2.2 Các ví dụ đơn giản 7
Ví dụ 1 7
Ví dụ 2 9
Ví dụ 3 9
Ví dụ 4 10
Ví dụ 5 10
Chương 3: CÁC THÀNH PHẦN TRONG NGÔN NGỮ C/C++ 11
3.1 Từ khóa 11
3.2 Tên 11
3.3 Kiểu dữ liệu 12
3.4 Ghi chú 12
3.5 Khai báo biến 12
Tên biến 12
Khai báo biến 13
Vừa khai báo vừa khởi gán 13
Vị trí đặt các khai báo biến 13
Chương 4: BIỂU THỨC 14
4.1 Biểu thức 14
4.2 Các phép toán số học 14
4.3 Các phép toán quan hệ và logic 15
4.4 Phép toán tăng giảm 15
4.5 Thứ tự ưu tiên các phép toán 16
4.6 Chuyển đổi kiểu 17
4.7 Các hàm toán học thường dùng 17
abs 17
rand 17
pow 18
sqrt 18
atoi 18
Chương 5: NHẬP - XUẤT DỮ LIỆU 19
5.1 Các hàm vào ra chuẩn - getchar() và putchar() 19
Hàm getchar () 19
Hàm putchar() 19
5.2 Đưa kết quả ra màn hình - Hàm printf 20
5.3 Vào số liệu từ bàn phím - Hàm scanf 21
5.4 Đưa kết quả ra màn hình - Hàm cout 21
5.5 Vào số liệu từ bàn phím - Hàm cin 23
Trang 65.6 Bài tập 23
Chương 6: CẤU TRÚC ĐIỀU KHIỂN 25
6.1 Cấu trúc có điều kiện: 25
Lệnh if-else: 25
Lệnh else-if: 28
6.2 Lệnh nhảy không điều kiện - toán tử goto: 29
6.3 Lệnh break 31
6.4 Cấu trúc rẽ nhánh - toán tử switch: 31
6.5 Bài tập 33
Sử dụng lệnh if 33
Sử dụng lệnh switch 34
Bài tập làm thêm 35
Chương 7: VÒNG LẶP 36
7.1 Lệnh continue 36
7.2 Vòng lặp for 36
7.3 Vòng lặp while 39
7.4 Vòng lặp do…while 40
7.5 Vòng lặp lồng nhau 42
7.6 So sánh sự khác nhau của các vòng lặp 43
7.7 Bài tập 43
Chương 8: HÀM 46
8.1 Cơ sở 46
8.2 Hàm không cho các giá trị trả về: 48
8.3 Các ví dụ về hàm 49
Ví dụ 1 49
Ví dụ 2 49
Ví dụ 3 50
8.4 Bài tập 50
Chương 9: MẢNG VÀ CON TRỎ 52
9.1 Mảng 52
Mảng một chiều 52
Mảng nhiều chiều 54
9.2 Con trỏ 57
Khái báo biến con trỏ 57
Phép toán số học trên con trỏ 59
Con trỏ và mảng một chiều 60
9.3 Bài tập 60
Chương 10: CHUỖI 62
10.1 Cách khai báo chuỗi 62
10.2 Hàm nhập, xuất chuỗi 63
10.3 Bộ đệm và hiện tượng trôi lệnh 64
Bộ đệm (Buffer) 64
Hiện tượng trôi lệnh 64
10.4 Các phương thức, phép toán tiện ích của kiểu string 65
Các phép toán và phương thức cơ bản 65
Lấy chiều dài chuỗi 66
Truy cập một phần tử bất kỳ trong chuỗi 67
Chèn chuỗi 67
Trang 7Xoá chuỗi 68
Lấy chuỗi con 68
Tìm kiếm chuỗi con 69
Thay thế một đoạn con trong chuỗi ban đầu 69
Đổi chữ hoa thành thường với tolower(char ch)và đổi chữ thường thành chữ hoa với toupper(char ch) 70
10.5 Bài tập 70
Chương 11: KIỂU DỮ LIỆU CẤU TRÚC 72
11.1 Kiểu cấu trúc (Structure) 72
Khai báo kiểu structure 72
Cách khai báo biến có kiểu structure 72
Tham chiếu các phần tử trong structure 72
Structure lồng nhau 74
11.2 Danh sách liên kết 75
Khái niệm danh sách liên kết đơn 75
Khai báo danh sách liên kết đơn 76
Thêm 1 phần tử vào danh sách liên kết đơn 76
Khởi tạo danh sách liên kết đơn 77
Chèn phần tử vào danh sách liên kết đơn 78
Xóa bỏ phần tử trong danh sách 78
11.3 Bài tập 79
Mảng cấu trúc 79
Danh sách liên kết 79
Chương 12: TẬP TIN – FILE 81
12.1 Một số khái niệm về tập tin 81
12.2 Các thao tác trên tập tin 82
Khai báo biến tập tin 82
Mở và đóng tập tin 82
12.3 Truy cập tập tin văn bản 83
12.4 Truy cập tập tin nhị phân 87
12.5 Bài tập 88
Tài Liệu Tham Khảo 90
Trang 9Ngôn ngữ lập trình & Phương pháp lập trình
Chương 1: NGÔN NGỮ LẬP TRÌNH & PHƯƠNG PHÁP LẬP TRÌNH 1.1 Ngôn ngữ lập trình (Programming Language)
Ngôn ngữ lập trình là hệ thống các ký hiệu để miêu tả những tính toán qua máy tính trong một dạng mà cả con người và máy đều có thể hiểu được và phải tuân theo các qui ước về ngữ pháp và ngữ nghĩa, dùng để xây dựng thành các
chương trình cho máy tính
Một chương trình được viết bằng một ngôn ngữ lập trình cụ thể (ví dụ Pascal, C…) gọi là chương trình nguồn, chương trình dịch làm nhiệm vụ dịch chương trình nguồn thành chương trình thực thi được trên máy tính
1.2 Các bước lập trình
Bước 1: Phân tích vấn đề và xác định các đặc điểm (xác định I-P-O)
Bước 2: Lập ra giải pháp (đưa ra thuật giải)
Bước 3: Cài đặt (viết chương trình)
Bước 4: Chạy thử chương trình (dịch chương trình)
Bước 5: Kiểm chứng và hoàn thiện chương trình (thử nghiệm bằng nhiều số liệu
và đánh giá)
1.3 Kỹ thuật lập trình
I-P-O Cycle (Input-Process-Output Cycle) (Quy trình nhập-xử lý-xuất)
Quy trình xử lý cơ bản của máy tính gồm I-P-O
Ví dụ 1: Xác định Input, Process, Output của việc làm 1 ly cà phê
khuấy đều, cho đá lạnh vào
Process Output Input
Trang 10Ngôn ngữ lập trình & Phương pháp lập trình
Ví dụ 2: Xác định Input, Process, Output của chương trình tính tiền lương
công nhân tháng 07/2016 biết rằng lương = lương căn bản * ngày công+phụ cấp
Input : Lương căn bản, ngày công, phụ cấp
Process : Nhân lương căn bản với ngày công sau đó cộng với phụ cấp
Xác định Input, Process, Output của các chương trình sau:
1 Đổi từ tiền VND sang tiền USD
2 Tính điểm trung bình của học sinh gồm các môn Toán, Lý, Hóa
3 Giải phương trình bậc 2: ax2 + bx + c = 0
4 Đổi từ độ sang radian và đổi từ radian sang độ
(công thức / = a/180, với : radian, a: độ)
5 Kiểm tra 2 số a, b giống nhau hay khác nhau
6 Tính diện tích hình tròn
7 Tính chu vi hình chữ nhật
8 Tính tiền học phí phải đóng trong 1 học kỳ
Trang 11Ngôn ngữ lập trình & Phương pháp lập trình
Quyết định (Decision), sử dụng điều kiện
Luồng xử lý (Flow lines)
Gọi CT con, hàm…
(Procedure, Function…) Bắt đầu, kết thúc (Begin, End)
Điểm ghép nối (Connector)
Trang 12Ngôn ngữ lập trình & Phương pháp lập trình
Ví dụ 5: Chuẩn bị cà phê Ví dụ 6: Mô tả ví dụ 2 Ví dụ 7: Mô tả ví dụ 3
Ví dụ 8: Cộng 2 số Ví dụ 9: so sánh 2 số
Bắt đầu
Kết thúc
Cà phê, nước sôi
Hòa cà phê vào nước sôi
Trang 13Ngôn ngữ lập trình & Phương pháp lập trình
Ví dụ 10: Kiểm tra tính hợp lệ của điểm Ví dụ 11: Xếp lon vào thùng
Ví dụ 12: Kiểm tra loại số Ví dụ 13: Kiểm tra tính hợp lệ của điểm
Thùng = 0 Lon
1 Lon
Thêm 1 Lon vào thùng
Bằng
Trang 14Ngôn ngữ lập trình & Phương pháp lập trình
1.4 Bài tập
Vẽ lưu đồ cho các chương trình sau:
1 Đổi từ tiền VND sang tiền USD
2 Tính điểm trung bình của học sinh gồm các môn Toán, Lý, Hóa
3 Giải phương trình bậc 2: ax2 + bx + c = 0
4 Đổi từ độ sang radian và đổi từ radian sang độ
(công thức / = a/180, với : radian, a: độ)
5 Kiểm tra 2 số a, b giống nhau hay khác nhau
Trang 15Làm quen lập trình C/C++ Qua các ví dụ đơn giản
Chương 2: LÀM QUEN LẬP TRÌNH C/C++ QUA CÁC VÍ DỤ ĐƠN GIẢN 2.1 Khởi động Dev C++
Click đúp chuột vào biểu tượng Dev C++
Hình 2-1 Giao diện trình biên dịch Dev C++
▪ Sau khi giao diện Dev C++ được mở click vào File -> New -> Source File để bắc đầu lập trình
• Nhấn F11 để biên dịch và chạy chương trình
Dòng thứ 1: bắt đầu bằng /* và kết thúc bằng */ Là dòng diễn giải (chú thích)
Khi dịch và chạy chương trình, dòng này không thực hiện Mục đích của việc ghi chú này giúp chương trình rõ ràng hơn Sau này đọc lại chương trình biết chương trình làm gì
Trang 16Làm quen lập trình C/C++ Qua các ví dụ đơn giản
Dòng thứ 2: chứa phát biểu tiền xử lý #include <iostream> Vì trong
chương trình này ta sử dụng hàm thư viện của C++ là cout, do đó cần phải có
khai báo của hàm thư viện này để báo cho trình biên dịch C++ biết Nếu không khai báo chương trình sẽ báo lỗi
Dòng thứ 3: là câu lệnh using namespace std, Chúng ta có thể khai báo
hoặc không khai báo tùy thích Nhưng nếu không khai báo thì khi sử dụng các hàm trong iostream thì phải gọi std cho nó trước, ví dụ thay vì viết cout <<"Bai hoc C dau tien."; thì phải viết std:: cout <<"Chao Cac Ban";
Dòng thứ 4: main() là thành phần chính của mọi chương trình C/C++, Mọi
chương trình C/C++ đều bắt đầu thi hành từ hàm main Cặp dấu ngoặc () cho
biết đây là khối hàm (function)
Dòng thứ 5 và 7: cặp dấu ngoặc móc {} giới hạn thân của hàm Thân hàm bắt đầu bằng dấu {và kết thúc bằng dấu}
Dòng thứ 6: cout <<"Chao Cac Ban";, chỉ thị cho máy in ra chuỗi ký tự
nằm trong nháy kép "" Dòng này được gọi là một câu lệnh, kết thúc một câu lệnh trong C/C++ phải là dấu chấm phẩy (;)
Chú ý:
✓ Các từ include, iostream, using, namespace, std, main, cout phải viết bằng chữ thường
✓ Chuỗi trong nháy kép cần in ra “có thể viết chữ HOA, thường tùy, ý”
✓ Kết thúc câu lệnh phải có dấu chấm phẩy
✓ Kết thúc tên hàm không có dấu chấm phẩy hoặc bất cứ dấu gì
✓ Ghi chú phải đặt trong cặp /* … */
✓ Thân hàm phải được bao bởi cặp { }
✓ Các câu lệnh trong thân hàm phải viết thụt vào
Trang 17Làm quen lập trình C/C++ Qua các ví dụ đơn giản
Dòng thứ 6: int i; là lệnh khai báo, mẫu tự i gọi là tên biến Biến là một vị trí
trong bộ nhớ dùng lưu trữ giá trị nào đó mà chương trình sẽ lấy để sử dụng Mỗi biến phải thuộc một kiểu dữ liệu Trong trường hợp này ta sử dụng biến i kiểu số nguyên (integer) viết tắt là int
Dòng thứ 8: cin>> i Sử dụng hàm cin để nhận từ người sử dụng một trị nào đó Dòng thứ 9: cout << "So ban vua nhap la: " << i; Hàm này có 2 “<<”, “<<” đầu tiên dùng đề in ra chuỗi So ban vua nhao la:, “<<” thứ hai là để in ra giá trị
Trang 18Làm quen lập trình C/C++ Qua các ví dụ đơn giản
Dòng thứ 4: #define PI 3.14, dùng chỉ thị define để định nghĩa hằng số PI có
giá trị 3.14 Trước define phải có dấu # và cuối dòng không có dấu chấm phẩy
Trang 19float for goto huge
if int interrupt
long near pascal register return short static
struct signed sizeof switch typedef union unsigned
void volatile while
Lưu ý: Các từ khóa phải viết bằng chữ thường
3.2 Tên
Tên thường được đặt cho hằng, biến, mảng, con trỏ, nhãn… Chiều dài tối
đa của tên là 32 ký tự
Tên biến hợp lệ là một chuỗi ký tự liên tục gồm: Ký tự chữ, số và dấu
gạch dưới Ký tự đầu của tên phải là chữ hoặc dấu gạch dưới Khi đặt tên
không được đặt trùng với các từ khóa
Ví dụ 1:
Các tên đúng: tamgiac, a_1, So_ODD, Case
Các tên sai:
5t_1 (ký tự đầu là số) so-odd (sử dụng dấu gạch ngang) int (đặt tên trùng với từ khóa) tam giac (có khoảng trắng)
f(x) (có dấu ngoặc tròn)
Lưu ý: Trong C/C++, tên phân biệt chữ hoa, chữ thường
Ví dụ 2: number khác Number
case khác Case (case là từ khóa, do đó đặt tên là Case vẫn đúng)
Trang 20Miền giá trị (Range)
0 đến 65,535 – 32,768 đến 32,767 – 32,768 đến 32,767
0 đến 4,294,967,295 – 2,147,483,648 đến 2,147,483,647
3.4 * 10–38 đến 3.4 * 1038
1.7 * 10–308 đến 1.7 * 10308
3.4 * 10–4932 đến 1.1 * 104932
3.4 Ghi chú
Trong khi lập trình cần phải ghi chú để giải thích các biến, hằng, thao tác
xử lý giúp cho chương trình rõ ràng dễ hiểu, dễ nhớ, dễ sửa chữa và để người khác đọc vào dễ hiểu Trong C/C++ có các ghi chú sau: // hoặc /* nội dung ghi chú */
• // dùng để ghi chú một hàng
• /* … */ có thể ghi chú một hàng hoặc nhiều hàng
3.5 Khai báo biến
Tên biến
Mỗi biến khi sử dụng trong chương trình điều phải được đặt tên theo quy định như cách đặt tên biến như mục 3.2
Trang 21Các thành phần trong ngôn ngữ C/C++
Khai báo biến
Mọi biến đều phải được khai báo trước khi sử dụng
Cú pháp:
Kiểu dữ liệu Danh sách tên biến;
o Kiểu dữ liệu: 1 trong các kiểu ở mục 3.3
o Danh sách tên biến: gồm các tên biến có cùng kiểu dữ liệu, mỗi tên biến cách nhau dấu phẩy (,), cuối cùng là dấu chấm phẩy (;)
Ví du:
int i; // Khai báo i là kiểu nguyên
float x,y,z; // Khai báo x,y,z là kiểu thực
Vừa khai báo vừa khởi gán
Có thể kết hợp việc khai báo với toán tử gán để biến nhận ngay giá trị cùng lúc với khai báo
Ví dụ: Khai báo trước, gán giá trị sau:
int x, y;
x = 1; y = 2;
Vừa khai báo vừa gán giá trị:
int a = 1, b = 2, c = 5;
Vị trí đặt các khai báo biến
Khi lập trình, phải nắm rõ vị trí của biến Nếu khai báo và sử dụng không đúng, không rõ ràng sẽ dẫn đến sai sót khó kiểm soát được, vì vậy cần phải xác định đúng vị trí, phạm vi sử dụng biến trước khi sử dụng biến
Khai báo biến ngoài (biến toàn cục): Vị trí biến đặt bên ngoài tất cả các hàm, cấu trúc Các biến này có ảnh hưởng đến toàn bộ chương trình Chu trình sống của nó là bắt đầu chạy chương trình đến lúc kết thúc chương trình
Khai báo biến trong (biến cục bộ): Vị trí biến đặt bên trong hàm, cấu trúc… Chỉ ảnh hưởng nội bộ bên trong hàm, cấu trúc đó… Chu trình sống của
nó bắt đầu từ lúc hàm, cấu trúc được gọi thực hiện đến lúc thực hiện xong
Trang 22Biểu thức
Chương 4: BIỂU THỨC 4.1 Biểu thức
Biểu thức là một sự kết hợp giữa các phép toán và các toán hạng để diễn đạt một công thức toán học nào đó Mỗi biểu thức sẽ có một giá trị Như vậy hằng, biến, phần tử mảng và hàm cũng được xem là biểu thức
Trong C/C++, ta có hai khái niệm về biểu thức: Biểu thức gán và Biểu thức điều kiện
Biểu thức được phân loại theo kiểu giá trị: nguyên và thực Trong các mệnh đề logic, biểu thức được phân thành đúng (giá trị khác 0) và sai (giá trị bằng 0)
Biểu thức thường được dùng trong:
▪ Vế phải của câu lệnh gán
(Chia số nguyên sẽ chặt phần thập phân)
(Cho phần dư của phép chia x cho y)
Ví dụ: 14/3=4
11%7=4
Trang 23Biểu thức
4.3 Các phép toán quan hệ và logic
Phép toán quan hệ và logic cho giá trị đúng (1) hoặc giá trị sai (0)
i<n-1 được hiểu là i < (n-1)
4.4 Phép toán tăng giảm
C/C++ đưa ra hai phép toán một ngôi để tăng và giảm các biến (nguyên và thực) Toán tử tăng là ++ sẽ cộng 1 vào toán hạng của nó, toán tử giảm thì sẽ trừ toán hạng đi 1
Ví dụ: n=7
++n Cho ta n=8 ; n Cho ta n=6
Ta có thể viết phép toán ++ và trước hoặc sau toán hạng như sau: ++n, n++,
n, n
Trang 24Biểu thức
Sự khác nhau của ++n và n++: trong phép n++ thì tăng sau khi giá trị của nó đã được sử dụng, còn trong phép ++n thì n được tăng trước khi sử dụng Sự khác nhau giữa n và n cũng như vậy
Ví dụ: n=6
4.5 Thứ tự ưu tiên các phép toán
Các phép toán có độ ưu tiên khác nhau, điều này có ý nghĩa trong cùng một biểu thức sẽ có một số phép toán này được thực hiện trước một số phép toán khác
Thứ tự ưu tiên của các phép toán được trình bày trong bảng sau:
2 ! ~ & * - ++ (type ) sizeof Phải qua trái
14 = += -= *= /= %= <<= >>= &= ^=
|=
Phải qua trái
Trang 25Biểu thức
4.6 Chuyển đổi kiểu
Trong một biểu thức các toán hạng có thể có các kiểu dữ liệu khác nhau Vì vậy để tính toán được chính xác cần phải chuyển đổi kiểu cho phù hợp
Có hai cách chuyển đổi kiểu dữ liệu:
• Chuyển kiểu tự động: Khi có hai toán hạn trong một phép toán khác kiểu dữ liệu thì toán hạn có độ ưu tiên thấp hơn sẽ tự động chuyển thành kiểu cao hơn trước khi thực hiện phép toán
Ví dụ int i ; thì sau lệnh gán i=3.23 thì kết quả là i = 3
• Chuyển kiểu bắt buộc: Thực hiện theo cú pháp sau
Phải khai báo tiền xử lý #include<cstdlib>
Cho giá trị tuyệt đối của số x
Ví dụ: int num = - 123;
num = abs(num); //kết quả num = 123
rand
rand();
Phải khai báo tiền xử lý #include<cstdlib>
Cho 1 giá trị ngẫu nhiên từ 0 đến 32767
Ví dụ: int num;
srand(time(NULL)); //dùng hàm này để khởi đầu bộ số ngẫu nhiên
Trang 26Biểu thức
Phải khai báo tiền xử lý #include <ctime>
num = rand(); //kết quả num = 1 con số trong khoảng 0 32767
Tạo ngẫu nhiên 1 số trong khoảng (a,b)
x=rand()%(b-a+1)+a
pow
double pow(double x, double y);
Phải khai báo tiền xử lý #include<math.h>
int atoi(const char *s);
Phải khai báo tiền xử lý #include<cstdlib>
Chuyển đổi 1 chuỗi sang giá trị int
Ví dụ: int i;
char *str = "12345.67";
i = atoi(str);
Kết quả i = 12345
Trang 27hình Hàm sẽ trả về ký tự nhận được và lưu vào biến
Ký tự sẽ được hiển thị với màu trắng
Trang 28Nhập – Xuất dữ liệ
5.2 Đưa kết quả ra màn hình - Hàm printf
printf ("chuỗi định dạng"[, đối mục 1, đối mục 2,…]);
- Phải khai báo tiền xử lý #include<stdio.h>
- printf: tên hàm, phải viết bằng chữ thường
- đối mục 1,…: là các mục dữ kiện cần in ra màn hình Các đối mục này có thể là biến, hằng hoặc biểu thức phải được định trị trước khi in ra
- chuỗi định dạng: được đặt trong cặp nháy kép (" "), gồm 3 loại:
✓ Đối với chuỗi kí tự ghi như thế nào in ra giống như vậy
✓ Đối với những kí tự chuyển đổi dạng thức cho phép kết xuất giá trị của các đối mục ra màn hình tạm gọi là mã định dạng Sau đây là các dấu
%x : Số nguyên thập phân không dấu
%u : Số nguyên hex không dấu
%o : Số nguyên bát phân không dấu
l : Tiền tố dùng kèm với %d, %u, %x, %o để chỉ số nguyên dài (ví dụ %ld)
✓ Các ký tự điều khiển và ký tự đặc biệt
\n : Nhảy xuống dòng kế tiếp canh về cột đầu tiên
\t : Canh cột tab ngang
\r : Nhảy về đầu hàng, không xuống hàng
\a : Tiếng kêu bip
\\ : In ra dấu \
\" : In ra dấu "
\' : In ra dấu '
%% : In ra dấu %
Trang 29Nhập – Xuất dữ liệ
5.3 Vào số liệu từ bàn phím - Hàm scanf
Cú pháp:
scanf ("chuỗi định dạng"[, đối mục 1, đối mục 2,…]);
- Phải khai báo tiền xử lý #include<stdio.h>
- scanf: tên hàm, phải viết bằng chữ thường
- khung định dạng: được đặt trong cặp nháy kép (" ") là hình ảnh dạng dữ liệu nhập vào
- đối mục 1,…: là danh sách các đối mục cách nhau bởi dấu phẩy, mỗi đối mục sẽ tiếp nhận giá trị nhập vào
- Ta phải dùng toán tử & để lấy địa chỉ của một biến Giã sử x là biến thì &x
là địa chỉ của biến x
5.4 Đưa kết quả ra màn hình - Hàm cout
Để xuất một biểu thức ra màn hình (Standard output device), ta thực hiện như sau:
<< expression_n;
Kết quả thu được là hoàn toàn tương tự cout cùng với toán tử << có thể
xuất được nhiều kiểu dữ liệu khác nhau mà không cần sự can thiệp của lập
trình viên C++ tự động nhận biết và xuất ra dưới định dạng phù hợp
Định dạng kết quả xuất:
Khi xuất dữ liệu ra màn hình, đôi khi ta cần định dạng theo một yêu cầu
nào đó Ngôn ngữ C++, cung cấp cho người lập trình một số cách để định dạng
dữ liệu xuất như sau:
Trang 30Nhập – Xuất dữ liệ
• endl: Tương đương với kí tự xuống dòng '\n'
• setw(n): Bình thường các giá trị được in ra bởi lệnh cout << sẽ thẳng theo lề trái với độ rộng phụ thuộc vào độ rộng của giá trị đó Phương thức này qui định độ rộng dành để in ra các giá trị là n cột màn hình Nếu n lớn hơn độ dài thực của giá trị, giá trị sẽ in ra theo lề phải, để trống phần thừa (dấu cách) ở trước
• setfill(‘*’) Thiết đặt ký tự sẽ được cộng thêm vào dữ liệu xuất khi chiều dài nhỏ hơn chiều dài được thiết đặt
• << fixed <<setprecision(n) : ấn định số chữ số thập phân sẽ hiển thị
• dec: hiển thị giá trị số ở hệ thập phân
• hec: hiển thị giá trị số ở hệ thập lục phân
• oct : hiển thị giá trị số ở hệ bát phân
Ghi chú: Để sử dụng setw(n), setfill(‘*’), fixed và setprecision(n) thì phải khai báo tiền xử lý #include <iomanip>
cout << fixed <<setprecision(2) << a; // kết quả là 5678.68
cout <<endl<< setw(5)<<12; //kết qủa " 12"
cout <<endl<<setw(10)<<hex <<15; // kết quả f
cout <<endl<<oct <<10; // kết quả 12
cout <<endl<<dec <<0x10; // kết quả 16
cout<<"\n Xuat :” <<setw(3)<<setfill('0')<<b; // kết quả Xuat: 003 }
Trang 31Nhập – Xuất dữ liệ
5.5 Vào số liệu từ bàn phím - Hàm cin
Bàn phím là thiết bị nhập chuẩn (standard input device) Để vào dữ liệu từ
bàn phím cho các biến ta có thể dùng cin vùng toán tử >> Cú pháp sẽ như sau:
Cú pháp
cin >> variable;
Hoặc cho nhiều biến:
cin >> variable_1 >> variable_2 >> … >> variable_n;
Khi gặp những câu lệnh như thế này chương trình sẽ dừng lại để chờ chúng
ta nhập dữ liệu vào từ bàn phím Câu lệnh cin >> variable_1 >> variable_2
>> … >> variable_n; coi các ký tự trắng là ký tự phân cách các lần nhập dữ
liệu Các ký tự trắng (white space characters) bao gồm: dấu cách, dấu tab, và
ký tự xuống dòng (new line) Ví dụ a, b là hai biến kiểu int, thì câu lệnh:
cin >> a >> b;
Sẽ đợi người dùng nhập dữ liệu hai lần, cách nhau bởi ít nhất một ký tự
trắng Ví dụ ta nhập vào bàn phím như sau : 1989 2011 ↵ thì biến a sẽ nhận giá trị 1989, còn biến b sẽ nhận giá trị 2011 Chúng ta cũng không cần quan tâm đến kiểu của các biến, C++ tự động nhận biết điều này
Trang 32Nhập – Xuất dữ liệ
6 Nhập a, b, c In ra màn hình dòng chữ phương trình có dạng ax^2 + bx + c = 0, trong đó các giá trị a, b, c chỉ in 2 số lẻ (ví dụ với a = 5.141, b =
Ví dụ: 02:11:05
Trang 33Cấu trúc điều khiển
Chương 6: CẤU TRÚC ĐIỀU KHIỂN
Một chương trình bao gồm nhiều câu lệnh Thông thường các câu lệnh được thực hiện một cách lần lượt theo thứ tự mà chúng được viết ra Các cấu trúc điều khiển cho phép thay đổi trật tự nói trên, do đó máy có thể nhảy thực hiện một câu lệnh khác ở một ví trí trước hoặc sau câu lệnh hiện thời
Xét về mặt công dụng, có thể chia các cấu trúc điều khiển thành các nhóm chính:
Nhảy không có điều kiện
Toán tử if cho phép lựa chọn chạy theo một trong hai nhánh tuỳ thuộc vào
sự bằng không và khác không của biểu thức Nó có hai cách viết sau:
if ( biểu thức ) khối lệnh 1;
/* Dạng một */
if ( biểu thức ) khối lệnh 1;
else khối lệnh 2 ; /* Dạng hai */
Hoạt động của biểu thức dạng 1:
Máy tính giá trị của biểu thức Nếu biểu thức đúng (biểu thức có giá trị khác 0) máy sẽ thực hiện khối lệnh 1 và sau đó sẽ thực hiện các lệnh tiếp sau lệnh if trong chương trình Nếu biểu thức sai (biểu thức có giá trị bằng 0) thì máy bỏ qua khối lệnh 1 mà thực hiện ngay các lệnh tiếp sau lệnh if trong chương trình
Trang 34Cấu trúc điều khiển
Hoạt động của biểu thức dạng 2:
Máy tính giá trị của biểu thức Nếu biểu thức đúng (biểu thức có giá trị khác 0) máy sẽ thực hiện khối lệnh 1 và sau đó sẽ thực hiện các lệnh tiếp sau khối lệnh 2 trong chương trình Nếu biểu thức sai (biểu thức có giá trị bằng 0) thì máy bỏ qua khối lệnh 1 mà thực hiện khối lệnh 2 sau đó thực hiện tiếp các lệnh tiếp sau khối lệnh 2 trong chương trình
Ví dụ: Chương trình nhập vào hai số a và b, tìm max của hai số rồi in kết quả
lên màn hình Chương trình có thể viết bằng cả hai cách trên như sau:
Trang 35Cấu trúc điều khiển
Sự lồng nhau của các toán tử if:
C/C++ cho phép sử dụng các toán tử if lồng nhau có nghĩa là trong các khối lệnh (1 và 2) ở trên có thể chứa các toán tử if - else khác Trong trường hợp này, nếu không sử dụng các dấu đóng mở ngoặc cho các khối thì sẽ có thể nhầm lẫn giữa các if-else
Chú ý là máy sẽ gắn toán tử else với toán tử if không có else gần nhất Chẳng hạn như đoạn chương trình ví dụ sau:
Trang 36Cấu trúc điều khiển
Đoạn chương trình trên tương đương với:
Trang 37Cấu trúc điều khiển
Nếu biểu thức thứ i (1,2, n-1) có giá trị khác 0, máy sẽ thực hiện khối lệnh i, rồi sau đó đi thực hiện lệnh nằm tiếp theo khối lệnh n trong chương trình
Nếu trong cả n-1 biểu thức không có biểu thức nào khác 0, thì máy sẽ thực hiện khối lệnh n rồi sau đó đi thực hiện lệnh nằm tiếp theo khối lệnh n trong chương trình
Ví dụ: Chương trình giải phương trình bậc hai
6.2 Lệnh nhảy không điều kiện - toán tử goto:
Nhãn có cùng dạng như tên biến và có dấu: đứng ở phía sau Nhãn có thể được gán cho bất kỳ câu lệnh nào trong chương trình
Ví dụ: ts: s=s++;
thì ở đây ts là nhãn của câu lệnh gán s=s++
Toán tử goto có dạng:
Trang 38Cấu trúc điều khiển
goto nhãn;
Khi gặp toán tử này máy sẽ nhảy tới câu lệnh có nhãn viết sau từ khoá goto
Khi dùng toán tử goto cần chú ý:
Câu lệnh goto và nhãn cần nằm trong một hàm, có nghĩa là toán tử goto chỉ cho phép nhảy từ vị trí này đến vị trí khác trong thân một hàm và không thể dùng để nhảy từ một hàm này sang một hàm khác
Không cho phép dùng toán tử goto để nhảy từ ngoài vào trong một khối lệnh Tuy nhiên việc nhảy từ trong một khối lệnh ra ngoài là hoàn toàn hợp lệ
Ví dụ như đoạn chương trình sau là sai
Trang 39Cấu trúc điều khiển
6.3 Lệnh break
Thông thường lệnh break dùng để thoát khỏi vòng lặp không xác định điều kiện dừng hoặc muốn dừng vòng lặp theo điều kiện chỉ định Việc dùng lệnh break để thoát khỏi vòng lặp thường sử dụng phối hợp với lệnh if Lệnh break dùng trong for, while, do…while, switch Lệnh break thoát khỏi vòng lặp chứa
nó
6.4 Cấu trúc rẽ nhánh - toán tử switch:
Là cấu trúc tạo nhiều nhánh đặc biệt Nó căn cứ vào giá trị một biểu thức nguyên để chọn một trong nhiều cách nhảy
Cấu trúc tổng quát của nó là:
switch ( biểu thức nguyên )
{
case n1
khối lệnh 1 case n2
khối lệnh 2
case nk khối lệnh k [ default
khối lệnh k+1 ] }
➢ Với ni là các số nguyên, hằng ký tự hoặc biểu thức hằng Các ni cần có giá trị khác nhau Đoạn chương trình nằm giữa các dấu { } gọi là thân của toán tử switch
➢ default là một thành phần không bắt buộc phải có trong thân của switch
➢ Sự hoạt động của toán tử switch phụ thuộc vào giá trị của biểu thức viết trong dấu ngoặc ( ) như sau:
➢ Khi giá trị của biểu thức này bằng ni, máy sẽ nhảy tới các câu lệnh có nhãn là case ni
Trang 40Cấu trúc điều khiển
➢ Khi giá trị biểu thức khác tất cả các ni thì cách làm việc của máy lại phụ thuộc vào sự có mặt hay không của lệnh default như sau:
➢ Khi có default máy sẽ nhảy tới câu lệnh sau nhãn default
➢ Khi không có default máy sẽ nhảy ra khỏi cấu trúc switch
Chú ý:
Máy sẽ nhảy ra khỏi toán tử switch khi nó gặp câu lệnh break hoặc dấu ngoặc nhọn đóng cuối cùng của thân switch Ta cũng có thể dùng câu lệnh goto trong thân của toán tử switch để nhảy tới một câu lệnh bất kỳ bên ngoài switch
Khi toán tử switch nằm trong thân một hàm nào đó thì ta có thể sử dụng câu lệnh return trong thân của switch để ra khỏi hàm này (lệnh return sẽ đề cập sau)
Khi máy nhảy tới một câu lệnh nào đó thì sự hoạt động tiếp theo của nó sẽ phụ thuộc vào các câu lệnh đứng sau câu lệnh này Như vậy nếu máy nhảy tới câu lệnh có nhãn case ni thì nó có thể thực hiện tất cả các câu lệnh sau đó cho tới khi nào gặp câu lệnh break, goto hoặc return Nói cách khác, máy có thể đi từ nhóm lệnh thuộc case ni sang nhóm lệnh thuộc case thứ ni+1 Nếu mỗi nhóm lệnh được kết thúc bằng break thì toán tử switch sẽ thực hiện chỉ một trong các nhóm lệnh này
Ví dụ: Lập chương trình phân loại học sinh theo điểm sử dụng cấu trúc switch:
case 0:
case 1:
case 2: