Bài tập java từ cơ bản đến nâng cao

Chúng ta đã được tiếp cận đến những bài tập Java cơ bản ở những bài viết trước. Tại bài viết này mình sẽ chia sẻ thêm cho các bạn những bài tập Java cơ bản đến nâng cao cho những người mới tiếp cận với khái niệm lập trình hướng đối tượng nhé!

\>> Xem ngay Tài liệu Java Core giúp bạn “Nâng Cấp” kỹ năng lập trình

Bài tập Java cơ bản đến nâng cao

Đề bài

Dưới đây mình có một số bài tập về OOP để các bạn có thể luyện tập thêm kiến thức về hướng đối tượng. Các bạn tham khảo nhé.

Bài tập 1:

  • Viết một chương trình khai báo một lớp Square có thuộc tính là chiều rộng và có các phương thức sau:
    • Hàm tạo không tham số.
    • Hàm tạo có 1 tham số.
    • Get/set cho các thuộc tính.
    • Phương thức tính diện tích hình vuông.
    • Phương thức tính chu vi hình vuông.

Bài tập 2:

  • Viết chương trình khai báo một lớp Phương trình bậc 2 với các thuộc tính là a, b, c với các phương thức sau:
    • Hàm tạo không tham số.
    • Hàm tạo có 3 tham số.
    • Get/set cho 3 thuộc tính.
    • Phương thức tính delta.
    • Phương thức tính nghiệm phương trình.

Bài tập 3:

  • Viết chương trình khai báo một lớp trừu tượng Shape có hai thuộc tính là color và filled.
  • Xây dựng các lớp Circle và Rectangle kế thừa lớp Shape trong đó:
    • Lớp Circle có thuộc tính radius:
      • Có ba phương thức khởi tạo. Phương thức khởi tạo mà không cần đối số đầu vào sẽ đặt giá trị mặc định cho radius là 1.0.
      • Có các getter và setter cho cả ba phương thức.
      • Có phương thức getArea và getPerimeter trả về diện tích và chu vi của hình.
    • Lớp Rectangle có hai thuộc tính width và height:
      • Có ba phương thức khởi tạo. Phương thức khởi tạo mà không cần đối số đầu vào sẽ đặt giá trị mặc định cho width và length là 1.0.
      • Có các getter và setter cho tất cả các thuộc tính.
      • Có phương thức getArea và getPerimeter trả về diện tích và chu vi của hình.

Lời giải

Sau khi các bạn đã thử sức làm xong các bài tập nhỏ nhỏ ở phía bên trên thì hãy cùng xem lại các bài tập đó với lời giải của mình nhé

Note: Trước khi xem lời giải thì các bạn hãy tự làm trước nhé và hãy common hóa [phân tách thành phương thức riêng] những gì có thể sử dụng lại được.

1. Bài tập java cơ bản

Trong phần này, bạn phải nắm được các kiến thức về:

  • Các mệnh đề if-else, switch-case.
  • Các vòng lặp for, while, do-while.
  • Các từ khóa break và continue trong java.
  • Các toán tử trong java.
  • Mảng [array] trong java.
  • File I/O trong java.
  • Xử lý ngoại lệ trong java.

Bài 01:

Viết chương trình tìm tất cả các số chia hết cho 7 nhưng không phải bội số của 5, nằm trong đoạn 10 và 200 [tính cả 10 và 200]. Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu phẩy.

Gợi ý:

  • Sử dụng vòng lặp for

Code mẫu:

package vn.viettuts.baitap; import java.util.ArrayList; import java.util.List; public class Bai01 {

public static void main[String[] args] {  
    List list = new ArrayList[];  
    for [int i = 10; i < 201; i++] {  
        if [[i % 7 == 0] && [i % 5 != 0]] {  
            list.add[i];  
        }  
    }  
    // hiển thị list ra màn hình  
    showList[list];  
}
public static void showList[List list] {  
    if [list != null && !list.isEmpty[]] {  
        int size = list.size[];  
        for [int i = 0; i < size - 1; i++] {  
            System.out.print[list.get[i] + ", "];  
        }  
        System.out.println[list.get[size - 1]];  
    }  
}  
} Kết quả:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196

Bài 02:

Viết một chương trình tính giai thừa của một số nguyên dương n. Với n được nhập từ bàn phím. Ví dụ, n = 8 thì kết quả đầu ra phải là 1*2*3*4*5*6*7*8 = 40320.

