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ự