Admin Học Vấn Cho Con|
08/10/2025
23lượt xem
0bình luận

C++ Bài 19: Độ ưu tiên toán tử – nhân chia trước, cộng trừ sau!

Mục lục

Chào các bạn! Hôm nay chúng ta sẽ học về “luật ưu tiên của máy tính” – quy tắc giúp C++ biết phép toán nào tính trước, phép nào tính sau! 🚀

🎭 Hãy tưởng tượng:

  • Bạn làgiáo viên toán👨‍🏫 giải thích thứ tự phép tính cho cả lớp!
  • Hoặc bạn làthẩm phán tính toán⚖️ quyết định quy tắc ưu tiên công bằng!
  • Hoặc đơn giản, bạn muốnmáy tính ra kết quả đúngnhư mong muốn! 🧮

Hôm nay bạn sẽ học:

  • Bảng độ ưu tiêntoán tử từ cao đến thấp
  • Quy tắc “Nhân chia trước, cộng trừ sau”và mở rộng
  • Sử dụng ngoặc đơnđể thay đổi thứ tự tính
  • Tránh những lỗi ngớ ngẩnkhi viết biểu thức phức tạp!
// Cùng con số nhưng kết quả khác nhau!
int a = 2 + 3 * 4;        // Kết quả: 14 (không phải 20!)
int b = (2 + 3) * 4;      // Kết quả: 20 (có ngoặc)

cout << a << endl;        // In ra: 14
cout << b << endl;        // In ra: 20

Từ bây giờ, bạn sẽ trở thành “master biểu thức” có thể viết công thức phức tạp! 🚀


📚 BẢNG ĐỘ ƯU TIÊN TOÁN TỬ HOÀN CHỈNH

🎯 Thứ tự từ cao đến thấp (cao = tính trước):

MứcToán tửTênVí dụGhi chú
1()Ngoặc đơn(a + b)Cao nhất – Luôn tính trước
2!NOT logic!isActiveToán tử một ngôi
3* / %Nhân, chia, chia lấy dưa * b / cCùng mức, tính trái→phải
4+ -Cộng, trừa + b - cCùng mức, tính trái→phải
5< <= > >=So sánh kích thướca > bToán tử so sánh
6== !=So sánh bằng/kháca == bSo sánh bằng nhau
7&&AND logica && bLogic VÀ
8||OR logica || bThấp nhất – Logic HOẶC

🌟 Quy tắc vàng:

  1. Mức caotínhtrướcmức thấp
  2. Cùng mứcthì tính từtrái sang phải
  3. Ngoặc đơn ()luônthay đổithứ tự tự nhiên

🧮 MỨC 1: NGOẶC ĐƠN () – VUA CỦA MỌI TOÁN TỬ

👑 Ngoặc đơn luôn được ưu tiên cao nhất:

#include <iostream>
using namespace std;

int main() {
    int a = 2, b = 3, c = 4;
    
    cout << "🧮 DEMO SỨC MẠNH CỦA NGOẶC ĐƠN:" << endl;
    cout << "═══════════════════════════════════" << endl;
    
    // Không có ngoặc - theo thứ tự ưu tiên tự nhiên
    int ketQua1 = a + b * c;
    cout << "a + b × c = " << a << " + " << b << " × " << c << " = " << ketQua1 << endl;
    cout << "Giải thích: " << b << " × " << c << " = " << (b*c) << ", rồi " << a << " + " << (b*c) << " = " << ketQua1 << endl;
    
    // Có ngoặc - thay đổi thứ tự
    int ketQua2 = (a + b) * c;
    cout << "(a + b) × c = (" << a << " + " << b << ") × " << c << " = " << ketQua2 << endl;
    cout << "Giải thích: " << a << " + " << b << " = " << (a+b) << ", rồi " << (a+b) << " × " << c << " = " << ketQua2 << endl;
    
    // Ngoặc phức tạp hơn
    int ketQua3 = (a + b) * (c - 1);
    cout << "(a + b) × (c - 1) = (" << a << " + " << b << ") × (" << c << " - 1) = " << ketQua3 << endl;
    
    return 0;
}

💰 Ví dụ thực tế – Tính tiền mua sắm:

int main() {
    double giaAo = 250000;      // 250k
    double giaQuan = 180000;    // 180k
    double giaGiay = 320000;    // 320k
    int soLuongAo = 2;
    int soLuongQuan = 1;
    double giamGia = 0.1;       // 10%
    
    cout << "💰 TÍNH TIỀN MUA SẮM - ẢNH HƯỞNG CỦA NGOẶC:" << endl;
    cout << "═══════════════════════════════════════════" << endl;
    
    // SAI: Không dùng ngoặc
    double tongTienSai = giaAo * soLuongAo + giaQuan * soLuongQuan - giamGia * giaGiay;
    cout << "❌ CÁCH TÍNH SAI (không ngoặc):" << endl;
    cout << "Tổng = " << giaAo << " × " << soLuongAo << " + " << giaQuan << " × " << soLuongQuan << " - " << giamGia << " × " << giaGiay << endl;
    cout << "     = " << (giaAo * soLuongAo) << " + " << (giaQuan * soLuongQuan) << " - " << (giamGia * giaGiay) << endl;
    cout << "     = " << tongTienSai << " VNĐ" << endl;
    
    // ĐÚNG: Dùng ngoặc
    double tongTienDung = (giaAo * soLuongAo + giaQuan * soLuongQuan + giaGiay) * (1 - giamGia);
    cout << "\n✅ CÁCH TÍNH ĐÚNG (có ngoặc):" << endl;
    cout << "Tổng = (" << giaAo << " × " << soLuongAo << " + " << giaQuan << " × " << soLuongQuan << " + " << giaGiay << ") × (1 - " << giamGia << ")" << endl;
    cout << "     = " << (giaAo * soLuongAo + giaQuan * soLuongQuan + giaGiay) << " × " << (1 - giamGia) << endl;
    cout << "     = " << tongTienDung << " VNĐ" << endl;
    
    cout << "\n💡 Chênh lệch: " << (tongTienDung - tongTienSai) << " VNĐ!" << endl;
    
    return 0;
}

