You are on page 1of 3

Họ và tên: Phùng Lê Hoàng Ngọc

MSSV: 21120297

Lớp 21CTT3B

WEEK 02. BÀI LÀM


Bài 7: Các câu lệnh dưới đây sai chỗ nào?

A. struct point ( double x, y )  Thiếu dấu ; cuối câu lệnh và sau y

B. struct point { double x, double y };  Sai dấu , sửa thành ; và thiếu dấu ; sau y

C. struct point { double x; double b }  Thiếu dấu ; cuối câu lệnh và b

D. struct point { double x; double y; };  Đúng

E. struct point { double x; double y; }  Dư dấu ; sau y và thiếu dấu ; sau câu lệnh

Bài 8: Các câu lệnh dưới đây sai chỗ nào?

A. typedef struct { double x; double y } Point;  Thiếu ; sau y

B. typedef { double x; double y; } Point;  Thiếu struct sau typedef

C. typedef struct { double x; double y; };  Thiếu từ khóa để rút gọn khi dùng typedef

D. typedef struct { double x; double y; } Point;  Đúng

Bài 9: Ba chương trình dưới đây khác nhau như thế nào?

(a) #include <stdio.h>

struct point { double x; double y; };

int main(void) {

struct point test;

test.x = .25; test.y = .75;

printf("[%f %f]\n", test.x, test.y);

return 0;

}
(b) #include <stdio.h>

typedef struct { double x; double y; } Point;

int main(void) {

Point test;

test.x = .25; test.y = .75;

printf("[%f %f]\n", test.x, test.y);

return 0;

(c) #include <stdio.h>

typedef struct { double x; double y; } Point;

int main(void) {

Point test = {.25, .75};

printf("[%f %f]\n", test.x, test.y);

return 0;

 (a) Sử dụng cú pháp thông thường của Struct, có thể thấy thông qua việc khai báo “struct point
test;”

 (b) Chương trình này đã sử dụng Point thay vì phải khai báo struct point như (a), tiện hơn khi
khai báo biến

 (c) Chương trình này đã sử dụng hàm xây dựng (constructor) qua việc khai báo biến test kiểu
Point như sau: “Point test = {.25, .75};”

Bài 10: Giả sử x = 5, y = 10. Sau khi gọi hàm swap1(x, y) thì giá trị của x và y thay đổi thế

nào?

void swap1(int a, int b)

int t;

t = a; a = b; b = t;

 Sau khi gọi hàm swap1, x và y không thay đổi gì. Lí do là hàm đang truyền tham trị. Khi truyền
vào hàm, thực chất a và b là 2 biến mới được tạo ra khác hoàn toàn 2 biến x và y. a và b chỉ đc
copy giá trị từ x và y. Do đó mà khi truyền tham trị, chỉ có a và b thay đổi còn x và y không ảnh
hưởng gì cả.

Bài 11: Giả sử x = 5, y = 10. Sau khi gọi hàm swap2(&x, &y) thì giá trị của x và y thay đổi

thế nào?

void swap2(int *pa, int *pb) {

int t;

t = *pa; *pa = *pb; *pb = t;

 Lúc này x = 10 và y = 5, 2 giá trị được hoán đổi cho nhau. Lí do là vì chúng ta đã truyền con trỏ
vào hàm. Có nghĩa là ta đang truyền địa chỉ của x cho con trỏ pa, địa chỉ của y cho con trỏ pb. Lúc
này khi con trỏ pa và pb hoán đổi giá trị thì x và y được trỏ tới cũng sẽ thay đổi theo.

Bài 12: Cho int x[5] = {0, 1, 2, 3, 4}. Các câu lệnh gọi hàm print3(&x[0]), print3(&x[2]),

print3(&x[4]) sẽ in ra gì?

void print3(int x[]) {

int i;

for (i = 0; i < 3; i++)

printf("%d ", x[i]);

 print3(&x[0]): In ra 0 1 2

 print3(&x[2]): In ra 2 3 4

 print3(&x[4]): In ra 4 và 2 giá trị rác

You might also like