8 位同学按照成 绩由高到低排序,输出成绩第二高的同学的信息
1.(20 分)有 8 个学生,有如下信息:名字,年龄,成绩。请从键盘输入 8 位
同学的信息,存入文件 cs.txt,再从文件中读取出数据,并对 8 位同学按照成
绩由高到低排序,输出成绩第二高的同学的信息。
2.代码
#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>
#include<iostream>
using namespace std;
typedef struct student//typedef
{
char name[20];//char数组
char age[10];//char数组
int score;
struct student *next;//链表
}student;
void getSecond(student *s[],int sn);//结构体数组
void sort(student *s[],int sn);
int main()
{
//8个学生 申请空间存放
int flag = 0;
int sn = 8;//读取前面十个学生的信息
student* s[8];
for(;flag<sn;flag++)
{
s[flag] = (student *) malloc(sizeof(student));
}
//打开文件
FILE* fd;
if((fd = fopen("E:\\p.txt","w"))==NULL)
{
printf("文件打开失败.\n");
Sleep(80000);
return 0;
}
printf("文件打开写入成功.\n");
//输入信息
SetConsoleOutputCP(65001);
for( flag = 0; flag < sn; flag++)
{
cin>>s[flag]->name;
cin>>s[flag]->age;
cin>>s[flag]->score;
cout<<endl;
}
//写入文件
for( flag = 0; flag < sn; flag++)
{
fprintf(fd,"%s%s%d",s[flag]->name,s[flag]->age,
s[flag]->score);
}
//关闭文件
fclose(fd);
printf("\n");
printf("\n");
SetConsoleOutputCP(936);
printf("输出第二学生信息: ");
SetConsoleOutputCP(65001);
getSecond(s,sn);//777777输出成绩第二的学生信息
printf("\n");
printf("\n");
SetConsoleOutputCP(936);
printf("按照分数高低输出所有学生信息: ");
SetConsoleOutputCP(65001);
sort(s,sn);//777777按照分数高低输出所有学生信息
return 0;
}
void getSecond(student *s[],int sn)
{
int ranking=1;//第一名 0- sn-1 //第二名1--sn-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-1 ) break;//sn-1表示次高分数标志
else ranking = 1;
}
printf("\n");
SetConsoleOutputCP(936);
//输出第二高成绩学生信息
printf("%s%s%d\n",s[i]->name,s[i]->age,
s[i]->score);
}
void sort(student *s[], int sn)
{
student * temp;
int i=0;
int j=0;
SetConsoleOutputCP(65001);
//通过交换实现排序
for( ;i<sn-1; i++)//前sn-1个数,不包括最后一位
{
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");
//把结果写入文件
//打开文件
FILE* fp1;
if((fp1=fopen("E:\\e.txt","w"))==NULL)
{
printf("File open erroe!\n");
exit(0);
}
//打印排序后信息
//输出所有排序后学生的信息
SetConsoleOutputCP(936);
for(i=0;i<sn;i++)
{
printf("%s%s%d\n",s[i]->name,s[i]->age,
s[i]->score);
}
//写入文件中
for(i=0;i<sn;i++)
{
SetConsoleOutputCP(936);
fprintf(fp1,"%s%s%d\n",s[i]->name,s[i]->age,
s[i]->score);
}
//关闭文件
if(fclose(fp1))
{
printf("Cant not close the file! \n");
exit(0);
}
Sleep(10000000);
}