Bài 31 Thực hành viết chương trình đơn giản

Lớp 10Tin Học27 câu hỏiBài tập

Phần 1

Câu 1

(Câu 31.1 trang 63 SBT Tin học 10) Chương trình cần nhập số thực dương a và kiểm soát lỗi nhập dữ liệu: nếu số đã nhập nhỏ hơn hoặc bằng 0 thì thông báo “Nhập sai, số a phải lớn hơn 0. Hãy nhập lại.” và yêu cầu nhập lại cho đến khi đúng. Phương án nào mô tả đúng cách viết chương trình?
ANhập a bằng float(input(...)), sau đó dùng vòng lặp while a <= 0 để thông báo lỗi và nhập lại a.
BNhập a một lần duy nhất, nếu a <= 0 thì kết thúc chương trình ngay mà không cần nhập lại.
CDùng vòng lặp while a > 0 để thông báo lỗi và nhập lại a.
DChỉ cần dùng lệnh print để thông báo lỗi, không cần kiểm tra giá trị của a.

Câu 2

(Câu 31.2 trang 63 SBT Tin học 10) Xét đoạn chương trình sắp xếp chèn sau:
dayA = [5, 1, 8, 4, 2]
def sap_xep(A):
n = len(A)
for k in range(1, n):
print("vòng", k, "số đang xét:", A[k], end = " ")
j = k - 1
while j > 0 and A[j] > A[j + 1]:
A[j], A[j + 1] = A[j + 1], A[j]
j = j - 1
print(A)
print("Dãy gốc:", dayA)
A = dayA.copy()
sap_xep(A)
print("Dãy đích:", A)
Lỗi của chương trình nằm ở đâu và cần sửa thế nào?
AĐiều kiện while j > 0 là sai, cần sửa thành while j >= 0 and A[j] > A[j + 1].
BLệnh A = dayA.copy() là sai, cần sửa thành A = dayA.
CLệnh print(A) là sai, cần xoá đi thì chương trình mới sắp xếp đúng.
DVòng lặp for k in range(1, n) là sai, cần sửa thành for k in range(n, 1).

Câu 3

(Câu 31.2 trang 63 SBT Tin học 10) Sau khi sửa lỗi, chương trình sắp xếp chèn với dãy gốc [5, 1, 8, 4, 2] sẽ cho dãy đích nào?
A[1, 2, 4, 5, 8].
B[5, 1, 8, 4, 2].
C[1, 5, 8, 4, 2].
D[8, 5, 4, 2, 1].

Câu 4

(Câu 31.3 trang 63 SBT Tin học 10) Trong chương trình in bảng cửu chương, hàm st(n) được định nghĩa như sau:
def st(n):
if n < 10:
return " " + str(n)
else:
return str(n)
Hàm st(n) có tác dụng gì?
ATạo xâu biểu diễn số n, nếu n có một chữ số thì thêm một dấu cách phía trước để căn chỉnh khi in.
BTính bình phương của n.
CChuyển n thành số thực.
DXoá các dấu cách trong xâu n.

Câu 5

(Câu 31.3 trang 63 SBT Tin học 10) Trong chương trình in bảng cửu chương, hàm space(k) được định nghĩa như sau:
def space(k):
return " "*k
Hàm space(k) có tác dụng gì?
ATrả về xâu gồm k dấu cách.
BTrả về xâu gồm k chữ số 0.
CTrả về tích của k với chính nó.
DTrả về số lượng chữ số của k.

Câu 6

(Câu 31.4 trang 64 SBT Tin học 10) Cho trước danh sách A = [0, 4, 0, 1, 2, 3, 8, 9, 0, 1, 2, 3, 17, -16, 0, 1, 2] và mẫu p = [1, 2, 3]. Cần tìm vị trí đầu tiên của dãy A mà ba số hạng liên tiếp có giá trị 1, 2, 3. Phương án nào đúng?
AVị trí đầu tiên tìm được là 3.
BVị trí đầu tiên tìm được là 0.
CVị trí đầu tiên tìm được là 9.
DKhông tìm thấy mẫu [1, 2, 3].

Câu 7

