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

来源:互联网 发布:手机写字板软件 编辑:程序博客网 时间:2024/06/10 04:21

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

#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 = 10;//读取前面十个学生的信息    student * s[sn];    //申请内存空间    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);    }}


本文需要注意的是:

1、文件的读写:

打开文件:

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

fscanf是按照一定的格式输入,本文里面的数据格式为:10903070101  张三丰  男 19851009  河南省  79

        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);    }

3、d:\g.txt文件内容如下:

10903070101  张三丰    男 19851009  河南省      7910903070102  郭靖      男 19851009  江苏省      8510903070103  黄蓉      女 19851009  江苏省      9810903070104  杨康      男 19851009  河北省      6010903070105  令狐冲    男 19851009  河北省      8810903070106  任盈盈    女 19851009  河北省      7710903070107  洪七公    男 19851009  河南省      6410903070108  欧阳锋    男 19851009  福建省      6710903070109  阿紫      女 19851009  广西省      8210903070110  段誉      男 19851009  云南省      6910903070111  梅超风    女 19851009  广西省      7210903070112  穆念慈    女 19851009  陕西省      6910903070113  霍青桐    女 19851009  四川省      8110903070114  陈家洛    男 19851009  四川省      7310903070115  香香公主  女 19851009  西藏自治区  8510903070116  乔峰      男 19851009  山东省      7810903070117  虚竹      男 19851009  山东省      8510903070118  王语嫣    女 19851009  湖北省      8310903070119  张无忌    男 19851009  湖北省      7810903070120  张翠山    男 19851009  湖北省      7910903070121  殷素素    女 19851009  湖南省      6510903070122  谢逊      男 19851009  四川省      8610903070123  杨逍      男 19851009  贵州省      7110903070124  纪晓芙    女 19851009  四川省      6510903070125  赵敏      女 19851009  辽宁省      6410903070126  杨过      男 19851009  陕西省      7610903070127  小龙女    女 19851009  江西省      8110903070128  胡斐      男 19851009   湖南省     8010903070129  袁紫衣    女 19851009  广东省      9110903070130  凤天南    男 19851009  陕西省      76