写几个函数:1、输入10个职工的姓名和职工号2、按职工号由小到大顺序排序,姓名顺序也随之调整3、要求输入一个职工号,用折半法找到该职工姓名,从主函数输入要查找的职工号,输出该职工姓名

 根据题目,我们可以先来想一想思路:题目要求我们写三个函数,要输入10个职工的工号和姓名,那肯定用数组来储存这些信息,每个职工都有不同的姓名和工号,所以这时候结构体几乎是一个完美的选择,因为它在一定程度上可以将相应的姓名和工号“绑在一起”,从而来实现我们的代码。

第二,排序我们很熟悉了,那结构体里面交换就不能单纯的定义一个普通变量,需要一个结构体变量作为交换值,记住访问结构体变量要用'.'操作符。

三,我们要知道折半法的原理,看代码大概是可以看出来它是怎么回事,如果没有这个员工的话,最后的low>high。所以加上if-else语句更符合习惯。

#include<stdio.h>
struct stuff//定义一个结构体,这里面包括职员的工号和姓名
{
  int id;
  char name[10];//储存人的名字,不能写成name,要不然每个人的名字只能是一个字符
};
void input(struct stuff stu[]);
void sort(struct stuff stu[]);
void find(struct stuff stu[],int id);

int main()
{
  struct stuff stu[10];//定义结构体数组和指针
  int id;
  input(stu);
  sort(stu);
  printf("请输入你要查询的职工号:\n");
  scanf("%d",&id);
  find(stu,id);
  return 0;
}



void input(struct stuff stu[])
{
  int i,j;
  for(i=0;i<10;i++)
  {
    printf("输入%d个职工的姓名和职工号\n",i+1);
    scanf("%s %d",stu[i].name,&stu[i].id);
  }

}


void sort(struct stuff stu[])
{
  struct stuff t;//定义一个结构体变量作为交换值
  int i,j;
  for(i=0;i<9;i++)
  {
    for(j=i+1;j<10;j++)
    {
      if(stu[i].id>stu[j].id)
      {
        t=stu[i];
        stu[i]=stu[j];
        stu[j]=t;
      }
    }
  }
  printf("职工号由小到大顺序后:\n");
  for(i=0;i<10;i++)
  {
    printf("职工号:%d,姓名:%s\n",stu[i].id,stu[i].name);
  }
}



void find(struct stuff stu[],int id)
{
  int low=0,high=9,mid;
  while (low<=high)
  {
    mid=(low+high)/2;
    if(id==stu[mid].id)
    break;
    else if(id>stu[mid].id)
    {
      low=mid+1;
    }
    else high=mid-1;
  }
  if(low<=high)
  {
    printf("该员工的名字为:%s\n工号为:%d",stu[mid].name,stu[mid].id);
  }
  else printf("找不到该员工");
  
}
//typedef struct stuff S;//typedef可以将类型和变量名换成别的东西,更简单
// 也可以在定义的时候写
// typedef struct stuff 
// {

// }S;

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值