(Câu 31.4 trang 64 SBT Tin học 10) Trong bài toán tìm mẫu [1, 2, 3] trong dãy A, điều kiện nào dưới đây kiểm tra đúng tại vị trí i có xuất hiện mẫu hay không?
AA[i:i + 3] == [1, 2, 3].
BA[i] == 1 and A[i] == 2 and A[i] == 3.
CA[i:i + 2] == [1, 2, 3].
DA[i] in [1, 2, 3].

Câu 8

(Câu 31.7 trang 65 SBT Tin học 10) Một năm dương lịch là năm nhuận nếu chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100. Biểu thức Python nào kiểm tra đúng năm year có phải là năm nhuận?
Ayear % 400 == 0 or (year % 4 == 0 and year % 100 != 0).
Byear % 4 == 0 and year % 100 == 0.
Cyear % 400 != 0 or year % 4 != 0.
Dyear % 100 == 0 and year % 400 != 0.

Câu 9

(Câu 31.8 trang 65 SBT Tin học 10) Gọi UCLN(a, b) là ước chung lớn nhất của hai số tự nhiên a, b. Biết UCLN(a, b) = UCLN(b, a%b) nếu b > 0 và UCLN(a, 0) = a. Với a = 24, b = 36, kết quả UCLN(a, b) là bao nhiêu?
A12.
B6.
C24.
D36.

Câu 10

(Câu 31.9 trang 65 SBT Tin học 10) Chương trình cần nhập số tự nhiên n > 1, sau đó in ra tất cả các ước số nguyên tố khác nhau của n theo hàng ngang. Nếu n = 12 thì kết quả cần in là gì?
A2 3.
B2 2 3.
C1 2 3 4 6 12.
D12.

Câu 11

(Câu 31.10 trang 65 SBT Tin học 10) Bài toán tìm tổng con lớn nhất: với dãy đánh giá A = [1, 7, -5, -9, 3, -1, 10, -6, 5], dãy con liên tục nào có tổng lớn nhất theo ví dụ trong sách?
A3, -1, 10.
B1, 7.
C-9, 3, -1.
D10, -6, 5.

Phần 2

Câu 1

(Câu 31.1 trang 63 SBT Tin học 10) Về chương trình nhập số thực dương a và kiểm soát lỗi nhập dữ liệu, nhận định nào sau đây đúng hoặc sai?
a)Có thể nhập a bằng lệnh a = float(input("Nhập số thực dương a:")).
b)Có thể dùng vòng lặp while a <= 0 để yêu cầu nhập lại khi dữ liệu chưa hợp lệ.
c)Nếu a <= 0 thì chương trình cần thông báo “Nhập sai, số a phải lớn hơn 0. Hãy nhập lại.”
d)Chỉ cần nhập a một lần, dù a <= 0 thì chương trình vẫn xem là dữ liệu hợp lệ.

Câu 2

(Câu 31.2 trang 63 SBT Tin học 10) Về cách kiểm thử và gỡ lỗi chương trình sắp xếp chèn trong sách, nhận định nào sau đây đúng hoặc sai?
a)Có thể dùng lệnh print để in các giá trị trung gian như k, A[k] và danh sách A sau mỗi vòng lặp chính.
b)Việc in giá trị trung gian giúp quan sát quá trình chương trình thay đổi dữ liệu.
c)Lỗi trong chương trình ban đầu là vị trí A[0] không được xét khi cần chèn phần tử vào đầu dãy con đã sắp xếp.
d)Muốn tìm lỗi, bắt buộc phải xoá hết các lệnh print trong chương trình.

Câu 3

(Câu 31.3 trang 63 SBT Tin học 10) Về chương trình in bảng cửu chương thành 10 khối gồm 2 hàng, 5 cột, nhận định nào sau đây đúng hoặc sai?
a)Có thể xây dựng thủ tục printBCC() để in bảng cửu chương.
b)Phần đầu của thủ tục có thể in các khối cửu chương của các số 1, 2, 3, 4, 5.
c)Phần sau của thủ tục có thể in các khối cửu chương của các số 6, 7, 8, 9, 10.
d)Muốn in bảng cửu chương thì không thể dùng vòng lặp for.

Câu 4