Gợi ý:

  • Sử dụng đệ quy hoặc vòng lặp để tính giai thừa.

Code mẫu: sử dụng đệ quy

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } Kết quả:

Nhập số nguyên dương n = 8 Giai thừa của 8 là: 40320

Bài 03:

Hãy viết chương trình để tạo ra một map chứa [i, i*i], trong đó i là số nguyên từ 1 đến n [bao gồm cả 1 và n], n được nhập từ bàn phím. Sau đó in map này ra màn hình. Ví dụ: Giả sử số n là 8 thì đầu ra sẽ là: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}.

Gợi ý:

  • Sử dụng vòng lặp for để lặp i từ 1 đến n.

Code mẫu:

package vn.viettuts.baitap; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Bai03 {

private static Scanner scanner = new Scanner[System.in];
public static void main[String[] args] {  
    System.out.print["Nhập số nguyên dương n = "];  
    int n = scanner.nextInt[];  
    Map map = new HashMap[];  
    for [int i = 1; i < n + 1; i++] {  
        map.put[i, i * i];  
    }  
    System.out.println[map];  
}  
} Kết quả:

Nhập số nguyên dương n = 10 {1=1, 2=4, 3=9, 4=16, 5=25, 6=36, 7=49, 8=64, 9=81, 10=100}

Bài 04:

Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0.

Code mẫu:

package vn.viettuts.baitap; import java.util.Scanner; /

  • Giải phương trình bậc 2
  • @author viettuts.vn / public class PhuongTrinhBac2 {
    private static Scanner scanner = new Scanner[System.in];  
    /*  
    
    • main
    • @param args
       /  
      public static void main[String[] args] {  
          System.out.print["Nhập hệ số bậc 2, a = "];  
          float a = scanner.nextFloat[];  
          System.out.print["Nhập hệ số bậc 1, b = "];  
          float b = scanner.nextFloat[];  
          System.out.print["Nhập hằng số tự do, c = "];  
          float c = scanner.nextFloat[];  
          giaiPTBac2[a, b, c];  
      }  
      /*  
    • Giải phương trình bậc 2: ax2 + bx + c = 0
    • @param a: hệ số bậc 2
    • @param b: hệ số bậc 1
    • @param c: số hạng tự do */ public static void giaiPTBac2[float a, float b, float c] { // kiểm tra các hệ số if [a == 0] { if [b == 0] { System.out.println["Phương trình vô nghiệm!"]; } else { System.out.println["Phương trình có một nghiệm: "
      • "x = " + [-c / b]];
                }  
                return;  
            }  
            // tính delta  
            float delta = b*b - 4*a*c;  
            float x1;  
            float x2;  
            // tính nghiệm  
            if [delta > 0] {  
                x1 = [float] [[-b + Math.sqrt[delta]] / [2*a]];  
                x2 = [float] [[-b - Math.sqrt[delta]] / [2*a]];  
                System.out.println["Phương trình có 2 nghiệm là: "  
        
        • "x1 = " + x1 + " và x2 = " + x2];
              } else if [delta == 0] {  
                  x1 = [-b / [2 * a]];  
                  System.out.println["Phương trình có nghiệm kép: "  
        • "x1 = x2 = " + x1]; } else { System.out.println["Phương trình vô nghiệm!"]; } } } Kết quả:

Nhập hệ số bậc 2, a = 2 Nhập hệ số bậc 1, b = 1 Nhập hằng số tự do, c = -1 Phương trình có 2 nghiệm là: x1 = 0.5 và x2 = -1.0

Bài 05:

Viết chương trình chuyển đổi một số tự nhiên ở hệ số 10 thành một số ở hệ cơ số B [1 10] { m = remainder % b; if [m >= 10] { sb.append[[char] [CHAR_55 + m]]; } else { sb.append[m]; } } else { sb.append[remainder % b]; } remainder = remainder / b; } return sb.reverse[].toString[]; } } Kết quả:

Nhập số nguyên dương n = 15 So 15 trong he co so 2 = 1111 So 15 trong he co so 16 = F

Bài 06:

Dãy số Fibonacci được định nghĩa như sau: F0 = 0, F1 = 1, F2 = 1, Fn = F[n-1] + F[n-2] với n >= 2. Ví dụ: 0, 1, 1, 2, 3, 5, 8, ... Hãy viết chương trình tìm n số Fibonacci đầu tiên.

Code mẫu:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 0

