要求用c语言编写,将总分排序(由高到低),并按总分从高到低输出成绩表

体能测试成绩表
编号 姓名 性别 5km 俯卧撑 仰卧起坐 400m游泳 总分
01 张一 男 78 91 89 78 326
02 张二 女 80 68 59 75 282
03 张三 男 68 56 58 49 231
04 张四 男 56 45 78 89 268
05 张五 男 89 89 88 78 344
06 王一 女 75 89 46 68 278
07 王二 女 51 87 91 57 286
08 王三 男 48 78 84 68 278
09 王四 男 70 55 65 67 257
10 王五 男 61 68 65 66 260
要求用c语言编写,将总分排序(由高到低),并按总分从高到低输出成绩表。跪求啊!!!
先将该表格存放在d:\\1.txt目录下,再采用文件的方式调用最后对其排序,比如:
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
char ch;
if((fp=fopen("d:\\1.txt","rt"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getchar();
exit(1);
}
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}
接下来该怎么做啊

#include "stdio.h"
#include "string.h"
struct student
{
int id;
char name[30];
char birth[30];
int score[3];
}stu[10];

void input(int num)//输入记录
{
for(int i=0;i<num;i++)
{
printf("开始输入第%d个学生记录\n",i+1);
printf("输入第%d个学生记录的学号:",i+1);
scanf("%d",&stu[i].id);
printf("输入第%d个学生记录的姓名:",i+1);
scanf("%s",stu[i].name);
printf("输入第%d个学生记录的生日:",i+1);
scanf("%s",stu[i].birth);
printf("输入第%d个学生记录的第一门功课成绩:",i+1);
scanf("%d",&stu[i].score[0]);
printf("输入第%d个学生记录的第二门功课成绩:",i+1);
scanf("%d",&stu[i].score[1]);
printf("输入第%d个学生记录的第三门功课成绩:",i+1);
scanf("%d",&stu[i].score[2]);
}
}
void output(int num)//输出记录
{
for(int i=0;i<num;i++)
{
printf("开始输出第%d个学生记录\n",i+1);
printf("id:%d\n",stu[i].id);
printf("name:%s\n",stu[i].name);
printf("birth:%s\n",stu[i].birth);
printf("score1:%d\n",stu[i].score[0]);
printf("score2:%d\n",stu[i].score[1]);
printf("score3:%d\n",stu[i].score[2]);
}
}
void meansore(int num)//求每门课程平均值
{
int i,j;
int mean[3];mean[0]=0;mean[1]=0;mean[2]=0;
for(i=0;i<num;i++)
{
for(j=0;j<3;j++)
{
mean[j]+=stu[i].score[j];
}
}
for(i=0;i<3;i++)
{
printf("第%d门功课的平均成绩:%.2f\n",i+1,mean[i]*1.0/num);
}
}
void sortmean(int num)//按学生平均分由小到大排序
{
student temp;
int i,j;
int maxt,index;
for(i=0;i<num-1;i++)
{
index=i;
maxt=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
for(j=i+1;j<num;j++)
{
if(stu[j].score[0]+stu[j].score[1]+stu[j].score[2]<maxt)
{
maxt=stu[j].score[0]+stu[j].score[1]+stu[j].score[2];
index=j;
}
}
temp=stu[i];
stu[i]=stu[index];
stu[index]=temp;
}
}
void printfail(int num)//打印不及格
{
int i,j;
int no=0;
for(i=0;i<num;i++)
{
for(j=0;j<3;j++)
{
if(stu[i].score[j]<60)
{
no++;
printf("输出第%d个不及格学生记录\n",no);
printf("id:%d\n",stu[i].id);
printf("name:%s\n",stu[i].name);
printf("birth:%s\n",stu[i].birth);
printf("score1:%d\n",stu[i].score[0]);
printf("score2:%d\n",stu[i].score[1]);
printf("score3:%d\n",stu[i].score[2]);
break;
}
}
}
if(no==0)
{
printf("没有不及格的学生\n");
}
}
void sortage(int num)//按年龄排序
{
student temp;
int i,j;
int index;
char birthtemp[30];
for(i=0;i<num-1;i++)
{
index=i;
strcpy(birthtemp,stu[i].birth);
for(j=i+1;j<num;j++)
{
if(strcmp(birthtemp,stu[j].birth)<0)
{
strcpy(birthtemp,stu[j].birth);
index=j;
}
}
temp=stu[i];
stu[i]=stu[index];
stu[index]=temp;
}
}
int main()
{
int n=2;//指定要输入的学生记录数目 这取2个为例
input(2);
output(2);
meansore(2);
printfail(2);
sortmean(2);
output(2);
sortage(2);
output(2);
return 0;
}
我机器上是可以运行的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-14

按照你的要求做的!看看吧!

注意自己改下文本文档的名字。为了方便我没有使用你要求的名字。

#include<stdio.h>

#include<stdlib.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;i<10;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;i<9;i++)

  for(j=0;j<10-i;j++)

   if(a[j].total<a[j+1].total)

   {

        b=a[j];

     a[j]=a[j+1];

     a[j+1]=b;

   }

   printf("\n编号  姓名  性别  5km  俯卧撑  仰卧起坐  400m游泳  总分\n");

   for(i=0;i<10;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");

}

第2个回答  2010-12-14
#include <stdio.h>
#include <malloc.h>

typedef struct StudentRecord
{
char Num[10] ;
char Name[10] ;
char Sex[3] ;
float Score1 ;
float Score2 ;
float Score3 ;
float Score4 ;
float SumScore ;
}StudentRecord ;

int main()
{
int i,j ;
StudentRecord temp ;

int m ;
printf("请输入学生记录个数:\n") ;
scanf("%d",&m) ;

StudentRecord *p=(StudentRecord *)malloc(m*sizeof(StudentRecord)) ;

printf("请依次输入%d组学生记录:\n",m) ;
for (i=0;i<m;i++)
{
scanf("%s %s %s",p[i].Num,p[i].Name,p[i].Sex) ;
scanf("%f%f%f%f",&p[i].Score1,&p[i].Score2,&p[i].Score3,&p[i].Score4) ;
p[i].SumScore=p[i].Score1+p[i].Score2+p[i].Score3+p[i].Score4 ;
}

for (i=0;i<m;i++)
{
for (j=i+1;j<m;j++)
{
if (p[i].SumScore<p[j].SumScore)
{
temp=p[i];
p[i]=p[j] ;
p[j]=temp;
}
}
}

printf("编号\t姓名\t性别\t5km\t俯卧撑\t仰卧起坐\t400m游泳\t总分\t") ;
for (i=0;i<m;i++)
{
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",p[i].Num,p[i].Name,p[i].Sex,p[i].Score1,p[i].Score2,p[i].Score3,p[i].Score4,p[i].SumScore) ;
}

return 0;
}

输入示例:

请输入学生记录个数:
10
请依次输入10组学生记录:
01 张一 男 78 91 89 78
02 张二 女 80 68 59 75
03 张三 男 68 56 58 49
04 张四 男 56 45 78 89
05 张五 男 89 89 88 78
06 王一 女 75 89 46 68
07 王二 女 51 87 91 57
08 王三 男 48 78 84 68
09 王四 男 70 55 65 67
10 王五 男 61 68 65 66
编号 姓名 性别 5km 俯卧撑 仰卧起坐 400m游泳 总分
01 张一 男 78.00 91.00 89.00 78.00 344.00
02 张二 女 80.00 68.00 59.00 75.00 336.00
03 张三 男 68.00 56.00 58.00 49.00 286.00
04 张四 男 56.00 45.00 78.00 89.00 282.00
05 张五 男 89.00 89.00 88.00 78.00 278.00
06 王一 女 75.00 89.00 46.00 68.00 278.00
07 王二 女 51.00 87.00 91.00 57.00 268.00
08 王三 男 48.00 78.00 84.00 68.00 260.00
09 王四 男 70.00 55.00 65.00 67.00 257.00
10 王五 男 61.00 68.00 65.00 66.00 231.00

Process returned 0 (0x0) execution time : 10.594 s
Press any key to continue.
第3个回答  2010-12-15
结构体+排序

要求用c语言编写,将总分排序(由高到低),并按总分从高到低输出成绩表
printf("输入第%d个学生记录的第二门功课成绩:",i+1);scanf("%d",&stu[i].score[1]);printf("输入第%d个学生记录的第三门功课成绩:",i+1);scanf("%d",&stu[i].score[2]);} } void output(int num)\/\/输出记录 { for(int i=0;i<num;i++){ printf("开始输出第%d个学生记录...

要求用c语言编写,将总分排序(由高到低),并按总分从高到低输出成绩表
} printf("\\n编号 姓名 性别 5km 俯卧撑 仰卧起坐 400m游泳 总分\\n");for(i=0;i<10;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");...

c语言编程,根据分数划分成绩
1. 要求利用C语言面向过程的编程思想来完成系统的设计; 2. 突出C语言的函数特征,以多个函数实现每一个子功能; 3. 画出功能模块图; 4. 进行简单界面设计,能够实现友好的交互; 5. 具有清晰的程序流程图和数据结构的详细定义; 6. 熟练掌握C语言对文件的各种操作。 创新要求: 在基本要求达到后,可进行创新设计,...

用C语言编程:从键盘输入10个学生的成绩,由高到低排序输出成绩
} cout << "成绩由高到低为;";for (i = 0; i<10; i++)cout << s[i]<<"\\t" ;} 以下为效果图

C语言编程成绩排序输出
printf("姓名 英语 计算机原理 统计学原理 政治 C语言 总分 平均分\\n");for(l=0;l<6;l++){printf("%s %5d%5d%5d%5d%5d%5d%5d\\n",p[l].a,p[l].i,p[l].j,p[l].k,p[l].m,p[l].n,p[l].x,p[l].x\/5);} for(l=0;l<6;l++)for(b=0;b<6;b+...

C语言 学生成绩管理系统
void printc() \/* 本函数用于输出中文 *\/ { printf(" 学号\\t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分\\n"); } void printe(Node *p)\/* 本函数用于输出英文 *\/ { printf("%-12s%s\\t%s\\t%d\\t%d\\t%d\\t %d\\t %d\\n",p->data.num,p->data.name,p->data.sex,p->data.egrade...

用c语言编写程序实现该评奖过程,输出得奖的情况
int sum = 0;\/\/总分 int score ; \/\/分数 int least = 0; \/\/最低分 int highest = 0; \/\/最高分 int i;for(i =0; i< m; i++){ printf("请输入第 %d 个评委的分数:\\n",i);scanf("%d",&score);sum = sum + score;if(score > highest) highest = score; \/\/最高...

c语言如何编写一个输出学生成绩等级的程序?
c语言:C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序...

求大佬帮写一个结构体按总分排序并输出的C语言程序,急急急!?
cout << "编程: " << arr[i].cyy << "\\t";cout << "总分: " << arr[i].all << endl;} } \/\/ 排序: 升序 void sorts(student arr[], int row) { for (int l = 0; l < row - 1; l++) { for (int i = 0; i < row - l - 1; i++) { if (arr[i].all...

求c语言输入一个学生五门成绩,然后计算、输出该学生总成绩、平均成绩...
include <stdio.h>#define N 5 \/\/科目数\/*主程序*\/ int main(){ float a[N+3]={0};\/\/定义成绩数组.a[0-(N-1)]:N科成绩 \/\/a[N]:总分,a[N+1]:平均分,a[N+2]:最高分 int i; for(i=0;i!=N;++i){\/\/输入N科成绩 scanf("%f",&a[i]); if(a...

相似回答