从文件读出学生信息数据,按成绩从高到底排序,并输出其中成绩次高者的所有数据。

来源:互联网 发布:cf手游刷雷神软件 编辑:程序博客网 时间:2024/06/10 03:40
#include <stdio.h>
#include <stdlib.h>


typedef struct student
{
    char    number[20];
    char    name[20];
    char    sex[10];
    char    birth[20];
    char    province[20];
    int     score;
    struct  student *next;
}student;




void getSecond(student *s[],int sn);
void sort(student *s[],int sn);




int main()
{
    FILE* fd;
    int flag = 0;
    int sn = 5;//读取前面十个学生的信息
student  *s[5];




    //申请内存空间
    for(;flag<sn;flag++)
    {
        s[flag] = (student *) malloc(sizeof(student));
    }


    //打开文件
    if((fd = fopen("d:\g.txt","r"))==NULL)
    {
        printf("文件读取失败.\n");
        return 0;


    }
    printf("文件读取成功.\n");


    //读取文件
    for( flag = 0; flag < sn; flag++)
    {
        fscanf(fd,"%s%s%s%s%s%d",s[flag]->number,s[flag]->name,s[flag]->sex,
                                s[flag]->birth,s[flag]->province,&s[flag]->score);


        printf("%s%16s%8s%16s%16s%8d\n",s[flag]->number,s[flag]->name,s[flag]->sex,
                                        s[flag]->birth,s[flag]->province,s[flag]->score);
    }


    //关闭文件
    fclose(fd);


    getSecond(s,sn);//输出成绩第二的学生信息
    sort(s,sn);//按照分数高低输出所有学生信息






    return 0;


}






void getSecond(student *s[],int sn)
{
    //寻找次高分数的学生信息
    int ranking = 1 ;
    int i,j;


    for(i = 0; i < sn; i++)
    {
        for(j = 0; j<sn; j++)
        {
            if(s[i]->score > s[j]->score) ranking++;
        }


        if(ranking == sn ) break;//sn-1表示次高分数标志
        else ranking = 1;
    }


    printf("\n");
    printf("%s%16s%8s%16s%16s%8d\n",s[i]->number,s[i]->name,s[i]->sex,
                                    s[i]->birth,s[i]->province,s[i]->score);


}




void sort(student *s[],int sn)
{
    student * temp;
    int i=0,j=0;
    for( ;i<sn-1; i++)
    {
        for(j = i; j<sn; j++)
        {
            if(s[i]->score < s[j]->score)
            {
                temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
        }


    }


    printf("\n");


    //输出所有排序后学生的信息
    for(i=0;i<sn;i++)
    {
       printf("%s%16s%8s%16s%16s%8d\n",s[i]->number,s[i]->name,s[i]->sex,
                                    s[i]->birth,s[i]->province,s[i]->score);
    }




}
原创粉丝点击