Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Giải chi tiết, cụ thể SBT Tin học 10 bộ sách Cánh diều bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp. Đây là bộ sách mới được phê duyệt trong chương trình đổi mới của Bộ Giáo dục và đào tạo. Hi vọng, với cách hướng dẫn cụ thể và giải chi tiết học sinh sẽ nắm bài học tốt hơn trong chương trình học mới này.

Câu F35. In ra các số lẻ

Viết chương trình nhập vào số nguyên n và in ra các số nguyên dương lẻ không lớn hơn n theo thứ tự tăng dần.

Trả lời:

Bài này có thể có nhiều cách viết vòng lặp.

Cách 1: Sử dụng vòng lặp while: Khởi tạo x = 1 là số nguyên dương lẻ nhỏ nhất, cho đến khi x ≤ n ta in ra x sau đó tăng x lên 2 đơn vị. Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Cách 2: Sử dụng vòng lặp for: Dãy số lẻ cần in ra là 0 × 2 + 1, 1 × 2 + 1, 2 × 2 + 1, ..., k × 2+ 1, trong đó k là giá trị số nguyên lớn nhất thoả mãn: k × 2 + 1≤ n, tức là k=[n−12]. Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Cách 3: Sử dụng vòng lặp for nhưng sửa lại khai báo range (..) để mỗi bước giá trị số in ra được tăng lên 2 đơn vị. Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F36. In ra các số chẵn

Viết chương trình nhập vào số nguyên n và in ra các số nguyên dương chẵn không lớn hơn n theo thứ tự giảm dần.

Trả lời:

Tương tự như bài F35, có thể có nhiều cách viết vòng lặp. Số nguyên dương chẵn lớn nhất không vượt quá n là hiệu của n với số dư của phép chia n cho 2. Số nguyên dương chẵn nhỏ nhất là số 2.

Cách 1: Sử dụng vòng lặp whi1e: Khởi tạo x = n -n % 2 cho đến khi x > 0 ta in ra x sau đó giảm x đi 2 đơn vị. Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Cách 2: Sử dụng vòng lặp for. Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Cách 3: Ta cũng có thể sử dụng vòng lặp for nhưng sửa lại khai báo range để mỗi bước giá trị số in ra được giảm đi 2 đơn vị. Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F37. In ra tổng các số chia hết cho 3 hoặc chia hết cho 5

Với n nhập từ bàn phím, 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.

Trả lời:

Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F38. In ra tổng các số chỉ chia hết cho 3 hoặc 5

Viết chương trình đưa ra màn hình tổng các số nguyên chỉ chia hết cho 3 hoặc 5 nhưng không đồng thời chia hết cho cả 3 và 5 trong phạm vi các số nguyên từ m đến n-1. Ngừng tính tổng khi nhận được tổng lớn hơn hoặc bằng b cho trước. Các số nguyên m, n, b được nhập vào từ bàn phím với m < n.

Trả lời:

Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Một số ví dụ kết quả chạy chương trình

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F39. Đọc hiểu chương trình

Virus X có khả năng lây nhiễm mạnh, sau mỗi ngày số lượng người nhiễm tăng lên gấp đôi. Cụ thể, nếu ngày hôm nay có p người bị nhiễm thì sang ngày tiếp theo sẽ có 2p người bị nhiễm. Chương trình sau đây cho nhập vào số lượng người bị nhiễm và đưa ra sau bao nhiêu ngày thì số lượng người bị nhiễm sẽ vượt quá 1 triệu người. Em hãy hoàn thiện câu lệnh còn khuyết để nhận được chương trình đúng.

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Trả lời:

Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F40. Tìm lỗi cho cấu trúc lặp

Chương trình ở hình bên nhập vào hai số thực dương a, b với a < b và tính tổng tất cả các số nguyên không nhỏ hơn a và không lớn hơn b. Tuy nhiên, chương trình vẫn có lỗi. Chạy chương trình với a = 1,1 và b = 3,9 để thấy lỗi của chương trình. Em hãy tìm và sửa lỗi để nhận được chương trình đúng.

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Trả lời:

Tham khảo chương trình sau:

Chú ý: range (m, n) dùng để khởi tạo dãy số nguyên từ m đến n - 1 (với m < n).

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F41. Tổng chữ số

Viết chương trình nhập vào số nguyên dương n và in ra tổng các chữ số trong biểu diễn thập phân của n.

Trả lời:

Thuật toán có thể áp dụng cho bài này là “tách” từng chữ số của n, với mỗi chữ số được tách ra, ta cộng dồn vào một biến S. Cụ thể là:

  • Khởi tạo S = 0.
  • Lặp cho đến khi n còn chữ số.
  • Lấy chữ số hàng đơn vị của n, gọi là d.
  • Đặt S = S + d.
  • Loại bỏ chữ số hàng đơn vị của n.