⚡ MỨC 2: TOÁN TỬ NOT (!) – SỨC MẠNH ĐẢO NGƯỢC

🚫 NOT có độ ưu tiên cao thứ 2:

int main() {
    bool isOnline = true;
    bool hasPermission = false;
    
    cout << "🚫 DEMO TOÁN TỬ NOT (!):" << endl;
    cout << "═══════════════════════════════" << endl;
    
    // NOT được tính trước các toán tử khác
    bool ketQua1 = !isOnline || hasPermission;
    cout << "!isOnline || hasPermission = !" << boolalpha << isOnline << " || " << hasPermission;
    cout << " = " << !isOnline << " || " << hasPermission << " = " << ketQua1 << endl;
    
    // So sánh với có ngoặc
    bool ketQua2 = !(isOnline || hasPermission);
    cout << "!(isOnline || hasPermission) = !(" << isOnline << " || " << hasPermission << ")";
    cout << " = !" << (isOnline || hasPermission) << " = " << ketQua2 << endl;
    
    return 0;
}

✖️➗ MỨC 3: NHÂN (*), CHIA (/), CHIA LẤY DƯ (%) – BỘ BA QUYỀN LỰC

🎪 Cùng mức độ ưu tiên, tính từ trái sang phải:

int main() {
    int a = 20, b = 4, c = 3, d = 2;
    
    cout << "✖️➗ DEMO NHÂN, CHIA, CHIA LẤY DƯ:" << endl;
    cout << "═══════════════════════════════════" << endl;
    
    // Tất cả cùng mức, tính từ trái sang phải
    int ketQua1 = a / b * c;
    cout << "a ÷ b × c = " << a << " ÷ " << b << " × " << c;
    cout << " = " << (a/b) << " × " << c << " = " << ketQua1 << endl;
    
    // Thay đổi với ngoặc
    int ketQua2 = a / (b * c);
    cout << "a ÷ (b × c) = " << a << " ÷ (" << b << " × " << c << ")";
    cout << " = " << a << " ÷ " << (b*c) << " = " << ketQua2 << endl;
    
    // Kết hợp với chia lấy dư
    int ketQua3 = a % b / d;
    cout << "a % b ÷ d = " << a << " % " << b << " ÷ " << d;
    cout << " = " << (a%b) << " ÷ " << d << " = " << ketQua3 << endl;
    
    return 0;
}

📐 Ví dụ thực tế – Tính diện tích và chu vi:

int main() {
    double PI = 3.14159;
    double banKinh = 5.0;
    double chieuDai = 8.0;
    double chieuRong = 6.0;
    
    cout << "📐 TÍNH TOÁN HÌNH HỌC VỚI TOÁN TỬ:" << endl;
    cout << "═══════════════════════════════════════" << endl;
    
    // Diện tích hình tròn: π × r²
    double dienTichTron = PI * banKinh * banKinh;
    cout << "🟡 Diện tích hình tròn = π × r² = " << PI << " × " << banKinh << "² = " << dienTichTron << " đơn vị²" << endl;
    
    // Chu vi hình chữ nhật: 2 × (dài + rộng)
    double chuViHCN = 2 * (chieuDai + chieuRong);
    cout << "📱 Chu vi hình chữ nhật = 2 × (dài + rộng) = 2 × (" << chieuDai << " + " << chieuRong << ") = " << chuViHCN << " đơn vị" << endl;
    
    // Diện tích hình chữ nhật
    double dienTichHCN = chieuDai * chieuRong;
    cout << "📱 Diện tích hình chữ nhật = dài × rộng = " << chieuDai << " × " << chieuRong << " = " << dienTichHCN << " đơn vị²" << endl;
    
    return 0;
}

➕➖ MỨC 4: CỘNG (+), TRỪ (-) – DUO THÂN THIẾT

🎯Độ ưu tiên thấp hơn nhân chia:

int main() {
    int a = 10, b = 3, c = 2, d = 4;
    
    cout << "➕➖ DEMO CỘNG VÀ TRỪ:" << endl;
    cout << "═════════════════════════" << endl;
    
    // Nhân chia trước, cộng trừ sau
    int ketQua1 = a + b * c - d;
    cout << "a + b × c - d = " << a << " + " << b << " × " << c << " - " << d << endl;
    cout << "Từng bước: " << b << " × " << c << " = " << (b*c) << endl;
    cout << "          " << a << " + " << (b*c) << " = " << (a + b*c) << endl;
    cout << "          " << (a + b*c) << " - " << d << " = " << ketQua1 << endl;
    
    // Cộng trừ từ trái sang phải
    int ketQua2 = a + b - c + d;
    cout << "\na + b - c + d = " << a << " + " << b << " - " << c << " + " << d << endl;
    cout << "Từ trái sang phải: " << a << " + " << b << " = " << (a+b) << endl;
    cout << "                  " << (a+b) << " - " << c << " = " << (a+b-c) << endl;
    cout << "                  " << (a+b-c) << " + " << d << " = " << ketQua2 << endl;
    
    return 0;
}

🔍 MỨC 5-6: TOÁN TỬ SO SÁNH – THẨM PHÁN CÔNG BẰNG

⚖️ So sánh kích thước trước, so sánh bằng nhau sau:

int main() {
    int diem1 = 85, diem2 = 78, diem3 = 85;
    int diemChuan = 80;
    
    cout << "🔍 DEMO TOÁN TỬ SO SÁNH:" << endl;
    cout << "═══════════════════════════════" << endl;
    
    // Phép toán + so sánh kích thước
    bool ketQua1 = diem1 + 5 > diemChuan;
    cout << "diem1 + 5 > diemChuan = " << diem1 << " + 5 > " << diemChuan;
    cout << " = " << (diem1 + 5) << " > " << diemChuan << " = " << boolalpha << ketQua1 << endl;
    
    // So sánh kích thước trước so sánh bằng
    bool ketQua2 = diem1 > diem2 == diem1 > diem3;
    cout << "diem1 > diem2 == diem1 > diem3:" << endl;
    cout << "Bước 1: " << diem1 << " > " << diem2 << " = " << (diem1 > diem2) << endl;
    cout << "Bước 2: " << diem1 << " > " << diem3 << " = " << (diem1 > diem3) << endl;
    cout << "Bước 3: " << (diem1 > diem2) << " == " << (diem1 > diem3) << " = " << ketQua2 << endl;
    
    return 0;
}

