设名为“d:\S_total.dat”的二进制文件中按照下列结构型,依次存放了100个学生的信息。编一个程序,从中找出总分最高和
设名为“d:\S_total.dat”的二进制文件中按照下列结构型,依次存放了100个学生的信息。编一个程序,从中找出总分最高和总分最低的学生,并且输出它们的学号、姓名和总分。
struct{longnum;charname[20];floattotal;};
【正确答案】:#include
struct student
{long num;
char name[20];
float total;
}st[2],stud;
void main()
{FILE*fp;
int i,max,min;
if((fp=fopen("d.\s_total.dat",t.rb"))==NULL)/*打开文件*/
{pfintf("Can not open file!\n");exit(0);}
fread(&st[0],sizeof(struct student),1,fp);/*读出第一个学生的信息作为初值进行赋值*/
fread(&st[1],sizeof(struct student),1,fp);
for(i=0;i<100;i++)
{ fseek(fp,sizeof(struct student)*i,0);/*文件中数据逐一进行定位查找后进行判断*/
fread(&stud,sizeof(struct student),1,fp);
if(stud.totalst[i].total){st[1].total=stud.total;max=i;}
}
fseek(fp,sizeof(stmct student)*min,0);
fread(&st[0],sizeof(struct student),1,fp);/*按记录的位置进行数据读取*/
fseek(fp,sizeof(stmct student)*max,0);
fread(&st[1],sizeof(struct student),1,fp);
printf("最好成绩学生姓名:%s,学号:%ld,成绩:%f\n”,st[1].name,st[1].Bum,st[1].total);
printf("最差成绩学生姓名:%s,学号:%ld,成绩:%f\n",st[0].name,st[0].Bum,st[0].total);
fclose(fp);/*关闭文件*/
}