用c语言实现有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找#找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
时间: 2024-10-11 09:08:11 浏览: 29
在C语言中,你可以使用折半查找(也称二分查找法)来寻找特定数值在一个有序数组中的位置。以下是实现这个功能的一个基本步骤:
```c
#include <stdio.h>
// 定义二分查找函数
int binarySearch(int arr[], int n, int target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 计算中间索引
if (arr[mid] == target) { // 找到目标数
return mid;
} else if (arr[mid] > target) { // 数组左半部分大于目标,缩小范围到左半部分
right = mid - 1;
} else { // 数组左半部分小于目标,缩小范围到右半部分
left = mid + 1;
}
}
// 如果没找到目标数,返回-1表示“无此数”
return -1;
}
int main() {
int numbers[15]; // 假设已填充了15个从大到小的数
int size = sizeof(numbers) / sizeof(numbers[0]); // 获取数组长度
int num_to_find;
printf("请输入一个数字:");
scanf("%d", &num_to_find);
int index = binarySearch(numbers, size, num_to_find);
if (index != -1)
printf("数 %d 在数组中的位置是 %d\n", num_to_find, index + 1); // 注意加1是因为数组下标从0开始
else
printf("无此数\n");
return 0;
}
```
在这个程序中,首先读取用户输入的目标数,然后调用 `binarySearch` 函数进行查找。如果找到目标数,返回其在数组中的正确位置;如果没有找到,则返回 `-1` 并输出相应信息。
阅读全文