Giải bài tập SGK: Bài 19: Câu lệnh điều kiện If – 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 101

Câu hỏi mở đầu

Đề bài: Trong cuộc sống, chúng ta vẫn thường gặp các tình huống một việc được thực hiện hay không phụ thuộc vào một điều kiện. Ví dụ, em dự định, nếu ngày mai trời không mưa em sẽ đi chơi cùng bạn, ngược lại nếu trời mưa em sẽ ở nhà làm bài tập. Các tình huống như vậy trong lập trình được gọi là rẽ nhánh. Em hãy điền thông tin ở tình huống trên vào vị trí <Điều kiện> và lệnh tương ứng trong sơ đồ cấu trúc rẽ nhánh ở Hình 19.1.

Lời giải:

Điền thông tin vào sơ đồ rẽ nhánh:

  • <Điều kiện>: Trời không mưa?
  • Đúng → Lệnh 1: Đi chơi cùng bạn.
  • Sai → Lệnh 2: Ở nhà làm bài tập.

1. Biểu thức lôgic

Hoạt động 1 trang 101

Đề bài: Biểu thức nào sau đây có thể đưa vào vị trí <điều kiện> trong lệnh: Nếu <điều kiện> thì <lệnh> của các ngôn ngữ lập trình bậc cao?

A. m, n = 1, 2. B. a + b > 1. C. a * b < a + b. D. 12 + 15 > 2 * 13.

Lời giải:

Điều kiện trong lệnh Nếu…thì phải là biểu thức lôgic (chỉ nhận giá trị True hoặc False).

Biểu thức Có là biểu thức lôgic không? Lý do
A. m, n = 1, 2 ✗ Không Đây là lệnh gán, không phải biểu thức so sánh.
B. a + b > 1 ✓ Có Biểu thức so sánh, cho kết quả True hoặc False.
C. a * b < a + b ✓ Có Biểu thức so sánh, cho kết quả True hoặc False.
D. 12 + 15 > 2 * 13 ✓ Có Biểu thức so sánh, cho kết quả True hoặc False.

Đáp án: B, C, D.

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

Đề bài: Mỗi biểu thức sau có giá trị True hay False?

a) 100%4 == 0 b) 111//5 != 20 or 20%3 != 0

Lời giải:

Câu a) 100%4 == 0:

  • $100 % 4 = 0$ (vì $100$ chia hết cho $4$).
  • Vế trái bằng $0$, vế phải bằng $0$ → $0 == 0$ là True.

Kết quả: True.

Câu b) 111//5 != 20 or 20%3 != 0:

Tính từng vế của phép or:

  • Vế trái: $111 // 5 = 22$ (vì $5 \times 22 = 110$), nên $22 \neq 20$ → True.
  • Vế phải: $20 % 3 = 2$, nên $2 \neq 0$ → True.
  • True or True → True.

Kết quả: True.

2. Lệnh if

Hoạt động 2 trang 102

Đề bài: Cho trước số tự nhiên $n$ (được gán hoặc nhập từ bàn phím). Đoạn chương trình sau kiểm tra $n > 0$ thì thông báo "n là số lớn hơn 0".

if n > 0:
    print("n là số lớn hơn 0")

Em có nhận xét gì về cấu trúc lệnh if? Sau <điều kiện> lệnh if có kí tự gì? Lệnh print() được viết như thế nào?

Lời giải:

Nhận xét về cấu trúc lệnh if:

  • Lệnh if có dạng: if <điều kiện>: rồi xuống dòng để viết lệnh thực hiện.
  • Sau <điều kiện>dấu hai chấm :.
  • Lệnh print() được viết lùi vào (thường là $1$ tab hoặc $4$ dấu cách) so với từ khoá if, tạo thành khối lệnh thuộc về if.

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

Đề bài: Đoạn chương trình sau thực hiện công việc gì?

k = int(input("Nhập một số nguyên dương: "))
if k <= 0:
    print("Bạn nhập sai rồi!")

Lời giải:

Đoạn chương trình thực hiện các công việc sau:

  • Dòng 1: Nhập một số nguyên $k$ từ bàn phím.
  • Dòng 2 – 3: Kiểm tra điều kiện $k \leq 0$:
    • Nếu đúng (tức là $k$ không phải số nguyên dương) → in ra thông báo "Bạn nhập sai rồi!".
    • Nếu sai (tức là $k > 0$, $k$ là số nguyên dương hợp lệ) → không làm gì.