🧠 MỨC 7-8: TOÁN TỬ LOGIC – BỘ NÃO CUỐI CÙNG

💭 AND (&&) trước OR (||):

int main() {
    bool daDangNhap = true;
    bool laAdmin = false;
    bool coQuyen = true;
    bool taiKhoanHoatDong = true;
    
    cout << "🧠 DEMO TOÁN TỬ LOGIC:" << endl;
    cout << "════════════════════════════" << endl;
    
    // AND trước OR
    bool ketQua1 = daDangNhap && laAdmin || coQuyen && taiKhoanHoatDong;
    cout << "daDangNhap && laAdmin || coQuyen && taiKhoanHoatDong:" << endl;
    cout << "Bước 1 (AND): " << boolalpha << daDangNhap << " && " << laAdmin << " = " << (daDangNhap && laAdmin) << endl;
    cout << "Bước 2 (AND): " << coQuyen << " && " << taiKhoanHoatDong << " = " << (coQuyen && taiKhoanHoatDong) << endl;
    cout << "Bước 3 (OR): " << (daDangNhap && laAdmin) << " || " << (coQuyen && taiKhoanHoatDong) << " = " << ketQua1 << endl;
    
    cout << "\n💡 Kết luận: " << (ketQua1 ? "✅ Được phép truy cập!" : "❌ Bị từ chối!") << endl;
    
    return 0;
}

🎪 CHƯƠNG TRÌNH MẪU ĐẦY ĐỦ VÀ VUI NHỘN

