Bài tập lập trình C++ - Lương Trần Hy Hiến
MỤC LỤC
CHƯƠNG 1. Bài tập mở đầu . 3
Bài tập 1: . 3
Bài tập 2: . 3
Bài tập 3: . 3
Bài tập 4: . 3
Bài tập 5: . 4
Bài tập 6: . 4
Bài tập 7: . 4
Bài tập 8: . 4
Bài tập 9: . 4
Bài tập 10: . 5
Bài tập 11: . 5
Bài tập 12: . 5
CHƯƠNG 2. Cấu trúc điều khiển – Cấu trúc lặp . 5
2.1. Bài tập liên quan đến cấu trúc điều khiển: . 5
Bài tập 13: . 5
Bài tập 14: . 5
Bài tập 15: (*). 5
Bài tập 16: . 6
Bài tập 17:
(*)
. 6
Bài tập 18: (*). 6
Bài tập 19: . 6
Bài tập 20: . 6
Bài tập 21: . 7
Bài tập 22: . 7
Bài tập 23: . 7
Bài tập 24: . 7
Bài tập 25: . 7
Bài tập 26: . 7
Bài tập 27: . 7
Bài tập 28: . 7
2.2. Bài tập liên quan đến cấu trúc lặp: . 8
Bài tập 29: . 8
Bài tập 30: . 8
Bài tập 31: . 8
Bài tập 32: . 8
Bài tập 33: . 9
Bài tập 34: . 9
Bài tập 35: . 9
Bài tập 36: . 9
Bài tập 37: . 9
Bài tập 38: . 9
Bài tập 39: . 9
Bài tập 40: . 10
Bài tập 41: (*). 10
Bài tập 42: (*). 10
Bài tập 43: (*). 10
Bài tập 44: (*). 10
Bài tập lập trình C++ 2/18 GV: Lương Trần Hy Hiến
CHƯƠNG 3. Hàm . 10
Bài tập 45: . 10
Bài tập 46: . 11
Bài tập 47: . 11
Bài tập 48: . 11
Bài tập 49: . 11
Bài tập 50: . 12
Bài tập 51: . 12
Bài tập 52: . 12
Bài tập 53: . 12
CHƯƠNG 4. Mảng . 13
4.1. Mảng 1 chiều . 13
Bài tập 54: . 13
Bài tập 55: . 13
Bài tập 56: . 13
4.2. Mảng 2 chiều . 13
Bài tập 57: . 13
CHƯƠNG 5. Kiểu dữliệu có cấu trúc .14
Bài tập 58: . 14
Bài tập 59: . 14
Bài tập 60: . 14
Bài tập 61: . 14
Bài tập 62: . 14
Bài tập 63: . 15
Bài tập 64: (*). 15
CHƯƠNG 6. Các kỹthuật nâng cao . 15
6.1. Con trỏ. 15
Bài tập 65: . 15
Bài tập 66: . 15
6.2. Kỹthuật đệquy . 15
Bài tập 67: . 15
Bài tập 68: . 15
Bài tập 69: . 15
Bài tập 70: . 16
Bài tập 71: . 16
6.3. Làm việc với tập tin . 16
Bài tập 72: . 16
Bài tập 73: . 16
Bài tập 74: . 16
Bài tập 75: . 16
CHƯƠNG 7. Bài tập Project . 17
7.1. Chương trình dò từ điển . 17
Mô tả: . 17
Hướng dẫn: . 17
GỢI Ý TỪ ĐIỂN . 17
7.2. Chương trình sắp xếp dòng . 18
Mô tả: . 1
ầu tiên tận cùng bằng 6 • Tìm và in ra vị trí phần tử dương nhỏ nhất • Tính tổng của mảng • Tính trung bình cộng của mảng • Tìm kiếm một phần tử x cho trước (x nhập từ bàn phím) • Sắp xếp mảng theo thứ tự tăng dần, giảm dần • Xuất dãy đảo ngược của dãy ban đầu • Thêm một phần tử x vào vị trí k (x, k nhập từ bàn phím) • Hủy một phần tử ở vị trí thứ k • Đếm số phần tử dương và in ra tổng các phần tử dương của mảng • Kiểm tra mảng có đối xứng hay không? • Kiểm tra mảng có sắp thứ tự tăng hay không? Bài tập 55: Cho mảng một chiều các số thực hãy tìm đoạn [a,b] sao cho đoạn này chứa tất cả các giá trị trong mảng (a,b: số nguyên). Bài tập 56: Nhập vào các hệ số của một đa thức bậc n vào một mảng và giá trị x. In ra kết quả đa thức ( ) xaxaxaxaxf nnnnnn 12211 ... ++++= −−−− 4.2. Mảng 2 chiều Bài tập 57: Viết chương trình: • Nhập vào mảng 2 chiều (kích thước m,n: nhập từ bàn phím) • Xuất mảng 2 chiều • Tìm phần tử Min, Max • Sắp xếp theo thứ tự zigzag • Sắp xếp theo thứ tự trộn ốc xoáy vào trong • Thêm một dòng v vào ma trận ở cuối ma trận • Thêm một dòng v vào ma trận ở dòng thứ k • Xóa dòng thứ k khỏi ma trận • Tìm vị trí của phần tử vừa là phần tử lớn nhất trên dòng của nó đồng thời nhỏ nhất trên cột của nó. • Tính tổng, tích 2 ma trận Bài tập lập trình C++ 14/18 GV: Lương Trần Hy Hiến • Tính tổng theo một điều kiện nào đó. • Đếm số lượng các phần tử dương nằm ở ma trận tam giác trên. • Tính trung bình cộng trên một cột trong ma trận các số thực. • Tính tổng các phần tử nằm trên biên của ma trận. • Đếm số lượng phần tử "yên ngựa" của ma trận, biết phần tử yên ngựa là phần tử lớn nhất trên dòng và nhỏ nhất trên cột tại vị trí đang xét. • Đếm số lượng phần tử "hoàng hậu" của ma trận, biết phần tử hoàng hậu là phần tử lớn nhất trên dòng, trên cột và hai đường chéo đi qua nó. CHƯƠNG 5. Kiểu dữ liệu có cấu trúc Bài tập 58: Chương trình thao tác trên phân số: • Viết hàm nhập vào một phân số. • Viết hàm xuất một phân số. • Viết hàm cộng (trừ, nhân, chia) hai phân số, kết quả trả về một phân số là tổng (hiệu, tích, thương) của hai phân số đó. • Viết hàm kiểm tra phân số là dương hay âm? Trả về: 1: dương, -1: âm. • Viết hàm so sánh 2 phân số (hàm trả về một trong 3 giá trị: -1, 0, 1). • Viết hàm qui đồng mẫu số của hai phân số. • Sử dụng các hàm trên viết một chương trình thao tác trên các phân số. Bài tập 59: Hãy khai báo kiểu dữ liệu biểu diễn hỗn số trong toán học và định nghĩa hàm nhập, xuất cho kiểu dữ liệu này. • Viết hàm rút gọn hỗn số. • Viết hàm tính tổng, hiệu, tích, thương 2 hỗn số. Bài tập 60: Hãy khai báo kiểu dữ liệu biểu diễn đa thức một biến trong toán học và định nghĩa hàm nhập, xuất cho kiểu dữ liệu này. • Hãy nhập vào đa thức và giá trị biến, tính và in ra kết quả của đa thức đó. • (*)Tính tổng/hiệu 2 đa thức. • (*)Tính tích/thương 2 đa thức. • (*)Tính đạo hàm cấp k = 1 của đa thức. • (*)Tính đa thức dư của phép chia đa thức thứ nhất cho đa thức thứ hai. Bài tập 61: Viết chương trình nhập vào tọa độ tâm và bán kính của một đường tròn trong mặt phẳng Oxy. Tính diện tích và chu vi của nó và in ra kết quả lên màn hình. (HD: Định nghĩa cấu trúc DIEM, DUONGTRON; viết hàm Nhap(), Xuat(), TinhDienTich(), TinhChuVi()). Bài tập 62: Viết chương trình nhập vào tọa độ 3 đỉnh của một tam giác trong mặt phẳng Oxy. Tính diện tích, chu vi và tọa độ trọng tâm tam giác và in ra kết quả lên màn hình. (HD: Định nghĩa cấu trúc DIEM, TAMGIAC; viết hàm Nhap(), Xuat(), TinhDienTich(), TinhChuVi(), TimTrongTam()). Cho biết dạng của tam giác? Bài tập lập trình C++ 15/18 GV: Lương Trần Hy Hiến Bài tập 63: Định nghĩa cấu trúc dữ liệu số phức. Hãy viết các hàm nhập/xuất, tính tổng, hiệu, tích, thương, lũy thừa trên số phức. Bài tập 64: (*) Xét chương trình dò vé số. Kết quả dò số bao gồm 8 giải. Mỗi giải là một con số. Giải 7 là một số có 2 chữ số. Giải 6 là một số có 3 chữ số. Giải 5 là một số có 4 chữ số. Giải 4, 3, 2, 1, đặc biệt mỗi giải là một số có 5 chữ số. Một tờ vé số được đặc trưng bởi một con số có 6 chữ số. Một tờ vé số được gọi là trúng giải k có m chữ số nếu m chữ số cuối của vé số giống hoàn toàn với số đại diện cho giải k. Viết chương trình nhập vào kết quả dò số, và một tờ vé số. Xuất ra màn hình thông báo kết quả dò số: không trúng hoặc trúng giải mấy. Lưu ý: không xét ngày phát hành, tỉnh thành phát hành, loại vé, giải khuyến khích và một giải có thể có nhiều lần quay (nhiều số). CHƯƠNG 6. Các kỹ thuật nâng cao 6.1. Con trỏ Bài tập 65: Viết hàm hoán vị trong đó tham số truyền vào là con trỏ. Bài tập 66: Minh họa các thao tác trên danh sách liên kết đơn: • Khởi tạo danh sách, • Thêm 01 phần tử vào danh sách, • Xóa 01 phần tử x ra khỏi danh sách, • Tìm kiếm phần tử x trên danh sách theo các tiêu chí sau: o Một số x cho trước, o Số lớn nhất, o Số bé nhất, o Số nguyên tố dầu tiên, o Số chính phương đầu tiên, o Số nguyên tố lớn nhất, o Số nguyên tố bé nhất. • Sắp xếp trên danh sách. 6.2. Kỹ thuật đệ quy Bài tập 67: Cài đặt bài toán tìm phần tử thứ n trong dãy Fibonaci theo 2 cách: Đệ quy và không để quy. Bài tập 68: Cài đặt bài toán tháp Hà Nội. Nhập vào số đĩa, in ra kết quả chuyển đĩa từng bước với số cột là 3. Bài tập 69: Cài đặt hàm tính lũy thừa nhanh. Ví dụ: x14 = (x7)2, x11 = x6.x5=x.(x5)2,... Bài tập lập trình C++ 16/18 GV: Lương Trần Hy Hiến Bài tập 70: Nhập vào số nguyên dương n và số nguyên k (0 <= k <= n) và in ra giá trị C(n,k) của tổ hợp n lấy k bằng cách dựa vào công thức: C(n, k) = C(n-1, k) + C(n-1, k-1) Bài tập 71: Bài toán 8 con hậu: Sắp xếp n = 8 con hậu trên bàn cờ vua 8 x 8 (n x n) sao cho không có bất kỳ 2 con hậu nào có thể ăn lẫn nhau theo luật cờ vua. 6.3. Làm việc với tập tin Bài tập 72: Mỗi đa thức a0 + a1x + a2x2 + … + anxn được lưu trong tập tin văn bản theo quy ước sau đây: • Dòng 1: Lưu giá trị n • Dòng 2: Lưu lần lượt các hệ số: a0, a1, a2, ..., an Viết chương trình nhập vào tên một tập tin văn bản lưu đa thức, sau đó cho phép người nhập vào giá trị x, chương trình tính và in ra giá trị của đa thức tại x. Quá trình nhập x và tính giá trị đa thức kết thúc khi người dùng nhập giá trị x = 0. Bài tập 73: Nhập ma trận n x n từ tập tin văn bản INPUT.TXT có nội dung như sau: • Dòng đầu tiên chứa chỉ số n • Mỗi dòng kế tiếp chứa n số tương ứng với mỗi dòng của ma trận. Ví dụ: Nội dung trong tập tin văn bản INPUT.TXT: 3 45 1 3 2 66 67 1 2 3 Thực hiện: • Kiểm tra hợp lệ của dữ liệu. • Viết hàm kiểm tra tổng các phần tử trên từng hàng và cột có bằng nhau không? Bài tập 74: Viết chương trình đọc vào một file “input.txt” và thực hiện các yêu cầu sau: • Đọc từng dòng, kiểm tra xem chuỗi ký tự chứa ở dòng đó có phải là một số nguyên dương không? In ra màn hình tổng số dòng thỏa mãn. • Ghi ra file “output.txt” tất cả các số chia hết cho 2 tìm thấy trong file “input.txt”. Bài tập 75: Cho biết thông tin cố định về lương của mỗi cán bộ trong trường ĐHSP TpHCM gồm những thông tin sau: • Họ và tên • Mã số nhân viên • Bậc lương Yêu cầu: • Xây dựng tập tin LUONG.DAT để lưu trữ thông tin cố định về lương của trường. • Sử dụng thông tin trong tập tin LUONG.DAT để tính lương cho từng nhân viên khi biết bậc lương và số ngày công (nhập vào từ bàn phím). Biết rằng lương = (bậc lương * số ngày công) / 26. Ghi lại các kết quả thu được vào tập tin để lưu trữ. Bài tập lập trình C++ 17/18 GV: Lương Trần Hy Hiến CHƯƠNG 7. Bài tập Project 7.1. Chương trình dò từ điển Mô tả: Ví dụ giao diện hoạt động của chương trình như sau: Tra tu: a Nghia: Mot Cac tu tiep theo: an and angel angle apace apache apart ape are area Tra tu: ap Nghia: Khong tim thay Cac tu tiep theo: apace apache apart ape Tra tu: appp Nghia: Khong tim thay Cac tu tiep theo: Tra tu: ^Z Ket thuc chuong trinh. Hen gap lai lan sau! Hướng dẫn: - Sử dụng 1 vector chứa danh sách từ, và 1 vector chứa danh sách nghĩa tương ứng. Dữ liệu nhập theo qui ước: từ trên 1 dòng, nghĩa trên 1 dòng, … và tiếp tục như thế, kết thúc bằng kí tự kết thúc file (^Z) - Tìm vị trí của từ cần tra trong vector từ. - Xuất nghĩa ở vị trí tương ứng trong vector nghĩa. - Xuất các từ ở các vị trí tiếp theo mà có các kí tự bắt đầu giống từ cần tra. - Cho lặp lại việc tra từ. Nếu nhập vào kí tự kết thúc file thì kết thúc chương trình. GỢI Ý TỪ ĐIỂN 1. Viết hàm nhập 1 vector các từ. 2. Viết hàm kiểm tra xem 1 từ có là bắt đầu của 1 từ khác không: bool MayBe(string a, string b); Bài tập lập trình C++ 18/18 GV: Lương Trần Hy Hiến Ví dụ: MayBe(“apart”, “apartment”); // trả về true MayBe(“apart”, “aple”); // trả về false 3. Viết 2 hàm tìm vị trí typedef vector::size_type vec_sz; vec_sz Find(const vector& wordlist, string word); vec_sz FindR(const vector& wordlist, string word); Hàm Find trả về vị trí của từ x đầu tiên trong vector wordlist mà MayBe(word, x) cho giá trị true. Hàm trả về -1 nếu không tìm thấy. Hàm FindR trả về vị trí của từ x cuối cùng trong vector wordlist mà MayBe(word, x) cho giá trị true. Hàm trả về -1 nếu không tìm thấy. 4. Viết chương trình nhập vào 1 từ và xuất từ vừa nhập ra màn hình, và tiếp tục như thế. Nếu nhập vào kí tự kết thúc file thì kết thúc chương trình. 5. Sử dụng các phần trên để viết chương trình từ điển. 7.2. Chương trình sắp xếp dòng Mô tả: Viết chương trình sắp xếp các dòng ở đầu vào, loại bỏ các dòng giống nhau và đánh số các dòng, sau đó in ra màn hình. Với ví dụ đầu vào là: hey Jude! don’t make it bad take a sad song and make it beter take a sad song and make it beter take a sad song and make it beter thì sẽ in ra là: 1 and make it beter 2 don’t make it bad 3 hey Jude! 4 take a sad song Số ở đầu dòng phải được ghi thẳng cột. Sửa lại chương trình trên để đánh số ở cuối dòng nhưng vẫn thẳng cột.
File đính kèm:
- Bài tập lập trình C++ - Lương Trần Hy Hiến.pdf