01/10/2018, 12:10

Giúp sửa lỗi lập trinh c++

mình có đoạn code sau:

int main()
{
    const int luongcb=650000;
    int tnct;
    float heso,luong;
    cout << "nhap so nam cong tac ";
    cin>>tnct;
    if(tnct<12) heso=1.92;
    else if(12<=tnct<36) heso=2.34;
    else if(36<=tnct<60) heso=3;
    else heso=4.5;
    luong=luongcb*heso;
    cout<<"luong cua ban la:"<<luong;
    return 0;

Khi run thì kết quả chỉ đúng ở 2 trường hợp đầu(<12 va 12<=tnct<36) còn 2 th còn lại thì sai. nhưng nếu đổi điều kiện else if( tnct<36) và (tnct<60) thì chạy đúng.
Mình ko hiểu tại sao lại có sự khác nhau giữa 2 đoạn code. Ai biết giúp mình với. tks

rogp10 viết 14:22 ngày 01/10/2018

Tách thành hai điều kiện mới đúng. Ngôn ngữ lập trình tuyệt đại đa số đều xử lí như vậy. (vì thế nào cũng có người viết NN hỗ trợ cái biểu thức oái oăm đó)

Nói riêng C++ thì xử lí a <= b <= c ntn: (a <= b) <= c, mà a <= b là biểu thức bool, ép về hai giá trị 0 hoặc 1 khi so với int.

Tri Nguyen viết 14:13 ngày 01/10/2018

bạn cho mình vd về a<=b ép về 0 hoac 1 khi so với int đi bạn. mình mới học nên chưa biết nhiều.

chichi viết 14:24 ngày 01/10/2018

ví dụ 12 < 30 < 15 trả về 1 vì thứ tự thực hiện là (12 < 30) < 15 <=> 1 < 15 = 1
còn (12 < 30) && ( 30 < 15) <=> 1 && 0 = 0

rogp10 viết 14:26 ngày 01/10/2018

Ngoài chiều đó còn có chiều ngược lại: số nguyên khác 0 là true. Nên đừng ngạc nhiên khi thấy những câu như while(n--).

Bài liên quan
0