Sắp xếp danh sách sinh viên giảm dần theo điểm

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), sắp xếp các sinh viên đó theo tê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 cách sắp xếp 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ắp xếp các phần tử của mảng 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 sắp xếp mảng sinh viên sinh viên theo tê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 Sapxep(SinhVien sv[], int n) dùng để sắp xếp sinh viên trong mảng theo tên. 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-1, trong vòng for i ta sử dụng vòng for bắt đầu từ int j = i+1, kết thúc khi j<n mỗi lần lặp j tăng lên 1, trong vòng for j ta sử dụng if với hàm so sánh chuỗi strcmp() nằm trong thư viện string.h để so sánh 2 tên sinh viên sv[i].TenSV và sv[j].TenSV nếu nó >0 (sắp xếp từ a đến z) thì ta đổi chỗ sv[i] cho sv[j] (bằng biến trung gian).

Bước 6: Trong hàm main ta gọi hàm Nhap(sv,n), Xuat(sv,n) và hàm Sapxep(sv,n) và Xuat(sv,n) để hiển thị mảng sinh viên đã sắp xếp rồi chạy chương trình.

Chương trình giải bài tập sắp xếp mảng sinh viên sinh viên theo tên bằng ngôn ngữ lập trình C như sau:

#include<stdio.h> #include<string.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 Sapxep(SinhVien sv[], int n)// ham sap xep { for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j++) { if(strcmp(sv[i].TenSV,sv[j].TenSV)>0)//so sanh hai ten sinh vien { SinhVien k=sv[i]; sv[i]=sv[j]; sv[j]=k; } } } } 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("\nDanh sau khi sap xep la:\n"); Sapxep(sv,n);// goi sap xep Xuat(sv,n); }

Kết quả:

Nhap so sinh vien:3 Nhap sinh vien thu 0 Nhap ma sinh vien:1Nhap ten sinh vien:sonNhap lop:10aNhap diem toan:9Nhap diem van:7Nhap diem tieng anh:7 Nhap sinh vien thu 1

Nhap ma sinh vien:2Nhap ten sinh vien:anNhap lop:11a

Nhap diem toan:10

Nhap diem van:9

Nhap diem tieng anh:7 Nhap sinh vien thu 2

Nhap ma sinh vien:3

Nhap ten sinh vien:thu

Nhap lop:12a

Nhap diem toan:8

Nhap diem van:8

Nhap diem tieng anh:8

Danh sach cac sinh vien la:

MaSV   TenSV   Lop    Toan    Van    Anh    DTB

1             son     10a    9.00      7.00     7.00   8.67

2             an      11a     10.00     9.00     7.00   8.67

3            thu     12a      8.00     8.00    8.00    8.00

Danh sau khi sap xep la:

MaSV   TenSV   Lop    Toan    Van    Anh    DTB

2             an      11a     10.00     9.00     7.00   8.67

1             son     10a    9.00      7.00     7.00    8.67

3            thu     12a      8.00     8.00    8.00     8.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ắp xếp mảng sinh viên theo tên trong C.
  • Cách đổi chỗ qua biến trung gian.

Excel cho Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Xem thêm...Ít hơn

Khi sắp xếp thông tin trong một trang tính, bạn có thể sắp xếp lại dữ liệu để tìm nhanh các giá trị. Bạn có thể sắp xếp một dải ô hoặc một bảng dữ liệu theo một hoặc nhiều cột dữ liệu. Ví dụ: bạn có thể sắp xếp nhân viên — theo phòng ban trước tiên, rồi đến sắp xếp theo họ.

Chọn dữ liệu để sắp xếp    

Chọn một dải ô dữ liệu dạng bảng, chẳng hạn như A1:L5 (nhiều hàng và cột) hoặc C1:C80 (một cột duy nhất). Dải ô này có thể chứa hàng đầu đề đầu tiên có tác dụng xác định từng cột.


 

Sắp xếp nhanh chóng và dễ dàng    

  1. Chọn một ô trong cột mà bạn muốn sắp xếp.

  2. Trên tab Dữ liệu, trong nhóm Sắp xếp & lọc, bấm vào

    để sắp xếp theo thứ tự tăng dần (từ A đến Z hoặc từ số nhỏ nhất đến số lớn nhất).

  3. Bấm vào

    để sắp xếp theo thứ tự giảm dần (từ Z đến A hoặc từ số lớn nhất đến số nhỏ nhất).

Sắp xếp theo các tiêu chí cụ thể    

Sử dụng kỹ thuật này để chọn cột mà bạn muốn sắp xếp, cùng với các tiêu chí khác như màu phông hoặc màu ô.

  1. Chọn một ô bất kỳ trong phạm vi ô mà bạn muốn sắp xếp.

  2. Trên tab Dữ liệu, trong nhóm Sắp xếp & lọc, bấm vào Sắp xếp để hiển thị cửa sổ bật lên Sắp xếp.

  3. Trong danh sách thả xuống Sắp xếp theo, chọn cột đầu tiên mà bạn muốn sắp xếp.

  4. Trong danh sách Sắp xếp dựa trên, chọn Giá trị, Màu ô, Màu phông hoặc Biểu tượng ô.

  5. Trong danh sách Thứ tự, hãy chọn thứ tự bạn muốn áp dụng cho thao tác sắp xếp — theo bảng chữ cái hoặc số, tăng dần hoặc giảm dần, (nghĩa là từ A đến Z hay từ Z đến A đối với văn bản hoặc từ thấp đến cao hay từ cao đến thấp đối với chữ số).

Video liên quan

Chủ đề