Trắc nghiệm Tin học 11 Kết nối tri thức Bài 20: Thực hành bài toán tìm kiếm - Đề 04
Trắc nghiệm Tin học 11 Kết nối tri thức Bài 20: Thực hành bài toán tìm kiếm - Đề 04 được xây dựng với nhiều câu hỏi chất lượng, sát với nội dung chương trình học, giúp bạn dễ dàng ôn tập và kiểm tra kiến thức hiệu quả. Hãy cùng bắt đầu làm bài tập trắc nghiệm ngay để nâng cao hiểu biết và chuẩn bị tốt cho kỳ thi sắp tới!
Câu 1: Bạn cần đọc thông tin về điểm của học sinh từ một tệp văn bản có tên `diemthi.txt`. Mỗi dòng của tệp chứa tên học sinh và điểm của họ, cách nhau bởi dấu phẩy (ví dụ: `Nguyen Van A, 8.5`). Để mở tệp này chỉ với mục đích đọc trong Python, bạn sử dụng lệnh nào sau đây?
- A. f = open("diemthi.txt", "w")
- B. f = open("diemthi.txt", "a")
- C. f = open("diemthi.txt", "r")
- D. f = open("diemthi.txt", "x")
Câu 2: Sau khi mở tệp `diemthi.txt` thành công bằng lệnh `f = open("diemthi.txt", "r")`, bạn muốn đọc toàn bộ nội dung của tệp, mỗi dòng là một phần tử trong một danh sách. Phương thức nào của đối tượng tệp `f` sẽ thực hiện điều này?
- A. f.read()
- B. f.readlines()
- C. f.readline()
- D. f.readall()
Câu 3: Bạn đã đọc một dòng từ tệp `diemthi.txt` (có định dạng `TenHS, DiemHS`) vào một biến chuỗi `line`. Để tách chuỗi này thành hai phần: tên học sinh và điểm số, bạn nên sử dụng phương thức xử lý chuỗi nào của Python?
- A. line.split(",")
- B. line.replace(",", " ")
- C. line.strip()
- D. line.join(",")
Câu 4: Khi đọc dữ liệu từ tệp bằng `readlines()`, mỗi dòng thường kết thúc bằng ký tự xuống dòng ("n"). Để loại bỏ ký tự xuống dòng và các khoảng trắng thừa ở đầu/cuối mỗi phần tử trong danh sách sau khi tách chuỗi, bạn nên sử dụng phương thức xử lý chuỗi nào?
- A. split()
- B. replace("n", "")
- C. join()
- D. strip()
Câu 5: Sau khi hoàn thành việc đọc hoặc ghi dữ liệu vào tệp, việc gọi phương thức `close()` trên đối tượng tệp là cần thiết vì lý do chính nào?
- A. Giải phóng tài nguyên hệ thống và đảm bảo dữ liệu được ghi hoàn tất.
- B. Xóa nội dung hiện tại của tệp.
- C. Mở lại tệp ở chế độ mặc định.
- D. Đánh dấu tệp là chỉ đọc.
Câu 6: Bạn có một danh sách tên học sinh `ten_hs = ["An", "Binh", "Hoa", "Minh", "Viet"]` và một danh sách điểm tương ứng `diem_hs = [8.0, 7.5, 9.0, 8.5, 7.0]`. Bạn muốn tìm điểm của học sinh tên "Hoa" bằng thuật toán tìm kiếm tuần tự. Sau bao nhiêu lần so sánh (tên cần tìm với phần tử trong danh sách) thì bạn tìm thấy kết quả?
Câu 7: Thuật toán tìm kiếm nhị phân hoạt động hiệu quả nhất khi áp dụng cho loại cấu trúc dữ liệu nào?
- A. Danh sách (hoặc mảng) đã được sắp xếp.
- B. Danh sách (hoặc mảng) chưa được sắp xếp.
- C. Cây nhị phân tìm kiếm.
- D. Đồ thị.
Câu 8: Bạn có một danh sách số nguyên đã được sắp xếp tăng dần: `lst = [10, 25, 30, 45, 50, 65, 70, 85]`. Bạn cần tìm số 65 bằng thuật toán tìm kiếm nhị phân. Vị trí (chỉ số) của phần tử trung tâm được kiểm tra trong bước đầu tiên là bao nhiêu? (Giả sử chỉ số bắt đầu từ 0 và phần tử trung tâm được lấy bằng cách làm tròn xuống).
Câu 9: Tiếp tục với danh sách `lst = [10, 25, 30, 45, 50, 65, 70, 85]` và tìm số 65 bằng tìm kiếm nhị phân. Ở bước đầu tiên, bạn so sánh 65 với phần tử tại chỉ số 3 (là 45). Vì 65 > 45, bạn sẽ tiếp tục tìm kiếm ở nửa nào của danh sách?
- A. Nửa bên phải (các phần tử có chỉ số lớn hơn chỉ số trung tâm).
- B. Nửa bên trái (các phần tử có chỉ số nhỏ hơn chỉ số trung tâm).
- C. Toàn bộ danh sách ban đầu.
- D. Không thể xác định mà không biết giá trị cuối cùng.
Câu 10: So sánh thuật toán tìm kiếm tuần tự và tìm kiếm nhị phân trên một danh sách có N phần tử. Phát biểu nào sau đây là ĐÚNG về hiệu quả tìm kiếm?
- A. Tìm kiếm tuần tự luôn nhanh hơn tìm kiếm nhị phân.
- B. Tìm kiếm nhị phân có thể áp dụng cho cả danh sách đã sắp xếp và chưa sắp xếp.
- C. Trong trường hợp xấu nhất, tìm kiếm tuần tự và nhị phân có cùng số lần so sánh.
- D. Trên danh sách đã sắp xếp có kích thước lớn, tìm kiếm nhị phân thường nhanh hơn đáng kể so với tìm kiếm tuần tự.
Câu 11: Giả sử bạn đã đọc dữ liệu từ tệp `diemthi.txt` vào hai danh sách: `ten_hs` và `diem_hs`. Bạn cần viết mã Python để cho phép người dùng nhập tên học sinh và hiển thị điểm của họ. Nếu không tìm thấy tên trong danh sách, chương trình sẽ thông báo. Cấu trúc điều khiển nào là phù hợp nhất để lặp qua danh sách tên học sinh và kiểm tra xem tên nhập vào có tồn tại không?
- A. Vòng lặp `for` duyệt qua từng phần tử trong danh sách `ten_hs`.
- B. Sử dụng trực tiếp thuật toán tìm kiếm nhị phân trên danh sách `ten_hs`.
- C. Sử dụng câu lệnh `if/else` duy nhất mà không cần lặp.
- D. Chỉ cần in toàn bộ danh sách `diem_hs`.
Câu 12: Khi đọc một số từ tệp văn bản, ví dụ điểm số "8.5", dữ liệu này ban đầu được đọc dưới dạng chuỗi. Để thực hiện các phép tính toán với điểm số này, bạn cần chuyển đổi nó sang kiểu dữ liệu số (ví dụ: số thực). Hàm nào trong Python dùng để chuyển đổi một chuỗi biểu diễn số thực sang kiểu `float`?
- A. int()
- B. str()
- C. float()
- D. list()
Câu 13: Bạn đang thực hiện tìm kiếm tuần tự trên danh sách `ten_hs`. Khi tìm thấy tên học sinh cần tìm tại chỉ số `i`, làm thế nào để truy cập điểm số tương ứng của học sinh đó từ danh sách `diem_hs`?
- A. diem_hs[0]
- B. diem_hs[i]
- C. diem_hs[-1]
- D. diem_hs.find(ten_hs[i])
Câu 14: Trong bài toán tìm kiếm nhị phân, nếu danh sách không được sắp xếp, điều gì có thể xảy ra khi bạn áp dụng thuật toán này?
- A. Thuật toán vẫn hoạt động bình thường nhưng chậm hơn.
- B. Thuật toán sẽ gây ra lỗi chương trình ngay lập tức.
- C. Thuật toán sẽ luôn tìm thấy phần tử, dù nó có tồn tại hay không.
- D. Thuật toán có thể đưa ra kết quả sai (không tìm thấy phần tử dù nó tồn tại hoặc ngược lại).
Câu 15: Bạn cần ghi thông tin mới của một học sinh vào cuối tệp `diemthi.txt` mà không làm mất dữ liệu cũ. Lệnh mở tệp nào sau đây là đúng?
- A. f = open("diemthi.txt", "r")
- B. f = open("diemthi.txt", "w")
- C. f = open("diemthi.txt", "a")
- D. f = open("diemthi.txt", "x")
Câu 16: Khi sử dụng chế độ mở tệp "w" (write), nếu tệp đã tồn tại, điều gì sẽ xảy ra với nội dung cũ của tệp?
- A. Nội dung cũ của tệp sẽ bị xóa sạch.
- B. Dữ liệu mới sẽ được ghi thêm vào cuối tệp.
- C. Chương trình sẽ báo lỗi vì tệp đã tồn tại.
- D. Dữ liệu mới sẽ ghi đè lên dữ liệu cũ từ đầu tệp nhưng không xóa phần còn lại.
Câu 17: Trong Python, để ghi một chuỗi `data_string` vào một tệp đã được mở với đối tượng tệp là `f`, phương thức nào sau đây được sử dụng?
- A. f.read(data_string)
- B. f.write(data_string)
- C. f.append(data_string)
- D. f.print(data_string)
Câu 18: Bạn cần đọc một tệp cấu hình chỉ có một dòng duy nhất chứa một số nguyên. Sau khi mở tệp bằng `f = open("config.txt", "r")`, phương thức đọc tệp nào là hiệu quả nhất để chỉ lấy đúng dòng đầu tiên đó?
- A. f.readline()
- B. f.read()
- C. f.readlines()
- D. Sử dụng vòng lặp for để duyệt qua tệp.
Câu 19: Đoạn mã sau đọc dữ liệu từ tệp `numbers.txt` (mỗi dòng một số nguyên):
`f = open("numbers.txt", "r")`
`data = f.readlines()`
`f.close()`
`numbers = [int(line.strip()) for line in data]`
Giả sử `numbers.txt` chứa:
`15`
`8`
`22`
`5`
Giá trị của biến `numbers` sau khi thực thi đoạn mã là gì?
- A. ["15n", "8n", "22n", "5n"]
- B. ["15", "8", "22", "5"]
- C. [15.0, 8.0, 22.0, 5.0]
- D. [15, 8, 22, 5]
Câu 20: Bạn đang triển khai thuật toán tìm kiếm nhị phân để tìm một giá trị `target` trong danh sách đã sắp xếp `sorted_list`. Biến `low` và `high` lần lượt là chỉ số đầu và cuối của phạm vi tìm kiếm hiện tại. Vị trí trung tâm `mid` thường được tính như thế nào?
- A. mid = (low + high) // 2
- B. mid = (low + high) / 2
- C. mid = high - low // 2
- D. mid = low + high / 2
Câu 21: Trong thuật toán tìm kiếm nhị phân, nếu phần tử tại vị trí trung tâm `mid` bằng với giá trị cần tìm `target`, bạn sẽ thực hiện hành động gì tiếp theo?
- A. Tiếp tục tìm kiếm ở nửa bên trái.
- B. Tiếp tục tìm kiếm ở nửa bên phải.
- C. Trả về vị trí `mid` và kết thúc thuật toán.
- D. Báo lỗi vì tìm thấy phần tử quá sớm.
Câu 22: Khi thực hiện tìm kiếm nhị phân trên một danh sách đã sắp xếp, nếu giá trị cần tìm `target` nhỏ hơn phần tử tại vị trí trung tâm `mid`, phạm vi tìm kiếm mới sẽ được điều chỉnh như thế nào?
- A. low = mid + 1
- B. high = mid + 1
- C. low = mid
- D. high = mid - 1
Câu 23: Khi nào thì thuật toán tìm kiếm nhị phân kết thúc mà không tìm thấy giá trị cần tìm?
- A. Khi giá trị cần tìm nhỏ hơn phần tử đầu tiên.
- B. Khi chỉ số `low` lớn hơn chỉ số `high`.
- C. Khi chỉ số `low` bằng chỉ số `high`.
- D. Khi số lần lặp vượt quá một ngưỡng nhất định.
Câu 24: Bạn có một tệp `log.txt` rất lớn, mỗi dòng là một bản ghi. Bạn cần tìm xem một chuỗi ký tự cụ thể có xuất hiện trong bất kỳ dòng nào của tệp hay không. Cách tiếp cận nào sau đây là phù hợp và hiệu quả để tránh đọc toàn bộ tệp vào bộ nhớ cùng lúc?
- A. Đọc toàn bộ nội dung tệp vào một chuỗi lớn rồi tìm kiếm trên chuỗi đó.
- B. Đọc toàn bộ tệp vào một danh sách các dòng bằng `readlines()` rồi tìm kiếm trên danh sách.
- C. Mở tệp và duyệt qua từng dòng một (ví dụ, dùng `for line in f:`) để kiểm tra chuỗi cần tìm.
- D. Chỉ đọc dòng đầu tiên và dòng cuối cùng của tệp để kiểm tra.
Câu 25: Đoạn mã Python sau thực hiện chức năng gì?
`def tim_tuan_tu(lst, target):`
` for i in range(len(lst)):`
` if lst[i] == target:`
` return i`
` return -1`
- A. Tìm kiếm tuần tự một phần tử trong danh sách và trả về chỉ số của nó hoặc -1 nếu không tìm thấy.
- B. Tìm kiếm nhị phân một phần tử trong danh sách và trả về chỉ số của nó hoặc -1 nếu không tìm thấy.
- C. Sắp xếp danh sách theo thứ tự tăng dần.
- D. Đếm số lần xuất hiện của một phần tử trong danh sách.
Câu 26: Để sử dụng hiệu quả thuật toán tìm kiếm nhị phân trong chương trình, bước chuẩn bị dữ liệu nào là BẮT BUỘC?
- A. Chuyển đổi tất cả dữ liệu sang kiểu chuỗi.
- B. Sắp xếp danh sách dữ liệu theo thứ tự tăng dần hoặc giảm dần.
- C. Loại bỏ tất cả các phần tử trùng lặp.
- D. Chia danh sách thành nhiều danh sách con nhỏ hơn.
Câu 27: Giả sử tệp `students.txt` chứa dữ liệu như sau:
`An, 8.5`
`Binh, 7.0`
`Hoa, 9.0`
Bạn đọc tệp này và lưu vào hai danh sách `names = ["An", "Binh", "Hoa"]` và `scores = ["8.5", "7.0", "9.0"]`. Để tìm điểm của "Binh", bạn thực hiện tìm kiếm tuần tự trong danh sách `names`. Tên "Binh" được tìm thấy tại chỉ số nào?
Câu 28: Sau khi tìm thấy "Binh" tại chỉ số 1 trong danh sách `names` (ở Câu 27), điểm số tương ứng của "Binh" trong danh sách `scores` là gì (dưới dạng chuỗi)?
- A. "8.5"
- B. "7.0"
- C. "9.0"
- D. Không tìm thấy
Câu 29: Trong một chương trình tra cứu thông tin học sinh từ tệp, người dùng nhập tên cần tìm. Nếu tên đó không tồn tại trong danh sách đã đọc từ tệp, bạn nên xử lý như thế nào để thông báo cho người dùng?
- A. Hiển thị thông báo cho biết không tìm thấy học sinh có tên đó.
- B. Tự động thêm tên học sinh đó vào danh sách và yêu cầu nhập điểm.
- C. Thoát chương trình ngay lập tức.
- D. In ra toàn bộ danh sách học sinh.
Câu 30: Bạn có một danh sách lớn gồm 1 triệu số nguyên đã được sắp xếp. Bạn cần tìm xem một số cụ thể có tồn tại trong danh sách này hay không. Lựa chọn thuật toán tìm kiếm nào sau đây sẽ cho hiệu quả (tốc độ) tốt nhất trong trường hợp này?
- A. Tìm kiếm tuần tự (Sequential Search).
- B. Tìm kiếm nhị phân (Binary Search).
- C. Cả hai thuật toán đều có hiệu quả tương đương.
- D. Không có đủ thông tin để kết luận.