Bài tập Struct và Mảng

Đề bài:
1. Tạo cấu trúc để lưu thông tin Thí sinh gồm: SBD kiểu số nguyên, Họ tên kiểu chuỗi, Điểm thi môn 1 và điểm thi môn 2 là kiểu số thực.

2. Viêt hàm nhập danh sách thí sinh, kết quả trả về của hàm là số lượng thí sinh được nhập

3. Viết thủ tục in danh sách n thí sinh đầu tiên

4. Viết thủ tục sắp xếp thí sinh theo điểm tổng giảm dần. Biết điểm tổng = (Điểm 1 + Điểm 2) / 2

5. Viết hàm main demo các hàm, thủ tục đã viết ở trên.

Video nhập dữ liệu thí sinh để kiểm tra




Bài giải


#include <stdio.h>
#include <string.h>
struct ThiSinh{
int
SBD;
char
HoTen[50];
float
d1,d2;
};

int
NhapThiSinh(ThiSinh *&dsts){
int
n;
printf("Co bao nhieu thi sinh? ");
scanf("%d",&n);
dsts=new ThiSinh[n];
for
(int i=0;i<n;i++){
printf("Thi sinh thu %d:\n",i+1);
printf("- Nhap SBD: ");
scanf("%d",&dsts[i].SBD);
fflush(stdin);
printf("- Nhap Ho ten: ");
gets(dsts[i].HoTen);
printf("- Nhap Diem 1, 2 (cach nhau boi dau ,): ");
scanf("%f,%f",&dsts[i].d1,&dsts[i].d2);
}

return
n;
}

void
inDanhSach(ThiSinh *dsts,int n){
for
(int i=0;i<n;i++){
printf("%-8d",dsts[i].SBD);
printf("%-30s",dsts[i].HoTen);
printf("%-10g",dsts[i].d1);
printf("%-10g",dsts[i].d2);
float
kq=(dsts[i].d1+dsts[i].d2)/2.0;
printf("%-.2f",kq);
if
(kq>=5)
printf(" Dau");
else

printf(" Rot");
printf("\n");
}
}

void
HoanDoi(ThiSinh &a,ThiSinh &b){
ThiSinh t = a;
a=b;
b=t;
}

void
SapXep(ThiSinh *dsts,int n){
for
(int i=0;i<n-1;i++){
float
kq1=(dsts[i].d1+dsts[i].d2)/2.0;
for
(int j=0;j<n;j++){
float
kq2=(dsts[j].d1+dsts[j].d2)/2.0;
if
(kq1>kq2){
HoanDoi(dsts[i],dsts[j]);
}
}
}
}

int
main(){
ThiSinh *dsts;
int
slg = NhapThiSinh(dsts);
printf("Danh sach thi sinh:\n");
inDanhSach(dsts,slg);
printf("\n\nTOP 3 thi sinh diem cao nhat:\n");
SapXep(dsts,slg);
inDanhSach(dsts,3);

return
0;
}

Bài liên quan

Bài liên quan