/*
════════════════════════════════════════════════════════════
 BÀI 19: ĐỘ ƯU TIÊN TOÁN TỬ - MASTER BIỂU THỨC C++
 Tác giả: [Tên bạn]
 Mục đích: Thực hành tất cả độ ưu tiên toán tử
════════════════════════════════════════════════════════════
*/
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    
    // ═══════════════════════════════════════════════════════
    //                    PHẦN GIỚI THIỆU
    // ═══════════════════════════════════════════════════════
    
    cout << "🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟\n";
    cout << "🎯        ĐỘ UU TIÊN TOÁN TỬ - MASTER BIỂU THỨC        🎯\n";
    cout << "🌟          Nhân chia trước, cộng trừ sau!              🌟\n";
    cout << "🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟\n\n";
    
    // ═══════════════════════════════════════════════════════
    //              BẢNG ĐỘ ƯU TIÊN HOÀN CHỈNH
    // ═══════════════════════════════════════════════════════
    
    cout << "📋 BẢNG ĐỘ ƯU TIÊN TOÁN TỬ (CAO → THẤP):\n";
    cout << "════════════════════════════════════════════════\n";
    cout << "┌─────┬─────────────┬──────────────────────────┐\n";
    cout << "│ Mức │   Toán tử   │         Ví dụ            │\n";
    cout << "├─────┼─────────────┼──────────────────────────┤\n";
    cout << "│  1  │     ()      │      (a + b)             │ 👑 Cao nhất\n";
    cout << "│  2  │     !       │      !isActive           │\n";
    cout << "│  3  │   * / %     │    a * b / c             │\n";
    cout << "│  4  │   + -       │    a + b - c             │\n";
    cout << "│  5  │  < <= > >=  │     a > b                │\n";
    cout << "│  6  │   == !=     │     a == b               │\n";
    cout << "│  7  │     &&      │     a && b               │\n";
    cout << "│  8  │     ||      │     a || b               │ 🔽 Thấp nhất\n";
    cout << "└─────┴─────────────┴──────────────────────────┘\n\n";
    
    // ═══════════════════════════════════════════════════════
    //                  DEMO CÁC MỨC ƯU TIÊN
    // ═══════════════════════════════════════════════════════
    
    int a = 10, b = 3, c = 2, d = 4;
    bool isActive = true, hasPermission = false;
    
    cout << "🔢 DỮ LIỆU DEMO:\n";
    cout << "════════════════════════════════════════════════\n";
    cout << "• a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;
    cout << "• isActive = " << boolalpha << isActive << ", hasPermission = " << hasPermission << endl;
    cout << "\n";
    
    // ═══════════════════════════════════════════════════════
    //                    MỨC 1: NGOẶC ĐƠN
    // ═══════════════════════════════════════════════════════
    
    cout << "👑 MỨC 1: NGOẶC ĐƠN () - VUA CỦA MỌI TOÁN TỬ:\n";
    cout << "════════════════════════════════════════════════\n";
    
    int ngoac1 = a + b * c;
    int ngoac2 = (a + b) * c;
    int ngoac3 = a * (b + c);
    
    cout << "• a + b × c = " << a << " + " << b << " × " << c << " = " << ngoac1 << endl;
    cout << "• (a + b) × c = (" << a << " + " << b << ") × " << c << " = " << ngoac2 << endl;
    cout << "• a × (b + c) = " << a << " × (" << b << " + " << c << ") = " << ngoac3 << endl;
    cout << "💡 Ngoặc đơn thay đổi hoàn toàn kết quả!\n\n";
    
    // ═══════════════════════════════════════════════════════
    //                    MỨC 2: TOÁN TỬ NOT
    // ═══════════════════════════════════════════════════════
    
    cout << "🚫 MỨC 2: TOÁN TỬ NOT (!) - SỨC MẠNH ĐẢO NGƯỢC:\n";
    cout << "════════════════════════════════════════════════\n";
    
    bool not1 = !isActive || hasPermission;
    bool not2 = !(isActive || hasPermission);
    
    cout << "• !isActive || hasPermission = !" << isActive << " || " << hasPermission;
    cout << " = " << !isActive << " || " << hasPermission << " = " << not1 << endl;
    cout << "• !(isActive || hasPermission) = !(" << isActive << " || " << hasPermission << ")";
    cout << " = !" << (isActive || hasPermission) << " = " << not2 << endl;
    cout << "💡 NOT được tính trước OR!\n\n";
    
    // ═══════════════════════════════════════════════════════
    //                MỨC 3: NHÂN CHIA CHIA DƯ
    // ═══════════════════════════════════════════════════════
    
    cout << "✖️➗ MỨC 3: NHÂN (*), CHIA (/), CHIA LẤY DƯ (%):\n";
    cout << "════════════════════════════════════════════════\n";
    
    int nhanchia1 = a * b / c;
    int nhanchia2 = a / b * c;
    int nhanchia3 = a % b + c;
    
    cout << "• a × b ÷ c = " << a << " × " << b << " ÷ " << c;
    cout << " = " << (a*b) << " ÷ " << c << " = " << nhanchia1 << " (trái→phải)" << endl;
    cout << "• a ÷ b × c = " << a << " ÷ " << b << " × " << c;
    cout << " = " << (a/b) << " × " << c << " = " << nhanchia2 << " (trái→phải)" << endl;
    cout << "• a % b + c = " << a << " % " << b << " + " << c;
    cout << " = " << (a%b) << " + " << c << " = " << nhanchia3 << " (% trước +)" << endl;
    cout << "💡 Cùng mức thì tính từ trái sang phải!\n\n";
    
    // ═══════════════════════════════════════════════════════
    //                    MỨC 4: CỘNG TRỪ
    // ═══════════════════════════════════════════════════════
    
    cout << "➕➖ MỨC 4: CỘNG (+), TRỪ (-):\n";
    cout << "════════════════════════════════════════════════\n";
    
    int congtru1 = a + b * c - d;
    int congtru2 = a - b + c * d;
    
    cout << "• a + b × c - d = " << a << " + " << b << " × " << c << " - " << d << endl;
    cout << "  Bước 1: " << b << " × " << c << " = " << (b*c) << " (× trước)" << endl;
    cout << "  Bước 2: " << a << " + " << (b*c) << " = " << (a + b*c) << " (+ sau)" << endl;
    cout << "  Bước 3: " << (a + b*c) << " - " << d << " = " << congtru1 << " (- cuối)" << endl;
    cout << "• a - b + c × d = " << a << " - " << b << " + " << c << " × " << d << " = " << congtru2 << endl;
    cout << "💡 Nhân chia luôn trước cộng trừ!\n\n";
    
    // ═══════════════════════════════════════════════════════
    //                    MỨC 5-6: SO SÁNH
    // ═══════════════════════════════════════════════════════
    
    cout << "🔍 MỨC 5-6: TOÁN TỬ SO SÁNH:\n";
    cout << "════════════════════════════════════════════════\n";
    
    bool sosánh1 = a + b > c * d;
    bool sosánh2 = a > b == c < d;
    
    cout << "• a + b > c × d = " << a << " + " << b << " > " << c << " × " << d;
    cout << " = " << (a+b) << " > " << (c*d) << " = " << boolalpha << sosánh1 << endl;
    cout << "• a > b == c < d:" << endl;
    cout << "  Bước 1: " << a << " > " << b << " = " << (a > b) << " (so sánh kích thước)" << endl;
    cout << "  Bước 2: " << c << " < " << d << " = " << (c < d) << " (so sánh kích thước)" << endl;
    cout << "  Bước 3: " << (a > b) << " == " << (c < d) << " = " << sosánh2 << " (so sánh bằng)" << endl;
    cout << "💡 So sánh kích thước trước so sánh bằng!\n\n";
    
    // ═══════════════════════════════════════════════════════
    //                  MỨC 7-8: LOGIC
    // ═══════════════════════════════════════════════════════
    
    cout << "🧠 MỨC 7-8: TOÁN TỬ LOGIC:\n";
    cout << "════════════════════════════════════════════════\n";
    
    bool logic1 = a > 5 && b < 10 || c == 2;
    bool logic2 = isActive && !hasPermission || a > b;
    
    cout << "• a > 5 && b < 10 || c == 2:" << endl;
    cout << "  Bước 1: " << a << " > 5 = " << (a > 5) << " (so sánh)" << endl;
    cout << "  Bước 2: " << b << " < 10 = " << (b < 10) << " (so sánh)" << endl;
    cout << "  Bước 3: " << c << " == 2 = " << (c == 2) << " (so sánh)" << endl;
    cout << "  Bước 4: " << (a > 5) << " && " << (b < 10) << " = " << ((a > 5) && (b < 10)) << " (AND)" << endl;
    cout << "  Bước 5: " << ((a > 5) && (b < 10)) << " || " << (c == 2) << " = " << logic1 << " (OR)" << endl;
    cout << "💡 AND trước OR, logic cuối cùng!\n\n";
    
    // ═══════════════════════════════════════════════════════
    //                    BÀI TẬP TƯƠNG TÁC
    // ═══════════════════════════════════════════════════════
    
    cout << "🎮 BÀI TẬP TƯƠNG TÁC - HỆ THỐNG CHẤM ĐIỂM:\n";
    cout << "════════════════════════════════════════════════\n";
    
    double diemToan, diemLy, diemHoa;
    int tuoi;
    bool thamGiaOlympic;
    
    cout << "Nhập điểm Toán (0-10): ";
    cin >> diemToan;
    cout << "Nhập điểm Lý (0-10): ";
    cin >> diemLy;
    cout << "Nhập điểm Hóa (0-10): ";
    cin >> diemHoa;
    cout << "Nhập tuổi: ";
    cin >> tuoi;
    cout << "Có tham gia Olympic? (1: Có, 0: Không): ";
    cin >> thamGiaOlympic;
    
    cout << "\n🧮 PHÂN TÍCH BIỂU THỨC PHỨC TẠP:\n";
    cout << "────────────────────────────────────────────────\n";
    
    // Biểu thức siêu phức tạp - TEST độ ưu tiên
    double diemTB = (diemToan + diemLy + diemHoa) / 3;
    bool hocLucGioi = diemTB >= 8.0 && diemToan >= 7.0 && diemLy >= 7.0 && diemHoa >= 7.0;
    bool hocBong = hocLucGioi && (tuoi <= 18 || thamGiaOlympic) && !((diemToan + diemLy + diemHoa) / 3 < 8.5);
    
    cout << "📊 Các bước tính toán:\n";
    cout << "1. Điểm TB = (Toán + Lý + Hóa) ÷ 3 = (" << diemToan << " + " << diemLy << " + " << diemHoa << ") ÷ 3 = " << fixed << setprecision(2) << diemTB << endl;
    cout << "2. Học lực giỏi = (TB >= 8.0) && (Toán >= 7.0) && (Lý >= 7.0) && (Hóa >= 7.0)" << endl;
    cout << "                = " << boolalpha << (diemTB >= 8.0) << " && " << (diemToan >= 7.0) << " && " << (diemLy >= 7.0) << " && " << (diemHoa >= 7.0) << " = " << hocLucGioi << endl;
    cout << "3. Điều kiện phụ = (tuổi <= 18) || tham gia Olympic = (" << tuoi << " <= 18) || " << thamGiaOlympic << " = " << ((tuoi <= 18) || thamGiaOlympic) << endl;
    cout << "4. Học bổng = Học lực giỏi && Điều kiện phụ && !(TB < 8.5)" << endl;
    cout << "            = " << hocLucGioi << " && " << ((tuoi <= 18) || thamGiaOlympic) << " && " << !(diemTB < 8.5) << " = " << hocBong << endl;
    
    cout << "\n🏆 KẾT QUẢ CUỐI CÙNG:\n";
    cout << "────────────────────────────────────────────────\n";
    if (hocBong) {
        cout << "🎉 CHÚC MỪNG! Bạn đủ điều kiện nhận học bổng!" << endl;
    } else {
        cout << "😊 Hãy cố gắng thêm để đạt học bổng lần sau!" << endl;
    }
    
    // ═══════════════════════════════════════════════════════
    //                    KẾT THÚC VUI VẺ
    // ═══════════════════════════════════════════════════════
    
    cout << "\n🎉 CHÚC MỪNG! BẠN ĐÃ THÀNH THẠO ĐỘ ƯU TIÊN TOÁN TỬ!\n";
    cout << "════════════════════════════════════════════════\n";
    cout << "✅ Đã hiểu 8 mức độ ưu tiên từ cao đến thấp\n";
    cout << "✅ Đã biết vai trò của ngoặc đơn ()\n";
    cout << "✅ Đã thực hành với biểu thức phức tạp\n";
    cout << "✅ Đã tránh được các lỗi thường gặp\n\n";
    
    cout << "🌟 BÂY GIỜ BẠN ĐÃ LÀ MASTER BIỂU THỨC C++! 🌟\n";
    
    return 0;
}

