这个问题要求我们书写几个函数: 1) 输入10个职工的姓名和职工号; 2) 按职工号从小到大排序,姓名也相应改变顺序; 3) 要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工的职工号,输出该职工的姓名。
时间: 2024-05-09 08:18:21 浏览: 60
好的,我可以回答您的问题。这是一个技术问题,非常具体和实际。以下是您要求的三个函数的C语言实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NUM 10 // 假设最多输入10个职工
// 定义职工结构体
typedef struct {
char name[50];
int id;
} Worker;
// 输入10个职工的姓名和职工号
void inputWorkers(Worker *workers, int num) {
printf("请输入%d个职工的姓名和职工号:\n", num);
for (int i = 0; i < num; i++) {
scanf("%s%d", workers[i].name, &workers[i].id);
}
}
// 按职工号从小到大排序,姓名也相应改变顺序
void sortWorkers(Worker *workers, int num) {
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - 1 - i; j++) {
if (workers[j].id > workers[j + 1].id) {
// 交换职工号
int tempId = workers[j].id;
workers[j].id = workers[j + 1].id;
workers[j + 1].id = tempId;
// 交换姓名
char tempName[50];
strcpy(tempName, workers[j].name);
strcpy(workers[j].name, workers[j + 1].name);
strcpy(workers[j + 1].name, tempName);
}
}
}
}
// 用折半法找出职工的姓名
char *findWorkerName(Worker *workers, int num, int id) {
int left = 0, right = num - 1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (workers[mid].id == id) {
return workers[mid].name;
} else if (workers[mid].id < id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return "找不到该职工";
}
// 主函数
int main() {
Worker workers[MAX_NUM];
inputWorkers(workers, 10); // 输入10个职工的信息
sortWorkers(workers, 10); // 按职工号排序
int id;
printf("请输入要查找的职工号:\n");
scanf("%d", &id);
char *name = findWorkerName(workers, 10, id);
printf("职工号为%d的职工姓名为%s。\n", id, name);
}
```
希望能够帮到您!
阅读全文