Academia.eduAcademia.edu
BÀI TẬP LẬP TRÌNH CƠ BẢN A. LỆNH CƠ BẢN 1. Viết chương trình nhập chiều dài và chiều rộng của một hình chữ nhật, xuất ra màn hình chu vi và diện tích của hình chữ nhật đó. 2. Viết chương trình nhập vào bán kính hình tròn, xuất ra màn hình chu vi và diện tích hình tròn đó. 3. Viết chương trình tìm các số có ba chữ số abc, sao cho tổng lập phương ba chữ số của số đó bằng chính số đó: a3 + b3 + c3 = abc B. LỆNH RẼ NHÁNH 1. Viết chương trình giải và biện luận phương trình bậc nhất ax + b = c, trong đó a, b, c là các số thực nhập từ bàn phím. 2. Viết chương trình giải và biện luận phương trình bậc hi ax2 + bx + c = d, trong đó a, b, c, d là các số thực nhập từ bàn phím. 3. Viết chương trình nhập vào tháng và năm a) Kiểm tra năm nhập có phải năm nhuận hay không. Biết năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100. b) Cho biết số ngày của tháng vừa nhập. 4. Viết chương trình nhập ngày, tháng, năm a) Kiểm tra tính hợp lệ của ngày, tháng, năm. b) Tính tổng số ngày tình từ ngày đầu tiên của năm (ngày 1/1) đến ngày vừa nhập. c) Biết thứ (hai, ba, tư, năm, sáu, bảy, chủ nhật) của ngày 1/1. Hãy xác định thứ của ngày vừa nhập. d) In ra màn hình ngày, tháng, năm kế tiếp của ngày, tháng, năm vừa nhập. e) In ra màn hình ngày, tháng, năm trước của ngày, tháng, năm vừa nhập. 5. Trong mặt phẳng tọa độ Oxy, cho tọa độ hai điểm A và C là hai đỉnh nằm trên đường chéo AC của hình chữ nhật ABCD, nhập tọa độ điểm M. Lập trình kiểm tra điểm M có nằm trong hình chữ nhật hay không (bao gồm biên của hình chữ nhật)? 6. Trong mặt phẳng Oxy, cho 3 điểm A, B, C. Nhập 3 số thực a, b, c là độ dài lần lượt ba cạnh AB, AC, BC. Lập trình kiểm tra A, B, C có phải là ba đỉnh một tam giác hay không? a) Nếu phải, tính diện tích tam giác ABC. Xác định tính chất tam giác ABC (tam giác đều, tam giác cân, tam giác vuông, tam giác vuông cân, tam giác thường) b) Nếu không, cho biết điểm nào nằm giữa hai điểm nào? C. LỆNH LẶP 1. Nhập số nguyên dương N từ bàn phím. Lập trình giải các bài toán sau a) Đếm số lượng các chữ số của N .Tìm chữ số lớn nhất và chữ số nhỏ nhất trong các chữ số của số N b) Tính tổng các chữ số của số N cho đến khi tổng này nhỏ hơn 10 Ví dụ : N = 567 5 + 7 + 8 = 20 = N  2 + 0 = 2 < 10  in kết quả là số 2 c) In lại số N lên màn hình sau khi đã xóa sự có mặt của tất cả các chữ số 0 và 5 có mặt trong các chữ số của N Ví dụ : N = 580051  in kết quả N = 81 2. Nhập số nguyên dương N từ bàn phím .Lập trình giải các bài toán sau a) Kiểm tra N có phải là số nguyên tố hay không ? Nếu không , hãy tính tổng tất cả các ước nguyên tố của N b) Kiểm tra N có phải là số đối xứng hai không Ví dụ : 7,9,12421, 123321: là các số đối xứng ; 123320, 12, 12329: không phải là số đối xứng c) Kiểm tra N có phải là số gần đối xứng hay không ? (Số này được hiểu như số đối xứng nhưng có một cặp khác nhau) d) Phân tích N ra thừa số nguyên tố ( ví dụ 18 = 2^1 * 3^2) 3. Tính giá trị các biểu thức sau (với điều kiện 0 ≤ n ≤ 15 , nếu nhập sai thì yêu cầu nhập lại) a) 𝑠 = 1 0! + b) 𝑠 = 𝑥 − 1 1! 𝑥3 3! + + 1 2! +⋯+ 𝑥5 5! 1 𝑛! 𝑥 2𝑛+1 + ⋯ + (−1)𝑛 (2𝑛+1)! − ∞ < 𝑥 < +∞ c) 𝑠 = 1 − 𝑥2 2! + 𝑥4 4! d) 𝑠 = 𝑒 𝑥 = 1 + 𝑥 1! 𝑥 2𝑛 + ⋯ + (−1)𝑛 (2𝑛)! + 𝑥2 2! + 𝑥3 3! + ⋯+ − ∞ < 𝑥 < +∞ 𝑥𝑛 − ∞ < 𝑥 < +∞ 𝑛! e) s = 1.2 + 2.3.4 + 3.4.5.6 + 4.5.6.7.8 +... + n.(n+1).(n+1)...(2n) ( 0 < n ≤ 7) 4. Nhập vào hai số nguyên dương a và b. Lập trình thực hiện các công việc sau: a) Tìm UCLN(a,b) b) Tìm hai số nguyên x và y sao cho x*a + y*b = UCLN(a,b) 5. Dãy số Fibonacci xác định như sau: { 𝑎 (0) = 𝑎 (1) = 1 𝑎𝑛 = 𝑎𝑛−1 + 𝑎𝑛−2 a) Xác định số thứ k trong dãy số Fibonacci b) Nhập vào số nguyên m , kiểm tra xem m có phải là số Fibonacci hay không? c) Nhập vào số nguyên dương m . In ra màn hình m số Fibonacci đầu tiên và đồng thời là số nguyên tố 6. Viết chương trình nhập vào số nguyên n là bậc đa thức và n + 1 số nguyên ai (0 ≤ ai ≤ n), với ai là hệ số của xi và giá trị biến nguyên x. Tính giá trị biểu thức đó. 7. Cho số tự nhiên n. Tìm tất cả các cách phân tích n thành tổng của lớn hơn hoặc bằng hai số tự nhiên liên tiếp (hoặc đưa ra lời phủ định) 8. Lập trình giải các bài toán sau: a) Tìm số nguyên dương n nhỏ nhất sao cho 1 + 2 + 3 + ... + n > 1000 b) Tìm k nhỏ nhất sao cho 2k lớn hơn hoặc bằng n (n nhập từ bàn phím) c) Tìm k lớn nhất sao cho 4k nhỏ hơn n (n nhập từ bán phím) D. MẢNG MỘT CHIỀU 1. Cho mảng một chiều gồm n số nguyên, nhập số nguyên x. Lập trình giải các bài toán sau: a) Kiểm tra x có trong mảng hay không? Nếu có, in ra màn hình tất cả vị trí tìm thấy, ngược lại in thông báo “Không tồn tại x trong mảng” b) Kiểm tra mảng đã được sắp xếp tăng dần hay chưa? Nếu chưa hãy sắp xếp dãy tăng dần và chèn x vào đúng vị trí của nó trong dãy, in kết quả ra màn hình. 2. Cho mảng một chiều gồm n phần tử a) Đếm số lượng các phần tử khác nhau trong dãy. Cho biết phần tử nào xuất hiện nhiều lần nhất trong dãy. b) Tìm số lương lớn nhất và số âm bé nhất trong dãy. Trong trường hợp không có số âm hay số dương nào trong dãy thì in ra * 3. Cho mảng gồm n số nguyên. Lập trình giải các bài toán sau: a) Sắp xếp các số nguyên tố theo thứ tự tăng dần, các số còn lại không đổi vị trí b) Sắp xếp các số chẵn lên đầu dãy, các số lẻ xuống cuối dãy. c) Sắp xếp các số vừa chi hết cho 3 vừa lẻ ở đầu dãy, các số vừa chia hết cho 3 vừa chẵn xuống chuối dãy, các số còn lại ở giữa. d) Sắp xếp các số dương ở đầu dãy theo thứ tự tăng, đến các số 0, cuối cùng là các số âm theo thứ tự giảm dần. 4. Cho dãy gồm n số nguyên. Lập trình giải các bài toán sau a) Kiểm tra dãy có k số dương liên tiếp hay không? (k nhập từ bàn phím) b) Tìm và in ra màn hình đoạn con tăng dài nhất. c) Tìm và in ra các đoạn con dài nhất gồm các số nguyên tố sao cho tổng của chúng cũng là một số nguyên tố. d) Tìm đoạn con đối xứng và dài nhất của dãy 5. Cho hai mảng một chiều x và y, mỗi mảng có n phần tử, tương ứng là hoành độ và tung độ của n điểm trong mặt phẳng Oxy. In ra màn hình khoảng cách xa nhất giữa hai điểm. 6. Cho hai mảng một chiều a và b lần lượt cho m và n phần tử, chứa các hệ số của hai đa thức. In ra màn hình dãy các hệ số của tích hai đa thức trên (thứ tự in hệ số từ hệ số của bậc thấp đến bậc cao) 7. Cho hai dãy số a và b, mỗi dãy có n phần tử. Gọi p là một hoán vị của a. Tìm p sao cho tổng sau đây có giá trị nhỏ nhất S = p[0] * b[0] + p[1] * b[1] + ... + p[n-1] * b[n - 1] 8. Nhập dãy số n số. Lập trình giải các bài toán sau: a) Tìm các số của dãy bằng tổng hai số khác trong cùng dãy b) Nhập số nguyên 0 < k < n. In ra màn hình tổng lớn nhất k phần tử liên tiếp xuất hiện trong dãy. 9. Cho hai mảng một chiều a và b lần lượt có m và n phần tử, nhập số nguyên dương q. Lập trình tìm tổng a[i] + b[j] nhỏ nhất và lớn hơn q. 10. Nhập dãy số nguyên có n số. Lập trình liệt kê tất cả các tập con của các phần tử trong dãy. 11. Cho dãy gồm n số nguyên (n < 10000). Hãy tìm cách chia dãy số trên thành nhiều đoạn con nhất sao cho các đoạn con có tổng bằng nhau. Yêu cầu xuất ra màn hình có cấu trúc: dòng đầu ghi hai số K, S lần lượt là số đoạn được chia và tổng của đoạn; K dòng tiếp theo, mỗi dòng ghi các số tương ứng của đoạn chia được. E. MẢNG HAI CHIỀU 1. Viết chương trình hiển thị 10 dòng đầu tiên của tam giác Pascal theo 2 dạng tam giác vuông và tam giác cân. Biết mỗi hàng trong tam giác Pascal bắt đầu và kết thúc bằng 1 và phần tử khác trong hàng là tổng hai phần tử kề nhau phía trên nó Ví dụ: 5 dòng đầu tiên tam giác pascal theo 2 dạng tam giác vuông và tam giác cân a) Dạng 1 b) Dạng 2 1 1 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 5 10 10 1 1 1 1 5 1 1 1 2 1 3 4 5 3 6 10 1 4 1 10 5 1 2. Viết chương trình gán các giá trị nguyên từ 1 đến n2 cho các phần tử của ma trận vuông có kích thước n × n theo dạng zigzag dạng hàng và dạng cột, với n (2 ≤ n ≤ 10) được nhập từ bàn phím. Ví dụ: Dạng hàng n=4 1 Dạng cột n=4 2 3 4 1 8 9 16 8 7 6 5 2 7 10 15 9 10 11 12 3 6 11 14 16 15 14 13 4 5 12 13 3. Viết chương trình gán các giá trị nguyên từ 1 đến n2 cho các phần tử của ma trận vuông có kích thước n × n theo dạng xoắn ốc, với n (2 ≤ n ≤ 10) nhập từ bàn phím Ví dụ: n=4 n=5 1 2 3 4 1 2 3 4 5 12 13 14 5 16 17 18 19 6 11 16 15 6 15 24 25 20 7 10 9 8 7 14 23 22 21 8 13 12 11 10 9 4. Một ma phương (magic square) là một bảng có kích thước n × n. Mỗi ô trong bảng chứa các số nguyên khác nhau, và giá trị của các số nguyên là 1, 2, 3, ..., n2 sao cho tổng giá trị của bất kỳ cột, hàng, đường chéo nào đều bằng nhau. Để tạo ma phương n × n cho bất kỳ cho bất kỳ số nguyên lẻ n nào, ta có thể thực hiện như sau: - Đặt giá trị 1 vào cột giữa của hàng đầu tiên trong bảng - Sau khi một số nguyên k nào đó được đặt, ta di chuyển lên một hàng và sang phải một cột để đặt số nguyên k + 1 kế tiếp, trừ khi có một trong các sự kiện sau o Nếu k được đặt ở hàng trên cùng và cột thứ j thì k + 1 phải được đặt ở hàng cuối cùng và cột thứ j + 1. o Nếu k được đặt ở cột bên phải nhất và hàng thứ i thì k + 1 phải được đặt ở cột bên trái nhất và hàng thứ i – 1. o Nếu sự di chuyển đến ô đã được đặt hay nếu k đang được đặt ở gốc trên bên phải của bảng thì đặt k + 1 ngay bên dưới k trong cùng một cột. Viết chương trình tạo ma phương n × n, trong đó 3 ≤ n ≤ 10 là một trong các số nguyên lẻ được nhập từ bán phím. Ví dụ: n=5 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 5. Cho ma trận a kích thước m × n. Viết chương trình xây dựng ma trận b kích thước m × n từ ma trận a, sao cho phần tử b[i][j] là số lượng phần tử dương xung quanh a[i][j] trong ma trận a (lưu ý b[i][j] tối đa là 8 và nhỏ nhất là 0) Ví dụ: Ma trận a Ma trận b m = 4, n = 3 2 4 -5 3 3 2 6 8 -6 4 5 3 3 -1 3 4 6 2 8 9 -6 2 3 2 6. Cho ma trận kích thước m × n. Viết chương trình sắp xếp lại ma trận sao cho dòng có tổng nhỏ nằm ở trên dòng có tổng lớn hơn. Ví dụ: Đầu vào Đầu ra m = 4, n = 3 5 6 3 -7 5 -9 1 -3 4 1 -3 4 -7 5 -9 0 3 4 0 3 4 5 6 3 7. Cho ma trận nguyên kích thước m × n. Viết chương trình tìm tất cả các điểm yên ngựa trong ma trận, biết điểm yên ngựa là điểm có giá trị nhỏ nhất trên dòng, nhưng là lớn nhất trên cột. Ví dụ: Điểm yên ngựa tìm thấy là 29 (dòng 0, m = 3, n = 4 35 42 29 36 25 31 26 42 33 71 20 85 cột 2) 8. Cho ma trận kích thước m × n. Viết chương trình sắp xếp lại ma trận tăng theo dòng, theo cột, theo đường chéo chính và đường chéo phụ. Ví dụ: m = 3, n = 4 Ma trận sau khi sắp xếp 11 12 45 32 11 12 32 32 79 65 54 32 34 43 45 54 34 57 65 43 57 65 65 79 9. Cho ma trận nguyên m × n. Viết chương trình in ra màn hình các giá trị cực đại là phần tử trung tâm của cửa số 3 × 3 và có giá trị lớn hơn các phần tử còn lại trong cửa sổ. Ví dụ: Các phần tử cực đại cần tìm m = 3, n = 4 11 12 88 32 a[0][2] = 88 79 65 54 45 a[1][0] = 79 34 57 92 43 a[2][2] = 92 10. Cho ma trận các số nguyên dương m × n. Viết chương trình nhập số nguyên dương k < min(m, n) và in ra tổng lớn nhất của cửa số k × k trong ma trận. Ví dụ: m = 3, n = 4, k = 2 Tong lon nhat: 27 4 Cua so con la: 5 3 6 8 9 6 0 9 6 3 4 8 9 4 8 F. CHUỖI KÝ TỰ 1. Nhập chuỗi từ bán phím. Viết chương trình xóa tất cả các khoảng trắng ở đầu và cuối chuỗi, còn các khoảng trắng ở giữa chuỗi liền nhau thì chỉ giữ lại một. Ví dụ: Chuỗi s = “ AA BB CD F ” Kết quả xuất ra là “AA BB CD F” 2. Viết chương trình nhập vào một chuỗi ký tự. In ra màn hình các ký tự trong chuỗi cùng số lần xuất hiện ký tự đó (kể cả khoảng trắng) 3. Nhập vào một chuỗi gồm các ký tự liền nhau, các ký tự nhập vào bao gồm các ký từ az và AZ. a) Viết chương trình nén chuỗi và in ra kết quả nén chuỗi như ví dụ sau AABBBCDDDEFFFFF  2A3BC3DE5F Aabbccccdddefgggg  Aa2b4c3def4g b) Viết chương trình giải nén chuỗi ngược lại quá trình nén chuỗi trên 2A3DE  AADDDE A4b5ef  Abbbbeeeeef 4. Nhập vào một chuỗi ký tự a) Kiểm tra trong chuỗi có k ký tự kề nhau mà như nhau không? b) Thực hiện phép loại bỏ ký tự kề nhau mà như nhau chỉ giữ lại một. 5. Viết chương trình nhập vào một chuỗi ký tự, đưa chuỗi đó về dạng chuẩn theo quy tắc như sau: - Không có ký tự trống ở đầu và cuối chuỗi - Không có hai ký tự trống kề nhau - Không có ký tự trống đứng liền sau dấu chấm (.) - Ký tự đầu tiên và ký tự sau dấu chấm (.) phải biết hoa 6. Một chuỗi được gọi là đối xứng (palindrome) nếu nó không thay đổi khi thứ tự của các ký tự được đảo ngược, ví dụ “level”, “madam”. Viết chương trình nhập vào một chuỗi, kiểm tra chuỗi đó có phải là chuỗi đối xứng hay không. 7. Viết chương trình nhận vào hai chuỗi và cho biết chuỗi thứ nhất có phải là hoán vị các ký tự của chuỗi thứ hai hay không. Ví dụ chuỗi “dear” là một hoán vị của chuỗi “read” hay “dare”. 8. Viết chương trình nhập vào một chuỗi ký tự. Lập trình giải quyết các vấn đề sau a) Đếm số từ trong xâu (giả sử các từ cách nhau bằng các khoảng trống) b) Tìm từ dài nhất trong chuỗi 9. Một cụm trong biểu thức toán học là đoạn nằm giữa đoạn hai dấu đóng, mở ngoặc “(“, “)”. Với biểu thức toán học cho trước, hãy tách các cụm của biểu thức đó. Ví dụ: x * (a + 1) * ((b - 2) / (c + 3)) Tách thành các cụm sau: - (a + 1) - (b – 2) - (c + 3) - ((b - 2) / (c + 3)) 10. Viết chương trình nhập vào hai chuỗi cho biết chuỗi thứ nhất có phải là hoán vị các ký tự chuỗi thứ hai hay không? Ví dụ chuỗi “read” là chuỗi hoán vị của chuỗi “dear” hoặc “dare” G. CẤU TRÚC 1. Viết chương trình nhập vào danh sách n sinh viên, biết mỗi sinh viên bao gồm các thông tin họ tên, quê quán, năm sinh, giới tính, điểm môn 1, điểm môn 2, điểm môn 3. Yêu cầu tìm sinh viên có điểm trung bình 3 môn là cao nhất, nếu có nhiều sinh viên có cùng điểm trung bình cao nhất thì in ra thông tin tất cả sinh viên đó. 2. Nhập hai phân số a và b a) Kiểm tra xem a và b có phải là hai phân số tối giản hay không? Nếu không, hãy, tối giản hai phân số này. b) Nhập ký tự c là phép toán công (+), trừ (-), nhân (*), chia (/). Thực hiện phép toán c tương ứng với hai phân số a và b, in ra kết quả là phân số tối giản. 3. Cho mảng một chiều a có n phần tử, mỗi phần tử là các phân số a) Nhập vào phân số x. Kiểm tra x có trong mảng a không? b) Sắp xếp mảng a theo thứ tự giảm dần 4. Cho hai đa thức có bậc tương ứng là m, n và các hệ số của hai đa thức là các phân số a) Tính tổng hai đa thức (in ra dãy các hệ số từ bậc thấp đến bậc cao) b) Tính giá trị biểu thức tại x (x là phân số nhập từ bàn phím) 5. Cho bốn điểm khác nhau từng đôi một: A(x1, y1), B(x2, y2), C(x3, y3), D(x4, y4). Hãy cho biết hai đoạn thẳng AB và CD có cắt nhau tại một điểm khác vời hai đầu mút không? 6. Cấu trúc Ngày bao gồm các thông tin ngày, tháng, năm. Viết chương trình thực hiện chức năng: a) Tính số ngày từ đầu năm cho đến ngày hiện tại b) Tính khoảng cách giữa hai ngày bất kỳ (đơn vị đầu ra là số ngày) 7. Một học sinh học M môn học (M ≤ 10) , dữ liệu của mỗi học sinh gồm tên và điểm các môn học .Cần xếp hạng cho N (N ≤ 100) học sinh trong một lớp .Gỉa sử mỗi môn học đều có hệ số 1 .Hãy chia điểm trung bình của mỗi học sinh trong lớp vào sắp xếp theo thứ tự giảm dần điểm trung bình .Nếu hai học sinh có điểm trung bình bằng nhau thì sắp xếp tên theo thứ tự từ điển a, b, c , ...