🎯 BÀI TẬP THỰC HÀNH – 3 CẤP ĐỘ

🟢 CẤP ĐỘ DỄ: Làm quen với ưu tiên

Bài 1: Tính kết quả biểu thức cơ bản

/*
YÊU CẦU:
- Cho trước a=5, b=3, c=2, d=4
- Tính kết quả của:
  + a + b * c
  + (a + b) * c  
  + a * b + c * d
  + a + b * c - d / 2
- Giải thích từng bước tính
- So sánh kết quả có và không có ngoặc
*/
// Gợi ý bắt đầu:
int a = 5, b = 3, c = 2, d = 4;
cout << "Biểu thức: a + b * c" << endl;
cout << "Thay số: " << a << " + " << b << " * " << c << endl;
// Tiếp tục...

Bài 2: Phép so sánh với tính toán

/*
YÊU CẦU:
- Nhập 3 số nguyên x, y, z
- Kiểm tra các điều kiện sau và giải thích:
  + x + y > z
  + x > y && y > z  
  + x + y > z || x > 10
  + !(x == y) && z > 0
- In kết quả true/false và lý do
*/

Bài 3: Tính tiền với ưu tiên

/*
YÊU CẦU:
- Giá sản phẩm: 150,000 VNĐ
- Số lượng: 3 cái
- Giảm giá: 10% 
- VAT: 8%
- Tính: Tổng = (giá × số lượng × (1 - giảm giá)) × (1 + VAT)
- So sánh nếu tính sai thứ tự
*/

🟡 CẤP ĐỘ TRUNG BÌNH: Logic phức tạp

Bài 4: Hệ thống xếp loại phức tạp

/*
YÊU CẦU:
- Nhập điểm Toán, Lý, Hóa (0-10)
- Xếp loại theo công thức:
  + Giỏi: TB >= 8 && tất cả môn >= 6.5 && có ít nhất 1 môn >= 9
  + Khá: TB >= 6.5 && tất cả môn >= 5 && không có môn < 4
  + TB: TB >= 5 && không quá 1 môn < 5
  + Yếu: còn lại
- Giải thích từng bước logic
*/

Bài 5: Máy tính lương phức tạp

/*
YÊU CẦU:
- Lương cơ bản, phụ cấp, thưởng
- Tăng ca: giờ thường × 1.5, chủ nhật × 2
- Thuế: 0% nếu < 11 triệu, 10% từ 11-18 triệu, 20% > 18 triệu
- Bảo hiểm: 8% lương gross
- Công thức: Net = (Cơ bản + Phụ cấp + Thưởng + Tăng ca - Bảo hiểm) × (1 - Thuế)
- Tính và giải thích từng bước
*/

Bài 6: Game logic phức tạp

/*
YÊU CẦU:
- Game RPG: HP, MP, Level, Experience
- Điều kiện level up:
  + EXP >= Level × 100 && HP > 50% && MP > 30%
- Điều kiện học skill:
  + Level >= 5 && Skill Points >= 3 || Level >= 10
- Điều kiện boss fight:
  + Level >= 15 && (có sword hoặc có magic) && HP > 80%
- Mô phỏng với input từ user
*/