(Câu 31.3 trang 63 SBT Tin học 10) Về cách trình bày kết quả khi in bảng cửu chương, nhận định nào sau đây đúng hoặc sai?
a)Hàm st(n) giúp căn chỉnh các số có một chữ số và hai chữ số khi in.
b)Hàm space(k) có thể tạo khoảng cách giữa các khối bảng cửu chương.
c)Trong mỗi hàng, có thể dùng end = " " để tiếp tục in trên cùng một dòng.
d)Sau mỗi dòng của bảng cửu chương, không cần xuống dòng vì Python tự động căn bảng thành 2 hàng, 5 cột.

Câu 5

(Câu 31.4 trang 64 SBT Tin học 10) Về bài toán tìm vị trí đầu tiên của mẫu [1, 2, 3] trong danh sách A, nhận định nào sau đây đúng hoặc sai?
a)Có thể dùng biến pkq = -1 để biểu thị ban đầu chưa tìm thấy mẫu.
b)Có thể duyệt lần lượt các vị trí i trong danh sách A để kiểm tra mẫu.
c)Nếu A[i:i + 3] == p thì có thể gán pkq = i.
d)Nếu không tìm thấy mẫu thì vẫn phải in ra vị trí 0.

Câu 6

(Câu 31.4 trang 64 SBT Tin học 10) Về việc tổng quát bài toán tìm mẫu ba số liên tiếp, nhận định nào sau đây đúng hoặc sai?
a)Có thể thay mẫu [1, 2, 3] bằng một mẫu bất kì gồm ba số p, q, s.
b)Có thể biểu diễn mẫu cần tìm bằng một danh sách có ba phần tử.
c)Dùng so sánh lát cắt A[i:i + 3] với mẫu là một cách kiểm tra ngắn gọn.
d)Việc tìm mẫu ba số liên tiếp chỉ thực hiện được với mẫu [1, 2, 3], không thể tổng quát.

Câu 7

(Câu 31.5 trang 65 SBT Tin học 10) Viết chương trình nhập một xâu kí tự bất kì từ bàn phím, sau đó sắp xếp lại để các chữ số dồn sang trái, các chữ cái tiếng Anh dồn sang phải xâu, các kí tự khác giữ ở giữa. Nhận định nào sau đây đúng hoặc sai?
a)Có thể duyệt từng kí tự ch trong xâu S bằng vòng lặp for ch in S.
b)Có thể kiểm tra ch là chữ số bằng điều kiện "0" <= ch <= "9".
c)Có thể kiểm tra ch là chữ cái tiếng Anh bằng điều kiện "a" <= ch <= "z" hoặc "A" <= ch <= "Z".
d)Mọi kí tự trong xâu S đều là chữ số nên không cần kiểm tra chữ cái và kí tự khác.

Câu 8

(Câu 31.5 trang 65 SBT Tin học 10) Về cách tạo xâu kết quả trong bài sắp xếp lại kí tự của xâu, nhận định nào sau đây đúng hoặc sai?
a)Có thể dùng s_tr để lưu tạm các kí tự là chữ số.
b)Có thể dùng s_ph để lưu tạm các kí tự là chữ cái tiếng Anh.
c)Có thể dùng s_gi để lưu tạm các kí tự không phải chữ số và không phải chữ cái tiếng Anh.
d)Xâu kết quả phải được tạo theo thứ tự s_ph + s_gi + s_tr để chữ số nằm bên phải.

Câu 9

(Câu 31.6 trang 65 SBT Tin học 10) Viết chương trình nhập số tự nhiên n, sau đó nhập n họ tên đầy đủ học sinh trong lớp; khi kết thúc in ra danh sách học sinh với 2 cột: tên và họ đệm. Nhận định nào sau đây đúng hoặc sai?
a)Có thể nhập số học sinh bằng lệnh n = int(input("Nhập số học sinh trong lớp: ")).
b)Có thể dùng hai danh sách ten và hodem để lưu tên và họ đệm của học sinh.
c)Có thể dùng s.split() để tách họ tên đầy đủ thành các từ.
d)Họ tên đầy đủ không thể tách bằng split() nên bắt buộc phải nhập riêng từng phần ngay từ đầu.

Câu 10

