您的位置:首页 > 其它

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

2012-03-07 14:03 507 查看
从该文件读出学生信息数据,按成绩从高到底排序,并输出其中成绩次高者的所有数据。

#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  河南省      79
10903070102  郭靖      男 19851009  江苏省      85
10903070103  黄蓉      女 19851009  江苏省      98
10903070104  杨康      男 19851009  河北省      60
10903070105  令狐冲    男 19851009  河北省      88
10903070106  任盈盈    女 19851009  河北省      77
10903070107  洪七公    男 19851009  河南省      64
10903070108  欧阳锋    男 19851009  福建省      67
10903070109  阿紫      女 19851009  广西省      82
10903070110  段誉      男 19851009  云南省      69
10903070111  梅超风    女 19851009  广西省      72
10903070112  穆念慈    女 19851009  陕西省      69
10903070113  霍青桐    女 19851009  四川省      81
10903070114  陈家洛    男 19851009  四川省      73
10903070115  香香公主  女 19851009  西藏自治区  85
10903070116  乔峰      男 19851009  山东省      78
10903070117  虚竹      男 19851009  山东省      85
10903070118  王语嫣    女 19851009  湖北省      83
10903070119  张无忌    男 19851009  湖北省      78
10903070120  张翠山    男 19851009  湖北省      79
10903070121  殷素素    女 19851009  湖南省      65
10903070122  谢逊      男 19851009  四川省      86
10903070123  杨逍      男 19851009  贵州省      71
10903070124  纪晓芙    女 19851009  四川省      65
10903070125  赵敏      女 19851009  辽宁省      64
10903070126  杨过      男 19851009  陕西省      76
10903070127  小龙女    女 19851009  江西省      81
10903070128  胡斐      男 19851009   湖南省     80
10903070129  袁紫衣    女 19851009  广东省      91
10903070130  凤天南    男 19851009  陕西省      76
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