📄 find.c
字号:
#include<stdio.h>
#define size 20
struct student
{int num;
char name[10];
int a[6];
float ave;
}stud[20],q;
void find(int a)
{FILE *fp1;
int i,j,g,c,d,top,bott,mid,flag=1,sign,loca,k=1;
if((fp1=fopen("score.txt","r"))==NULL)
{printf("cannot open file\n"); /*读入文件数据*/
return;
}
for(i=0;i<size;i++)
fread(&stud[i],sizeof(struct student),1,fp1);
if(a==1)
{for(i=0;i<size;i++)
for(j=i+1;j<size;j++)
if(stud[i].a[0]>stud[j].a[0])
{q=stud[i];
stud[i]=stud[j];
stud[j]=q;
}
printf("\n\n\n\n\n\n\n\n");
printf("-------------------------------------------------------------------------------\n");
printf("*******************************************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* Input an English score to look for:.... *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("*******************************************************************************\n");
printf("-------------------------------------------------------------------------------\n");
while(flag)
{ scanf("%d",&g);
clrscr();
sign=0;
top=0;
bott=size-1;
if((g<stud[0].a[0])||(g>stud[19].a[0]))
loca=-1;
while((!sign)&&(top<=bott))
{ mid=(bott+top)/2;
if(g==stud[mid].a[0])
{loca=mid;
printf("________________________________________________________________________________\n");
printf("********************************************************************************\n\n\n");
printf("Place NUM NAME Eng score-Eng Phy score-Phy Mat score-Mat Ave\n\n");
printf(" %-5d%3d %-9s%-9d%-6d%-10d%-6d%-10d%-5d%6.2f\n\n",k++,stud[loca].num,stud[loca].name,stud[loca].a[0],
stud[loca].a[1],stud[loca].a[2],stud[loca].a[3],stud[loca].a[4],stud[loca].a[5],stud[loca].ave);
printf("-------------------------------------------------------------------------------\n");
sign=1;
}
else if(g<stud[mid].a[0])
bott=mid-1;
else
top=mid+1;
}
if(!sign||loca==-1)
printf("cannot find \n");
flag=0;
}
}
/*先按英语成绩从小到大排序,然后用二分法查找*/
else if(a==2)
{for(i=0;i<size;i++)
for(j=i+1;j<size;j++)
if(stud[i].a[2]>stud[j].a[2])
{q=stud[i];
stud[i]=stud[j];
stud[j]=q;
}
printf("\n\n\n\n\n\n\n\n");
printf("-------------------------------------------------------------------------------\n");
printf("*******************************************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* Input an Physic score to look for:.... *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("*******************************************************************************\n");
printf("-------------------------------------------------------------------------------\n");
while(flag)
{scanf("%d",&c);
clrscr();
sign=0;
top=0;
bott=size-1;
if((c<stud[0].a[2])||(c>stud[19].a[2]))
loca=-1;
while((!sign)&&(top<=bott))
{ mid=(bott+top)/2;
if(c==stud[mid].a[2])
{loca=mid;
printf("________________________________________________________________________________\n");
printf("********************************************************************************\n\n\n");
printf("Place NUM NAME Eng score-Eng Phy score-Phy Mat score-Mat Ave\n\n");
printf(" %-5d%3d %-9s%-9d%-6d%-10d%-6d%-10d%-5d%6.2f\n\n",k++,stud[loca].num,stud[loca].name,stud[loca].a[0],
stud[loca].a[1],stud[loca].a[2],stud[loca].a[3],stud[loca].a[4],stud[loca].a[5],stud[loca].ave);
printf("-------------------------------------------------------------------------------\n");
sign=1;
}
else if(c<stud[mid].a[0])
bott=mid-1;
else
top=mid+1;
}
if(!sign||loca==-1)
printf("cannot find \n");
flag=0;
}
}
/*先按物理成绩从小到大排序,然后用二分法查找*/
else if(a==3)
{for(i=0;i<size;i++)
for(j=i+1;j<size;j++)
if(stud[i].a[4]>stud[j].a[4])
{q=stud[i];
stud[i]=stud[j];
stud[j]=q;
}
printf("\n\n\n\n\n\n\n\n");
printf("-------------------------------------------------------------------------------\n");
printf("*******************************************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* Input an Math score to look for:.... *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("*******************************************************************************\n");
printf("-------------------------------------------------------------------------------\n");
while(flag)
{scanf("%d",&d);
clrscr();
sign=0;
top=0;
bott=size-1;
if((d<stud[0].a[4])||(d>stud[19].a[4]))
loca=-1;
while((!sign)&&(top<=bott))
{ mid=(bott+top)/2;
if(d==stud[mid].a[4])
{loca=mid;
printf("________________________________________________________________________________\n");
printf("********************************************************************************\n\n\n");
printf("Place NUM NAME Eng score-Eng Phy score-Phy Mat score-Mat Ave\n\n");
printf(" %-5d%3d %-9s%-9d%-6d%-10d%-6d%-10d%-5d%6.2f\n\n",k++,stud[loca].num,stud[loca].name,stud[loca].a[0],
stud[loca].a[1],stud[loca].a[2],stud[loca].a[3],stud[loca].a[4],stud[loca].a[5],stud[loca].ave);
printf("-------------------------------------------------------------------------------\n");
sign=1;
}
else if(d<stud[mid].a[4])
bott=mid-1;
else
top=mid+1;
}
if(!sign||loca==-1)
printf("cannot find \n");
flag=0;
}
}
/*先按数学成绩从小到大排序,然后用二分法查找*/
fclose(fp1);
printf("1-------------Exit 2----------------Back\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -