发布网友 发布时间:2022-05-12 20:32
共1个回答
热心网友 时间:2023-10-21 15:42
下面是程序:
#include <stdio.h>
#include <string.h>
struct StudentInfo
{
char ID[11];
char name[6];
double score;
}StuInfo[12]=
{
{"0800301105", "JACK", 95},
{"0800201505", "LUN", 85},
{"0400820115", "MARY", 75.5},
{"0400850122", "KATE", 78.9},
{"0500201011", "LILI", 88},
{"0800401105", "JACK", 96},
{"0600830105", "JAN", 98.4},
{"0952520012", "SAM", 75},
{"9721000045", "OSCAR", 64},
{"0700301105", "JACK", 97},
{"0458003312", "ZOE", 68.9},
{"0400830211", "BOBI", 87.6}
};
void main()
{
int i,j,k,flag;
char id[11],name[6];
double score;
for(i=0;i<11;i++)
{
k=i;
for(j=i+1;j<12;j++)
{
if(strcmp(StuInfo[k].ID,StuInfo[j].ID)>0)
k=j;
}
if(k!=i)
{
strcpy(id,StuInfo[i].ID);
strcpy(name,StuInfo[i].name);
score=StuInfo[i].score;
strcpy(StuInfo[i].ID,StuInfo[k].ID);
strcpy(StuInfo[i].name,StuInfo[k].name);
StuInfo[i].score=StuInfo[k].score;
strcpy(StuInfo[k].ID,id);
strcpy(StuInfo[k].name,name);
StuInfo[k].score=score;
}
}
printf("请输入要查找的学号:\n");
scanf("%s",id);
i=0;j=11;
flag=0;//若找到则赋值为1
while(i<=j)
{
k=(i+j)/2;
if(strcmp(StuInfo[k].ID,id)==0)
{
printf("%s %s %g\n",StuInfo[k].ID,StuInfo[k].name,StuInfo[k].score);
flag=1;
break;
}
if(strcmp(StuInfo[(i+j)/2].ID,id)<0)
i=k+1;
else
j=k-1;
}
if(flag==0)
printf("Cannot find it!\n");
for(i=0;i<11;i++)
{
k=i;
for(j=i+1;j<12;j++)
{
if(StuInfo[j].score>StuInfo[k].score)
k=j;
}
if(k!=i)
{
strcpy(id,StuInfo[i].ID);
strcpy(name,StuInfo[i].name);
score=StuInfo[i].score;
strcpy(StuInfo[i].ID,StuInfo[k].ID);
strcpy(StuInfo[i].name,StuInfo[k].name);
StuInfo[i].score=StuInfo[k].score;
strcpy(StuInfo[k].ID,id);
strcpy(StuInfo[k].name,name);
StuInfo[k].score=score;
}
}
printf("请输入要查找的分数:\n");
scanf("%lf",&score);
i=0;j=11;
flag=0;//若找到则赋值为1
while(i<=j)
{
k=(i+j)/2;
if(score==StuInfo[k].score)
{
printf("%s %s %g\n",StuInfo[k].ID,StuInfo[k].name,StuInfo[k].score);
flag=1;
break;
}
if(score<StuInfo[k].score)
i=k+1;
else
j=k-1;
}
if(flag==0)
printf("Cannot find it!\n");
}
下面是一个测试用例截图: