Ngôn ngữ lập trình C++ Chương 2 – Các kiểu dữ liệu cơ bản Các cấu trúc điều khiển CuuDuongThanCong.com https://fb.com/tailieudientucntt Tài liệu đọc thêm • Tài liệu đọc thêm cho chương này: – Section 2. Complete C++ Language Tutorial (CCLT) – Day 7. Teach Yourself C++ in 21 Days (TY21) – Namespace (Sec.com https://fb.com/tailieudientucntt Chương 2 – Kiểu dữ liệu và phép toán cơ bản Cấu trúc điều khiển và cấu trúc chương trình Đề mục 2.1 Các kiểu dữ liệu cơ bản 2.2 Các phép gán tắt, phép tăng, phép giảm 2.3 Các phép toán logic 2.4 Thuật toán, mã giả, điều khiển của chương trình, sơ đồ khối 2.5 Sơ lược về các cấu trúc điều khiển 2.6 Cấu trúc lựa chọn if, if/else 2.7 Phép toán lựa chọn 3 ngôi 2.8 Cấu trúc lặp while 2.9 Thiết lập thuật toán 2.10 Điều khiển lặp bằng con đếm và giá trị canh CuuDuongThanCong.com https://fb.com/tailieudientucntt Chương 2 – Kiểu dữ liệu và phép toán cơ bản Cấu trúc điều khiển và cấu trúc chương trình Đề mục (tiếp theo) 2.11 Các cấu trúc lồng nhau 2.12 Vòng lặp for 2.13 Cấu trúc đa lựa chọn switch 2.14 Vòng lặp do/while 2.15 break và continue 2.16 Sơ lược về lập trình cấu trúc CuuDuongThanCong.com https://fb.1 Các kiểu dữ liệu cơ bản char ký tự hoặc số nguyên 8 bit short số nguyên 16 bit long số nguyên 32 bit int số nguyên độ dài bằng 1 word (16 bit hoặc 32 bit) float số chấm động 4 byte double số chấm động 8 byte long double số chấm động 10 byte bool giá trị Boolean, true hoặc false wchar_t ký tự 2 byte, lưu bảng chữ cái quốc tế CuuDuongThanCong.com https://fb.2 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 (++, --) CuuDuongThanCong.com https://fb.2 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 ( &, |, ^, ~, <<, >> ).com https://fb.2 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) CuuDuongThanCong.com https://fb.2 Các phép tăng và giảm • Phép tăng - Increment operator (++) – có thể được dùng thay cho c += 1 • Phép giảm - Decrement operator (--) – có thể được dùng thay cho c -= 1 • Tăng/giảm trước – Preincrement/Predecrement • ++c hoặc --c • Giá trị của biến bị thay đổi, sau đó biểu thức chứa nó được tính giá trị. • Biểu thức có giá trị là giá trị của biến sau khi tăng/giảm • Tăng/giảm sau - Postincrement/Predecrement • c++ hoặc c-- • Biểu thức chứa biến được thực hiện, sau đó biến được thay đổi. • Biểu thức có giá trị là giá trị của biến trước khi tăng/giảm CuuDuongThanCong.com https://fb.2 Các phép tăng và giảm • Ví dụ: nếu c = 5 – cout << ++c; • c nhận giá trị 6, rồi được in ra – cout << c++; • in giá trị 5 (cout được chạy trước phép tăng). • sau đó, c nhận giá trị 6 • Khi biến không nằm trong biểu thức – Tăng trước và tăng sau có kết quả như nhau ++c; cout << c; và c++; cout << c; là như nhau CuuDuongThanCong.com https://fb.com/tailieudientucntt 1 // Fig.cpp 2 // Preincrementing and postincrementing.
3 #include <iostream> 4 fig02_14.cpp 5 using std::cout; (1 of 2) 6 using std::endl; 7 8 // function main begins program execution 9 int main() 5 10 { 5 11 int c; // declare variable 6 12 5 13 // demonstrate postincrement 6 14 c = 5; // assign 5 to c 6 15 cout << c << endl; // print 5 16 cout << c++ << endl; // print 5 then postincrement 17 cout << c << endl << endl; // print 6 18 19 // demonstrate preincrement 20 c = 5; // assign 5 to c 21 cout << c << endl; // print 5 22 cout << ++c << endl; // preincrement then print 6 23 cout << c << endl; // print 6 24 25 return 0; // indicate successful termination 26 27 } // end function main CuuDuongThanCong.com https://fb.3 Các phép toán logic • được dùng làm điều kiện trong các vòng lặp và lệnh if • && (logical AND) – true nếu cả hai điều kiện là true if ( gender == 1 && age >= 65 ) ++seniorFemales; • || (logical OR) – true nếu ít nhất một trong hai điều kiện là true if ( semesterAverage >= 90 || finalExam >= 90 ) cout << "Student grade is A" << endl; CuuDuongThanCong.com https://fb.3 Các phép toán logic • ! (logical NOT, phủ định logic – logical negation) – trả về giá trị true khi điều kiện là false, và ngược lại if ( !( grade == sentinelValue ) ) cout << "The next grade is " << grade << endl; tương đương với: if ( grade != sentinelValue ) cout << "The next grade is " << grade << endl; CuuDuongThanCong.com https://fb.com/tailieudientucntt 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) CuuDuongThanCong.com https://fb.com/tailieudientucntt Nhầm lẫn giữa phép so sánh bằng (==) và phép gán (=) • Ví dụ if ( 4 == payCode ) cout << "You get a bonus!" << endl; – Nếu mã tiền lương (paycode) là 4 thì thưởng • Nếu == bị thay bởi = if ( payCode = 4 ) cout << "You get a bonus!" << endl; – Paycode được gán giá trị 4 (không cần biết giá trị của paycode trước đó) – lệnh gán cho giá trị true (vì 4 khác 0) – trường hợp nào cũng được thưởng CuuDuongThanCong.com https://fb.com/tailieudientucntt 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ể CuuDuongThanCong.com https://fb.com/tailieudientucntt Viết chương trình • Trước khi viết chương trình – Hiểu kỹ bài toán – Lập kế hoạch giải quyết bài toán • Trong khi viết chương trình – Biết lời giải có sẵn cho các bài toán con – Sử dụng các nguyên lý lập trình tốt CuuDuongThanCong.com https://fb.com/tailieudientucntt Thuật toán - Algorithm • Các bài toán tin học – được giải bằng cách thực hiện một chuỗi hành động theo một thứ tự cụ thể • Thuật toán: một quy trình quyết định – Các hành động cần thực hiện – Thứ tự thực hiện – Ví dụ: cách nấu một món ăn • Điều khiển của chương trình – Program Control – Chỉ ra thứ tự thực hiện các lệnh CuuDuongThanCong.com https://fb.com/tailieudientucntt Mã giả - Pseudocode • Mã giả: ngôn ngữ không chính thức được dùng để mô tả thuật toán – tương tự với ngôn ngữ hàng ngày • Không chạy được trên máy tính – dùng để mô tả chương trình trước khi viết chương trình • dễ chuyển thành chương trình C++ – chỉ gồm các lệnh chạy Ví dụ: • không cần khai báo biến tìm số nhỏ hơn trong hai số 1. nếu x>y thì in y ra màn hình 3. nếu không, in x ra màn hình CuuDuongThanCong.com https://fb.com/tailieudientucntt Các cấu trúc điều khiển - Control Structures Khái niệm • Thực thi tuần tự - Sequential execution – Các lệnh được thực hiện theo thứ tự tuần tự • Chuyển điều khiển - Transfer of control – Lệnh tiếp theo được thực thi không phải lệnh tiếp theo trong chuỗi lệnh. • 3 cấu trúc điều khiển – Cấu trúc tuần tự - Sequence structure • theo mặc định, chương trình chạy tuần tự từng lệnh – Các cấu trúc chọn lựa - Selection structures • if, if/else, switch – Các cấu trúc lặp - Repetition structures • while, do/while, for CuuDuongThanCong.com https://fb.com/tailieudientucntt Các cấu trúc điều khiển • Các từ khóa của C++ – Không thể dùng làm tên biến hoặc tên hàm C + + K e y w o rd s K e y w o r d s c o m m o n to th e C a n d C + + p r o g r a m m in g la n g u a g e s auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while C + + o n ly k e y w o r d s asm bool catch class const_cast delete dynamic_cast explicit false friend inline mutable namespace new operator private protected public reinterpret_cast static_cast template this throw true try typeid typename using virtual wchar_t CuuDuongThanCong.com https://fb.com/tailieudientucntt Các cấu trúc điều khiển true grade >= 60 print “Passed” false • Sơ đồ khối - Flowchart – mô tả thuật toán bằng hình vẽ – gồm các ký hiệu đặc biệt được nối bằng các mũi tên (flowlines) – Hình chữ nhật (ký hiệu hành động) • kiểu hành động bất kỳ – ký hiệu oval • Bắt đầu hoặc kết thúc một chương trình, hoặc một đoạn mã (hình tròn) • Các cấu trúc điều khiển có đúng 1 đầu vào, 1 đầu ra – Kết nối đầu ra của một cấu trúc điều khiển với đầu vào của cấu trúc tiếp theo – xếp chồng các cấu trúc điều khiển CuuDuongThanCong.com https://fb.com/tailieudientucntt Cấu trúc lựa chọn if • Cấu trúc lựa chọn - Selection structure – chọn giữa các tuyến hành động khác nhau – ví dụ bằng mã giả: If student’s grade is greater than or equal to 60 Print “Passed” – Nếu điều kiện thỏa mãn (có giá trị true) • lệnh Print được thực hiện, chương trình chạy tiếp lệnh tiếp theo – Nếu điều kiện không thỏa mãn (có giá trị false) • lệnh Print bị bỏ qua, chương trình chạy tiếp – Cách viết thụt đầu dòng làm chương trình dễ đọc hơn • C++ bỏ qua các ký tự trắng (tab, space, etc.com https://fb.