#includestdio.h
创新互联服务项目包括文登网站建设、文登网站制作、文登网页制作以及文登网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,文登网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到文登省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
#includestdlib.h
typedef struct Student
{
double score[4];
double sum;
double avg;
}stu;
void save(int n)
{
FILE *w = fopen("score.dat","w");
printf("Please input %d students' 4 scores:\n",n);
int i;
double score[4];
double sum;
for(i=0;in;i++)
{
sum = 0;
scanf("%lf%lf%lf%lf" ,score[0],score[1],score[2],score[3]);
sum = score[0]+score[1]+score[2]+score[3];
fprintf(w,"%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n" ,score[0],score[1],score[2],score[3],sum,sum/4);
}
fclose(w);
return;
}
void read(stu a[])
{
FILE *r = fopen("score.dat","r");
int i=0;
while(fscanf(r,"%lf%lf%lf%lf%lf%lf" ,a[i].score[0],a[i].score[1],a[i].score[2],a[i].score[3],a[i].sum,a[i].avg)!= EOF)
{
i = i+1;
}
fclose(r);
return;
}
void sort(stu a[],int n)
{
int i;
int j;
stu tmp;
for(i=n-1;i0;i--){
for(j=0;ji;j++){
if(a[j].sum a[j+1].sum){
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
return;
}
void output(stu a[],int n)
{
FILE *w = fopen("score.dat","w");
int i;
for(i=0;in;i++)
{
fprintf(w,"%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n" ,a[i].score[0],a[i].score[1],a[i].score[2],a[i].score[3],a[i].sum,a[i].avg);
}
fclose(w);
}
int main()
{
stu a[128];
int n;
while(scanf("%d",n) != EOF)
{
if(n = 0) break;
save(n);
read(a);
sort(a,n);
output(a,n);
}
return 0;
}
第一步:抽象出算法数据结构。首先学生总数是n,而每个学生拥有m个成绩,即对应一个n中的i,有m个数据与之对应。因此可以得到结论,采用二维数组来储存n个学生m门成绩。按照总分排序,即将每个i对应的m门成绩加起来进行排序即可。
第二步:具体算法(c语言伪代码)
#include stdio.h
#include stdlib.h
#define MaxVertexNum 100
void order(int num[][],int n,in m)
{
int i,j;
for(i=0;in;i++)
{
for(j=2;jm;j++)
{
num[i][1]=num[i][1]+num[i][j]
}
}
int temp;
for(i=0;in;i++)
{
for(j=0;jn;j++)
{
if(num[0][1]num[i][1])
{
num[0][1]= num[i][1];
}
}
}
}
int main(int argc, char *argv[])
{
int n,m,i,j;
printf("请输入学生的个数n和成绩门数m,用空格分开\n");
scanf("%d %d",n,m);
int scores[n-1][m];
//输入成绩
for(i=0;in;i++){
printf("请输入第%d个学生的成绩:\n",i);
scores[i][0]=i;
for(j=1;jm;j++)
{
scanf("%d",scores[i][j]);
}
}
//开始排序
system("PAUSE");
return 0;
}
定义结构体类型的变量,用于临时储存需要被交换的结构体(tmp = a[i]; a[i] = a[j]; a[j] = tmp;
)。跟交换两个int类型变量数值的道理是一样的。例如:int a = 1, b = 2, tmp; tmp = a; a = b; b = tmp; // 然后a和b的值就对调了。
#includestdio.h
#includestdlib.h
struct test
{
char num[3];
char name[20];
char sex[10];
int run;
int fw;
int yw;
int swim;
int total;
}a[10];
void main()
{
int i,j;
struct test b;
FILE *fp;
fp=fopen("1.txt","r");
if(fp==NULL)
{
printf("文件打开错误!\n");
exit(0);
}
for(i=0;i10;i++)
fscanf(fp,"%s %s %s %d %d %d %d %d\n",a[i].num,a[i].name,a[i].sex,a[i].run,a[i].fw,a[i].yw,a[i].swim,a[i].total);
fclose(fp);
for(i=0;i9;i++)
for(j=0;j10-i;j++)
if(a[j].totala[j+1].total)
{
b=a[j];
a[j]=a[j+1];
a[j+1]=b;
}
printf("\n编号 姓名 性别 5km 俯卧撑 仰卧起坐 400m游泳 总分\n");
for(i=0;i10;i++)
printf("%s %s %s %d %d %d %d %d\n",a[i].num,a[i].name,a[i].sex,a[i].run,a[i].fw,a[i].yw,a[i].swim,a[i].total);
printf("\n");
}
好了这下满足你的要求了!
!!!!!!!!对了,你自己改下文件名字哈!我为了方便就没用你写的那个文件名!