Trắc Nghiệm Tin Học 11 Cánh Diều Khoa Học Máy Tính Chủ đề FCS Bài 7: Lập trình giải bài toán tìm kiếm là nội dung thuộc môn Tin học, được biên soạn dưới dạng đề ôn tập tham khảo cho học sinh lớp 11 theo chương trình sách giáo khoa Cánh Diều. Bộ đề tập trung vào kiến thức quan trọng về thuật toán tìm kiếm như tìm kiếm tuần tự, tìm kiếm nhị phân, điều kiện áp dụng và cách triển khai thuật toán trong chương trình. Nội dung mở đầu có sử dụng định dạng trắc nghiệm Tin học 11 Khoa học máy tính Cánh Diều, được biên soạn năm 2024 bởi thầy Trịnh Văn Hậu – giáo viên Tin học Trường THPT Nguyễn Khuyến (TP. Hồ Chí Minh). Tài liệu được đăng tải trên detracnghiem.edu.vn giúp học sinh ôn tập thuận tiện và hiệu quả.
Trắc nghiệm môn Tin học 11 ở bài học này bao gồm hệ thống câu hỏi từ nhận biết đến vận dụng, giúp học sinh hiểu rõ cơ chế hoạt động của từng thuật toán tìm kiếm, so sánh hiệu suất, phân tích độ phức tạp và áp dụng thuật toán vào các bài toán thực tiễn. Khi luyện tập trên detracnghiem.edu.vn, học sinh được xem đáp án chi tiết, theo dõi tiến độ và phát triển tư duy lập trình một cách khoa học. Đây là nguồn tài liệu quan trọng hỗ trợ chuẩn bị cho các bài kiểm tra định kỳ Trắc nghiệm lớp 11.
Trắc Nghiệm Tin Học 11 Cánh Diều Khoa Học Máy Tính
Chủ đề FCS: Giải quyết vấn đề với sự trợ giúp của máy tính
Bài 7: Lập trình giải bài toán tìm kiếm
Câu 1: Điều kiện tiên quyết để áp dụng thuật toán tìm kiếm nhị phân (Binary Search) cho một dãy số là gì?
A. Dãy số phải có số lượng phần tử là số chẵn.
B. Dãy số phải chứa các số nguyên dương.
C. Dãy số phải được sắp xếp theo thứ tự.
D. Dãy số không được chứa phần tử trùng lặp.
Câu 2: Thuật toán tìm kiếm tuần tự (Sequential Search) thực hiện công việc tìm kiếm như thế nào?
A. Duyệt từ đầu đến cuối dãy, so sánh từng phần tử.
B. So sánh giá trị cần tìm với phần tử ở giữa dãy.
C. Sắp xếp dãy số rồi chọn phần tử lớn nhất.
D. Chia đôi dãy số liên tục cho đến khi tìm thấy.
Câu 3: Trong Python, phương thức index() của list trả về gì khi tìm thấy phần tử?
A. Giá trị của phần tử đó.
B. Số lượng phần tử trong danh sách.
C. Chỉ số đầu tiên của phần tử đó.
D. Giá trị True hoặc False.
Câu 4: Cho A = [2, 5, 7, 9, 15]. Tìm tuần tự k = 9 cần bao nhiêu bước?
A. 2
B. 3
C. 4
D. 5
Câu 5: mid trong tìm kiếm nhị phân:
A. mid = (lo + hi) / 2
B. mid = (lo – hi) // 2
C. mid = (lo + hi) // 2
D. mid = (lo * hi) // 2
Câu 6: Độ phức tạp của tìm kiếm tuần tự (Worst case):
A. O(1)
B. O(log n)
C. O(n)
D. O(n²)
Câu 7: A.index(x) với x không tồn tại trong list gây lỗi:
A. ValueError
B. IndexError
C. NameError
D. KeyError
Câu 8: Trong hàm tìm kiếm tuần tự, giá trị trả về -1 nghĩa là:
A. Tìm thấy cuối dãy
B. Danh sách rỗng
C. Đã xảy ra lỗi
D. Không tìm thấy k
Câu 9: Dãy 1024 phần tử → tìm kiếm nhị phân tối đa:
A. 1024 lần
B. 512 lần
C. 10 lần
D. 100 lần
Câu 10: Nếu k < A[mid] trong tìm kiếm nhị phân:
A. lo = mid + 1
B. hi = mid – 1
C. lo = mid
D. hi = mid
Câu 11: Câu lệnh kiểm tra k có nằm trong A hay không:
A. A.has(k)
B. k.exist(A)
C. find k in A
D. k in A
Câu 12: A = [1,3,5,7,9,11,13], tìm nhị phân số 13 → phần tử so sánh đầu tiên:
A. 1
B. 13
C. 7
D. 9
Câu 13: Vì sao nhị phân nhanh hơn tuần tự?
A. Dùng ít bộ nhớ hơn
B. Kiểm tra kỹ hơn
C. Loại bỏ một nửa dãy sau mỗi bước
D. Viết bằng ngôn ngữ máy
Câu 14: Điều kiện lặp trong tìm kiếm nhị phân:
A. while lo == hi
B. while lo < hi
C. while lo <= hi
D. while lo != hi
Câu 15: Nếu dãy chưa sắp xếp mà muốn dùng nhị phân, ta phải:
A. Xóa phần tử trùng
B. Tìm phần tử lớn nhất
C. Đảo ngược dãy
D. Sắp xếp dãy
Câu 16: Vì sao dùng for i in range(len(A)) thay cho for x in A khi muốn trả về vị trí?
A. for x in A chậm hơn
B. Cần chỉ số i để trả về
C. for x in A không duyệt hết
D. Không khác gì nhau
Câu 17: “Lính canh” (Sentinel) trong tìm kiếm tuần tự nhằm:
A. Giảm phần tử duyệt
B. Giảm một phép so sánh
C. Tìm trên mảng đã sắp xếp
D. Tự động sắp xếp mảng
Câu 18: Đoạn mã:
vitri = -1
for i in range(len(A)):
if A[i] == k: vitri = i
Thực hiện:
A. Tìm vị trí đầu tiên
B. Tìm vị trí cuối cùng
C. Đếm số lần xuất hiện
D. Xóa phần tử k
Câu 19: Nếu mảng có phần tử trùng nhau, tìm kiếm nhị phân chuẩn trả về:
A. Vị trí đầu tiên
B. Vị trí cuối cùng
C. Tất cả vị trí
D. Một vị trí bất kỳ
Câu 20: A = [10,20,30,40,50], tìm nhị phân k = 25 → so với 30 → phạm vi còn lại:
A. [10, 20]
B. [40, 50]
C. [20, 30]
D. [10,20,30]
Câu 21: Độ phức tạp không gian của tìm kiếm tuần tự và nhị phân (không đệ quy):
A. O(n)
B. O(1)
C. O(log n)
D. O(n²)
Câu 22: bisect_left trong Python:
A. Tìm và xóa phần tử trái
B. Sắp xếp giảm dần
C. Tìm vị trí chèn (bên trái) để giữ thứ tự
D. Chia đôi danh sách
Câu 23: Tìm trong danh sách liên kết (Linked List) nên dùng:
A. Nhị phân
B. Băm
C. Tuần tự
D. Nội suy
Câu 24: i = 0
while i < len(A) and A[i] != k:
i += 1
Ý nghĩa nếu i < len(A):
A. Không tìm thấy
B. Tìm thấy tại vị trí i
C. Mảng chưa sắp xếp
D. k lớn nhất
Câu 25: Best case của tìm kiếm nhị phân:
A. 1 bước
B. 2 bước
C. log n bước
D. n/2 bước
Câu 26: Tìm tên học sinh trong danh sách chưa sắp xếp:
A. Nhị phân ngay
B. Tuần tự
C. Chỉ tìm đầu và cuối
D. Không thể tìm
Câu 27: A = [1..8], tìm nhị phân k = 6 → các mid:
A. 4, 6
B. 5, 7, 6
C. 4, 6
D. 4, 2, 3
Câu 28: Tìm từ trong từ điển 1000 trang giống:
A. Lật từng trang từ đầu
B. Lật từng trang từ cuối
C. Mở giữa, so sánh, thu hẹp, lặp lại
D. Xem mục lục
Câu 29: Biến thể nhị phân tìm vị trí đầu tiên khi A[mid] == k:
A. Trả mid
B. lo = mid + 1
C. hi = mid – 1 và lưu mid
D. Báo lỗi
Câu 30: Tìm số nguyên dương nhỏ nhất không xuất hiện trong dãy đã sắp xếp → giải được bằng nhị phân:
A. O(n²)
B. O(n)
C. O(1)
D. O(log n)

