你想输入多少输入多少,我就输入4个分数测试。
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/9345d688d43f8794b1c1d20ade1b0ef41bd53ad3?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
#include<
stdio.h>
#include<malloc.h>
typedef struct stud
{
int score;
struct stud *next;
}STD;
STD *insertScore(STD *stdHead,STD *stdTail);//录入成绩
void printfSTD(STD *stdHead);//打印
链表数据
int *tjSTD(STD *stdHead);//统计 返回[3]数组,分别表示最高分 最低分 超过平均分人数
int main()
{
int *redata=NULL;
STD *stdHead=(STD *)malloc(sizeof(STD));
stdHead->next=NULL;
STD *stdTail=NULL;
do{
stdTail=insertScore(stdHead,stdTail);
}while(stdTail);
printfSTD(stdHead);
redata=tjSTD(stdHead);
printf("最高分:%d,最低分:%d,超过平均分的人数:%d\n",redata[0],redata[1],redata[2]);
return 0;
}
void printfSTD(STD *stdHead)//打印数据
{
while(stdHead->next!=NULL)
{
printf("%d\n",stdHead->next->score);
stdHead=stdHead->next;
}
}
int *tjSTD(STD *stdHead)//统计 返回[3]数组,分别表示最高分 最低分 超过平均分人数
{
int max=-1,min=-1,sum=0,count=0,*reData;
float ave;
STD *stdHeadSave=stdHead;
reData=(int *)malloc(sizeof(int)*3);
while(stdHead->next!=NULL)
{
if(max==-1 || max<stdHead->next->score)
max=stdHead->next->score;
if(min==-1 || min>stdHead->next->score)
min=stdHead->next->score;
sum=sum+stdHead->next->score;
count++;
stdHead=stdHead->next;
}
ave=(float)sum/count;
printf("总人数:%d,平均分:%f\n",count,ave);
count=0;
stdHead=stdHeadSave;
while(stdHead->next!=NULL)
{
if(stdHead->next->score>ave)
count++;//大于平均分的人数
stdHead=stdHead->next;
}
reData[0]=max;reData[1]=min;reData[2]=count;
return reData;
}
STD *insertScore(STD *stdHead,STD *stdTail)//录入成绩
{
int score;
printf("输入成绩(输入-1结束录入):");
scanf("%d",&score);
if(score==-1)
return NULL;
STD *stdNew=(STD *)malloc(sizeof(STD));
stdNew->score=score;
stdNew->next=NULL;
if(stdHead->next==NULL)
stdHead->next=stdNew;
else
stdTail->next=stdNew;
stdTail=stdNew;
return stdTail;
}