01/10/2018, 17:18
Về biểu thức điều kiện
Dạ em mới bắt đầu thử học về lập trình C++. Em có một đoạn code như sau:
Đáp án là 1 mà e không hiểu tại sao.
Mong mọi người giúp em.
Bài liên quan
Dạ em mới bắt đầu thử học về lập trình C++. Em có một đoạn code như sau:
Đáp án là 1 mà e không hiểu tại sao.
Mong mọi người giúp em.
Điều gì đã ngăn cản bạn test trên đoạn code đó? Có máy tính, có IDE sẵn đó thì mở lên rồi thử-sai đi, sai thì có mất gì đâu mà không làm hả trời?
Có thể thử nhiều cách như: thử đặt thêm các cặp ngoặc
()
ở nhiều vị trí khác để xem rồi tự rút ra kết luận đi chứ. Bằng cách đặt các cặp ngoặc đúng vị trí thì biểu thức luận lý này sẽ cho ra kết quả giống nhau, sau đó thay đổi các toán tử (như!=
thành==
chẳng hạn) và lặp lại quá trình trên sẽ cho ra kết quả chính xác mà compiler biến đổi biểu thức trên.Hoặc dùng cách đơn giản hơn là từ khóa
chaining comparisions
vàC++ operator precedence
, đọc và nghiệm ra đi :vKhi compile, bạn có để ý thấy cái warnings nào không? Có thấy mà không để ý hay không thấy? Nếu không thấy thì đổi IDE/compiler đi
Summary
Bạn nghĩ là như thế này?
Nhưng thực ra, nó là như thế này:
Bằng cách đọc 2 link trên, chắc bạn cũng biết được là: thứ tự của các toán tử
+ - * /
đứng trên các toán tử so sánh, nên cái nào cao thì làm trước, bằng nhau thì từ trái sang. Chuyện là vậy đóMà tại sao phải viết đoạn code trên Thích tự thử thách? Thích tự làm khó mình? Thích khổ d*m? Thích tạo khó khăn mặc dù nó đơn giản? Thích như vậy sao không chơi một mình thôi, đem lên đây chi?
Đừng nói là đang học C++, gặp câu này khó qué nên đem lên hỏi? Ủa người khác trả lời rồi chỗ nào dành cho bản thân động não? Vậy rồi sao tự học?
Nếu nghĩ như bạn thì
x + y < 100
phải là x + (y < 100) (sai, vì bạn ko cần biết y < 100 hay không)Bạn có thể thấy vì sao != ưu tiên thấp hơn > (xét
x > y == z > t
), nên bỏ ngoặc đầy đủ thì nó là:(num1 > (2 + num2)) != 3
.ghi chú :<
Ban đầu mình còn lầm mà mấy biểu thức này vô bổ lắm.
Dạ em cảm ơn anh đã giúp em.
Dạ em cảm ơn anh đã giúp em
Vậy bạn đánh tick cho @nicklauri nhé