Bài tập về "Hàm & Đệ quy"

Các bài tập cơ bản về cách khai báo nguyên mẫu, xây dựng và sử dụng các hàm bình thường cũng như hàm đệ quy.
Mục lục
1  2  3  4  5  6  7  8  9 10 
11 12 13 14 15 16

Viết các chương trình:

  1. Tìm số lớn nhất trong 3 số thực.
    Nhập 3 số thực: 1.3 7.4 5
    Số lớn nhất là: 7.4
    

    Gợi ý: xây dựng hàm có 3 tham số là kiểu số thực (float hoặc double), giá trị trả về của hàm là kiểu số thực (float hoặc double).

  2. Kiểm tra năm nhuận. Chương trình kết thúc khi nhấn phím ESC.
    Nhập vào một năm: 1993
    Đây không phải là một năm nhuận.
    Nhấn phím ESC để thoát, phím bất kỳ để tiếp tục... (giả sử nhấn ENTER)
    Nhập vào một năm: 1996
    Đây là một năm nhuận.
    Nhấn phím ESC để thoát, phím bất kỳ để tiếp tục... (giả sử nhấn ESC)
    

    Chú ý: Năm nhuận là năm:

    • Chia hết cho 4 và không chia hết cho 100, hoặc
    • Chia hết cho 400

    Gợi ý:

    • Sử dụng hàm getch() để đọc ký tự khi hỏi có tiếp tục không.
    • Mã ASCII của ESC là 27.
    • Sử dụng cấu trúc do..while để lặp.
  3. Kiểm tra số nguyên dương có phải là nguyên tố không ? Chương trình kết thúc khi nhập vào số không.
    Nhập vào một số nguyên dương (0 để dừng): 6
      --> 6 không phải là một số nguyên tốt vì có một ước số là 2.
    Nhập vào một số nguyên dương (0 để dừng): 13
      --> 13 là một số nguyên tố.
    Nhập vào một số nguyên dương (0 để dừng): 0
    

    Gợi ý: Viết một hàm để kiểm tra SNT (có 1 đối số là số nguyên cần kiểm tra, giá trị trả về có kiểu int: =1 nếu là SNT, =0 nếu không là SNT) sau đó sử dụng cấu trúc do..while để lặp. Trong mỗi vòng lặp, trước tiên nhập số nguyên x sau đó có gọi hàm kiểm tra SNT ở trên.

  4. Tìm các số nguyên tố thuộc đoạn [a,b], với a, b là hai số nguyên dương cho trước và a < b.
    Nhập đoạn [a,b]: 10 20
    Các số nguyên tố trong đoạn [10,20] là: 11, 13, 17, 19
    Có tất cả 4 số.
    

    Gợi ý: Duyệt các số nguyên từ a đến b. Với mỗi số nguyên, gọi hàm kiểm tra SNT. Nếu là SNT thì xuất ra màn hình đồng thời « đếm ». Để « đếm » số SNT tìm được, cần một biến kiểu nguyên, ban đầu khởi tạo =0, mỗi lần « đếm » chỉ đơn giản tăng biến này lên 1.

  5. Tính an với n là số tự nhiên theo 2 cách đệ quy và không đệ quy.
  6. Tính giai thừa của một số tự nhiên bằng 2 cách đệ quy và không đệ quy.
    Nhập n: 4
    4! = 24
    

     

  7. Tính S = 0! + 1! + 2! + 3! + …..+ n!, với n là một số tự nhiên.
    Nhập n: 4
    S = 0! + 1! + 2! + 3! + 4! = 34
    

    Gợi ý: Có 2 cách để làm:

    • Sử dụng hàm tính giai thừa ở trên. Cách này không tối ưu vì khi tính (k+1)! không tận dụng k! đã tính trước đó.
    • Giả sử đã tính xong S = 1! + 2! + … + k! và cần phải tính tiếp (k+1)! + (k+2)! + … + n! để bổ sung vào S. Để tính tiếp (k+1)! và cộng dồn vào S mà không phải tính lại từ đầu (nghĩa là (k+1)! = 1 * 2 * … * (k+1)) thì cần tạo một biến gt để lưu giá trị giai thừa đang tính (gt = k!). Cứ mỗi lần tính (k+1)! để cộng dồn vào S thì gán lại gt = gt * (k+1) và S = S + gt.
  8. Tính Cnkvới n, k là các số nguyên dương và k ≤ n.
    Nhập n, k: 5 3
    C(5,3) = 10
    
  9. Tìm ước số chung lớn nhất của hai số nguyên dương.
    Nhập a, b: 8 12
    UCLN(8,12) = 4
    
  10. Tìm bội số chung nhỏ nhất của hai số nguyên dương.
    Nhập a, b: 4 6
    BCLN(4,6) = 12
    
  11. Tìm ước số chung lớn nhất của ba số nguyên dương.
    Nhập a, b, c: 8 12 10
    UCLN(8,12,10) = 2
    
  12. Tìm bội số chung nhỏ nhất của ba số nguyên dương.
    Nhập a, b: 4 6 5
    BCLN(4,6,5) = 60
    
  13. Tính tổng các chữ số của một số nguyên dương.
    Nhập một số nguyên dương: 465
    Tổng các chữ số của 465 là 15
    
  14. Hiển thị các số tự nguyên tố nằm trong đoạn [a, b], biết số tự nguyên tố là số có tổng các chữ số của nó là một số nguyên tố. Trên mỗi hàng chỉ ghi tối đa 20 số.
    Nhập a, b: 10 99
    Các số tự nguyên tố thuộc đoạn [10,99] là:
    10 11 12 14 16 20 21 23 25 29 30 32 34 38 41 43 47 49 50 
    52 56 58 61 65 67 70 74 76 83 85 89 92 94 98
    
  15. Tìm số đảo ngược của một số nguyên dương.
    Nhập một số nguyên dương: 1340
    Số đảo ngược của 1340 là số 431
  16. Tìm số Fibonacci lớn nhất nhỏ hơn một số nguyên n cho trước theo 2 cách đệ quy và không đệ quy.
    Nhập n: 15
    Fibonacci lớn nhất nhỏ hơn 15 là 13