c语言成绩排序主要函数 c语言学生成绩排序

c语言成绩排序,做完微信红包#include "stdio.h"
#include stdlib.h
#include string.h
#include "time.h"
struct abcd{
char ID[11],name[17];
int s1,s2,s3,s4,s5;
double ave;
struct abcd *next;
};
void inp(struct abcd (*p)[45]){
int i,j,k,t;
char id[11]="0000000000";
for(i=0;i4;i++){
for(j=0;j45;j++){
if(++id[9]'9')
for(k=9;k0;k--)
id[k]-=10,id[k-1]++;
strcpy(p[i][j].ID,id);
for(t=0,k=rand()%16;k;k--)
p[i][j].name[t++]=rand()%26+'A';
p[i][j].name[t]='\0';
p[i][j].s1=rand()%101;
p[i][j].s2=rand()%101;
p[i][j].s3=rand()%101;
p[i][j].s4=rand()%101;
p[i][j].s5=rand()%101;
}
}
}
void average(struct abcd (*p)[45]){
int i,j;
for(i=0;i4;i++)
for(j=0;j45;p[i][j].ave=(p[i][j++].s1+p[i][j].s2+p[i][j].s3+p[i][j].s4+p[i][j].s5)/5.0);
}
void selsort(struct abcd (*p)[45]){//4个班统一选择排序
int i,j,k,t;
struct abcd q;
for(t=0;t4;t++)
for(i=0;i45;i++){
for(k=i,j=k+1;j45;j++)
if(p[t][k].avep[t][j].ave)
【c语言成绩排序主要函数 c语言学生成绩排序】k=j;
if(k!=i)
q=p[t][k],p[t][k]=p[t][i],p[t][i]=q;
}
}
void bubsort(struct abcd (*p)[45]){//4个班统一冒泡排序
int i,j,t;
struct abcd q;
for(t=0;t4;t++)
for(i=0;i45;i++)
for(j=0;j44;j++)
if(p[t][j].avep[t][j+1].ave)
q=p[t][j],p[t][j]=p[t][j+1],p[t][j+1]=q;
}
void getlink(struct abcd (*p)[45],struct abcd *x){//弄成链表
int i,j,k,t;
struct abcd q;
for(t=i=0;i4;i++)//把4个班的成绩拷贝到临时数组x中
for(j=0;j45;x[t++]=p[i][j++]);
for(i=0;it;i++){//对数组x降序排序
for(k=i,j=k+1;jt;j++)
if(x[k].avex[j].ave)
k=j;
if(k!=i)
q=x[k],x[k]=x[i],x[i]=q;
}
for(i=1;it;x[i-1].next=x+i++);//把数组p搞成单链表
x[i-1].next=NULL;
}
int main(int argc,char *argv[]){
struct abcd c[4][45],t[4*45],*p;
int k;
srand((unsigned)time(NULL));
inp(c);
average(c);
bubsort(c);
selsort(c);//这是脱了裤子FP,无论用什么方法排序结果是一样的,不懂为何这么出题
getlink(c,t);
printf("----------Look at...----------\n");
for(k=0,p=t;p;p=p-next)//将链表中的值输出
printf(++k%15 ? "%5.1f" : "%5.1f\n",p-ave);
if(k%10)
printf("\n");
return 0;
}
运行样例:
这种题打字太多……
C语言成绩排名次 。此题有最大人数限制,所以可用数组实现 。创建一个结构体类型,成员包括学号、题设各科成绩、总分和平均分 。在主函数中声明一个30个此结构体元素的数组,然后输入数据,再进制排序、输出和查找 。参考代码如下:
#include stdio.h
typedef struct stu{//创建结构类型
int MT,EN,PH,TO,ID;
double AV;
}STU;
int main(void){
STU s[30],t;
int i,j,k,n;
printf("Please enter the student's scores(0 end):\n");
printf("\n STUID MAENPH\n------------------\n");
n=0,j=10000;
while(1){//输入数据
printf(" %d ",s[n].ID=j++);
if(scanf("%d",s[n].MT),s[n].MT0)
break;
scanf("%d%d",s[n].EN,s[n].PH);
s[n].TO=s[n].EN+s[n].MT+s[n].PH;
s[n++].AV=s[n].TO/3.0;
}
printf("\n STUID MATH ENGL PHYS TOTA AVER\n");
printf("---------------------------------\n");
for(i=0;in;i++){//排序
for(k=i,j=k+1;jn;j++)
if(s[k].TOs[j].TO)
k=j;
if(k-i)
t=s[k],s[k]=s[i],s[i]=t;
printf("%6d%4d%5d%5d%5d%7.2f\n",s[i].ID,s[i].MT,s[i].EN,s[i].PH,s[i].TO,s[i].AV);//输出表格
}
printf("Please enter ID(%d~%d)...\n",10000,9999+n);//查询

推荐阅读