Lập trình nâng cao
Giới thiệu về C++
Outline
• Chương trình đầu tiên HelloWorld.cpp • Ra vào dữ liệu đơn giản • Biến, hằng, và kiểu dữ liệu • Phép toán • Các lệnh rẽ nhánh điều kiện • Các lệnh lặp
Giới thiệu C++ 2
Hello World!
Chú thích bắt đầu bằng //
Tiền xử lý #include yêu cầu nạp nội dung file thư viện iostream trước khi dịch
Hàm int main() là phần code sẽ được thực thi khi chương trình chạy
cout << là cách ghi một đoạn text ra màn hình
std là không gian tên (namespace) của thư viện chuẩn std::cout có nghĩa là cout thuộc không gian tên std
return 0 hàm ý chương trình kết thúc thành công
Cặp ngoặc { } đánh dấu đầu và cuối một khối lệnh - block
Giới thiệu C++ 3
Variable – Biến
Biến: một vùng nhớ được đặt tên
khai báo biến x thuộc kiểu int
Khởi tạo giá trị cho x. Có thể thay hai dòng 5,6 bằng một dòng với nội dung: int x = 4 + 2;
Nối các phép toán << để in một chuỗi giá trị.
Với khai báo namespace, sẽ không phải viết std:: mà chỉ cần viết cout là đủ hiểu
Giới thiệu C++ 4
Data types – các kiểu dữ liệu
true/false
Kế thừa từ C • char • short, int, long • float, double, long double Các kiểu khác • bool • wchar_t ký tự, lưu bảng chữ cái quốc tế
Giới thiệu C++ 5
Standard input – Đọc dữ liệu từ bàn phím
Đọc từ bàn phím và ghi giá trị đọc được vào biến x
• Gợi ý: mũi tên >>, << đi theo chiều của dữ liệu
Giới thiệu C++ 6
Hằng – khai báo bằng #define
Định nghĩa hằng không cần biến trong bộ nhớ. Trước khi dịch, bộ tiền xử lý sẽ thay thế tất cả các chuỗi kí tự PI trong code bằng chuỗi 3.14159
Giới thiệu C++ 7
Hằng – khai báo bằng const
• Một biến được định nghĩa kèm từ khóa const
là biến có giá trị không thể thay đổi.
Giới thiệu C++ 8
Các phép toán cơ bản
• phép gán – assignation (=)
x = 5;
//x: lvalue, 5: rvalue
– là biểu thức có giá trị là giá trị được gán
• các phép toán số học - Arithmetic operators
(+, -, *, /, %)
• các phép gán kép - Compound assignation operators
(+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
• phép tăng và phép giảm (++, --)
Giới thiệu C++ 9
Các phép toán cơ bản
• các phép quan hệ - relational operators
( ==, !=, >, <, >=, <= )
• các phép toán logic - Logic operators ( !, &&, || ) • phép điều kiện - Conditional operator ( ? ). (7 == 5 ? 4 : 3) cho kết quả 3 do 7 khác 5.
• các toán tử bit - Bitwise Operators
( &, |, ^, ~, <<, >> ).
Giới thiệu C++ 10
Các phép gán tắt
• Các biểu thức gán tắt - Assignment expression
abbreviations – Phép gán cộng
c = c + 3; viết tắt thành c += 3;
• Các lệnh có dạng
variable = variable operator expression;
có thể được viết lại thành
variable operator= expression;
• Các phép gán khác
d -= 4 (d = d - 4) e *= 5 (e = e * 5) f /= 3 (f = f / 3) g %= 9 (g = g % 9)
Giới thiệu C++ 11
Increment (++) và Decrement (--)
• a++ và ++a là viết tắt của a = a + 1 với cảnh
báo: ++a tăng a, sau đó trả về giá trị của a a++ trả về giá trị hiện tại của a, sau đó tăng a --a giảm a, sau đó trả về giá trị của a a-- trả về giá trị hiện tại của a, sau đó giảm a
Giới thiệu C++ 12
int c; // declare variable
5 5 6
// print 5
5 6 6
// demonstrate postincrement c = 5; // assign 5 to c cout << c << endl; cout << c++ << endl; // print 5 then postincrement cout << c << endl << endl; // print 6
// demonstrate preincrement c = 5; // assign 5 to c cout << c << endl; // print 5 cout << ++c << endl; // preincrement then print 6 cout << c << endl; // print 6
return 0; // indicate successful termination
1 // Fig. 2.14: fig02_14.cpp
2 // Preincrementing and postincrementing.
3 #include
Casting – Đổi kiểu giá trị
Bắt buộc đổi tường minh từ float sang int
Trình biên dịch ngầm đổi kiểu
Giới thiệu C++ 14
Các phép toán và độ ưu tiên
Giới thiệu C++ 15
if và phép toán ba ngôi ? :
Tương đương với
Giới thiệu C++ 16
Các phép toán logic
• ! (logical NOT – phủ định logic)
– trả về giá trị true khi điều kiện là false, và
ngược lại if ( !( grade == ‘F’ ) )
cout << "Congratulation, you’ve passed!" << endl;
tương đương với:
if ( grade != ‘F’ )
cout << "Congratulation, you’ve passed!" << endl;
17
Nhầm lẫn giữa phép so sánh bằng (==) và phép gán (=)
• Lỗi thường gặp
– Thường không tạo lỗi cú pháp (syntax error)
• Các khía cạnh của vấn đề
– biểu thức có giá trị có thể được dùng làm điều
kiện • bằng không = false, khác không = true
– Các lệnh gán cũng tạo giá trị (giá trị được gán)
18
Nhầm lẫn giữa phép so sánh bằng (==) và phép gán (=)
• Ví dụ
if (grade == ‘F’)
cout << "You’ve failed!" << endl;
– Nếu điểm (grade) là F thì trượt
• Nếu == bị thay bởi = if (grade = ‘F’)
cout << "You’ve failed!" << endl; – grade được gán giá trị ‘F’ (không cần biết giá trị cũ của
grade)
– lệnh gán trả về true (vì ‘F’ khác 0) – trường hợp nào cũng trượt
19
Nhầm lẫn giữa phép so sánh bằng (==) và phép gán (=)
• Lvalue
– là biểu thức có thể xuất hiện tại vế trái của phép gán – xác định một vùng nhớ có thể được gán trị (i.e, các
biến)
• x = 4;
• Rvalue
– chỉ xuất hiện bên phải phép gán – hằng, các giá trị (literal) • không thể viết 4 = x;
• Lvalue có thể được dùng như các rvalue, nhưng
chiều ngược lại là không thể
20
Nhầm lẫn giữa phép so sánh bằng (==) và phép gán (=)
Lời khuyên: nên viết
‘F’ == grade
thay vì
grade == ‘F’
Lí do: trình biên dịch sẽ phát hiện nếu bạn nhầm
thành ‘F’ = grade
21

