Anh (Chị) hãy cho biết, tại dòng thứ 6, val2 có giá trị là gì?
1. int val1 = 5, val2 = 15;
2. int *p1, *p2;
3. p1 = &val1
4. p2 = &val2
5. *p1 = 10;
6. *p2 = *p1;
7. p1 = p2; 8 . *p2 = 20;
Trả lời:
Đáp án đúng: A
Để tìm giá trị của val2 tại dòng thứ 6, ta theo dõi các bước sau:
1. **Dòng 1:** `int val1 = 5, val2 = 15;` Khởi tạo `val1 = 5` và `val2 = 15`.
2. **Dòng 2:** `int *p1, *p2;` Khai báo hai con trỏ `p1` và `p2` kiểu integer.
3. **Dòng 3:** `p1 = &val1;` `p1` trỏ tới địa chỉ của `val1`.
4. **Dòng 4:** `p2 = &val2;` `p2` trỏ tới địa chỉ của `val2`.
5. **Dòng 5:** `*p1 = 10;` Giá trị tại địa chỉ mà `p1` trỏ tới (tức là `val1`) được gán bằng 10. Vậy `val1` bây giờ là 10.
6. **Dòng 6:** `*p2 = *p1;` Giá trị tại địa chỉ mà `p2` trỏ tới (tức là `val2`) được gán bằng giá trị tại địa chỉ mà `p1` trỏ tới (tức là `val1`). Vì `val1 = 10` nên `val2` bây giờ cũng là 10.
Vậy, tại dòng thứ 6, giá trị của `val2` là 10.
Câu hỏi liên quan
Lời giải:
Đáp án đúng: D
Đoạn code mô phỏng quá trình tăng trưởng tiền gửi tiết kiệm. Ban đầu, balance = 10, goal = 20, payment = 5. Vòng lặp `while` tiếp tục cho đến khi `balance` lớn hơn hoặc bằng `goal`. Trong mỗi vòng lặp, `balance` tăng thêm `payment` (5), sau đó tăng thêm một khoản tiền lãi nhỏ (0.1% của `balance`). Ta cần tính toán `balance` sau mỗi vòng lặp cho đến khi nó đạt hoặc vượt quá `goal`.
Bước 1: balance = 10, goal = 20, payment = 5, years = 0
Bước 2: Lặp 1:
- balance = 10 + 5 = 15
- interest = 15 * 0.1 / 100 = 0.015
- balance = 15 + 0.015 = 15.015
- years = 1
Bước 3: Lặp 2:
- balance = 15.015 + 5 = 20.015
- interest = 20.015 * 0.1 / 100 = 0.020015
- balance = 20.015 + 0.020015 = 20.035015
- years = 2
Vì balance (20.035015) >= goal (20), vòng lặp dừng lại. Kết quả cuối cùng của balance là 20.035015. Làm tròn ta được 20.035
Bước 1: balance = 10, goal = 20, payment = 5, years = 0
Bước 2: Lặp 1:
- balance = 10 + 5 = 15
- interest = 15 * 0.1 / 100 = 0.015
- balance = 15 + 0.015 = 15.015
- years = 1
Bước 3: Lặp 2:
- balance = 15.015 + 5 = 20.015
- interest = 20.015 * 0.1 / 100 = 0.020015
- balance = 20.015 + 0.020015 = 20.035015
- years = 2
Vì balance (20.035015) >= goal (20), vòng lặp dừng lại. Kết quả cuối cùng của balance là 20.035015. Làm tròn ta được 20.035
Lời giải:
Đáp án đúng: A
Đoạn code mô tả quá trình tăng trưởng của một tài khoản (balance) cho đến khi nó đạt được một mục tiêu (goal) nhất định.
Ban đầu, balance = 20, goal = 20, payment = 5, và years = 0.
Vòng lặp `do...while` sẽ tiếp tục cho đến khi `balance` lớn hơn hoặc bằng `goal`.
Lần lặp 1:
1. `balance += payment;` => balance = 20 + 5 = 25
2. `double interest = balance * 0.1 / 100;` => interest = 25 * 0.1 / 100 = 0.025
3. `balance += interest;` => balance = 25 + 0.025 = 25.025
4. `years++;` => years = 1
Kiểm tra điều kiện `balance < goal` (25.025 < 20) là sai. Do đó, vòng lặp kết thúc.
Giá trị cuối cùng của `years` là 1.
Vậy đáp án đúng là A. 1.
Ban đầu, balance = 20, goal = 20, payment = 5, và years = 0.
Vòng lặp `do...while` sẽ tiếp tục cho đến khi `balance` lớn hơn hoặc bằng `goal`.
Lần lặp 1:
1. `balance += payment;` => balance = 20 + 5 = 25
2. `double interest = balance * 0.1 / 100;` => interest = 25 * 0.1 / 100 = 0.025
3. `balance += interest;` => balance = 25 + 0.025 = 25.025
4. `years++;` => years = 1
Kiểm tra điều kiện `balance < goal` (25.025 < 20) là sai. Do đó, vòng lặp kết thúc.
Giá trị cuối cùng của `years` là 1.
Vậy đáp án đúng là A. 1.
Lời giải:
Đáp án đúng: D
Đoạn code có lỗi biên dịch. Hàm `inc` được định nghĩa là nhận vào hai tham số: một con trỏ `void* data` và một số nguyên `int psize`. Tuy nhiên, khi gọi hàm `inc` trong hàm `main`, ta chỉ truyền vào một tham số duy nhất là biến `s`. Điều này gây ra lỗi biên dịch vì số lượng tham số truyền vào không khớp với số lượng tham số mà hàm yêu cầu.
Ngoài ra, dòng code `void << s << endl;` cũng gây ra lỗi biên dịch vì `void` không phải là một đối tượng có thể xuất ra luồng. Có thể ý định của người viết là `cout << s << endl;` nhưng đã viết sai cú pháp.
Do đó, đáp án đúng là 'D. Lỗi biên dịch.'
Ngoài ra, dòng code `void << s << endl;` cũng gây ra lỗi biên dịch vì `void` không phải là một đối tượng có thể xuất ra luồng. Có thể ý định của người viết là `cout << s << endl;` nhưng đã viết sai cú pháp.
Do đó, đáp án đúng là 'D. Lỗi biên dịch.'
Lời giải:
Đáp án đúng: D
Đoạn code C++ này sử dụng con trỏ hàm để thực hiện các phép toán số học. Tuy nhiên, có một lỗi cú pháp quan trọng trong cách gán giá trị cho biến `m` và `n`.\n\nPhân tích chi tiết:
1. Khai báo hàm:
* `int add(int a, int b)`: Hàm trả về tổng của hai số nguyên.
* `int sub(int a, int b)`: Hàm trả về hiệu của hai số nguyên.
* `int operation(int x, int y, int(*functocall)(int, int))`: Hàm này nhận hai số nguyên `x`, `y` và một con trỏ hàm `functocall` (có kiểu trả về `int` và nhận hai tham số `int`). Hàm `operation` gọi hàm được trỏ bởi `functocall` với `x` và `y` làm đối số.
2. Hàm `main`:
* `int (*minus)(int, int) = sub;`: Khai báo một con trỏ hàm `minus` trỏ đến hàm `sub`.
* `m = (7, 5, add);` : Đây là dòng lệnh gây lỗi. Toán tử dấu phẩy (`,`) trong C/C++ đánh giá các biểu thức từ trái sang phải và trả về giá trị của biểu thức cuối cùng. Trong trường hợp này, `(7, 5, add)` sẽ trả về giá trị của `add`. Vì `add` là một con trỏ hàm, `m` sẽ nhận địa chỉ của hàm `add`, và vì kiểu của `m` là `int` nên đoạn code này gây ra lỗi biên dịch do trình biên dịch không thể chuyển đổi một con trỏ hàm sang một số nguyên.
* `n = (20, m, minus);`: Tương tự như trên, dòng này cũng gây ra lỗi. `(20, m, minus)` sẽ trả về `minus` (là một con trỏ hàm), và `n` sẽ nhận giá trị này, gây ra lỗi biên dịch tương tự như với `m`.
3. Kết luận:
* Đoạn code có lỗi biên dịch do cố gắng gán con trỏ hàm cho biến kiểu `int` sử dụng toán tử dấu phẩy một cách sai. Do đó, chương trình sẽ không biên dịch thành công.
1. Khai báo hàm:
* `int add(int a, int b)`: Hàm trả về tổng của hai số nguyên.
* `int sub(int a, int b)`: Hàm trả về hiệu của hai số nguyên.
* `int operation(int x, int y, int(*functocall)(int, int))`: Hàm này nhận hai số nguyên `x`, `y` và một con trỏ hàm `functocall` (có kiểu trả về `int` và nhận hai tham số `int`). Hàm `operation` gọi hàm được trỏ bởi `functocall` với `x` và `y` làm đối số.
2. Hàm `main`:
* `int (*minus)(int, int) = sub;`: Khai báo một con trỏ hàm `minus` trỏ đến hàm `sub`.
* `m = (7, 5, add);` : Đây là dòng lệnh gây lỗi. Toán tử dấu phẩy (`,`) trong C/C++ đánh giá các biểu thức từ trái sang phải và trả về giá trị của biểu thức cuối cùng. Trong trường hợp này, `(7, 5, add)` sẽ trả về giá trị của `add`. Vì `add` là một con trỏ hàm, `m` sẽ nhận địa chỉ của hàm `add`, và vì kiểu của `m` là `int` nên đoạn code này gây ra lỗi biên dịch do trình biên dịch không thể chuyển đổi một con trỏ hàm sang một số nguyên.
* `n = (20, m, minus);`: Tương tự như trên, dòng này cũng gây ra lỗi. `(20, m, minus)` sẽ trả về `minus` (là một con trỏ hàm), và `n` sẽ nhận giá trị này, gây ra lỗi biên dịch tương tự như với `m`.
3. Kết luận:
* Đoạn code có lỗi biên dịch do cố gắng gán con trỏ hàm cho biến kiểu `int` sử dụng toán tử dấu phẩy một cách sai. Do đó, chương trình sẽ không biên dịch thành công.
Lời giải:
Đáp án đúng: C
Đoạn chương trình khai báo một struct `hocsinh` với các trường `hoten`, `namsinh`, và `diem`. Hàm `bac3` tính lũy thừa bậc `x` của số `a`. Trong hàm `main`, một mảng `hs` gồm 3 phần tử kiểu `hocsinh` được khai báo, và một con trỏ `p` được gán địa chỉ của `hs`.
Vòng lặp `for` duyệt qua 3 phần tử của mảng `hs` thông qua con trỏ `p`. Trong mỗi lần lặp, trường `diem` của phần tử hiện tại được gán giá trị 5, và con trỏ `p` được tăng lên để trỏ đến phần tử tiếp theo trong mảng. Do đó, sau vòng lặp, `hs[0].diem`, `hs[1].diem`, và `hs[2].diem` đều bằng 5.
Dòng `cout` in ra giá trị của `hs[0].diem` và kết quả của `bac3(hs[1].diem, 2)`. `hs[0].diem` bằng 5. `bac3(hs[1].diem, 2)` tương đương với `bac3(5, 2)`, tính 5 mũ 2, kết quả là 25. Vì vậy, đầu ra sẽ là "5, 25".
Vòng lặp `for` duyệt qua 3 phần tử của mảng `hs` thông qua con trỏ `p`. Trong mỗi lần lặp, trường `diem` của phần tử hiện tại được gán giá trị 5, và con trỏ `p` được tăng lên để trỏ đến phần tử tiếp theo trong mảng. Do đó, sau vòng lặp, `hs[0].diem`, `hs[1].diem`, và `hs[2].diem` đều bằng 5.
Dòng `cout` in ra giá trị của `hs[0].diem` và kết quả của `bac3(hs[1].diem, 2)`. `hs[0].diem` bằng 5. `bac3(hs[1].diem, 2)` tương đương với `bac3(5, 2)`, tính 5 mũ 2, kết quả là 25. Vì vậy, đầu ra sẽ là "5, 25".
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP

Bộ Đồ Án Tốt Nghiệp Ngành Trí Tuệ Nhân Tạo Và Học Máy
89 tài liệu310 lượt tải

Bộ 120+ Đồ Án Tốt Nghiệp Ngành Hệ Thống Thông Tin
125 tài liệu441 lượt tải

Bộ Đồ Án Tốt Nghiệp Ngành Mạng Máy Tính Và Truyền Thông
104 tài liệu687 lượt tải

Bộ Luận Văn Tốt Nghiệp Ngành Kiểm Toán
103 tài liệu589 lượt tải

Bộ 370+ Luận Văn Tốt Nghiệp Ngành Kế Toán Doanh Nghiệp
377 tài liệu1030 lượt tải

Bộ Luận Văn Tốt Nghiệp Ngành Quản Trị Thương Hiệu
99 tài liệu1062 lượt tải
ĐĂNG KÝ GÓI THI VIP
- Truy cập hơn 100K đề thi thử và chính thức các năm
- 2M câu hỏi theo các mức độ: Nhận biết – Thông hiểu – Vận dụng
- Học nhanh với 10K Flashcard Tiếng Anh theo bộ sách và chủ đề
- Đầy đủ: Mầm non – Phổ thông (K12) – Đại học – Người đi làm
- Tải toàn bộ tài liệu trên TaiLieu.VN
- Loại bỏ quảng cáo để tăng khả năng tập trung ôn luyện
- Tặng 15 ngày khi đăng ký gói 3 tháng, 30 ngày với gói 6 tháng và 60 ngày với gói 12 tháng.
77.000 đ/ tháng