Trả lời nhanh
Chương trình in các số tự nhiên từ 1 đến 100 thành 10 hàng, mỗi hàng 10 số. Với vòng lặp while, em tăng biến k từ 1 đến 100; nếu k chia hết cho 10 thì in k rồi xuống dòng, ngược lại in k và một dấu cách. Hàng đầu là 1 2 3 4 5 6 7 8 9 10, hàng cuối là 91 92 93 94 95 96 97 98 99 100.
Đề bài Vận dụng, Tin học 10
Bài nằm ở mục Vận dụng, Bài 21 “Câu lệnh lặp while”, Tin học 10, bộ Kết nối tri thức với cuộc sống. Đề yêu cầu in các số tự nhiên từ 1 đến 100 ra màn hình thành 10 hàng, mỗi hàng 10 số, dạng:
1 2 3 … 10
11 12 … 20
………….
91 92 … 100
Số trên một hàng cách nhau bởi một khoảng trắng. Hết hàng thứ 10, 20, 30, …, 100 thì xuống dòng. Không in số 0, không bỏ sót 100, không để 100 số dồn thành một dòng hoặc mỗi số một dòng.
Bài này luyện đúng một kỹ năng: trong vòng lặp, em vừa sinh số vừa quyết định khi nào xuống dòng. Điều kiện xuống dòng là số vừa in chia hết cho 10, tức phần dư khi chia cho 10 bằng 0.

