29/04/2025


29/04/2025
29/04/2025
Câu 1: Với n nhập từ bàn phím, bạn viết chương trình đưa ra màn hình tổng các số tự nhiên nhỏ hơn n và chia hết cho 3 hoặc chia hết cho 5 như dưới đây. Theo em, chương trình của bạn Minh có mắc lỗi không? Hãy tìm và sửa lại để chương trình chạy được và cho ra kết quả đúng.
Python
n = int(input("Nhập n: "))
S = 0
for i in range(1, n):
if i % 3 == 0 or 5: # Lỗi ở dòng này
S += i
print("Tổng là:", S)
Lỗi trong chương trình của bạn Minh:
Lỗi nằm ở dòng điều kiện if i % 3 == 0 or 5:. Toán tử or trong Python hoạt động theo logic boolean. Biểu thức 5 luôn được coi là True trong ngữ cảnh boolean (bất kỳ số nguyên khác 0 nào cũng là True). Do đó, điều kiện i % 3 == 0 or 5 sẽ luôn đúng, và chương trình sẽ cộng tất cả các số từ 1 đến n-1 vào S, chứ không chỉ những số chia hết cho 3 hoặc 5.
Cách sửa lại chương trình:
Để kiểm tra xem i có chia hết cho 5 hay không, bạn cần sử dụng toán tử modulo % tương tự như khi kiểm tra chia hết cho 3.
Python
n = int(input("Nhập n: "))
S = 0
for i in range(1, n):
if i % 3 == 0 or i % 5 == 0:
S += i
print("Tổng là:", S)
Chương trình đã sửa sẽ thực hiện đúng yêu cầu: Nó sẽ duyệt qua các số tự nhiên từ 1 đến n-1 và chỉ cộng vào biến S những số nào chia hết cho 3 hoặc chia hết cho 5.
Câu 2: Đoạn chương trình sau thực hiện công việc gì?
Python
1. def f(A): 2. for i in range(len(A) - 1): 3. if A[i] > A[i+1]: 4. return True 5. return False 6. A = [2, 1, 3] 7. f(A)
Phân tích đoạn chương trình:
def f(A):: Định nghĩa một hàm có tên f nhận một danh sách A làm đối số.for i in range(len(A) - 1):: Vòng lặp duyệt qua các chỉ số của danh sách A từ 0 đến độ dài của A trừ 2. Điều này có nghĩa là vòng lặp sẽ so sánh từng phần tử với phần tử kế tiếp của nó.if A[i] > A[i+1]:: Kiểm tra xem phần tử tại chỉ số i có lớn hơn phần tử tại chỉ số i+1 hay không.return True: Nếu tìm thấy một cặp phần tử liên tiếp mà phần tử đứng trước lớn hơn phần tử đứng sau, hàm sẽ trả về True và kết thúc.return False: Nếu vòng lặp hoàn thành mà không tìm thấy cặp phần tử nào như vậy, hàm sẽ trả về False.A = [2, 1, 3]: Khởi tạo một danh sách A với các giá trị [2, 1, 3].f(A): Gọi hàm f với danh sách A.Công việc mà đoạn chương trình thực hiện:
Đoạn chương trình kiểm tra xem danh sách A có được sắp xếp theo thứ tự tăng dần hay không. Nếu có bất kỳ cặp phần tử liên tiếp nào mà phần tử đứng trước lớn hơn phần tử đứng sau, hàm sẽ trả về True (nghĩa là danh sách không được sắp xếp tăng dần). Nếu tất cả các cặp phần tử liên tiếp đều được sắp xếp tăng dần (hoặc bằng nhau), hàm sẽ trả về False.
Giá trị của f(A) trong chương trình trên là gì?
Với A = [2, 1, 3]:
i = 0, A[0] là 2 và A[1] là 1. Vì 2 > 1, điều kiện A[i] > A[i+1] là True.return True và kết thúc.Vậy, giá trị của f(A) trong chương trình trên là True.
Nếu bạn muốn hỏi bài tập
Các câu hỏi của bạn luôn được giải đáp dưới 10 phút
CÂU HỎI LIÊN QUAN
01/12/2025
01/12/2025
Top thành viên trả lời