#include <stdio.h>
#include <stdlib.h>
int n;
typedef struct student{
int num;
int mingci;
char name[20];
double a[4];
double sum;
double avreage;
struct student *next;
} STU;
STU *creat();
void add_student(STU *);
void show(STU *);
STU *delete_student(STU *);
void paiming(STU *);
void show_one(STU *s);
int panduan(double l);
int main() {
int choose;
STU *head=creat();
while(1){
printf("1 å½å
¥ä¿¡æ¯\n");
printf("2 æ¥è¯¢å¦çä¿¡æ¯\n");
printf("3 å é¤å¦çä¿¡æ¯\n");
scanf("%d",&choose);
switch(choose){
case 1:add_student(head);break;
case 2:show(head);break;
case 3:head=delete_student(head);break;
default: break;
}
}
return 0;
}
//å建é¾è¡¨è¡¨å¤´
STU *creat(){
n=0;
STU *head;
head=(STU *)malloc(sizeof(STU));
head->next=NULL;
return head;
}
//å½å
¥å¦çä¿¡æ¯
void add_student(STU *s){
STU *p=s;
STU *p1;
while(p->next!=NULL){
p=p->next;
} while(1){
printf("请è¾å
¥å¦å·ï¼å¦å·ä¸º0表示è¾å
¥ç»æè¾å
¥ï¼");
scanf("%d",&p->num);
if(p->num!=0){
n++;
printf("请è¾å
¥å§åï¼");
scanf("%s",p->name);
printf("请è¾å
¥æ绩 æ ¼å¼Cç¨åºè®¾è®¡ é«çæ°å¦ è±è¯ 线æ§ä»£æ°ï¼");
scanf("%lf%lf%lf%lf",&p->a[0],&p->a[1],&p->a[2],&p->a[3]);
p->sum=p->a[0]+p->a[1]+p->a[2]+p->a[3];
p->avreage=p->sum/4;
p->mingci=0;
p1=(STU *)malloc(sizeof(STU));
p->next=p1;
p1->next=NULL;
p=p1;
}else
{
printf("å½å
¥ç»æï¼\n");
paiming(s);
break;
}
}
}
//æ ¹æ®å¦å·å é¤å¦çä¿¡æ¯
STU *delete_student(STU *s){
int num;
STU *p=s,*p1;
printf("请è¾å
¥è¦å é¤å¦ççå¦å·:");
scanf("%d",&num);
while(p->next!=NULL){
if(p->num==num&&s==p){
n--;
return p->next;
}else if(p->num==num){
n--;
p1->next=p->next;
paiming(s);
return s;
} p1=p;
p=p->next;
}
if(n==0){printf("æ°æ®åºç®å为空ï¼è¯·å½å
¥ä¿¡æ¯ï¼\n");}
else{
printf("没æåç°ä½ è¾å
¥çå¦å·ï¼\n");}
return s;
}
//æ¾ç¤ºå¦çæ°æ®åºä¿¡æ¯
void show(STU *s){
STU *head=s;
if(n==0){
printf("æ°æ®åºä¸ºç©ºï¼è¯·å
å½å
¥ä¿¡æ¯ï¼\n");
}
else{
while(s->next!=NULL){
printf("å¦å·:%d å§å:%s æ绩:%.2lf %.2lf %.2lf %.2lf å¹³åå:%.2lf å次:%d \n",s->num,s->name,s->a[0],s->a[1],s->a[2],s->a[3],s->avreage,s->mingci);
s=s->next;
}
show_one(head);
}
}
//对å¦çæå¹³ååæå
void paiming(STU *s){
double score[n];
int j,i=0;
STU *head=s;
while(s->next!=NULL){
score[i]=s->avreage;
s=s->next;
i++;
}
double temp;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(score[i]<score[j]){
temp=score[i];
score[i]=score[j];
score[j]=temp;
}
}
}
for(i=0;i<n;i++){
if(score[i]!=0){
s=head;
while(s->next!=NULL){
if(s->mingci==0){
if(score[i]==s->avreage){
score[i]=0;
s->mingci=i+1;
break;
}
}
s=s->next;
}
}
}
}
//åç§å¹³ååç»è®¡
void show_one(STU *s){
double ar[4]={0};
int b[4][4]={{0},{0},{0},{0}};
int i;
while(s->next!=NULL){
for(i=0;i<4;i++){
b[i][panduan(s->a[i])]++;
ar[i]+=s->a[i];
}
s=s->next;
}
printf("åç§å¹³åå %.2lf %.2lf %.2lf %.2lf\n",ar[0]/n,ar[1]/n,ar[2]/n,ar[3]/n);
printf("90-100å %d %d %d %d\n",b[0][0],b[1][0],b[2][0],b[3][0]);
printf("80-89å %d %d %d %d\n",b[0][1],b[1][1],b[2][1],b[3][1]);
printf("60-79å %d %d %d %d\n",b[0][2],b[1][2],b[2][2],b[3][2]);
printf("60åä»¥ä¸ %d %d %d %d\n",b[0][3],b[1][3],b[2][3],b[3][3]);
}
int panduan(double l){
if(l>=90&&l<=100) return 0;
else if(l>=80&&l<=89) return 1;
else if(l>=60&&l<=79) return 2;
else return 3;
}
温馨提示:答案为网友推荐,仅供参考