Một số vấn đề kĩ thuật cần làm rõ:

  • Để lấy chữ số hàng đơn vị d của n ta có thể dùng phép tính d = n % 10.
  • Để loại bỏ chữ số hàng đơn vị của n ta có thể gán n //= 10.

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Với quy tắc tính như vậy, điều kiện “n còn chữ số” có thể viết thành n == 0. Bởi khi n chỉ còn một chữ số thì phép gán n = n // 10 sẽ cho n == 0.

Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F42. Tính giai thừa

Viết chương trình nhập vào một số nguyên dương n và in ra giá trị giai thừa của n.

Trả lời:

Giai thừa của n (kí hiệu n!) là tích của các số nguyên dương từ 1 tới n. Ta cũng có thể định nghĩa quy nạp như sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Lưu ý: 0! = 1, đây là quy ước của hàm giai thừa.

Để tính n!, ta có thể khởi tạo một biến số nguyên F = 0 ứng với giá trị 0! Sau đó với mỗi i từ 2 tới n, ta nhân F lên i lần (F= F*i). Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F43. Tìm ước chung lớn nhất

Viết chương trình nhập vào hai số tự nhiên a, b không đồng thời bằng 0 và in ra ước số chung lớn nhất của a, b.

Trả lời:

Ước chung lớn nhất (GCD — Greatest Common Divisor) là một khái niệm quan trọng trong số học và nhiều lĩnh vực khác. Mục đích của bài toán là tìm số nguyên Z lớn nhất đồng thời là ước số của cả a và b.

Một cách tiếp cận đơn giản là khi b > 0 ta có thể thử tất cả các giá trị số nguyên d = b, b - 1, b - 2, ..., 1 và dừng lại ngay khi gặp số nguyên d là ước số của cả a và b. Còn tất nhiên khi b == 0, ước số chung lớn nhất của a và b chính là a

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Phương pháp này tuy đúng nhưng có hiệu suất rất kém. Một phương pháp khác hiệu quả hơn là thuật toán Euclid (được nhà toán học người Hy Lạp đưa ra vào khoảng thế kỉ III trước công nguyên). Thuật toán Euclid như sau:

Lặp cho đến khi b ≠ 0

+ Tính r là số dư của phép chia a cho b.

+ Thay cặp số (a, b) bởi cặp số (b, r).

- Kết thúc: Giá trị a sau vòng lặp là ước chung lớn nhất của hai số ban đầu. Tham khảo chương trình sau:

 

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Câu F44. Liệt kê ước số

Viết chương trình nhập vào một số nguyên dương n và in ra tất cả các ước số của n.

Trả lời:

Cách 1: Một trong những giải pháp đơn giản là thử mọi giá trị số nguyên d từ l tới n, mỗi khi gặp một giá trị ở là ước số của n thì in ra ngay giá trị d đó. Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Ví dụ

Input

Output

60

1 2 3 4 5 6 10 12 15 20 30 60

Cách 2: Cách làm trên khá chậm khi gặp giá trị n lớn (chẳng hạn n = 109). Một cải tiến nhỏ là dựa vào nhận xét: Ngoại trừ ước d = n, tất cả các ước số khác của n đều không vượt quá n2, vì vậy ta chỉ cần thử d trong phạm vi [1, n2] còn riêng ước d = n sẽ được in ra sau. Mặc dù tốc độ chương trình cải thiện gấp đôi, phương pháp này vẫn còn rất chậm.

Cách 3: Dựa vào nhận xét: Nếu d là ước số của n thì “nd cũng là ước số của n”. Trong hai ước số d và nd , chắc chắn có một số nhỏ hơn hoặc bằng n . Vì thế ta chỉ cần thử d trong phạm vi [1; n ], khi tìm thấy. một ước số d của n trong phạm vi này, ta in ra d và in ra luôn cả ước nd

Lưu ý: Trường hợp d = nd (n là số chính phương), ta chỉ được in ra một ước để tránh trùng lặp.

Tham khảo chương trình sau:

Giải SBT Cánh diều Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Tìm kiếm google: Giải SBT Tin học 10 Cánh diều; SBT Tin học 10 Cánh diều; Giải SBT Tin học 10 Cánh diều Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Xem thêm các môn học

Giải SBT tin học 10 cánh diều


Đia chỉ: Tòa nhà TH Office, 90 Khuất Duy Tiến, Thanh Xuân, Hà Nội
Điện thoại hỗ trợ: Fidutech - click vào đây
Chúng tôi trên Yotube
Cùng hệ thống: baivan.net - Kenhgiaovien.com - tech12h.com