Cách làm với câu lệnh while
Biến k giữ số sắp in. Ban đầu k = 1. Chừng nào k còn nhỏ hơn hoặc bằng 100 thì in k, rồi tăng k thêm 1. Đó là khung while. Phần còn lại là chọn cách in.
k = 1
while k <= 100:
if k % 10 == 0:
print(k)
else:
print(k, end=” “)
k = k + 1
Hàm print(k) vừa in số vừa xuống dòng. Hàm print(k, end=” “) in số rồi in một dấu cách, không xuống dòng. Toán tử % cho số dư. k % 10 == 0 đúng với 10, 20, 30, …, 100.
Dò vài bước đầu để thấy nhịp xuống dòng:
| k | k % 10 | Việc in |
|---|---|---|
| 8 | 8 | In “8 ” trên dòng hiện tại |
| 9 | 9 | In “9 ” tiếp ngay sau |
| 10 | 0 | In 10 rồi xuống dòng |
| 11 | 1 | In “11 ” ở đầu dòng mới |
Vòng lặp dừng khi k thành 101, vì điều kiện k <= 100 sai. Số 100 thỏa 100 % 10 == 0 nên nó được in bằng print(100) và kết thúc đúng hàng thứ mười. Nếu em viết while k < 100 thì 100 không được in, hàng cuối chỉ đến 99 và thiếu một số.
Cách while thứ hai: hai biến đếm hàng và đếm cột
hang = 0
while hang < 10:
cot = 1
dong = “”
while cot <= 10:
so = hang * 10 + cot
dong = dong + str(so)
if cot < 10:
dong = dong + ” “
cot = cot + 1
print(dong)
hang = hang + 1
Với hang = 0, cot chạy từ 1 đến 10, so = 0 × 10 + cot ra 1 đến 10. Với hang = 9, so = 90 + cot ra 91 đến 100. Mỗi hàng được ghép thành một chuỗi rồi in một lần, nên không có dấu cách thừa ở cuối dòng. Công thức hang * 10 + cot là cách tính số ở giao của hàng và cột, em có thể dùng lại khi đề đổi số hàng.
Cách làm với for, khi em đã học câu lệnh lặp for
Bài 21 nhấn mạnh while, nhưng cùng một bảng số viết bằng for ngắn hơn. Em chỉ dùng cách này nếu thầy cô cho phép; nếu tiết học đang kiểm tra while thì nộp bản while.
for k in range(1, 101):
print(k, end=” “)
if k % 10 == 0:
print()
range(1, 101) cho các số 1, 2, …, 100. Cận phải 101 không được in, nên 100 vẫn nằm trong vòng lặp. print() không có tham số chỉ để xuống dòng. Cách này có một dấu cách sau số cuối mỗi hàng. Đề dạng “các số cách nhau bởi khoảng trắng” vẫn chấp nhận. Nếu muốn bỏ dấu cách cuối, em tách trường hợp như bản while đầu tiên.
Bản for lồng nhau:
for hang in range(10):
for cot in range(1, 11):
print(hang * 10 + cot, end=” “)
print()
hang * 10 + cot với hang từ 0 đến 9 và cot từ 1 đến 10 lần lượt ra 1 đến 100. Sau mỗi hàng, print() xuống dòng. Em đừng viết range(1, 10) cho vòng ngoài: hang chỉ chạy từ 1 đến 9, chương trình mất hàng 1 đến 10 và chỉ in từ 11 đến 100.
Lỗi thường gặp và ba bài luyện
- range(1, 100) hoặc while k < 100 làm mất số 100.
- print(k) cho mọi k tạo 100 dòng, mỗi dòng một số. Thiếu end=” “.
- Quên xuống dòng: mọi số nằm trên một hàng dài. Thiếu nhánh k % 10 == 0.
- Viết k % 10 == 10. Số dư khi chia cho 10 chỉ từ 0 đến 9, không bao giờ bằng 10. Điều kiện đúng là == 0.
- Tăng k ở nhánh if mà quên tăng ở nhánh else, hoặc tăng hai lần. k = k + 1 phải nằm ngoài if, vẫn trong while, để mọi vòng đều tăng đúng một.
- Dùng end=”” không có dấu cách, các số dính vào nhau: 12345678910.
Bài luyện 1. In các số từ 1 đến 20 thành 4 hàng, mỗi hàng 5 số.
Đáp án: Đổi mốc xuống dòng thành bội của 5, và dừng ở 20. Hàng cuối là 16 17 18 19 20. Điều kiện trong if là k % 5 == 0, vòng lặp là while k <= 20.
Bài luyện 2. In các số chẵn từ 2 đến 20 thành một hàng, cách nhau bởi dấu cách.
Đáp án: k = 2; while k <= 20: print(k, end=” “); k = k + 2. Không cần xuống dòng giữa chừng. Kết quả: 2 4 6 8 10 12 14 16 18 20.
Bài luyện 3. Vì sao chương trình sau in thiếu hàng và lặp mãi?
k = 1
while k <= 100:
if k % 10 == 0:
print(k)
k = k + 1
else:
print(k, end=” “)
Đáp án: k chỉ tăng khi k chia hết cho 10. Với k = 1, chương trình mãi in “1 ” vì nhánh else không tăng k. Phải đưa k = k + 1 ra ngoài if, để cả hai nhánh đều đi tiếp.
Khi nộp bài, em chạy chương trình và đếm số dòng cùng số lượng số trên dòng cuối. Đủ 10 dòng, dòng cuối kết thúc bằng 100, là bài đạt yêu cầu của trang 110.
Câu hỏi thường gặp
Chương trình in từ 1 đến 100 thành 10 hàng viết bằng while như thế nào?
Cho k chạy từ 1 đến 100. Nếu k chia hết cho 10 thì print(k) để xuống dòng, không thì print(k, end=" ") để in cùng hàng. Nhớ tăng k mỗi vòng.
Vì sao điều kiện xuống dòng là k % 10 == 0?
Mỗi hàng có 10 số, nên số cuối hàng là 10, 20, …, 100. Những số này chia cho 10 dư 0.
range(1, 100) có in được số 100 không?
Không. range(1, 100) dừng trước 100. Muốn gồm cả 100 phải viết range(1, 101) hoặc while k <= 100.
print(k, end=" ") khác print(k) ở điểm nào?
end=" " kết thúc bằng dấu cách và không xuống dòng. print(k) xuống dòng ngay sau số, dùng cho số cuối mỗi hàng.
Bài này thuộc bài học nào của Tin học 10?
Vận dụng trang 110, Bài 21 Câu lệnh lặp while, Tin học 10 bộ Kết nối tri thức với cuộc sống.