Giải bài tập SGK: Bài 20: Câu lệnh lặp For – Tin học 10

Mục lục [Ẩn]

Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó

Câu hỏi mở đầu trang 105

Câu hỏi mở đầu

Đề bài: Em có thể đã gặp những trường hợp cần thực hiện một số công việc lặp đi lặp lại nhiều lần. Ví dụ, để kể tên tất cả các bạn trong lớp có $30$ học sinh, em cần lần lượt đọc tên từng bạn; để đếm số lượng các số chia hết cho $3$ trong khoảng từ $1$ đến $50$, em có thể kiểm tra lần lượt các số từ $1$ đến $50$ và ghi ra các số chia hết cho $3$ (chẳng hạn $3$, $6$, $9$,…) rồi đếm các số đó.

Em có thể xác định được trong mỗi ví dụ trên công việc nào cần phải lặp và được lặp lại bao nhiêu lần không?

Lời giải:

Ví dụ Công việc cần lặp Số lần lặp
Kể tên 30 học sinh trong lớp Đọc tên một bạn 30 lần
Đếm số chia hết cho 3 từ 1 đến 50 Kiểm tra một số có chia hết cho $3$ không, nếu có thì đếm 50 lần (kiểm tra từng số từ $1$ đến $50$)

1. Lệnh lặp For

Hoạt động 1 trang 105

Đề bài: Thực hiện đoạn chương trình sau trong chế độ gõ lệnh trực tiếp của Python để tính tổng $0 + 1 + … + 9$. Tổng này có giá trị bao nhiêu? Giải thích kết quả.

>>> S = 0
>>> for k in range(10):
        S = S + k
>>> print(S)
45

Lời giải:

Tổng có giá trị bằng $45$.

Giải thích từng bước:

  • Lệnh range(10) tạo ra vùng giá trị gồm $10$ số: $0, 1, 2, …, 9$.
  • Vòng lặp for chạy $10$ lần, mỗi lần biến $k$ nhận một giá trị trong vùng trên.
  • Mỗi vòng lặp thực hiện lệnh: $S = S + k$ (cộng dồn $k$ vào $S$).
  • Sau $10$ vòng lặp:$$S = 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45$$

→ Đây chính là tổng các số tự nhiên từ $0$ đến $9$.

Câu hỏi củng cố mục 1 trang 106

Đề bài: Với giá trị $n$ cho trước, so sánh giá trị $S$ trong đoạn chương trình sau với tổng $1 + 2 + … + n$.

S = 0
for k in range(1,n+1):
    S = S + k

Lời giải:

Phân tích đoạn chương trình:

  • Lệnh range(1, n+1) tạo vùng giá trị gồm các số: $1, 2, 3, …, n$.
  • Vòng lặp chạy $n$ lần, biến $k$ lần lượt nhận các giá trị từ $1$ đến $n$.
  • Mỗi vòng lặp: $S = S + k$.

→ Sau khi vòng lặp kết thúc:

$$S = 1 + 2 + 3 + … + n$$

Kết luận: Giá trị $S$ bằng đúng tổng $1 + 2 + … + n$. Đoạn chương trình trên là cách dùng vòng lặp for để tính tổng các số tự nhiên từ $1$ đến $n$.

2. Lệnh range

Câu hỏi củng cố mục 2 trang 107

Đề bài: Hãy biểu diễn các dãy sau đây bằng lệnh range().

a) $1, 2, 3, …, 50$. b) $5, 6, 7, 8, 9, 10$. c) $0, 1$. d) $10$.

Lời giải:

Nhắc lại: range(start, stop) cho dãy từ start đến stop - 1 (không lấy stop).

Câu Dãy số Lệnh range()
a) $1, 2, 3, …, 50$ range(1, 51)
b) $5, 6, 7, 8, 9, 10$ range(5, 11)
c) $0, 1$ range(0, 2) hoặc range(2)
d) $10$ range(10, 11)

Giải thích chi tiết:

  • Câu a: Để có số cuối là $50$, viết stop = 51range(1, 51).
  • Câu b: Dãy bắt đầu từ $5$, kết thúc ở $10$, nên stop = 11range(5, 11).
  • Câu c: Dãy chỉ có $0$ và $1$, nên stop = 2. Vì bắt đầu từ $0$ nên có thể viết gọn là range(2).
  • Câu d: Dãy chỉ có một số $10$, nên start = 10stop = 11range(10, 11).

Thực hành trang 107

Nhiệm vụ 1 trang 107

Đề bài: Nhập số tự nhiên $n$ từ bàn phím và in ra màn hình dãy các ước số của $n$ theo chiều ngang màn hình. Ví dụ nếu $n = 10$ thì chương trình sẽ in ra dãy số $1, 2, 5, 10$.

Hướng dẫn thực hành:

Ý tưởng:

  • Ước số của $n$ là các số tự nhiên $k$ thoả mãn $n \% k == 0$.
  • Duyệt $k$ từ $1$ đến $n$, nếu $k$ là ước số thì in ra.
  • Để in trên cùng một hàng, dùng thêm end = " " trong lệnh print().

Em mở chế độ soạn thảo (File / New File) và gõ:

n = int(input("Nhập số tự nhiên n: "))
for k in range(1, n+1):
    if n%k == 0:
        print(k, end = " ")

Ví dụ khi chạy (nhập $n = 10$):

Nhập số tự nhiên n: 10
1 2 5 10 

