Bài tập con trỏ cấu trúc: Viết các hàm thực hiện
- Nhập vào danh sách có n sinh viên (2<n<20), thông tin sinh viên gồm:
+ Họ tên
+ Địa chỉ
+ Năm sinh
+ Giới tính
+ Lớp
+ Điểm: TCC(hs 3), TA(hs 4), TDC(hs 5)
- Tính điểm trung bình
- Đếm số sinh viên có điểm trung bình >= 8
- Đếm số sinh viên có điểm trung bình < 5
- In tên sinh viên có điểm trung bình cao nhất
- Xếp loại cho sinh viên
- In danh sách sinh viên đã xếp loại
- Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm tb
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
struct SV{
char ht[30], dc[50],gioitinh[3],lop[10],xepLoai[10];
int namSinh;
float dTCC, dTA,dTDC,dTB;
};
SV a[20],*p;
int n;void Nhap(){
p=a; do{
cout<<"\n Nhap so sinh vien: "; cin>>n;
if(n<2||n>20) cout<<"\n Nhap lai so sinh vien";
}while(n<2||n>20);
cout<<"\n Nhap thong tin sinh vien: ";
for(int i=0;i<n;i++)
{
fflush(stdin);
cout<<"\n + Nhap thong tin co sinh vien thu "<<i+1<<": ";
cout<<"\n - Ho ten: "; gets((p+i)->ht);
cout<<"\n - Dia chi: "; gets((p+i)->dc);
cout<<"\n - Gioi tinh: "; gets((p+i)->gioitinh);
cout<<"\n - Lop: "; gets((p+i)->lop);
cout<<"\n - Nam sinh: "; cin>>(p+i)->namSinh;
cout<<"\n - Diem toan cao cap: "; cin>>(p+i)->dTCC;
cout<<"\n - Diem toan tieng anh: "; cin>>(p+i)->dTA;
cout<<"\n - Diem tin dai cuong: "; cin>>(p+i)->dTDC;
}
}void TinhDiem(){
p=a;
for(int i=0;i<n;i++)
(p+i)->dTB=(((p+i)->dTCC)*3+((p+i)->dTA)*4+((p+i)->dTDC)*5)/12;
}void DemDTB_LonHon8(){
p=a;
int dem=0;
for(int i=0;i<n;i++)
if((p+i)->dTB>=8) dem++;
cout<<"\n * So sinh vien co diem trung binh >= 8: "<<dem;
}void DemDTB_NhoHon5(){
p=a;
int dem=0;
for(int i=0;i<n;i++)
if((p+i)->dTB<5) dem++;
cout<<"\n * So sinh vien co diem trung binh < 5: "<<dem;
}void InSV_max(){
p=a;
float max=p->dTB;
for(int i=0;i<n;i++)
if (max<(p+i)->dTB) { max=(p+i)->dTB;} cout<<"\n * Ten sinh vien co diem cao nhat: ";
for(i=0;i<n;i++)
if(max==(p+i)->dTB) cout<<"\n +"<<(p+i)->ht;
}void XepLoai(){
p=a;
for(int i=0;i<n;i++)
{
if ((p+i)->dTB<5) strcpy((p+i)->xepLoai,"Truot");
else if ((p+i)->dTB<6) strcpy((p+i)->xepLoai,"Trung binh");
else if ((p+i)->dTB<7) strcpy((p+i)->xepLoai,"Trung binh kha");
else if ((p+i)->dTB<8) strcpy((p+i)->xepLoai,"Kha");
else if ((p+i)->dTB<9) strcpy((p+i)->xepLoai,"Gioi");
else if ((p+i)->dTB<=10) strcpy((p+i)->xepLoai,"Xuat sac");
}
}void InDS(){
p=a;
cout<<"\n * In danh sach sinh vien da xep loai:";
for(int i=0;i<n;i++)
cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->xepLoai;
}void DoiCho(SV *a, SV *b){
char tht[30],tdc[50],tgioitinh[5],tlop[10],dxl[10];
int tns;
float tdtcc,tdta,tdtdc,tdtb;
strcpy(tht,a->ht);
strcpy(a->ht,b->ht);
strcpy(b->ht,tht);
strcpy(tdc,a->dc);
strcpy(a->dc,b->dc);
strcpy(b->dc,tdc);
strcpy(tgioitinh,a->gioitinh);
strcpy(a->gioitinh,b->gioitinh);
strcpy(b->gioitinh,tgioitinh);
strcpy(tlop,a->lop);
strcpy(a->lop,b->lop);
strcpy(b->lop,tlop);
strcpy(dxl,a->xepLoai);
strcpy(a->xepLoai,b->xepLoai);
strcpy(b->xepLoai,dxl);
tns=a->namSinh;
a->namSinh=b->namSinh;
b->namSinh=tns;
tdtcc=a->dTCC;
a->dTCC=b->dTCC;
b->dTCC=tdtcc;
tdta=a->dTA;
a->dTA=b->dTA;
b->dTA=tdta;
tdtdc=a->dTDC;
a->dTDC=b->dTDC;
b->dTDC=tdtdc;
tdtb=a->dTB;
a->dTB=b->dTB;
b->dTB=tdtb;
}void SapXep(){
p=a;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if ((p+i)->dTB>(p+j)->dTB)
{
DoiCho((p+i),(p+j));
}
}
cout<<"\n * Danh sach sinh vien da xep loai: ";
for(i=0;i<n;i++)
cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->dTB;
}
int main(){
Nhap();
TinhDiem();
DemDTB_LonHon8();
DemDTB_NhoHon5();
InSV_max();
XepLoai();
InDS();
SapXep();
getch();
return 0;
}
0 nhận xét:
Đăng nhận xét