#include <stdio.h>
#include <malloc.h.>
#include <string.h>
#include <stdlib.h>
#include <time.h>
struct STU
{
char name[20];
char ID[10];
int Chinese;
int Math;
int English;
int Physics;
int avg;
struct STU *next;
}Stu1[45],Stu2[45],Stu3[45],Stu4[45];
void create(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
void average(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
void sort(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
void selectSort(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
void createList(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
int main()
{
create(Stu1,Stu2,Stu3,Stu4);
average(Stu1,Stu2,Stu3,Stu4);
sort(Stu1,Stu2,Stu3,Stu4);
selectSort(Stu1,Stu2,Stu3,Stu4);
createList(Stu1,Stu2,Stu3,Stu4);
return 0;
}
void create(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4)
{
int i;
srand((unsigned)time(NULL));
for(i=0;i<45;i++)
{
Stu1[i].Chinese=rand()%100+1;
Stu1[i].English=rand()%100+1;
Stu1[i].Math=rand()%100+1;
Stu1[i].Physics=rand()%100+1;
}
for(i=0;i<45;i++)
{
Stu2[i].Chinese=rand()%100+1;
Stu2[i].English=rand()%100+1;
Stu2[i].Math=rand()%100+1;
Stu2[i].Physics=rand()%100+1;
}
for(i=0;i<45;i++)
{
Stu3[i].Chinese=rand()%100+1;
Stu3[i].English=rand()%100+1;
Stu3[i].Math=rand()%100+1;
Stu3[i].Physics=rand()%100+1;
}
for(i=0;i<45;i++)
{
Stu4[i].Chinese=rand()%100+1;
Stu4[i].English=rand()%100+1;
Stu4[i].Math=rand()%100+1;
Stu4[i].Physics=rand()%100+1;
}
return;
}
void average(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4)
{
int i;
for(i=0;i<45;i++)
{
Stu1[i].avg=(Stu1[i].Chinese+Stu1[i].English+Stu1[i].Math+Stu1[i].Physics)/4;
}
for(i=0;i<45;i++)
{
Stu2[i].avg=(Stu2[i].Chinese+Stu2[i].English+Stu2[i].Math+Stu2[i].Physics)/4;
}
for(i=0;i<45;i++)
{
Stu3[i].avg=(Stu3[i].Chinese+Stu3[i].English+Stu3[i].Math+Stu3[i].Physics)/4;
}
for(i=0;i<45;i++)
{
Stu4[i].avg=(Stu4[i].Chinese+Stu4[i].English+Stu4[i].Math+Stu4[i].Physics)/4;
}
return;
}
void sort(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4)
{
int i,j;
struct STU tmp;
for(i=0;i<45;i++)
{
for(j=0;j<45-i-1;j++)
{
if(Stu1[j].avg>Stu1[j+1].avg)
{
tmp=Stu1[j];
Stu1[j]=Stu1[j+1];
Stu1[j+1]=tmp;
}
}
}
for(i=0;i<45;i++)
{
for(j=0;j<45-i-1;j++)
{
if(Stu2[j].avg>Stu2[j+1].avg)
{
tmp=Stu2[j];
Stu2[j]=Stu2[j+1];
Stu2[j+1]=tmp;
}
}
}
for(i=0;i<45;i++)
{
for(j=0;j<45-i-1;j++)
{
if(Stu2[j].avg>Stu2[j+1].avg)
{
tmp=Stu2[j];
Stu2[j]=Stu2[j+1];
Stu2[j+1]=tmp;
}
}
}
for(i=0;i<45;i++)
{
for(j=0;j<45-i-1;j++)
{
if(Stu3[j].avg>Stu3[j+1].avg)
{
tmp=Stu3[j];
Stu3[j]=Stu3[j+1];
Stu3[j+1]=tmp;
}
}
}
for(i=0;i<45;i++)
{
for(j=0;j<45-i-1;j++)
{
if(Stu4[j].avg>Stu4[j+1].avg)
{
tmp=Stu4[j];
Stu4[j]=Stu4[j+1];
Stu4[j+1]=tmp;
}
}
}
return;
}
void selectSort(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4)
{
int i,j,min,position;
struct STU tmp;
for(i=0;i<45;i++)
{
min=Stu1[i].avg;
position=i;
for (j=i+1;j<44-i;j++)
{
if (Stu1[j].avg<min)
{
min=Stu1[j].avg;
position=j;
}
}
if(position!=i)
{
tmp=Stu1[i];
Stu1[i]=Stu1[position];
Stu1[position]=tmp;
}
}
for(i=0;i<45;i++)
{
min=Stu2[i].avg;
position=i;
for (j=i+1;j<44-i;j++)
{
if (Stu2[j].avg<min)
{
min=Stu2[j].avg;
position=j;
}
}
if(position!=i)
{
tmp=Stu2[i];
Stu2[i]=Stu2[position];
Stu2[position]=tmp;
}
}
for(i=0;i<45;i++)
{
min=Stu3[i].avg;
position=i;
for (j=i+1;j<44-i;j++)
{
if (Stu3[j].avg<min)
{
min=Stu3[j].avg;
position=j;
}
}
if(position!=i)
{
tmp=Stu3[i];
Stu3[i]=Stu3[position];
Stu3[position]=tmp;
}
}
for(i=0;i<45;i++)
{
min=Stu3[i].avg;
position=i;
for (j=i+1;j<44-i;j++)
{
if (Stu4[j].avg<min)
{
min=Stu4[j].avg;
position=j;
}
}
if(position!=i)
{
tmp=Stu4[i];
Stu4[i]=Stu4[position];
Stu4[position]=tmp;
}
}
return;
}
void createList()
{
int i,j;
struct STU *p1,*p2,*p;
for(i=0;i<45;i++)
{
Stu1[i].next=&Stu1[i+1];
}
Stu1[44].next=&Stu2[0];
for(i=0;i<45;i++)
{
Stu2[i].next=&Stu2[i+1];
}
Stu2[44].next=&Stu3[0];
for(i=0;i<45;i++)
{
Stu3[i].next=&Stu3[i+1];
}
Stu3[44].next=&Stu4[0];
for(i=0;i<45;i++)
{
Stu4[i].next=&Stu4[i+1];
}
Stu4[44].next=NULL;
参考GPT和自己的思路:
这个程序是按照每个结构体数组中的学生的平均成绩进行排序,并将他们按照一定的顺序连接在一起,最终创造了一个由多个结构体数组组成的链表。对于最后一个函数 createList(),它的功能是将所有的结构体数组按照顺序连接在一起,组成一个链表。在这个程序中,链表的头指针是 Stu1,链表的末尾指针是 Stu4,每个结构体数组都有一个 next 指针,指向下一个结构体数组的首元素。具体做法是先将 Stu1 数组的 next 指针指向 Stu2 的首元素,然后将 Stu2 数组的 next 指针指向 Stu3 的首元素,以此类推,直到将 Stu4 数组的 next 指针指向 NULL。