Trắc nghiệm Cánh diều Tin học 10 bài 18 Lập trình giải quyết bài toán trên máy tính
1. Việc chia nhỏ một bài toán lớn thành các bài toán con đơn giản hơn được gọi là kỹ thuật gì trong lập trình?
A. Lập trình tuyến tính.
B. Lập trình lặp.
C. Chia để trị (Divide and Conquer).
D. Lập trình hướng đối tượng.
2. Nguyên tắc giữ cho mọi thứ đơn giản (Keep It Simple, Stupid - KISS) trong lập trình khuyên chúng ta điều gì?
A. Ưu tiên sự phức tạp để chương trình mạnh mẽ hơn.
B. Tránh các giải pháp phức tạp không cần thiết, ưu tiên sự rõ ràng và dễ hiểu.
C. Chỉ sử dụng các ngôn ngữ lập trình phức tạp nhất.
D. Viết mã nguồn càng dài càng tốt để thể hiện sự chuyên nghiệp.
3. Đâu là một ví dụ về dữ liệu đầu vào (input) cho một chương trình tính diện tích hình chữ nhật?
A. Giá trị diện tích được tính.
B. Giá trị độ dài và chiều rộng của hình chữ nhật.
C. Công thức tính diện tích: Chiều dài x Chiều rộng.
D. Thông báo Kết quả đã được tính.
4. Nếu một chương trình không cho ra kết quả đúng như mong đợi, nguyên nhân có thể xuất phát từ bước nào trong quy trình giải quyết bài toán?
A. Chỉ có thể do lỗi cú pháp trong quá trình viết chương trình.
B. Có thể do sai sót ở bất kỳ bước nào: xác định bài toán, tìm thuật toán, hoặc viết chương trình.
C. Chỉ có thể do máy tính bị lỗi phần cứng.
D. Chỉ có thể do người dùng nhập sai dữ liệu đầu vào.
5. Ngôn ngữ lập trình nào thường được sử dụng để biểu diễn thuật toán một cách dễ hiểu cho con người, trước khi chuyển sang ngôn ngữ máy tính cụ thể?
A. Ngôn ngữ máy (Machine Language)
B. Ngôn ngữ Assembly
C. Ngôn ngữ tự nhiên hoặc giả mã (Pseudocode)
D. Ngôn ngữ biên dịch (Compiled Language)
6. Nếu một thuật toán yêu cầu xử lý một danh sách gồm N phần tử, và mỗi phần tử cần một thao tác đơn giản, thì độ phức tạp thời gian của thuật toán đó thường là bao nhiêu?
A. O(1)
B. O(log N)
C. O(N)
D. O(N^2)
7. Khi thực hiện bước viết chương trình, người lập trình cần chú ý điều gì để chương trình dễ đọc và dễ bảo trì?
A. Sử dụng càng nhiều từ khóa của ngôn ngữ lập trình càng tốt.
B. Đặt tên biến, tên hàm có ý nghĩa, viết chú thích (comment) cho các đoạn mã phức tạp.
C. Chỉ viết mã lệnh mà không cần quan tâm đến định dạng.
D. Sử dụng các cấu trúc lặp càng nhiều càng tốt để chương trình ngắn gọn.
8. Khi viết một chương trình, tại sao việc kiểm tra các trường hợp biên (edge cases) lại quan trọng?
A. Để làm cho chương trình phức tạp hơn.
B. Để đảm bảo chương trình hoạt động đúng ngay cả với các giá trị đầu vào đặc biệt hoặc giới hạn.
C. Chỉ cần kiểm tra các trường hợp thông thường là đủ.
D. Để tăng thời gian thực thi của chương trình.
9. Nếu một thuật toán có độ phức tạp thời gian là O(n^2), điều này có nghĩa là gì?
A. Thời gian thực thi không phụ thuộc vào kích thước đầu vào.
B. Thời gian thực thi tăng tỉ lệ thuận với bình phương kích thước đầu vào.
C. Thời gian thực thi tăng tỉ lệ thuận với logarit của kích thước đầu vào.
D. Thuật toán sẽ luôn chạy rất nhanh.
10. Trong quy trình giải quyết bài toán trên máy tính, bước nào có vai trò quan trọng nhất trong việc xác định chính xác vấn đề cần giải quyết và các yêu cầu của bài toán?
A. Viết chương trình
B. Xác định bài toán
C. Tìm thuật toán
D. Thử nghiệm và gỡ lỗi
11. Đâu là mục tiêu chính của việc tối ưu hóa thuật toán?
A. Làm cho thuật toán phức tạp hơn để khó sao chép.
B. Giảm thiểu thời gian thực thi và/hoặc lượng bộ nhớ sử dụng.
C. Tăng số lượng câu lệnh trong chương trình.
D. Thay đổi hoàn toàn logic của thuật toán gốc.
12. Trong quá trình thử nghiệm và gỡ lỗi, khi phát hiện một lỗi, bước tiếp theo hợp lý nhất là gì?
A. Viết lại toàn bộ chương trình từ đầu.
B. Xác định nguyên nhân gây ra lỗi và sửa lỗi đó.
C. Bỏ qua lỗi và tiếp tục thử nghiệm các trường hợp khác.
D. Hỏi người khác sửa lỗi thay mình mà không tìm hiểu nguyên nhân.
13. Khi phân tích một bài toán, việc xác định đầu vào (input) và đầu ra (output) giúp ích gì cho người lập trình?
A. Quyết định ngôn ngữ lập trình sẽ sử dụng.
B. Hiểu rõ dữ liệu cần xử lý và kết quả mong đợi của chương trình.
C. Xác định cấu trúc dữ liệu phù hợp cho chương trình.
D. Ước tính thời gian hoàn thành dự án lập trình.
14. Phát biểu nào sau đây mô tả đúng về mối quan hệ giữa thuật toán và chương trình?
A. Thuật toán và chương trình là hai khái niệm hoàn toàn giống nhau.
B. Chương trình là một cách biểu diễn thuật toán bằng một ngôn ngữ lập trình cụ thể.
C. Thuật toán chỉ được sử dụng trong ngôn ngữ máy, còn chương trình là ngôn ngữ bậc cao.
D. Chương trình luôn đơn giản hơn thuật toán.
15. Kỹ thuật lặp (iteration) trong lập trình thường được sử dụng để làm gì?
A. Thực hiện một khối lệnh một lần duy nhất.
B. Thực hiện lặp đi lặp lại một khối lệnh nhiều lần cho đến khi một điều kiện nhất định được thỏa mãn.
C. Rẽ nhánh chương trình dựa trên một điều kiện.
D. Gọi một hàm khác để thực thi một tác vụ.
16. Đâu là đặc điểm KHÔNG phải là yêu cầu đối với một thuật toán tốt?
A. Tính dừng (có kết thúc sau một số hữu hạn bước).
B. Tính rõ ràng (mỗi bước phải được xác định rõ ràng).
C. Tính hiệu quả (sử dụng ít tài nguyên nhất có thể).
D. Tính phức tạp (sử dụng nhiều phép toán nhất có thể để đảm bảo độ chính xác).
17. Khi phân tích bài toán, việc xác định ràng buộc (constraints) là gì?
A. Các yêu cầu về giao diện người dùng.
B. Các giới hạn hoặc điều kiện mà giải pháp phải tuân thủ.
C. Các tính năng bổ sung không bắt buộc.
D. Thời gian dự kiến để viết chương trình.
18. Yêu cầu tính hữu hạn của một thuật toán có nghĩa là gì?
A. Thuật toán phải được viết bằng một số hữu hạn dòng lệnh.
B. Thuật toán phải kết thúc sau một số hữu hạn bước thực hiện.
C. Thuật toán phải sử dụng một số lượng hữu hạn biến nhớ.
D. Thuật toán phải có thể áp dụng cho một số hữu hạn trường hợp.
19. Trong quy trình giải quyết bài toán, bước xác định bài toán bao gồm những gì?
A. Viết toàn bộ mã nguồn của chương trình.
B. Hiểu rõ yêu cầu, xác định đầu vào, đầu ra và các ràng buộc của bài toán.
C. Chỉ đơn thuần là tìm ra một thuật toán.
D. Thực hiện kiểm tra và gỡ lỗi chương trình.
20. Phát biểu nào sau đây KHÔNG đúng về ngôn ngữ lập trình?
A. Là một tập hợp các quy tắc và ký hiệu để con người viết lệnh cho máy tính.
B. Là phương tiện để hiện thực hóa thuật toán.
C. Luôn có cấu trúc ngữ pháp và cú pháp chặt chẽ.
D. Là ngôn ngữ mà máy tính hiểu trực tiếp mà không cần biên dịch hay thông dịch.
21. Khi lập trình, việc thử nghiệm và gỡ lỗi (testing and debugging) nhằm mục đích chính là gì?
A. Tăng tốc độ thực thi của chương trình.
B. Tìm và sửa các lỗi sai trong chương trình để đảm bảo nó hoạt động đúng theo yêu cầu.
C. Tối ưu hóa việc sử dụng bộ nhớ của chương trình.
D. Tạo ra giao diện người dùng đẹp mắt và thân thiện hơn.
22. Tại sao việc biểu diễn thuật toán lại quan trọng trước khi viết mã?
A. Để máy tính hiểu và thực thi thuật toán nhanh hơn.
B. Để kiểm tra xem thuật toán có phù hợp với ngôn ngữ lập trình được chọn hay không.
C. Giúp người lập trình trình bày ý tưởng một cách logic, dễ kiểm tra và sửa đổi.
D. Bắt buộc theo quy định của ngành công nghiệp phần mềm.
23. Trong các bước của quy trình giải quyết bài toán trên máy tính, bước nào thường liên quan đến việc lựa chọn cấu trúc dữ liệu và các phép toán phù hợp?
A. Xác định bài toán.
B. Tìm thuật toán.
C. Viết chương trình.
D. Thử nghiệm và gỡ lỗi.
24. Phát biểu nào sau đây mô tả đúng nhất về thuật toán trong khoa học máy tính?
A. Một chuỗi các câu lệnh có thể thực thi trực tiếp bởi máy tính.
B. Một tập hợp các hướng dẫn từng bước để giải quyết một vấn đề hoặc thực hiện một nhiệm vụ.
C. Một ngôn ngữ lập trình dùng để viết mã nguồn.
D. Một phần mềm ứng dụng được cài đặt trên máy tính.
25. Bước nào trong quy trình giải quyết bài toán trên máy tính liên quan trực tiếp đến việc chuyển đổi ý tưởng thuật toán thành các câu lệnh mà máy tính có thể hiểu?
A. Xác định bài toán.
B. Tìm thuật toán.
C. Viết chương trình.
D. Thử nghiệm và gỡ lỗi.