30/09/2018, 18:17

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
",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?

Mai Anh Dũng viết 20:25 ngày 30/09/2018

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
bui van chung viết 20:26 ngày 30/09/2018

saoem chay code ra ket qua la 10 a?

bui van chung viết 20:27 ngày 30/09/2018

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

bui van chung viết 20:29 ngày 30/09/2018

#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 */

tvp viết 20:23 ngày 30/09/2018

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

Pham Van Hai viết 20:33 ngày 30/09/2018

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

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

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

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

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.

bui van chung viết 20:34 ngày 30/09/2018

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

Pham Van Hai viết 20:22 ngày 30/09/2018

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);

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

bui van chung viết 20:19 ngày 30/09/2018

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

Bài liên quan
0