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 4 5 using std::cout; 6 using std::endl; 7 8 // function main begins program execution 9 int main() 10 { 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 } // end function main

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