1. Bài tập tìm kiếm sinh viên trong mảng theo mã bằng ngôn ngữ lập trình C

Yêu cầu của bài tập này chúng ta sẽ dùng mảng để quản lý sinh viên gồm có: nhập vào thông tin sinh viên(mã sinh viên, tên sinh viên, lớp), điểm các môn học (toán, văn, anh và điểm trung bình 3 môn), tìm kiếm sinh viên theo mã sinh viên và hiển thị thông tin của sinh viên đó ra màn hình.

Để thực hiện được bài tập này ta cần những kiến thức từ ngôn ngữ lập trình C như: cách nhập xuất cơ bản, cách sử dụng mảng một chiều, cách sử dụng cấu trúc struct, cách sử dụng các thật toán tìm kiếm và cách sử dụng hàm trong ngôn ngữ lập trình C.

2. Lời giải

Đầu tiên để thực hiện bài toán này chúng ta cần có kiến thức cơ bản về ngôn ngữ lập trình C, các cách nhập xuất cơ bản trong C, mảng một chiều trong C, cách sử dụng các thuật toán tìm kiếm trong C , cách sử dụng hàm và cách sử dụng cấu trúc struct trong ngôn ngữ lập trình C.

Các bước thực hiện yêu cầu của bài tập tìm kiếm sinh viên theo mã sinh viên bằng ngôn ngữ lập trình C như sau:

Bước 1: Ta khai báo một cấu trúc struct SinhVien gồm có: int MaSV(mã sinh viên); char TenSV[50](tên sinh viên); char Lop[50](lớp); float Dtoan(điểm toán); float Dvan(điểm văn); float Danh(điểm anh);

Bước 2: Trong hàm main ta khai báo mảng SinhVien sv[100] và biến int n là số sinh viên có trong mảng rồi nhập dữ liệu cho n.

Bước 3: Ta khỏi tạo hàm void Nhap(SinhVien sv[], int n) dùng để nhập dữ liệu từ bàn phím cho mảng. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên một để nhập dữ liệu cho từng sinh viên từ sv[0] đến sv[n-1], trong vòng for thì nhập vào dữ liệu của sinh viên.

Bước 4: Ta khởi tạo hàm void Xuat(SinhVien sv[], int n) dùng để hiển thị dữ liệu từ mảng ra màn hình. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên một để hiển thị dữ liệu của từng sinh viên từ sv[0] đến sv[n-1] ra màn hình, trong vòng for in dữ liệu của sinh viên ra màn hình.

Bước 5: Ta khởi tạo hàm void TimKiem(SinhVien sv[], int n) dùng để tìm kiếm sinh viên trong mảng theo mã. Trong hàm ta khai báo bến int x dùng để nhập vào mã sinh viên cần tìm, ta sử dụng vòng lặp for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên một trong vòng for ta dùng if với điều kiện nếu sv[i].MaSV == x (thuật toán tìm kiếm tuần tự) thì hiển thị sinh viên đó ra màn hình.

Bước 6: Trong hàm main ta gọi hàm Nhap(sv,n), Xuat(sv,n) và hàm Timkiem(sv,n) rồi chạy chương trình.

Chương trình như sau:

