C语言的折半查找法

2025-01-01 12:22:08
推荐回答(2个)
回答1:

两个错误!
运行成功的代码:
#include
#include
main()
{

char name[10][10],a[10];
int num[10],i,j,min,t,max,mi,mid,x,flag=0;

for(i=0;i<10;i++)
{ printf("输入职工姓名\n");
scanf("%s",&name[i]);
printf("输入职工的工号\n");
scanf("%d",&num[i]);

}
for(i=0;i<=9;i++)

{min=i;

for(j=i;j<10;j++)

if(num[j]
min=j;

t=num[i];

num[i]=num[min];
num[min]=t;
strcpy(a,name[i]);
strcpy(name[i],name[min]);
strcpy(name[min],a);
}

for(i=0;i<10;i++)
printf("%s,%d\n",name[i],num[i]);

printf("输入你所要查找的那个职工号\n");
scanf("%d",&x);//scanf用法取地址符
max=9;
mi=0;
mid=(max+mi)/2;
for(i=0;i<=9;i++)//你这儿i=0没有,那么i在上一个for循环后值为9,压根没查找
{
if(num[mid]==x)
{flag=1;break;}
if(num[mid]>x)
max=mid,mid=(max+mi)/2;
if (num[mid] mi=mid,mid=(max+mi)/2;
}
if(flag)
puts(name[mid]);
else if(flag==0)
printf("error");
}
代码有完善的地方,我只是改了你两个错误。

回答2:

少个取地址符,其他没有错

scanf("%d",&);