请用C语言写出俩个函数实现以下功能并在主函数中调用这俩个函数 ①输人10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。
时间: 2024-12-17 18:44:15 浏览: 21
在C语言中,我们可以创建一个结构体来表示职工的信息,并编写两个函数分别处理输入数据和折半查找。首先,我们需要定义一个结构体`Worker`,然后编写`input_workers`函数用于输入数据,`binary_search`函数实现折半查找。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义职工信息结构体
typedef struct {
char name[50];
int id;
} Worker;
// 输入10名职工信息
void input_workers(Worker workers[], int size) {
for (int i = 0; i < size; ++i) {
printf("请输入职工 %d 的姓名和职工号:", i + 1);
scanf("%s%d", workers[i].name, &workers[i].id);
}
}
// 按职工号排序
void sort_workers(Worker workers[], int size) {
int i, j;
for (i = 0; i < size - 1; ++i) {
for (j = 0; j < size - 1 - i; ++j) {
if (workers[j].id > workers[j + 1].id) {
// 交换工人信息
char temp_name[50];
strcpy(temp_name, workers[j].name);
workers[j].name = workers[j + 1].name;
strcpy(workers[j + 1].name, temp_name);
int temp_id = workers[j].id;
workers[j].id = workers[j + 1].id;
workers[j + 1].id = temp_id;
}
}
}
}
// 折半查找函数
char* binary_search(int target_id, Worker workers[], int size) {
int left = 0, right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (workers[mid].id == target_id) {
return workers[mid].name;
} else if (workers[mid].id < target_id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return "找不到对应的职工";
}
int main() {
const int num_workers = 10;
Worker workers[num_workers];
// 输入职工信息
input_workers(workers, num_workers);
// 排序职工信息
sort_workers(workers, num_workers);
// 用户输入查询职工号
int search_id;
printf("请输入要查找的职工号:");
scanf("%d", &search_id);
// 查找并打印职工姓名
char* found_name = binary_search(search_id, workers, num_workers);
if (found_name != NULL) {
printf("找到的职工姓名为:%s\n", found_name);
} else {
printf("找不到对应职工。\n");
}
return 0;
}
```
在这个程序中,我们首先输入10名职工的信息,然后对职工按照职工号进行排序,最后用户可以输入一个职工号,通过折半查找法查找相应的职工姓名。如果查找不到,会显示"找不到对应职工"的信息。
阅读全文