标题:(求找错误!!)学生成绩排名
只看楼主
eva199110
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-31
结帖率:50%
 问题点数:0 回复次数:3 
(求找错误!!)学生成绩排名
【问题描述】
在文件marks.in中有N(1<N<2000)行记录,每个记录由4个字段组成,分别是学生姓名、语文成绩、数学成绩和英语成绩,各个字段之间由空格符或制表符‘\t’分隔。
按总成绩降序输出学生的姓名和总成绩。
总成绩相同时按语文成绩降序排序,语文成绩再相同时按数学成绩降序排序。
各科成绩均相同时按输入文件中记录的先后顺序排序。
【输入形式】
从当前路径下的文件marks.in中读入N行记录。
【输出形式】
将排序后的结果输出到标准输出,姓名和总成绩之间以’\t’分隔。
【输入样例】
aaa 98 85 70
bbb 92 94 88
ccc 65 72 68
【输出样例】
bbb 274
aaa 253
ccc 205

程序:
#include<stdio.h>
#include<stdlib.h>
#define N 2002

typedef struct student              
{
    char name[50];                  
    int yu;
    int shu;
    int ying;
    int sum;
    int order;
}student;                           

int compare(const student *p1,const student *p2);   
struct student stu[N]={{"",0,0,0,0}};

main()
{   
   
    int i=0,n;
    char s[N]="";
    FILE *fp;
    if((fp=fopen("marks.in","r"))==NULL)            
    {
        printf("cannot find the file");
        exit(0);
    }
   
    while(fgets(s, N, fp) !=NULL){

        sscanf(s,"%s%d%d%d",stu[i].name,&stu[i].yu,&stu[i].shu,&stu[i].ying);

    stu[i].sum = stu[i].yu + stu[i].shu + stu[i].ying;
    stu[i].order=i;
        i++;
    }
    n=i;
    for(i=0;i<n-1;i++)
    {
        qsort(stu,n,sizeof(student),compare);    //sizeof (struct score) or sizeof(student)
        printf("%s\t%d\n",stu[i].name,stu[i].sum);
    }
    printf("%s\t%d",stu[n-1].name,stu[n-1].sum);
    fclose(fp);
    return 0;
}
int compare(const student *p1,const student *p2)
{
    if(p1->sum != p2->sum)
        return (p2->sum - p2->sum);
    if(p1->yu != p2->yu)
        return (p2->yu - p1->yu);
    if(p1->shu != p2->shu)
        return (p2->shu - p1->shu);
    return (p1->order - p2->order);
}
搜索更多相关主题的帖子: 英语成绩 制表符 总成绩 数学 学生 
2011-06-18 00:12
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
即使你是美女 也自己调试去

                                         
===========深入<----------------->浅出============
2011-06-18 00:17
eva199110
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-31
得分:0 
回复 2楼 laoyang103
哦好吧,自己调试去^^(ps:是美女的话,你会后悔的~ ~)
2011-06-18 00:25
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
链表排序是把
链表类_C语言.rar (1.71 KB)
这么晚了  还在努力 给你个模板

                                         
===========深入<----------------->浅出============
2011-06-18 00:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-343240-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.575684 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved