1
MỘT
SỐ
CHUYÊN
ĐỀ
LẬP
TRÌNH
(minh họa
với C và
Python)
[Ver 1]
TRƯỜNG ĐHSP HUẾ
KHOA TIN HỌC
NGUYN TH DŨNG, LÊ TH ANH ĐC
NGUYN QUANG THUN, PHM H NHƯ NGUYT
NGUYN VIT PHÙNG, HOÀNG VĂN DIU
HUẾ, 2022
2
Li nói đu
Tp tài liu này khởi đầu tư liu sưu tầm tham kho t các nguồn để dy
bi dưỡng hc sinh gii ca Cô giáo Lê Th Anh Đức (giáo viên trường THPT
Tây Hiếu, tnh Ngh An), mt cu sinh viên Khoa Tin hc ĐHSP Huế. Tư liu
hướng dn gii các chương trình minh ha bng ngôn ng C khá
chu đáo. Với xu thế chuyển đổi ngôn ng lp trình trong dy hc ph thông
hin nay là ngôn ng Python. Tp tài liu này hy vng là mt s đóng góp nh
ca thy trò Khoa Tin hc ĐHSP Huế, nhm giúp hc sinh các Thy
giáo có thêm ngun tham kho trong vic dy và hc lp trình vi ngôn ng
Python.
Tài liu gm các chuyên đ sau:
Nội dung
Chuyên đề 1: Kiến thức cơ bản về NNLT C và Python;
Chuyên đề 2: Số học;
Chuyên đề 3: Xử lý dãy số;
Chuyên đề 4: Xử lý xâu ký tự;
Chuyên đề 5: Đệ quy, quay lui;
Chuyên đề 6: Quy hoạch động;
Phân tích các đề thi, nhận dạng các dạng toán và giải quyết bài toán.
3
Tác gi Nguyn Thế Dũng ch người ch xướng, biên tp, hiu đính, mi
gi các anh ch em cu sinh viên, sinh viên ca Khoa Tin hc ĐHSP Huế
chuyn son tài liu trên vi minh ha bng ngôn ng Python.
Trân trng cm ơn s chung tay ca các thy cô, anh ch em: Nguyn Quang
Thun (THPT chuyên Quc Hc - Huế), Phm H Như Nguyt (THPT Phan
Đăng Lưu Huế), Nguyn Viết Phùng (THPT Nguyn Hu Cnh Đng
Nai), Hoàng Văn Diu (THPT chuyên Quý Đôn Qung Tr) và nhiu anh
ch em khác… (sp xếp h tên trên theo th t chuyên mc tài liu đã chuyn
son).
Trong phiên bn đu tiên này, các phn hướng dn gii minh ha bi C,
chúng tôi gi nguyên tác ca tư liu gc b sung các kiến thc cơ bn v
Python cũng như b sung các chương trình minh ha bi Python. Mt s
ngun Python ca các bài tp trong tài liu này, s được đưa n đường link
đ người đc có th tham kho tin li.
Rt mong nhn được s góp ý, đóng góp thêm cho tư liu này ca thy cô, anh
ch em gn xa đ tài liu được ngày mt phong phú hơn, to nên mt tài liu
hu ích cho vic dy hc lp trình.
Huế, mùa thu 2022.
4
CHUYÊN ĐỀ KIẾN THỨC CƠ BẢN TRONG C++
Đối với mỗi nội dung sẽ triển khai theo các hoạt động:
- Hướng dẫn học sinh m hiểu các kiến thức thuyết, các khái niệm, tính ứng
dụng và cả kinh nghiệm về chủ đề.
- Giáo viên cùng học sinh giải quyết một vài dụ về bài toán bản, tiêu biểu
về chủ đề. Sau đó phát triển các toán này với các yêu cầu cao hơn, mở rộng hơn.
- Luyện tập giải một số bài tập theo chuyên đề; Giải một số bài tập mở rộng và
nâng cao có vận dụng kiến thức kết hợp nhiều chủ đề đã được học ở trước.
1) Kiểu dữ liệu đơn giản và các phép toán cơ bản.
Một số kiểu dữ liệu thường dùng:
+ Kiều logic: bool
+ Kiều ký tự: char
+ Số nguyên: int, long long, unsigned long long
+ Số nguyên: float, double
Ta thấy rằng phạm vi kiểu dữ liệu càng lớn thì càng cần nhiều bộ nhớ và các đề
thi học sinh giỏi ngày nay ngoài giới hạn về thời gian thực hiện chương trình còn giới
hạn cả về dung lượng bộ nhớ vì vậy cần sử dụng các kiểu dữ liệu một cách hợp lý.
Các phép toán trên các loại dữ liệu đã được giới thiệu trong chương trình chính
khóa nên tôi không nhắc lại ở đây.
Lưu ý trong một số trường hợp tính toán cụ thể hoặc cần biểu diễn giá trị dưới
những định dạng khác nhau, chúng ta cần thực hiện ép kiểu để chuyển đổi qua lại giữa
những kiểu dữ liệu có khả năng lưu trữ giá trị giống nhau.
Bài toán cơ bản
Viết chương trình nhập vào 2 số nguyên a, b (a,b<=109). Tính tổng (a+b),
hiệu (a-b), tích (a*b), du (a%b), thương nguyên (a/b), thương thực a chia b hiển
thị 2 chữ số sau dấu phẩy.
5
Lưu ý học sinh:
- Khai báo kiểu dữ liệu phù hợp cho từng biến.
- Hai biến a,b số nguyên nên khi thực hiện phép chia a/b ta sẽ thu được
kết quả nguyên. Khi muốn lấy kết quả số thực ta cần ém kiểu (float). Ta thể
viết (float)a/b hoặc a/(float)b.
- Câu lệnh cout<<setprecision(2); để lấy 2 chữ số thập phân sau dấu phẩy.
- Câu lệnh cout <<fixed; để luôn hiển thị 2 chữ số thập phân. dụ phép
chia (float)4/2 nếu không câu lệnhy thì kết quả hiện ra 2. Khi câu lệnh này
thì kết quả hiển thị 2.00.
2) Cấu trúc điều khiển:
- Cấu trúc tuần tự.
- Cấu trúc rẽ nhánh: if…, if …. else…
- Lặp với số lần biết trước câu lệnh: for…
- Lặp với số lần chưa biết trước: while
Bài toán cơ bản:
Bài 1: Viết chương trình nhập vào số nguyên N (1 < n <= 109). Hãy đưa ra
màn hình các số chẵn thuộc đoạn từ 1 đến N.
Ý tưởng:
Cách 1: Sử dụng vòng lặp với giá trị đầu là 1, bước nhảy 1 để duyệt tất cả các
giá trị i thuộc đoạn từ 1 đến N. Dùng lệnh rẽ nhánh kiểm tra giá trị i nếu số chẵn thì
xuất ra màn hình.