大家好,我是小曜,我来为大家解答以上问题。折半查找c语言递归,折半查找法c语言很多人还不知道,现在让我们一起来看看吧!
1、两个错误!
2、运行成功的代码:
3、#include <stdio.h>
4、#include <string.h>
5、main()
6、{
7、char name[10][10],a[10];
8、int num[10],i,j,min,t,max,mi,mid,x,flag=0;
9、for(i=0;i<10;i++)
10、{ printf("输入职工姓名 ");
11、scanf("%s",&name[i]);
12、printf("输入职工的工号 ");
13、scanf("%d",&num[i]);
14、}
15、for(i=0;i<=9;i++)
16、{min=i;
17、for(j=i;j<10;j++)
18、 if(num[j]<num[min])
19、 min=j;
20、 t=num[i];
21、 num[i]=num[min];
22、 num[min]=t;
23、 strcpy(a,name[i]);
24、 strcpy(name[i],name[min]);
25、 strcpy(name[min],a);
26、 }
27、for(i=0;i<10;i++)
28、 printf("%s,%d ",name[i],num[i]);
29、printf("输入你所要查找的那个职工号 ");
30、scanf("%d",&x);//scanf用法取地址符
31、max=9;
32、mi=0;
33、mid=(max+mi)/2;
34、for(i=0;i<=9;i++)//你这儿i=0没有,那么i在上一个for循环后值为9,压根没查找
35、{
36、 if(num[mid]==x)
37、 {flag=1;break;}
38、 if(num[mid]>x)
39、 max=mid,mid=(max+mi)/2;
40、 if (num[mid]<x)
41、 mi=mid,mid=(max+mi)/2;
42、}
43、if(flag)
44、puts(name[mid]);
45、else if(flag==0)
46、printf("error");
47、}
48、代码有完善的地方,我只是改了你两个错误。
本文到此讲解完毕了,希望对大家有帮助。