🔴 CẤP ĐỘ KHÓ: Biểu thức master

Bài 7: Parser biểu thức toán học

/*
YÊU CẦU:
- Nhập biểu thức dạng string: "2+3*4-1"
- Parse và tính toán theo đúng độ ưu tiên
- Hỗ trợ ngoặc đơn: "(2+3)*(4-1)"
- Hiển thị từng bước tính toán
- Handle lỗi: chia cho 0, cú pháp sai
*/

Bài 8: Hệ thống AI quyết định

/*
YÊU CẦU:
- AI game strategy: Health, Mana, Enemy distance, Allies nearby
- Công thức quyết định phức tạp:
  + Attack: HP > 60% && MP > 40% && Enemy <= 3 && (Allies >= 2 || Level > Enemy_Level)
  + Defend: HP < 40% || (Enemy > 5 && Allies < 2) || MP < 20%
  + Heal: HP < 60% && MP > 50% && Safe_Zone && !Enemy_Nearby
  + Retreat: HP < 30% && (Enemy > Level || Outnumbered)
- Mô phỏng 20 scenarios khác nhau
*/

🏆 THỬ THÁCH BONUS – DÀNH CHO SIÊU SAO

Challenge 1: “Expression Optimizer”

/*
NHIỆM VỤ:
- Nhập biểu thức C++ bất kỳ
- Phân tích và tối ưu:
  + Loại bỏ ngoặc thừa: (a) + b → a + b
  + Gộp hằng số: 2 + 3 * 4 → 2 + 12 → 14
  + Đơn giản hóa logic: true || anything → true
  + Phát hiện dead code: false && anything → false
- Hiển thị biểu thức gốc và tối ưu
*/

Challenge 2: “Mathematical Expression Visualizer”

/*
NHIỆM VỤ:
- Vẽ cây biểu thức (Expression Tree) bằng ASCII
- Ví dụ: "2 + 3 * 4" thành:
      +
     / \
    2   *
       / \
      3   4
- Hỗ trợ ngoặc đơn và toán tử logic
- Animation từng bước evaluation
- Export tree ra file DOT (Graphviz)
*/

💡 MẸO VÀ THỦ THUẬT CHUYÊN NGHIỆP

🌟 1. Nhớ thứ tự bằng câu thần chú:

"Ngoặc Not Nhân-chia Cộng-trừ So-sánh-size So-sánh-bằng And Or"
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-accent-color">() ! */% +- <>= ==!= && ||</mark>

🎯 2. Khi nghi ngờ, hãy dùng ngoặc:

// Không chắc chắn:
int result = a + b * c > d && e < f;

// An toàn hơn:
int result = ((a + (b * c)) > d) && (e < f);

⚡ 3. Chia biểu thức phức tạp:

// Khó đọc:
if (score >= 80 && age >= 18 || hasScholarship && gpa > 3.5 && !isSuspended) {
    // ...
}

// Dễ đọc:
bool basicRequirement = (score >= 80 && age >= 18);
bool scholarshipPath = hasScholarship && gpa > 3.5;
bool goodStanding = !isSuspended;

if (basicRequirement || (scholarshipPath && goodStanding)) {
    // ...
}

🎨 4. Comment cho biểu thức phức tạp:

// Công thức tính lương NET
double netSalary = (basicSalary + allowance) * (1 - taxRate) - insurance;
//                 └─── gross income ────┘   └─ after tax ─┘  └─ final deduction

// Điều kiện đủ tuổi và học lực
bool eligible = (age >= 18) && (gpa >= 3.0) && (!isOnProbation);
//              └─ legal ─┘    └─ academic ─┘   └─── standing ───┘

🐛 TRÁNH CÁC LỖI THƯỜNG GẶP

❌ Lỗi 1: Nhầm thứ tự ưu tiên

// SAI: Tưởng + trước *
int wrong = 2 + 3 * 4;    // Tưởng là (2+3)*4 = 20
cout << wrong;            // Thực tế là 2+(3*4) = 14

// ĐÚNG: Dùng ngoặc khi cần
int correct = (2 + 3) * 4;
cout << correct;          // Đúng là 20

Lỗi 2: Logic phức tạp không dùng ngoặc

// SAI: Khó hiểu và dễ sai
if (age >= 18 && score >= 80 || hasDiscount && total > 500 && !isBlocked) {
    // Ai hiểu được đây???
}

// ĐÚNG: Chia nhỏ và dùng ngoặc
bool ageOK = (age >= 18 && score >= 80);
bool discountOK = (hasDiscount && total > 500 && !isBlocked);
if (ageOK || discountOK) {
    // Rõ ràng hơn nhiều!
}

❌ Lỗi 3: Quên ưu tiên của NOT

// SAI: Tưởng ! áp dụng cho cả biểu thức
if (!isActive || hasPermission) {  // Thực tế: (!isActive) || hasPermission
    // ...
}

// ĐÚNG: Dùng ngoặc để rõ ý đồ
if (!(isActive || hasPermission)) {  // ! áp dụng cho toàn bộ
    // ...
}

📋 CHECKLIST KIẾN THỨC

✅ Cơ bản (Beginner):

  • Biết 8 mức độ ưu tiên cơ bản
  • Hiểu “nhân chia trước, cộng trừ sau”
  • Sử dụng ngoặc đơn để thay đổi thứ tự
  • Tránh nhầm lẫn cơ bản trong biểu thức
  • Tính đúng kết quả biểu thức đơn giản

✅ Trung cấp (Intermediate):

  • Kết hợp nhiều loại toán tử trong biểu thức
  • Hiểu ưu tiên của toán tử logic (&&, ||)
  • Viết điều kiện phức tạp đúng logic
  • Debug lỗi ưu tiên toán tử
  • Refactor biểu thức phức tạp thành dễ đọc

✅ Nâng cao (Advanced):

  • Parse biểu thức từ string
  • Tối ưu biểu thức tự động
  • Thiết kế DSL (Domain Specific Language) đơn giản
  • Hiểu associativity (kết hợp trái/phải)
  • Viết compiler expression đơn giản

