#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define N 4
//8.15 写几个函数:①输个职工的姓名和职工号
//②按职工号由小到大顺序排序, 姓名顺序也随之调整;
//③要求输入一个职工号,用折半法找出该职工的姓名,从 主函数输入要查找的职工号,输出该职工姓名。
```c
struct people{
int pid;
char name[20];
};
void input(struct people p[N])
{
//输入职工
int i=0;
for(i=0;i<N;i++)
{
// printf("请输入第%d个人的工号和名字(工号 名字):\n",i+1);
scanf("%d %s",&p[i].pid,&p[i].name);
}
}
void sort(struct people p[N])
{
// 进行排序
int i,j,k;
char temp[20];
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(p[j].pid>p[j+1].pid)
{
k = p[j].pid;
p[j].pid = p[j+1].pid;
p[j+1].pid = k;
strcpy(temp,p[j].name);
strcpy(p[j].name,p[j+1].name);
strcpy(p[j+1].name,temp);
}
}
}
}
void output(struct people p[N])
{
int i=0;
for(i=0;i<N;i++){
printf(" %d %s ",p[i].pid,p[i].name);
}
}
char *find(struct people p[N],int low,int high,int pid)
{
char *name;
name = (char *)malloc(20);
int mid = (low+high)/2;
while(low<=high)
{
if(p[mid].pid == pid)
{
strcpy(name,p[mid].name);
return name;
}else if(pid> p[mid].pid)
{
low = mid +1;
mid = (low+high)/2;
}else if(pid < p[mid].pid)
{
high = mid-1;
mid = (high+low)/2;
}
}
printf("未找到!");
}
int main()
{
struct people p[N];
int pid;
input(p);
sort(p);
printf("请输入要查询的id:\n");
scanf("%d",&pid);
char *temp = find(p,0,N-1,pid);
puts(temp);
output(p);
return 0;
}