JavaScript is required

Anh (Chị) hãy cho biết chương trình sai ở dòng nào?

1. define length(a) (sizeof(a) / sizeof(*a ))

2. int main() {

3. int mang[] = {12, 37, 48, 51, 2, 9};

4. int tk = 51, i;

5. bool check = false;

6. for (i = 0; i < length(mang); i++) {

7. if (mang[i] = tk) {

8. check = true;

9. break;

10. }

11. }

12. cout << i ;

14. return 0;

15.}

A.

1, 3

B.

1, 7

C.

3, 5, 6

D.

12, 14

Trả lời:

Đáp án đúng: B


Câu 1: define length(a) (sizeof(a) / sizeof(*a )) Ở đây, define là một tiền xử lý (preprocessor directive) trong C/C++. Nó thực hiện thay thế văn bản. Khi bạn sử dụng length(mang) trong chương trình, nó sẽ thay thế bằng (sizeof(mang) / sizeof(*mang )). Trong hàm main(), sizeof(mang) sẽ trả về kích thước của toàn bộ mảng mang (tính bằng byte), và sizeof(*mang) sẽ trả về kích thước của một phần tử trong mảng (cũng tính bằng byte). Vì vậy, biểu thức này tính toán số lượng phần tử trong mảng. Dòng này đúng. Câu 7: if (mang[i] = tk) { Đây là lỗi phổ biến. Toán tử gán '=' được sử dụng thay vì toán tử so sánh '=='. Do đó, mang[i] được gán giá trị của tk (51), và biểu thức điều kiện sẽ đánh giá là true nếu tk khác 0. Điều này dẫn đến việc vòng lặp có thể không hoạt động như mong đợi và biến check có thể được gán giá trị không chính xác. Đây là một lỗi logic nghiêm trọng. Câu 12: cout << i ; Dòng 13 bị thiếu, dòng 14 lại là return 0;, dòng 12 không ảnh hưởng đến việc tìm kiếm giá trị trong mảng. Câu 3, 5, 6 không có lỗi. Kết luận: Chương trình sai ở dòng 7 do sử dụng toán tử gán '=' thay vì toán tử so sánh '=='. Dòng 1 cũng có thể gây ra lỗi nếu sử dụng sai cách nhưng ở bài này không sai.

Câu hỏi liên quan