Kết quả:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 1

Bài 07:

Viết chương trình tìm ước số chung lớn nhất [USCLN] và bội số chung nhỏ nhất [BSCNN] của hai số nguyên dương a và b nhập từ bàn phím.

Gợi ý:

  • Sử dụng giải thuật Euclid.

Code mẫu:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 2

Kết quả:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 3

Bài 08:

Viết chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n. Số nguyên dương n được nhập từ bàn phím.

Code mẫu:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 4

Kết quả:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 5

Bài 09:

Viết chương trình liệt kê n số nguyên tố đầu tiên trong java. Số nguyên dương n được nhập từ bàn phím.

Code mẫu:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 6

Kết quả:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 7

Bài 10:

Viết chương trình liệt kê tất cả số nguyên tố có 5 chữ số trong java.

Code mẫu:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 8

Kết quả:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196 9

Bài 11:

Viết chương trình phân tích số nguyên n thành các thừa số nguyên tố trong java. Ví dụ: 100 = 2x2x5x5.

Code mẫu:

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } 0

Kết quả:

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } 1

Bài 12:

Viết chương trình tính tổng của các chữ số của môt số nguyên n trong java. Số nguyên dương n được nhập từ bàn phím. Với n = 1234, tổng các chữ số: 1 + 2 + 3 + 4 = 10

Code mẫu:

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } 2

Kết quả:

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } 3

Bài 13:

Viết chương trình kiểm tra một số n là số thuận nghịch trong java. Số nguyên dương n được nhập từ bàn phím.

Code mẫu:

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } 4

Kết quả:

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } 5

Bài 14:

Viết chương trình liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố trong java. N là số nguyên dương được nhập từ bàn phím.

Code mẫu:

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } 6

Kết quả:

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 {
private static Scanner scanner = new Scanner[System.in];  
/**  
  • main
  • @author viettuts.vn
  • @param args
     /  
    public static void main[String[] args] {  
        System.out.print["Nhập số nguyên dương n = "];  
        int n = scanner.nextInt[];  
        System.out.println["Giai thừa của " + n + " là: " + tinhGiaithua[n]];  
    }  
    /*  
  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / public static long tinhGiaithua[int n] { if [n > 0] { return n tinhGiaithua[n - 1]; } else { return 1; } } } 7

Các bài tập khác:

  1. Viết chương trình nhập số nguyên dương n và thực hiện các chức năng sau:
  2. Tính tổng các chữ số của n.
  3. Phân tích n thành tích các thừa số nguyên tố.
  4. Liệt kê các ước số của n.
  5. Liệt kê các ước số là nguyên tố của n.
  6. Viết chương trình liệt kệ các số nguyên có từ 5 đến 7 chữ số thảo mãn:
  7. Là số nguyên tố.
  8. Là số thuận nghịch.
  9. Mỗi chữ số đều là số nguyên tố.
  10. Tổng các chữ số là số nguyên tố.
  11. Viết chương trình liệt kệ các số nguyên có 7 chữ số thảo mãn:
  12. Là số nguyên tố.
  13. Là số thuận nghịch.
  14. Mỗi chữ số đều là số nguyên tố.
  15. Tổng các chữ số là số thuận nghịch.

2. Bài tập chuỗi trong Java

Danh sách bài tập:

  1. Nhập một sâu ký tự. Đếm số từ của sâu đó [mỗi từ cách nhau bởi một khoảng trắng có thể là một hoặc nhiều dấu cách, tab, xuống dòng]. Ví dụ " hoc java co ban den nang cao " có 7 từ. Lời giải: Đếm số từ trong một chuỗi.
  2. Nhập một sâu ký tự. Liệt kê số lần xuất hiện của các từ của sâu đó. Lời giải: Liệt kê số lần xuất hiện của các từ trong một chuỗi.
  3. Nhập 2 sâu ký tự s1 và s2. Kiểm tra xem sâu s1 có chứa s2 không? Lời giải: Chuỗi chứa chuỗi trong java.

3. Bài tập mảng trong Java

Các bài tập trong phần này thao tác với mảng một chiều và 2 chiều trong java, bạn có thể tham khảo bài học mảng [Array] trong java

Danh sách bài tập:

  1. Nhập một mảng số nguyên a0, a1, a2, ..., an-1. In ra màn hình các phần tử xuất hiện trong mảng đúng 1 lần. Lời giải: Liệt kê các phần tử xuất hiện trong mảng đúng 1 lần
  2. Nhập một mảng số nguyên a0, a1, a2, ..., an-1. In ra màn hình các phần tử xuất hiện trong mảng đúng 2 lần. Lời giải: Liệt kê các phần tử xuất hiện trong mảng đúng 2 lần
  3. Nhập một mảng số nguyên a0, a1, a2, ..., an-1. In ra màn hình số lần xuất hiện của các phần tử. Lời giải: Liệt kê số lần xuất hiện của các phần tử trong một mảng
  4. Nhập một mảng số nguyên a0, a1, a2, ..., an-1. Hãy sắp xếp mảng theo thứ tự tăng dần. Lời giải: Sắp xếp mảng theo thứ tự tăng dần
  5. Nhập một mảng số nguyên a0, a1, a2, ..., an-1. Hãy sắp xếp mảng theo thứ tự giảm dần. Lời giải: Sắp xếp mảng theo thứ tự giảm dần
  6. Nhập một mảng số nguyên a0, a1, a2, ..., an-1. Hãy sắp xếp mảng theo thứ tự tăng dần, sau đó chèn phần tử x vào mà vẫn đảm bảo mảng là tăng dần. Lời giải: Chèn phần tử vào mảng trong java
  7. Nhập một mảng số thực a0, a1, a2, ..., an-1. Không dùng thêm mảng số thực nào khác [có thể dùng thêm mảng số nguyên], hãy in ra màn hình mảng trên theo thứ tự tăng dần.
  8. Nhập 2 mảng số thực a0, a1, a2, ..., am-1 và b0, b1, b2, ..., bn-1. Giả sử 2 mảng này đã được sắp xếp tăng dần. Hãy tận dụng tính sắp xếp của 2 dãy và tạo dãy c0, c1, c2, ..., cm+n-1 là hợp của 2 dãy trên sao cho ci cũng có thứ tự tăng dần. Lời giải: Trộn 2 mảng trong java
  9. Viết chương trình nhập vào mảng A có n phần tử, các phần tử là số nguyên lớn hơn 0 và nhỏ hơn 100. Thực hiện các chức năng sau:
  10. Tìm phần tử lớn thứ nhất và lớn thứ 2 trong mảng với các chỉ số của chúng [chỉ số đầu tiên tìm được].
  11. Sắp xếp mảng theo thứ tự tăng dần.
  12. Nhập số nguyên x và chèn x vào mảng A sao cho vẫn đảm bảo tính tăng dần cho mảng A.
  13. Viết chương trình nhập vào ma trận A có n dòng, m cột, các phần tử là số nguyên lớn hơn 0 và nhỏ hơn 100. Thực hiện các chức năng sau:
  14. Tìm phần tử lớn thứ nhất với chỉ số của nó [chỉ số đầu tiên tìm được].
  15. Tìm và in ra các phần tử là số nguyên tố của ma trận [các phần tử không nguyên tố thì thay bằng số 0].
  16. Sắp xếp tất cả các cột của ma trận theo thứ tự tăng dần và in kết quả ra màn hình.
  17. Tìm cột trong ma trận có nhiều số nguyên tố nhất.

4. Bài tập về các thuật toán sắp xếp trong Java

Bạn có thể xem các giải thuật sắp xếp trong phần cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp

Dưới đây là tổng hợp một số bài tập thuật toán sắp xếp trong Java:

  • Sắp xếp nổi bọt [Bubble Sort] trong Java
  • Sắp xếp chọn [Selection Sort] trong Java
  • Sắp xếp chèn [Insertion Sort] trong Java
  • Sắp xếp nhanh [Quick Sort] trong Java
  • Sắp xếp trộn [Merge Sort] trong Java
  • Sắp xếp Shell Sort trong Java

5. Bài tập java nâng cao

Trong phần này, bạn phải nắm được các kiến thức về:

  • Lớp và đối tượng trong java.
  • Access modifier trong java
  • Các tính chất của lập trình hướng đối tượng [OOP].
  • Các khái niệm Java OOPs.
  • Collection trong java.
  • Xử lý ngoại lệ trong java.

Bài tập quản lý sinh viên trong Java - console

Đề bài: Viết chương trình quản lý sinh viên. Mỗi đối tượng sinh viên có các thuộc tính sau: id, name, age, address và gpa [điểm trung bình]. Yêu cầu: tạo ra một menu với các chức năng sau:

Chủ Đề