Mình có đề như này mà làm đến phần loại bỏ sinh viên có điểm trung bình < 5 thì thử nhiều cách đều không được, mọi người giúp mình với ạ. Dưới đây là đề và code của mình.
Đề bài
Giả sử cần quản lý một lớp học bao gồm các sinh viên. Mỗi sinh viên gồm các thông tin sau: Họ Tên, Lớp, Số báo danh, Điểm trung bình. Anh (chị) hãy thực hiện các công việc sau:
- Cài đặt danh sách này bằng cấu trúc danh sách liên kết đơn.
- Với cấu trúc danh sách đã cài đặt, viết các chương trình con thực hiện các yêu cầu như sau:
a) Nhập vào danh sách gồm n sinh viên
b) Loại bỏ khỏi danh sách những sinh viên có điểm trung bình < 5
c) Sắp xếp danh sách theo trường lớp tăng dần
d) In ra màn hình danh sách sinh viên theo từng lớp
Source code
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct sv
{
char hoten[20];
char lop[20];
char sbd[10];
float dtb;
};
struct NODE
{
sv info;
struct NODE* next;
};
struct LIST
{
NODE *head;
NODE *tail;
};
NODE* CreateNode (sv x)
{
NODE *p;
p=new NODE;
if(p==NULL) exit(1);
p->info=x;
p->next=NULL;
return p;
}
void CreateList (LIST &L)
{
L.head=L.tail=NULL;
}
void input (sv &x)
{
printf("\n\tNhap Ten sinh vien: "); fflush(stdin); gets(x.hoten);
printf("\tNhap Lop: "); fflush(stdin); gets(x.lop);
printf("\tNhap So bao danh: "); fflush(stdin); gets(x.sbd);
printf("\tNhap Diem trung binh: "); scanf("%f", &x.dtb);
}
void AddLast (LIST &L, NODE *p)
{
if(L.head==NULL) L.head=L.tail=p;
else
{
L.tail->next=p;
L.tail=p;
}
}
void nhap (LIST &L)//nhap sinh vien
{
sv x;
int n;
printf("\nMoi nhap so sinh vien can them:");scanf("%d", &n);
printf("\nMoi nhap danh sach sinh vien.");
for(int i=0;i<n;i++)
{
input(x);
NODE *p=CreateNode(x);
AddLast(L,p);
}
}
void output (sv x)
{
printf("\n%s %s %s %0.2f",x.hoten,x.lop,x.sbd,x.dtb);
}
void xuat (LIST L)//xuat danh sach sinh vien nhap vao
{
NODE *p;
p=L.head;
while(p!=NULL)
{
output(p->info);
p=p->next;
}
}
void xuat2 (LIST L)//loai bo sinh cien co diem trung binh <5
{
NODE *p;
p=L.head;
while(p!=NULL)
{
if(p->info.dtb>=5)
output(p->info);
p=p->next;
}
}
void xoa (LIST &L)
{
NODE *p, *q,*tem;
char a[10];
p=L.head;
q=NULL;
tem=L.head;
while (tem!=NULL)
{
while (p!=NULL)
{
if( p->info.dtb<5) break;
q=p;
p=p->next;
}
if(q!=NULL)
{
if(p!=NULL)
{
q->next=p->next;
delete (p);
if(p==L.tail) L.tail=q;
delete(p);
}
}
else
{
L.head=p->next;
delete(p);
if(L.head==NULL) L.tail=NULL;
}
tem=tem->next;
}
}
void selectionsort (LIST &L)
{
NODE *p,*q,*min;
p=L.head;
sv temp;
while (p!=L.tail)
{
min=p;
q=p->next;
while (q!=NULL)
{
if(q->info.dtb<min->info.dtb) min=q;
q=q->next;
}
temp=p->info;
p->info=min->info;
min->info=temp;
p=p->next;
}
}
int main()
{
LIST L;
NODE *p,*q,*moi;
sv x;
char chon;
CreateList(L);
nhap(L);
printf("\nDanh sach sinh vien vua nhap la:\n");
xuat(L);
printf("\nDanh sach sinh vien sau khi loai bo nhung sinh vien co diem trung binh < 5 la:\n");
xoa(L);
xuat(L);
printf("\nDanh sach sinh vien sau khi sap xep tang dan theo diem trong binh la:\n");
selectionsort(L);
xuat(L);
getch();
}