🎊 TỔNG KẾT BÀI HỌC

🏆 Chúc mừng! Bạn đã trở thành “EXPRESSION MASTER”!

📚 Những gì bạn đã học:

  • 8 mức độ ưu tiên:Từ ngoặc đơn cao nhất đến OR thấp nhất
  • 🎯Quy tắc vàng:Ngoặc → NOT → Nhân/Chia → Cộng/Trừ → So sánh → Logic
  • 🔗Associativity:Cùng mức tính từ trái sang phải
  • Best practices:Dùng ngoặc, chia nhỏ biểu thức, comment rõ ràng
  • 🧠Debug skills:Nhận diện và sửa lỗi ưu tiên toán tử

🌟 Tại sao độ ưu tiên toán tử quan trọng:

  • Correctness:Đảm bảo tính toán đúng kết quả mong muốn
  • Readability:Code dễ đọc, dễ hiểu, dễ maintain
  • Professional:Tránh bug ngớ ngẩn trong dự án thực tế
  • Foundation:Nền tảng cho parser, compiler, DSL design

🚀 Bước tiếp theo:

Bài 20: “Giải phương trình bậc nhất”– Áp dụng toán tử vào bài toán thực tế!


🎮 MINI GAME: “EXPRESSION EVALUATION RACE”

🎯 Thử thách 180 giây:

Tính nhanh kết quả của các biểu thức (không dùng máy tính):

  1. 2 + 3 * 4 - 5→ ?
  2. (2 + 3) * (4 - 1)→ ?
  3. 10 / 2 + 3 * 4→ ?
  4. !(5 > 3) || (2 < 4)→ ?
  5. 2 + 3 > 4 && 5 < 6 || 1 == 1→ ?

⏰ Sẵn sàng? Bắt đầu!


💬 HỎI ĐÁP THÔNG MINH

❓ Câu hỏi thường gặp:

Q: Tại sao phải học thuộc lòng độ ưu tiên?
A: Không cần thuộc lòng hết! Chỉ cần nhớ các quy tắc cơ bản: ngoặc cao nhất, nhân chia trước cộng trừ, logic cuối cùng. Khi nghi ngờ thì dùng ngoặc!

Q: Làm sao nhớ được 8 mức độ ưu tiên?
A: Dùng câu thần chú: “Ngoặc Not Nhân-chia Cộng-trừ So-sánh And Or”. Thực hành nhiều sẽ thành phản xạ.

Q: Khi nào nên dùng ngoặc đơn?
A: Luôn luôn! Tốt hơn dùng thừa ngoặc còn hơn sai logic. Ngoặc giúp code dễ đọc và tránh bug.

Q: && và || có khác & và | không?
A: Khác hoàn toàn! && || là logic operators (với short-circuit), & | là bitwise operators. Độ ưu tiên cũng khác nhau.

🆘 Cần trợ giúp?

  • 💻Thử nghiệmtrên onlinegdb.com với biểu thức phức tạp
  • 🔍Debugtừng phần của biểu thức lớn
  • 📚Vẽ sơ đồ câybiểu thức khi confused

🎉 LỜI KHÍCH LỆ CUỐI BÀI

Tuyệt vời! Bạn vừa chinh phục được “ngôn ngữ biểu thức” của C++! 🚀

💪 Độ ưu tiên toán tử là DNA của mọi ngôn ngữ lập trình – từ C++ đến Python, JavaScript, Java… Hiểu rõ nó có nghĩa bạn có thể chuyển đổi giữa các ngôn ngữ dễ dàng hơn!

🌟 Điều kỳ diệu: Từ những quy tắc đơn giản này, bạn có thể xây dựng các công thức phức tạp cho mọi lĩnh vực – từ tính lương, đánh giá rủi ro, đến thuật toán AI!

🎯 Real achievement: Bây giờ bạn có thể đọc và viết bất kỳ biểu thức C++ nào với sự tự tin tuyệt đối!

Tiếp tục hành trình master C++ với kiến thức vững chắc! 🧮✨


🏷️ Tags:

#C++ #độ-ưu-tiên-toán-tử #operator-precedence #biểu-thức-toán-học #nhân-chia-trước-cộng-trừ-sau #ngoặc-đơn #logic-operators #expression-evaluation #cơ-bản #thực-hành #debug-skills #dễ-hiểu #Việt-Nam #programming-tutorial

ThíchĐã Thích0
Chia Sẻ

C++ Bài 19: Độ ưu tiên toán tử – nhân chia trước, cộng trừ sau!

Học độ ưu tiên toán tử trong C++ dễ hiểu: thứ tự tính toán (), *, /, %, +, -, ==, !=, &&, ||. Hướng dẫn chi tiết với bảng ưu tiên, ví dụ thực tế và 20+ bài tập thực hành từ cơ bản đến nâng cao.


Bạn muốn chia sẻ bài viết này:

# Bài Viết Liên Quan

  • Bai 24 if else – neu… thi… khong thi…

    C++ Bài 24: if-else – nếu… thì… không thì…!

    Học câu lệnh if-else trong C++ dễ hiểu: cú pháp “nếu… thì… không thì…”, ví dụ thực tế và 20+ bài tập thực hành từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 23 if neu thi dieu kien don

    C++ Bài 23: if – nếu… thì… (điều kiện đơn)

    Bài học về câu lệnh if đơn giản trong C++: cách dùng if để kiểm tra điều kiện, thực hiện lệnh khi điều kiện đúng. Hướng dẫn chi tiết với ví dụ dễ hiểu, bài tập từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 22 du an mini may tinh khoa hoc mini sieu calculator

    C++ Bài 22: [Dự Án Mini] Máy tính khoa học mini – siêu calculator!

    Dự án mini máy tính khoa học bằng C++ dễ hiểu: tổng hợp toán tử, if-else, input validation, menu lựa chọn. Code hoàn chỉnh với giao diện đẹp, xử lý lỗi và 20+ chức năng từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 21 bai tap kiem tra so chan le tham tu so hoc

    C++ Bài 21: [Bài Tập] Kiểm tra số chẵn lẻ – thám tử số học!

    Bài tập kiểm tra số chẵn lẻ bằng C++ dễ hiểu: sử dụng toán tử % (chia lấy dư), câu lệnh if-else, input validation. Code hoàn chỉnh với 20+ bài tập thực hành từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 20 bai tap giai phuong trinh bac nhat tham tu toan hoc

    C++ Bài 20: [Bài Tập] Giải phương trình bậc nhất – thám tử toán học!

    Bài tập giải phương trình bậc nhất ax + b = 0 bằng C++ dễ hiểu. Hướng dẫn từng bước, xử lý trường hợp đặc biệt, code hoàn chỉnh với 20+ bài tập thực hành từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 18 toan tu logic and or not bo nao c

    C++ Bài 18: Toán tử logic – and, or, not – bộ não C++!

    Học toán tử logic trong C++ dễ hiểu: && (AND), || (OR), ! (NOT) để kết hợp điều kiện phức tạp. Hướng dẫn chi tiết với bảng chân trị, ví dụ thực tế và 20+ bài tập thực hành từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 17 toan tu so sanh ai lon hon ai

    C++ Bài 17: Toán Tử So Sánh – ai lớn hơn ai?

    Học toán tử so sánh trong C++ dễ hiểu: ==, !=, , = để so sánh số và chuỗi. Hướng dẫn chi tiết với ví dụ thực tế, tránh lỗi thường gặp và 20+ bài tập thực hành từ cơ bản đến nâng cao.

    03/10/2025
  • Bai 16 toan tu gan dua gia tri vao bien nhu bo do vao hop

    C++ Bài 16: Toán tử gán – đưa giá trị vào biến như bỏ đồ vào hộp!

    Học toán tử gán trong C++ dễ hiểu: dấu = gán cơ bản, +=, -=, *=, /= gán kết hợp, ++ và — tăng giảm. Hướng dẫn chi tiết với ví dụ thực tế và 20+ bài tập thực hành từ cơ bản đến nâng cao.

    01/10/2025
  • Bai 15 toan tu so hoc cong tru nhan chia nhu toan lop 1

    C++ Bài 15: Toán tử số học – cộng trừ nhân chia như toán lớp 1!

    Học toán tử số học trong C++ dễ hiểu: cộng +, trừ -, nhân *, chia /, chia lấy dư % và lũy thừa. Hướng dẫn chi tiết với ví dụ thực tế, thứ tự ưu tiên và 20+ bài tập thực hành từ cơ bản đến nâng cao.

    01/10/2025
  • Bai 14 du an mini chuong trinh tinh diem trung binh 2 bai don gian hon cong cu tinh diem than ky

    C++ Bài 14: [Dự Án Mini] Chương trình tính điểm trung bình 2 – bài đơn giản hơn – công cụ tính điểm thần kỳ!

    Dự án mini C++ dễ hiểu cho học sinh: tạo chương trình tính điểm trung bình với giao diện đẹp. Hướng dẫn từng bước đơn giản với ví dụ thực tế và bài tập vui nhộn.

    01/10/2025
  • Bai 13 du an mini chuong trinh tinh diem trung binh ung dung quan ly hoc tap hoan chinh

    C++ Bài 13: [Dự Án Mini] Chương trình tính điểm trung bình – ứng dụng quản lý học tập hoàn chỉnh!

    Dự án mini C++ tính điểm trung bình: tổng hợp cin, cout, formatting, validation và giao diện chuyên nghiệp. Hướng dẫn chi tiết từng bước xây dựng ứng dụng hoàn chỉnh với 10+ tính năng nâng cao cho học sinh.

    01/10/2025
  • Bai 12 bai tap may tinh don gian sieu cong cu tinh toan

    C++ Bài 12: [Bài Tập] Máy tính đơn giản (+, -, *, /) – siêu công cụ tính toán!

    Bài tập C++ tạo máy tính đơn giản: thực hành cin, cout, toán tử số học, validation input và giao diện đẹp mắt. Hướng dẫn từng bước với 15+ tính năng nâng cao và code mẫu hoàn chỉnh cho học sinh.

    29/09/2025
0 0 votes
Đánh Giá Bài Viết
Subscribe
Notify of
guest
0 Bình Luận
Oldest
Newest Most Voted
Inline Feedbacks
Xem tất cả bình luận
Top Views
  • Board Mo Rong Microbit V2 Tuong Thich Module Amp Sensor 3 3v 5v 01
    26/12/2024
  • Make Code
    24/12/2024
  • Tu Tao May Dem Buoc Chan Cho Minh
    06/01/2025
  • Module Led Rgb 3 Mau 4 Chan Hw 479 01
    26/12/2024
  • Micro:bit V2 – Máy Tính Bỏ Túi Cho Giáo Dục STEM
    06/01/2025
  • Bai 01 chao mung den voi c tu scratch den sieu ngon ngu 01
    26/09/2025
  • Bai 02 cai dat moi truong online code ngay khong can cai dat 01
    27/09/2025
  • Bai 04 cau truc chuong trinh c nhu mot bai van co dau co cuoi 01
    27/09/2025
  • Bai 05 bien va kieu du lieu hop chua thong tin than ky 01
    27/09/2025
  • Bai 06 cout dua thong tin ra man hinh nhu phep mau 01
    28/09/2025
Top Love
  • Tu Tao May Dem Buoc Chan Cho Minh
    06/01/2025
  • Micro:bit V2 – Máy Tính Bỏ Túi Cho Giáo Dục STEM
    06/01/2025
  • Module Led Rgb 3 Mau 4 Chan Hw 479 01
    26/12/2024
  • Make Code
    24/12/2024
  • Board Mo Rong Microbit V2 Tuong Thich Module Amp Sensor 3 3v 5v 01
    26/12/2024
  • Bai tap kiem tra so nguyen to trong khoang tim kho bau so hoc
    02/10/2025