Tóm lại: Đoạn chương trình kiểm tra xem người dùng có nhập đúng số nguyên dương không, nếu nhập sai (≤ 0) thì cảnh báo.

Thực hành trang 103 – 104

Nhiệm vụ 1 trang 103

Đề bài: Viết chương trình nhập số tự nhiên $n$ từ bàn phím. Sau đó thông báo số em đã nhập là số chẵn hay số lẻ phụ thuộc vào $n$ là chẵn hay lẻ.

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

Ý tưởng: Dùng phép lấy số dư n%2 để kiểm tra:

  • Nếu $n % 2 == 0$ → $n$ là số chẵn.
  • Ngược lại → $n$ là số lẻ.

Em mở chế độ soạn thảo (File / New File) và gõ chương trình:

n = int(input("Nhập số tự nhiên n: "))
if n%2 == 0:
    print("Số đã nhập là số chẵn.")
else:
    print("Số đã nhập là số lẻ.")

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

Nhập số tự nhiên n: 7
Số đã nhập là số lẻ.

Nhiệm vụ 2 trang 104

Đề bài: Giả sử giá điện sinh hoạt được tính luỹ kế theo từng tháng như sau (giá tính theo từng kWh điện tiêu thụ):

  • Mức từ $0$ đến $50$ kWh: giá mỗi kWh là $1{,}678$ nghìn đồng.
  • Mức từ $51$ đến $100$ kWh: giá mỗi kWh là $1{,}734$ nghìn đồng.
  • Từ mức $101$ trở lên: giá mỗi kWh là $2{,}014$ nghìn đồng.

Viết chương trình nhập số điện tiêu thụ trong tháng và tính số tiền điện phải trả.

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

Ý tưởng: Gọi $k$ là số kWh điện tiêu thụ. Theo cách tính luỹ kế:

  • Nếu $k \leq 50$: tiền cần trả là $t = k \times 1{,}678$.
  • Nếu $50 < k \leq 100$: $50$ kWh đầu tính giá $1{,}678$, phần dư $(k – 50)$ tính giá $1{,}734$:$$t = 50 \times 1{,}678 + (k – 50) \times 1{,}734$$
  • Nếu $k > 100$: $50$ kWh đầu giá $1{,}678$, $50$ kWh tiếp giá $1{,}734$, phần dư $(k – 100)$ giá $2{,}014$:$$t = 50 \times 1{,}678 + 50 \times 1{,}734 + (k – 100) \times 2{,}014$$

Đây là cấu trúc rẽ nhánh lồng nhau (if trong else).

Em gõ chương trình sau:

k = float(input("Nhập số kWh tiêu thụ điện nhà em: "))
if k <= 50:
    t = k*1.678
else:
    if k <= 100:
        t = 50*1.678 + (k-50)*1.734
    else:
        t = 50*1.678 + 50*1.734 + (k-100)*2.014
print("Số tiền điện phải trả là:", round(t), "nghìn đồng")

Chú ý:

  • Trong máy tính dùng dấu chấm . để viết số thập phân (ví dụ 1.678).
  • Lệnh round(t) dùng để làm tròn số thực $t$.
  • Các khối lệnh bên trong if/else đều phải viết lùi vào và thẳng hàng.

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

Nhập số kWh tiêu thụ điện nhà em: 120
Số tiền điện phải trả là: 211 nghìn đồng

Luyện tập trang 104

Luyện tập 1 trang 104

Đề bài: Viết biểu thức lôgic ứng với mỗi câu sau:

a) Số $x$ nằm trong khoảng $(0; 10)$.

b) Số $y$ nằm ngoài đoạn $[1; 2]$.

c) Số $z$ nằm trong đoạn $[0; 1]$ hoặc $[5; 10]$.

Lời giải:

Câu a) Số $x$ nằm trong khoảng $(0; 10)$:

Điều kiện: $0 < x < 10$, tức là $x > 0$ $x < 10$.

→ Biểu thức Python:

x > 0 and x < 10

Câu b) Số $y$ nằm ngoài đoạn $[1; 2]$:

Điều kiện: $y < 1$ hoặc $y > 2$.

→ Biểu thức Python:

y < 1 or y > 2

Câu c) Số $z$ nằm trong đoạn $[0; 1]$ hoặc $[5; 10]$:

Điều kiện: ($0 \leq z \leq 1$) hoặc ($5 \leq z \leq 10$).

→ Biểu thức Python:

(z >= 0 and z <= 1) or (z >= 5 and z <= 10)

Chú ý phân biệt:

  • Khoảng $(a; b)$: không lấy hai đầu, dùng <, >.
  • Đoạn $[a; b]$: lấy cả hai đầu, dùng <=, >=.

Luyện tập 2 trang 104

Đề bài: Tìm một vài giá trị $m$, $n$ thoả mãn các biểu thức sau:

a) 100%m == 0 and n%5 != 0

b) m%100 == 0 and m%400 != 0

c) n%3 == 0 or (n%3 != 0 and n%4 == 0)

Lời giải:

Câu a) 100%m == 0 and n%5 != 0:

  • 100%m == 0: $m$ là ước của $100$ → $m \in {1, 2, 4, 5, 10, 20, 25, 50, 100}$.
  • n%5 != 0: $n$ không chia hết cho $5$.

→ Ví dụ: $m = 5$, $n = 3$.

Câu b) m%100 == 0 and m%400 != 0:

  • $m$ chia hết cho $100$ nhưng không chia hết cho $400$.

→ Ví dụ: $m = 200$ (vì $200 \% 100 = 0$ và $200 \% 400 = 200 \neq 0$).

Một số giá trị khác: $m = 100, 300, 500, 600, 700$,…

Câu c) n%3 == 0 or (n%3 != 0 and n%4 == 0):

Biểu thức đúng khi: $n$ chia hết cho $3$ hoặc ($n$ không chia hết cho $3$ và $n$ chia hết cho $4$).

→ Ví dụ:

  • $n = 3$ (chia hết cho $3$ → vế trái True).
  • $n = 4$ (không chia hết cho $3$ nhưng chia hết cho $4$ → vế phải True).

Vận dụng trang 104

Vận dụng 1 trang 104

Đề bài: Giá bán cam tại siêu thị tính như sau: nếu khối lượng cam mua dưới $5$ kg thì giá bán là $12,000$ đồng/kg, nếu khối lượng mua lớn hơn hoặc bằng $5$ kg thì giá bán là $10,000$ đồng/kg. Viết chương trình nhập số lượng mua (tính theo kg) sau đó tính số tiền phải trả.

Lời giải:

Ý tưởng: Dùng câu lệnh if ... else:

  • Nếu $kg < 5$ → tiền = $kg \times 12,000$.
  • Ngược lại ($kg \geq 5$) → tiền = $kg \times 10,000$.

Chương trình:

kg = float(input("Nhập số kg cam đã mua: "))
if kg < 5:
    tien = kg * 12000
else:
    tien = kg * 10000
print("Số tiền phải trả là:", tien, "đồng")

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

Nhập số kg cam đã mua: 6
Số tiền phải trả là: 60000.0 đồng

Kiểm tra: Vì $6 \geq 5$ nên giá $10,000$/kg, số tiền $= 6 \times 10,000 = 60,000$ đồng. ✓

Vận dụng 2 trang 104

Đề bài: Năm $n$ là năm nhuận nếu giá trị $n$ thoả mãn điều kiện: $n$ chia hết cho $400$ hoặc $n$ chia hết cho $4$ đồng thời không chia hết cho $100$. Viết chương trình nhập số năm $n$ và cho biết năm $n$ có phải là nhuận hay không.

Lời giải:

Phân tích điều kiện năm nhuận:

Năm $n$ là năm nhuận khi:

$$(n \text{ chia hết cho } 400) \quad \text{HOẶC} \quad (n \text{ chia hết cho } 4 \text{ VÀ } n \text{ không chia hết cho } 100)$$

Viết sang Python:

n%400 == 0 or (n%4 == 0 and n%100 != 0)

Chương trình:

n = int(input("Nhập năm n: "))
if n%400 == 0 or (n%4 == 0 and n%100 != 0):
    print("Năm", n, "là năm nhuận.")
else:
    print("Năm", n, "không phải là năm nhuận.")

Ví dụ khi chạy:

  • Với $n = 2024$ (chia hết cho $4$ và không chia hết cho $100$):
    Nhập năm n: 2024
    Năm 2024 là năm nhuận.
    
  • Với $n = 2023$:
    Nhập năm n: 2023
    Năm 2023 không phải là năm nhuận.
    
  • Với $n = 2000$ (chia hết cho $400$):
    Nhập năm n: 2000
    Năm 2000 là năm nhuận.
    

Chú ý: Cần đặt dấu ngoặc cho biểu thức (n%4 == 0 and n%100 != 0) để Python hiểu đúng thứ tự ưu tiên của phép andor.

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