/*Hãy sắp xếp danh sách thí sinh đã có trong file theo tổng điểm giảm dần. Mỗi thí sinh gồm các thông tin:
- Mã thí sinh: là một số nguyên, tự động tăng, bắt đầu 1.
- Tên thí sinh, ngày sinh
- Điểm môn 1, điểm môn 2, điểm môn 3
Dữ liệu vào: File: F.IN
- Dòng đầu chứa số thí sinh. Mỗi thí sinh viết trên 3 dòng:
Dòng 1: Tên thí sinh
Dòng 2: Ngày sinh
Dòng 3,4,5: 3 điểm thi tương ứng. Các điểm thi đều đảm bảo hợp lệ (từ 0 đến 10).
Kết quả: Ghi ra màn hình
In ra danh sách thí sinh đã sắp xếp theo tổng điểm giảm dần. Nếu 2 thí sinh bằngđiểm nhau thì thí sinh nào xuất hiện trước trong file sẽ viết trước. Mỗi thí sinh viết trên một dòng gồm: mã, tên, ngày sinh và tổng điểm. Các thông tin cách nhau đúng 1 khoảng trống. Điểm tổng được làm tròn đến 1 số sau dấu phẩy
*/

Mã:
#include<stdio.h>#include<conio.h>#include<string.h> struct sinhvien{    char    hoten[30];    char    tuoi[30];    int     ma;    float   diem1, diem2, diem3, tong;}; void nhap(sinhvien sv[], int n){    int i;    int j;    sinhvien tg;        for (i = 0; i<n; i++)    {        sv[i].ma = i + 1;        printf("%d:
", sv[i].ma);        printf("Nhap ho ten sinh vien:");        fflush(stdin);        gets(sv[i].hoten);        printf("
Nhap tuoi:");        gets(sv[i].tuoi);        /hap diem va dat dieu kien cho diem mon 1:        do        {            printf("
Nhap diem: 1");            scanf("
%f", &sv[i].diem1);            if (sv[i].diem1 < 0 || sv[i].diem1 > 10)            {                printf("
Diem hoa khong hop le. Nhap lai!");            }        }        while (sv[i].diem1 < 0 || sv[i].diem1 > 10);        /hap diem va dat dieu kien cho diem mon 2:        do        {            printf("
Nhap diem: 2");            scanf("
%f", &sv[i].diem2);            if (sv[i].diem2 < 0 || sv[i].diem2 > 10)            {                printf("
Diem hoa khong hop le. Nhap lai!");            }        }        while (sv[i].diem2 < 0 || sv[i].diem2 > 10);        do        {            printf("
Nhap diem: 3");            scanf("
%f", &sv[i].diem3);            if (sv[i].diem3 < 0 || sv[i].diem3 > 10)            {                printf("
Diem hoa khong hop le. Nhap lai!");            }        }        while (sv[i].diem3 < 0 || sv[i].diem3 > 10);        sv[i].tong = sv[i].diem1 + sv[i].diem2 + sv[i].diem3;        printf("
%2.2f", sv[i].tong);    }}void xuatsapxep(sinhvien sv[], int n){    int i, j;    sinhvien tg;        for (i = 0; i<n - 1; i++)    for (j = i + 1; j<n; j++)    if (sv[i].tong < sv[j].tong)    {        tg = sv[i];        sv[i] = sv[j];        sv[j] = tg;    }    for (i = 0; i<n; i++)        printf("%d %s %s %2.2f
", sv[i].ma, sv[i].hoten, sv[i].tuoi, sv[i].tong);}void GhiDsSv(const char* filepath, sinhvien sv[], int n){    FILE* fpt = fopen(filepath, "wt");    fprintf(fpt, "%d
", n);    for (int i = 0; i < n; i++)    {        fprintf(fpt, "%d
", sv[i].ma);        fprintf(fpt, "%s
", sv[i].hoten);        fprintf(fpt, "%s
", sv[i].tuoi);        fprintf(fpt, "%f
", sv[i].diem1);        fprintf(fpt, "%f
", sv[i].diem2);        fprintf(fpt, "%f
", sv[i].diem3);    }    fclose(fpt);}bool DocSsSv(const char* filepath, sinhvien sv[], int & n){    FILE* fpt = fopen(filepath, "rt");    if (!fpt)        return false;    fscanf(fpt, "%d
", &n);    for (int i = 0; i < n; i++)    {        sv[i].ma = i + 1;        fscanf(fpt, "%d
", &sv[i].ma);        fscanf(fpt, "%s", &sv[i].hoten);        fscanf(fpt, "%s", &sv[i].tuoi);        fscanf(fpt, "%f
", &sv[i].diem1);        fscanf(fpt, "%f
", &sv[i].diem2);        fscanf(fpt, "%f
", &sv[i].diem3);    }    fclose(fpt);    return true;}main(){    int n;    int i;    int j;    sinhvien sv[50];    sinhvien tg;        printf("Nhap vao so sinh vien N=");    scanf("%d", &n);    nhap(sv, n);    xuatsapxep(sv, n);    if (!DocSsSv("D:\svdata.txt", sv, n))    {        /hap(sv, n);        GhiDsSv("D:\svdata.txt", sv, n);    }    getch();}