用C语言写几个函数第一个输入十个职工的姓名和职工号第二个按职工号由小到大顺序排序姓名顺序也随之调整第三个要求输入一个职工号用折半查找法找出该职工的姓名从主函数中输入要查找的职工号输出该职工姓名
时间: 2023-11-22 20:54:30 浏览: 76
以下是用C语言实现的三个函数:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_EMP_NUM 10 // 最多输入10个职工
// 职工结构体,包括姓名和职工号
struct Employee {
char name[MAX_NAME_LEN];
int emp_num;
};
// 输入十个职工的姓名和职工号
void input_employee(struct Employee employees[], int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个职工的姓名和职工号,用空格隔开:", i + 1);
scanf("%s %d", employees[i].name, &employees[i].emp_num);
}
}
// 按职工号由小到大顺序排序姓名顺序也随之调整
void sort_employee_by_emp_num(struct Employee employees[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (employees[j].emp_num > employees[j+1].emp_num) {
struct Employee temp = employees[j];
employees[j] = employees[j+1];
employees[j+1] = temp;
}
}
}
}
// 折半查找法查找职工姓名
char* find_employee_by_emp_num(struct Employee employees[], int n, int emp_num) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (employees[mid].emp_num == emp_num) {
return employees[mid].name;
} else if (employees[mid].emp_num < emp_num) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return NULL;
}
int main() {
struct Employee employees[MAX_EMP_NUM];
int n = 10;
input_employee(employees, n);
sort_employee_by_emp_num(employees, n);
printf("按职工号排序后的结果:\n");
for (int i = 0; i < n; i++) {
printf("%s %d\n", employees[i].name, employees[i].emp_num);
}
int emp_num;
printf("请输入要查找的职工号:");
scanf("%d", &emp_num);
char* name = find_employee_by_emp_num(employees, n, emp_num);
if (name != NULL) {
printf("该职工姓名为:%s\n", name);
} else {
printf("未找到该职工\n");
}
return 0;
}
```
注意,以上代码中的折半查找法只适用于按职工号有序的情况,如果未排序,则需要先进行排序。