好的,我将为您提供一个完整的C语言程序,包括顺序查找和折半查找算法,并将主函数和子函数分开保存。
首先,我们创建两个文件: main.c 和 search.h。
1. search.h (包含函数声明和顺序查找、折半查找的实现)
```c
// search.h
#ifndef SEARCH_H
#define SEARCH_H
#include <stdio.h>
// 顺序查找函数
int sequentialSearch(int arr[], int size, int key);
// 折半查找函数
int binarySearch(int arr[], int size, int key);
#endif // SEARCH_H
```
2. search.c (包含 search.h 并实现具体函数)
```c
// search.c
#include "search.h"
// 顺序查找实现
int sequentialSearch(int arr[], int size, int key) {
for (int i = 0; i < size; i++) {
if (arr[i] == key) {
return i; // 找到返回索引
}
}
return -1; // 未找到返回-1
}
// 折半查找实现
int binarySearch(int arr[], int size, int key) {
int left = 0;
int right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == key) {
return mid; // 找到返回索引
}
if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 未找到返回-1
}
```
3. main.c (包含 main 函数和测试代码)
```c
// main.c
#include <stdio.h>
#include "search.h"
#define SIZE 10
int main() {
int arr[SIZE] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int key, index;
printf("请输入要查找的数: ");
scanf("%d", &key);
// 顺序查找
index = sequentialSearch(arr, SIZE, key);
if (index != -1) {
printf("顺序查找: 找到 %d, 索引为 %d\n", key, index);
} else {
printf("顺序查找: 未找到 %d\n", key);
}
// 折半查找
index = binarySearch(arr, SIZE, key);
if (index != -1) {
printf("折半查找: 找到 %d, 索引为 %d\n", key, index);
} else {
printf("折半查找: 未找到 %d\n", key);
}
return 0;
}
```
要编译和运行这个程序,您需要:
1. 将这三个文件保存在同一目录下。
2. 使用以下命令编译:
```
gcc main.c search.c -o search_program
```
3. 运行编译后的程序:
```
./search_program
```
这个程序首先定义了一个包含10个整数的数组,然后提示用户输入要查找的数。它分别使用顺序查找和折半查找算法来查找该数,并输出结果。
请注意,折半查找要求数组是有序的,所以在使用折半查找之前,数组应该已经排序。在这个例子中,我们直接定义了一个有序数组。