What is output? #include
Đáp án đúng: C
Câu hỏi liên quan
Để so sánh hai câu lệnh, chúng ta cần phân tích cách chúng hoạt động trong các trường hợp khác nhau.
Câu lệnh 1: a <= 20 ? (b = 30) : (c = 30);
- Nếu a <= 20 là true, thì b được gán giá trị 30.
- Nếu a <= 20 là false, thì c được gán giá trị 30.
Câu lệnh 2: (a <= 20) ? b : (c = 30);
- Nếu a <= 20 là true, thì biến b được trả về (không thay đổi giá trị của b).
- Nếu a <= 20 là false, thì c được gán giá trị 30.
Nhận xét:
- Trong câu lệnh 1, nếu a <= 20 là true, thì b sẽ nhận giá trị 30. Trong câu lệnh 2, nếu a <= 20 là true, giá trị của b không thay đổi (và biểu thức chỉ trả về giá trị của b).
- Trong c cả hai câu lệnh, nếu a <= 20 là false, thì c được gán giá trị 30.
Vì vậy, hai câu lệnh này không giống nhau.
`y = --x;` có nghĩa là `x` giảm đi 1 trước, sau đó giá trị mới của `x` được gán cho `y`. Vậy, `x` trở thành 3, và `y` cũng bằng 3.
`z = x--;` có nghĩa là giá trị hiện tại của `x` (là 3) được gán cho `z`, sau đó `x` giảm đi 1. Vậy, `z` bằng 3, và `x` trở thành 2.
Cuối cùng, `printf("%d %d %d", x, y, z);` in ra giá trị của `x`, `y`, và `z`, lần lượt là 2, 3, và 3.
1. Khởi tạo: `i = 2`, `j = 2`.
2. Vòng lặp `while`: Điều kiện `i+1? --i : j++` được đánh giá.
- `i + 1` (tức là `2 + 1 = 3`) khác 0, do đó biểu thức bên trái dấu `:` được thực thi, tức là `--i`.
- `--i` làm giảm `i` xuống 1 (vậy `i = 1`). Giá trị của biểu thức `--i` là 1.
- Vòng lặp in ra giá trị của `i` (tức là 1).
3. Lặp lại vòng lặp `while`:
- `i + 1` (tức là `1 + 1 = 2`) khác 0, do đó `--i` được thực thi.
- `--i` làm giảm `i` xuống 0 (vậy `i = 0`). Giá trị của biểu thức `--i` là 0.
- Vòng lặp in ra giá trị của `i` (tức là 0).
4. Lặp lại vòng lặp `while`:
- `i + 1` (tức là `0 + 1 = 1`) khác 0, do đó `--i` được thực thi.
- `--i` làm giảm `i` xuống -1 (vậy `i = -1`). Giá trị của biểu thức `--i` là -1.
- Vòng lặp in ra giá trị của `i` (tức là -1).
5. Lặp lại vòng lặp `while`:
- `i + 1` (tức là `-1 + 1 = 0`) bằng 0, do đó `j++` được thực thi.
- `j++` làm tăng `j` lên 1 (vậy `j = 3`). Giá trị của biểu thức `j++` là 2 (giá trị trước khi tăng).
- Vòng lặp in ra giá trị của `i` (tức là -1).
6. Lặp lại vòng lặp `while`:
- `i + 1` (tức là `-1 + 1 = 0`) bằng 0, do đó `j++` được thực thi.
- `j++` làm tăng `j` lên 1 (vậy `j = 4`). Giá trị của biểu thức `j++` là 3 (giá trị trước khi tăng).
- Vòng lặp in ra giá trị của `i` (tức là -1).
Vì vòng lặp `while` không có điều kiện dừng cụ thể (ngoài việc `i + 1` bằng 0, nhưng `i` luôn bị thay đổi và `j` luôn tăng), nên vòng lặp sẽ tiếp tục cho đến khi có lỗi tràn số hoặc một điều kiện dừng khác bên ngoài vòng lặp (ví dụ: do người dùng can thiệp).
Tuy nhiên, trong các lựa chọn đưa ra, không có lựa chọn nào phản ánh chính xác đầu ra của vòng lặp này. Các giá trị i sẽ tiếp tục giảm cho đến khi i+1 = 0, lúc đó j sẽ tăng và quá trình lặp lại, vì thế đáp án đúng nhất là không có đáp án nào đúng.
Vòng lặp while(i) sẽ tiếp tục cho đến khi i = 0.
- Lần lặp 1: i = 6. Vì i > 5, nên i-- (i = 5). Sau đó, i = i + 5 (i = 10). Vì i không lớn hơn 34, vòng lặp tiếp tục.
- Lần lặp 2: i = 10. Vì i > 5, nên i-- (i = 9). Sau đó, i = i + 5 (i = 14). Vì i không lớn hơn 34, vòng lặp tiếp tục.
- Lần lặp 3: i = 14. Vì i > 5, nên i-- (i = 13). Sau đó, i = i + 5 (i = 18). Vì i không lớn hơn 34, vòng lặp tiếp tục.
- Lần lặp 4: i = 18. Vì i > 5, nên i-- (i = 17). Sau đó, i = i + 5 (i = 22). Vì i không lớn hơn 34, vòng lặp tiếp tục.
- Lần lặp 5: i = 22. Vì i > 5, nên i-- (i = 21). Sau đó, i = i + 5 (i = 26). Vì i không lớn hơn 34, vòng lặp tiếp tục.
- Lần lặp 6: i = 26. Vì i > 5, nên i-- (i = 25). Sau đó, i = i + 5 (i = 30). Vì i không lớn hơn 34, vòng lặp tiếp tục.
- Lần lặp 7: i = 30. Vì i > 5, nên i-- (i = 29). Sau đó, i = i + 5 (i = 34). Vì i không lớn hơn 34, vòng lặp tiếp tục.
- Lần lặp 8: i = 34. Vì i > 5, nên i-- (i = 33). Sau đó, i = i + 5 (i = 38). Vì i > 34, vòng lặp bị break.
printf("%d", i) sẽ in ra giá trị của i là 38.
- `check` được gán giá trị 20.
- `arr[0]` có giá trị 10.
- `arr[1]` có giá trị 20.
- `arr[2]` có giá trị 30.
Vì `check` bằng `arr[1]` (đều bằng 20), nên case `arr[1]` sẽ được thực thi. Lệnh `printf("B")` in ra ký tự "B".
Quan trọng: Trong cấu trúc `switch`, nếu không có lệnh `break` ở cuối mỗi `case`, chương trình sẽ tiếp tục thực thi các `case` tiếp theo cho đến khi gặp lệnh `break` hoặc kết thúc khối `switch`. Trong trường hợp này, vì không có `break` sau `case arr[1]`, nên `case arr[2]` cũng được thực thi, và lệnh `printf("C")` in ra ký tự "C".
Do đó, kết quả in ra màn hình là "BC".

Bộ Đồ Án Tốt Nghiệp Ngành Trí Tuệ Nhân Tạo Và Học Máy

Bộ 120+ Đồ Án Tốt Nghiệp Ngành Hệ Thống Thông Tin

Bộ Đồ Án Tốt Nghiệp Ngành Mạng Máy Tính Và Truyền Thông

Bộ Luận Văn Tốt Nghiệp Ngành Kiểm Toán

Bộ 370+ Luận Văn Tốt Nghiệp Ngành Kế Toán Doanh Nghiệp

Bộ Luận Văn Tốt Nghiệp Ngành Quản Trị Thương Hiệu
ĐĂ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.