#include<stdio.h>
//khai bao mot cau truc sinh vien
struct SinhVien{
    int MaSV;
    char TenSV[50];
    char Lop[50];
    float Dtoan;
    float Dvan;
    float Danh;
};
void Nhap(SinhVien sv[], int n)//ham nhap sinh vien
{
    for(int i=0; i<n ; i++)//vong lap for duyet sinh vien trong mang tu 0 den n-1
    {
        //nhap du lieu vao mang
        printf("Nhap sinh vien thu %d",i);
        printf("\nNhap ma sinh vien:");
        scanf("%d", &sv[i].MaSV);
        printf("\nNhap ten sinh vien:");
        fflush(stdin);
        gets(sv[i].TenSV);
        printf("\nNhap lop:");
        gets(sv[i].Lop);
        fflush(stdin);
        printf("\nNhap diem toan:");
        scanf("%f", &sv[i].Dtoan);
        printf("\nNhap diem van:");
        scanf("%f", &sv[i].Dvan);
        printf("\nNhap diem tieng anh:");
        scanf("%f", &sv[i].Danh);
    }
}
void Xuat(SinhVien sv[], int n)//ham xuat sinh vien
{
    printf("MaSV \t TenSV \t Lop \t Toan \t Van \t Anh \t DTB\n");
    for(int i=0; i<n ; i++)//vong lap for duyet sinh vien trong mang 0 den n-1
    {
        //hien thi cac sinh vien trong mang
        printf("%d \t %s \t %s \t %0.2f \t %0.2f \t %0.2f \t %0.2f\n", sv[i].MaSV, sv[i].TenSV, sv[i].Lop, sv[i].Dtoan , sv[i].Dvan , sv[i].Danh, (sv[i].Dtoan + sv[i].Dvan + sv[i].Danh)/3);
    }
}
void Timkiem(SinhVien sv[], int n)// ham tim kiem
{
    int x;
    printf("\nNhap ma sinh vien can tim:");
    scanf("%d", &x);
    printf("MaSV \t TenSV \t Lop \t Toan \t Van \t Anh \t DTB\n");
    for(int i=0;i<n;i++)
    {
        
        if(sv[i].MaSV == x)
        {
            printf("%d \t %s \t %s \t %0.2f \t %0.2f \t %0.2f \t %0.2f\n", sv[i].MaSV, sv[i].TenSV, sv[i].Lop, sv[i].Dtoan , sv[i].Dvan , sv[i].Danh, (sv[i].Dtoan + sv[i].Dvan + sv[i].Danh)/3);
        }
    } 
}
int main()
{
    SinhVien sv[100];// khai bao mang sinh vien co 100 o nho
    int n;//khai bao so nguyen n la sinh vien
    //Nhap du lieu cua n
    do{
        printf("Nhap so sinh vien:");
        scanf("%d", &n);
        if(n<1 || n>100)
        {
            printf("Nhap lai:");
        }
    }while(n<1 || n>100);//dieu kien neu n<1 hoac n>100 yeu cau nhap lai
    
    Nhap(sv, n);//goi ham nhap mang
    printf("\nDanh sach cac sinh vien la:\n");
    Xuat(sv,n);// goi ham xuat mang
    printf("\nSinh vien can tim la:\n");
    Timkiem(sv,n);
}

Kết quả:

Nhap ten sinh vien:Nguyen Van A

Nhap lop:D15CNTT2

Nhap diem toan:10

Nhap diem van:8.0

Nhap diem tieng anh:7.8
Nhap sinh vien thu 1
Nhap ma sinh vien:002

Nhap ten sinh vien:Nguyen Van B

Nhap lop:D15CNPM2

Nhap diem toan:10

Nhap diem van:9

Nhap diem tieng anh:8

Danh sach cac sinh vien la:
MaSV     TenSV   Lop     Toan    Van     Anh     DTB
1        Nguyen Van A    D15CNTT2        10.00   8.00    7.80    8.60
2        Nguyen Van B    D15CNPM2        10.00   9.00    8.00    9.00

Sinh vien can tim la:

Nhap ma sinh vien can tim:2
MaSV     TenSV   Lop     Toan    Van     Anh     DTB
2        Nguyen Van B    D15CNPM2        10.00   9.00    8.00    9.00

3. Tổng kết

Sau khi làm bài tập này các bạn cần phải hiểu và nắm được những kiến thức sau:

  • Cách nhập xuất cơ bản trong ngôn ngữ lập trình C.
  • Cách sử dụng hàm trong ngôn ngữ lập trình C.
  • Cách sử dụng mảng một chiều trong ngôn ngữ lập trình C.
  • Các sử dụng cấu trúc struct trong ngôn ngữ C.
  • Cách sử dụng vòng lặp for để duyệt các phần tử trong mảng.
  • Cách sử dụng thuật toán tìm kiếm tuần tự