谭浩强例题,关于数组的运用和函数调用
采用折半查找法,输入一个员工的number找到他的名字,但输入要输两次,还有就是GETCHAR()是干什么用(下面已注)#include <stdio.h>
#include<string.h>
void main()
{
void input(char x[][10],int y[]);
void array(char x[][10],int y[]);
void search(int k,int y[],char x[][10]);
int n;
char name[10][10];
int arr[10];
input(name,arr);
array(name,arr);
printf("input the number:");
scanf("%d",&n);
search(n, arr,name);
}
void input(char x[][10],int y[])
{
int i;
for(i=0;i<10;i++)
{
printf("input the name:");
getchar();(这句的作用是什么???不解,如果没有这句运行就不正常。)
gets(x[i]);
printf("input the number :");
scanf("%d",&y[i]);
}
}
void array(char x[][10],int y[])(重新排序是否有问题?运行感觉还是没有排序???)
{
int i,j;
int min;
char t2[8];
int t1;
for(i=0;i<10;i++)
{
min=i;
for(j=i;j<10;j++)
{
if(y[min]>y[j])
min=j;
}
t1=y[i];
strcpy(t2,x[i]);
y[i]=y[min];
strcpy(x[i],x[min]);
y[min]=t1;
strcpy(x[min],t2);
}
printf("\n result \n");
for(i=0;i<10;i++)
printf("\n%5d%10s",y[i],x[i]);
}
void search(int k,int y[],char x[][10])
{
int mid,top,bottom,flag=0;
scanf("%d",&k);
top=10;
bottom=0;
if(k>y[top]&&k<y[bottom])
printf("there is nothing");
while(flag==0&&bottom<=top)
{
mid=(top+bottom)/2;
if(k<y[mid])
top=mid-1;
else if(k>y[mid])
bottom=mid+1;
else
{
printf("%d is %s",k,x[mid]);
flag=1;
}
}
}