1. Bài tập xóa một sinh viên trong mảng 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), xóa một sinh viên trong danh sách và hiển thị thông tin của mảng sau khi xóa 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, 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 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 xóa một sinh viên trong mảng 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 XoaSV(SinhVien sv[], int n) dùng để xóa sinh viên trong mảng. Trong hàm ta khai báo biến int Masvcanxoa khai báo mã sinh viên muốn xóa và nhập dữ liệu vào nó. Tiếp theo ta dùng vòng lặp for bắt đầu từ int i = 0, kết thúc khi i<n và mỗi lần i tăng lên 1, trong vòng for ta dùng if với điều kiện Masvcanxoa==sv[i].MaSV nếu thỏa mãn thì ta gán sv[i] = sv[i+1] và giảm số phần tử của mảng đi(n–). Kết thúc lặp ta gọi hàm Xuat(sv,n) để hiển thị mảng sau khi xóa.
Bước 6: Trong hàm main ta gọi hàm Nhap(sv,n), Xuat(sv,n) và hàm XoaSV(sv,n) rồi chạy chương trình.
Chương trình giải bài tập xóa một sinh viên trong mảng bằng ngôn ngữ lập trình C 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 XoaSV(SinhVien sv[],int n) { int Masvcanxoa; printf("\nNhap ma sinh vien can xoa:\n"); scanf("%d", &Masvcanxoa); for(int i=0;i<n;i++) { if(Masvcanxoa==sv[i].MaSV) { sv[i] = sv[i+1]; n--; } } printf("\nMang sau khi xoa la:\n"); Xuat(sv,n); } 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 XoaSV(sv,n); }
Nhap so sinh vien:3 Nhap sinh vien thu 0 Nhap ma sinh vien:1 Nhap ten sinh vien:A Nhap lop:12A Nhap diem toan:10 Nhap diem van:10 Nhap diem tieng anh:10 Nhap sinh vien thu 1 Nhap ma sinh vien:2 Nhap ten sinh vien:B Nhap lop:12A7 Nhap diem toan:8 Nhap diem van:9 Nhap diem tieng anh:10 Nhap sinh vien thu 2 Nhap ma sinh vien:3 Nhap ten sinh vien:C Nhap lop:12A7 Nhap diem toan:5 Nhap diem van:4 Nhap diem tieng anh:3 Danh sach cac sinh vien la: MaSV TenSV Lop Toan Van Anh DTB 1 A 12A7 10.00 10.00 10.00 10.00 2 B 12A7 8.00 9.00 10.00 9.00 3 C 12A7 5.00 4.00 3.00 4.00 Nhap ma sinh vien can xoa: 3 Mang sau khi xoa la: MaSV TenSV Lop Toan Van Anh DTB 1 A 12A7 10.00 10.00 10.00 10.00 2 B 12A7 8.00 9.00 10.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.