You are on page 1of 3

Part 1: Use notebook

Màu đỏ: để lưu ý, không có trong bài làm nha


Exercise 1 (1 mark) : Explain outputs:

Đầu tiên: n = 7, m = 6.
Biến con trỏ pn lưu địa chỉ của biến n (địa chỉ không phải giá
trị)
Biến con trỏ pm lưu địa chỉ của biến m (địa chỉ không phải
giá trị)
*Dòng: *pn = *pm + 2*m – 3*n;
- Có kết quả: 6 + 2*6 – 3*7 = -3
 *pn = -3 n = -3 (*pn lưu địa chỉ của biến n nên lúc này n
gắn = -3)
*Dòng: *pm -= *pn;
- Có kết quả: 6-(-3) = 9
 *pm = 9 m 9; (*pm lưu địa chỉ của biến m lúc này m gắn
= 9)
Kết quả in ra màn hình m + n = 9 - 3 là: 6
Đầu tiên: c1 = ‘A’, c2 = ‘F’;
Biến con trỏ p1, p2 lưu địa chỉ lần lượt của c1, c2 (địa chỉ không
phải giá trị)
*Dòng: *p1 += 3  *p1 = *p1 + 3;
Mà *p1 lưu địa chỉ của c1, c1 lại có giá trị là ‘A’ (A ở bảng mã ASCII
có giá trị là 65)
 *p1 = 65 + 3 = 68  c1 = 68
*Dòng: *p2 -= 5  *p2 = *p2 -5;
Mà *p2 lưu địa chỉ của c2, c2 lại có giá trị là ‘F’ (F ở bảng mã ASCII
có giá trị là 70)
 *p2 = 70 - 5 = 65 c2 = 65
Kết quả in ra màn hình c1 – c2 = 68 – 65 là 3
Đầu tiên: x = 3.2, y = 5.1;
Biến con trỏ p1, p2 lưu địa chỉ lần lượt của x, y (địa chỉ không phải
giá trị)
*Dòng: *p1 += 3 – 2* (*p2);
 *p1 = *p1 + 3 – 2* (*p2)
 *p1 = 3.2 + 3 – 2* 5.1 = -4  x = -4
*Dòng: *p2 -= 3* (*p1);
 *p2 = *p2 - 3* (*p1) (Lúc này giá trị x thay đổi mà *p1 lưu địa chỉ
của biến x nên *p1 cũng thay đổi)
 *p2 = 5.1 – 3 * (-4) = 17.1  y = 17.1
Kết quả in ra màn hình x + y là 13.1 (17.1 - 4)

Exercise 2: (1 marks) What are outputs


*p1 = *p1 + 12 – m + (*p2) = 7 + 12 – 8 + 8 = 19
 n = 19
*p2 = m + n – 2 * (*p1) = 8 + 19 – 2 * 19 = - 11
 m = -11
m + n = -11 + 19 = 8
Kết quả in tra màn hình là 8

printf(“n=&d\n”,n)  in ra n = 260
(char*)p : ép kiểu cho p từ kiểu int sang char
*pp = 0 : Gán giá trị 0 cho byte đầu tiên mà con trỏ pp trỏ
tới. Vì pp được ép kiểu về char *, nó sẽ trỏ tới byte đầu
tiên của biến n.
Exercise 3: (2 marks) Walkthroughs

L = t(b,a,c);
x = b = 6, y = a = 7, z = c = 5
k = 2 * 6 + 3 * 7 + 5 * 5 = 58
k%13 = 6
Kết quả cuối cùng L = 6

T(&a,&b);
 *p = &a, *q = &b;
t = *p = 7;
*p = *q = 6;
*q = t = 7;
Kết quả cuối cùng a = 6, b =7

T(&a,&b);
 *p = &a, *q = &b;
t = (*p) + (*q) > 12 ? 5 : 6;
(*p) + (*q) = 3 + 4 = 7
 7 > 12 sai nên t = 6
return 2*t%5;  2*6%5 = 2  trả về 2
Kết quả cuối cùng c = 2

You might also like