(Câu 31.6 trang 65 SBT Tin học 10) Về cách tách tên và họ đệm của học sinh, nhận định nào sau đây đúng hoặc sai?
a)Sau khi tách họ tên thành danh sách sline, tên học sinh có thể lấy ở phần tử cuối cùng.
b)Có thể dùng m = len(sline) - 1 để xác định chỉ số của tên.
c)Sau khi lấy tên, có thể xoá phần tử tên khỏi sline rồi ghép phần còn lại bằng " ".join(sline) để được họ đệm.
d)Tên học sinh luôn là phần tử đầu tiên của danh sách sline.

Câu 11

(Câu 31.7 trang 65 SBT Tin học 10) Viết chương trình nhập hai số tự nhiên Y1, Y2 là số năm, Y2 > Y1, sau đó tính trong khoảng từ năm Y1 đến năm Y2 có bao nhiêu năm nhuận. Nhận định nào sau đây đúng hoặc sai?
a)Có thể viết hàm nhuan(year) để kiểm tra một năm có phải là năm nhuận hay không.
b)Một năm chia hết cho 400 là năm nhuận.
c)Một năm chia hết cho 4 nhưng không chia hết cho 100 là năm nhuận.
d)Mọi năm chia hết cho 100 đều là năm nhuận.

Câu 12

(Câu 31.7 trang 65 SBT Tin học 10) Về chương trình đếm năm nhuận trong khoảng từ Y1 đến Y2, nhận định nào sau đây đúng hoặc sai?
a)Có thể dùng biến count = 0 để đếm số năm nhuận.
b)Có thể duyệt các năm bằng vòng lặp for year in range(Y1, Y2 + 1).
c)Nếu nhuan(year) trả về True thì tăng count thêm 1.
d)Chỉ cần kiểm tra năm Y1, không cần kiểm tra các năm còn lại trong khoảng.

Câu 13

(Câu 31.8 trang 65 SBT Tin học 10) Về thuật toán Euclid tính UCLN(a, b), nhận định nào sau đây đúng hoặc sai?
a)Khi b > 0, có thể đặt r = a%b.
b)Sau khi tính r, có thể cập nhật a = b và b = r.
c)Khi b = 0 thì UCLN(a, b) bằng a.
d)Thuật toán Euclid không thể dùng vòng lặp while.

Câu 14

(Câu 31.9 trang 65 SBT Tin học 10) Về chương trình in ra các ước số nguyên tố khác nhau của số tự nhiên n > 1, nhận định nào sau đây đúng hoặc sai?
a)Ban đầu có thể đặt k = 2 để bắt đầu tìm ước nguyên tố.
b)Nếu k là một ước nguyên tố của n thì in k ra màn hình.
c)Sau khi tìm được ước k, cần chia n cho k cho đến khi n không còn chia hết cho k để tránh in lặp lại k.
d)Nếu n = 12 thì cần in 2 2 3 vì 2 xuất hiện hai lần trong phân tích thừa số nguyên tố.

Câu 15

(Câu 31.10 trang 65 SBT Tin học 10) Về bài toán tìm tổng con lớn nhất trong dãy đánh giá các địa điểm du lịch, nhận định nào sau đây đúng hoặc sai?
a)Cần tìm hai chỉ số i, j sao cho tổng A[i] + A[i + 1] + ... + A[j] là lớn nhất.
b)Dãy con được chọn phải gồm các phần tử liên tiếp trong dãy ban đầu.
c)Có thể dùng hai vòng lặp lồng nhau để xét tất cả các dãy con liên tiếp.
d)Chỉ cần chọn phần tử lớn nhất riêng lẻ trong dãy thì luôn chắc chắn tìm được dãy con có tổng lớn nhất.

Câu 16

(Câu 31.10 trang 65 SBT Tin học 10) Với thuật toán đơn giản tìm tổng con lớn nhất, nhận định nào sau đây đúng hoặc sai?
a)Có thể khởi tạo imax = 0, jmax = 0 và Smax = A[0].
b)Với mỗi vị trí bắt đầu i, có thể cộng dồn S khi j chạy từ i đến n - 1.
c)Nếu S > Smax thì cập nhật imax, jmax và Smax.
d)Sau khi tìm xong, dãy con tối ưu luôn bắt đầu tại vị trí 0.