Chú ý: range(1, n+1) để $k$ chạy từ $1$ đến $n$ (cả $1$ và $n$ đều là ước của $n$).

Nhiệm vụ 2 trang 107

Đề bài: Nhập số tự nhiên $n$ từ bàn phím và đếm số các ước số thực sự của $n$. Ước số thực sự của $n$ là số tự nhiên $k < n$ và là ước của $n$.

Hướng dẫn thực hành:

Ý tưởng:

  • Giống Nhiệm vụ 1, nhưng:
    • Chỉ xét $k$ chạy từ $1$ đến $n – 1$ (không tính $n$).
    • Tạo biến count để đếm số ước, mỗi lần tìm được ước thì tăng count thêm $1$.

Em gõ chương trình:

n = int(input("Nhập số tự nhiên n: "))
count = 0
for k in range(1, n):
    if n%k == 0:
        count = count + 1
print(count)

Ví dụ khi chạy (nhập $n = 10$):

Nhập số tự nhiên n: 10
3

Kiểm tra: Ước thực sự của $10$ là $1, 2, 5$ (không tính $10$) → có $3$ ước. ✓

Chú ý: range(1, n) để $k$ chỉ chạy từ $1$ đến $n – 1$ (không lấy giá trị $n$).

Luyện tập trang 107

Luyện tập 1 trang 107

Đề bài: Đoạn chương trình sau in ra kết quả gì?

n = int(input("Nhập số tự nhiên n:"))
S = 0
for k in range(n+1):
    S = S + k
print(S*S)

Lời giải:

Phân tích từng bước:

  • Lệnh range(n+1) tạo vùng giá trị $0, 1, 2, …, n$.
  • Vòng lặp tính: $S = 0 + 1 + 2 + … + n$.
  • Cuối cùng in ra giá trị $S \times S$, tức là bình phương của tổng $0 + 1 + 2 + … + n$.

Kết luận: Đoạn chương trình in ra:

$$(0 + 1 + 2 + … + n)^2$$

Ví dụ:

  • Với $n = 3$: $S = 0 + 1 + 2 + 3 = 6$, in ra $S \times S = 36$.
  • Với $n = 5$: $S = 0 + 1 + 2 + 3 + 4 + 5 = 15$, in ra $S \times S = 225$.

Luyện tập 2 trang 107

Đề bài: Viết đoạn chương trình tính tích $1 \times 2 \times 3 \times … \times n$ với $n$ được nhập vào từ bàn phím.

Lời giải:

Ý tưởng:

  • Tạo biến $P$ để lưu tích, khởi tạo $P = 1$ (vì là phép nhân, không phải cộng).
  • Dùng vòng lặp cho $k$ chạy từ $1$ đến $n$: mỗi lần $P = P \times k$.

Chương trình:

n = int(input("Nhập số tự nhiên n: "))
P = 1
for k in range(1, n+1):
    P = P * k
print("Tích 1 x 2 x ... x", n, "=", P)

Ví dụ khi chạy (nhập $n = 5$):

Nhập số tự nhiên n: 5
Tích 1 x 2 x ... x 5 = 120

Kiểm tra: $1 \times 2 \times 3 \times 4 \times 5 = 120$. ✓

Chú ý: Phải khởi tạo $P = 1$ (không phải $P = 0$), vì bất kì số nào nhân với $0$ cũng bằng $0$.

Vận dụng trang 107

Vận dụng 1 trang 107

Đề bài: Viết chương trình nhập từ bàn phím số tự nhiên $n$ và in ra kết quả:

$$S = 1 + \dfrac{1}{2} + \dfrac{1}{3} + … + \dfrac{1}{n}$$

Lời giải:

Ý tưởng:

  • Tạo biến $S = 0$ để cộng dồn.
  • Cho $k$ chạy từ $1$ đến $n$, mỗi vòng cộng thêm $\dfrac{1}{k}$ vào $S$.

Chương trình:

n = int(input("Nhập số tự nhiên n: "))
S = 0
for k in range(1, n+1):
    S = S + 1/k
print("S =", S)

Ví dụ khi chạy (nhập $n = 4$):

Nhập số tự nhiên n: 4
S = 2.083333333333333

Kiểm tra: $S = 1 + \dfrac{1}{2} + \dfrac{1}{3} + \dfrac{1}{4} = 1 + 0{,}5 + 0{,}333… + 0{,}25 \approx 2{,}0833$. ✓

Vận dụng 2 trang 107

Đề bài: Viết chương trình nhập từ bàn phím số tự nhiên $n$ và in ra kết quả là tổng sau:

$$S = 1^3 + 2^3 + … + n^3$$

Lời giải:

Ý tưởng:

  • Tạo biến $S = 0$ để cộng dồn.
  • Cho $k$ chạy từ $1$ đến $n$, mỗi vòng cộng thêm $k^3$ vào $S$. Trong Python, $k^3$ viết là k**3.

Chương trình:

n = int(input("Nhập số tự nhiên n: "))
S = 0
for k in range(1, n+1):
    S = S + k**3
print("S =", S)

Ví dụ khi chạy (nhập $n = 3$):

Nhập số tự nhiên n: 3
S = 36

Kiểm tra: $S = 1^3 + 2^3 + 3^3 = 1 + 8 + 27 = 36$. ✓

Thầy Phạm Thành Danh

Thầy Phạm Thành Danh

(Người kiểm duyệt, ra đề)

Chức vụ: Trưởng ban biên soạn môn Tin Học THPT

Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1

Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa