Toán từ tăng giảm trong C

#include<stdio.h>
main()
{ int a=1,b=2,x=0;
a=a+b++;	//a=1+2=3
b=a+b++;	//3+2=5 ->tang len ->b=6 
x=a-b--;	//3-6=-3.    
a=(x>b) ? x:b; //neu x>b dung thi a=x sai thi lay a=b. TH nay sai ->lay a=b
x=a+b;
printf("x = %d\n",x);
}
//ket qua bang 10

Em giải thích vậy đúng chưa ạ? ai có thể giải thích rõ hơn cho em được không?

Khởi tạo

int a=1,b=2,x=0;

Phân tích này đúng

a=a+b++;	//a=1+2=3

Bây giờ

a=3,b=3,x=0;

Phân tích này sai

b=a+b++;	//3+2=5 ->tang len ->b=6

Phải là

b=a+b++;	//3+3=6, b++ nên 6++ => 7

Bây giờ

a=3,b=7,x=0;

Phân tích này sai

x=a-b--;	//3-6=-3.

Phải là

x=a-b--;	//3-7=-4

Bây giờ

a=3,b=6,x=-4;

Phân tích này đúng

a=(x>b) ? x:b; //neu x>b dung thi a=x sai thi lay a=b. TH nay sai ->lay a=b

Bây giờ

a=6,b=6,x=-4;

Phân tích này sai

x=a+b; //ket qua bang 10

Phải là

x=a+b; //6 + 6 = 12
1 Like

saoem chay code ra ket qua la 10 a?

cung co ban chay ra 12 nhung em chay lai ra 10

#include<stdio.h>
main()
{ int a=1,b=2,x=0; //thu tu a ,b ,x lan luot la
a=a+b++; //3
printf(" Lan 1. %d %d %d\n",a, b, x);
b=a+b++; //3+2=5 ->tang len b=6
printf(“Lan 2. %d %d %d\n”,a, b, x);
x=a-b–; //3-6=-3. // b=6 do b-- nen b=5
printf(“Lan 3. %d %d %d\n”,a, b, x);
a=(x>b) ? x:b;
printf(“Lan 4. %d %d %d\n”,a, b, x); //x<b =>a=b=5 .tai thoi diem nay x=-3
x=a+b; //x=a+b=5+5=10
printf(“x = %d\n”,x);
printf(“Lan cuoi . %d %d %d\n”,a, b, x);

}
/*em da viet cu the ra theo cach nay kq van ra 10 anh a? anh xem ro hon ho em voi. toan tu hoi lang nhang anh a?
co nguoi ra kq nay co nguoi ra kq kia */

Mình nghĩ vấn đề ở chỗ dòng b=a+b++ ấy, sau khi thực hiện dòng này trình biên dịch nó ko tăng b lên 1. Mình chạy trên codeblock, bạn thử chạy trên trình biên dịch khác xem kết quả thế nào

Kết quả cuối cùng là 10 nhé.

lúc này a = 3, b = 3 và x = 0;

thứ tự tính toán là cộng a + b = (3 + 3) = 6, sau đó b++ = 4 và cuối cùng b được gán 6 là kết quả cuối cùng
// b = 6 nhé.
theo mình nhớ thì phép gán (=) có độ ưu tiên thấp nhất trong biểu thức này nhé, cho nên các phép tính toán phải được thực hiện xong hết rồi phép gán (=) mới được thực hiện.

neu nhu the thi a bang bao nhieu ? neunhu vay thi ket qua la 12 a? minh chay ra 10 ma

x = -3
b = 5
a = 5
Kết quả cuối cùng là x = 10 nhé

minh cung chay ra 10. va khi code cu the nhu o tren de kiem tra thi dung la 10.Cam on ban nhieu! Ban co dia chi email chu , lam quen chut

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?