帮我用c语言写一个程序,有10个数按由大到小顺序存放在一个数组中,输人一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
时间: 2024-09-12 07:08:24 浏览: 92
一维数组在内存中的存放-c语言谭浩强
以下是一个使用C语言实现的折半查找法程序,该程序会将10个已经按照降序排列的数存放在数组中,然后用户输入一个数,程序会输出这个数在数组中的位置,如果不存在则输出“无此数”。
```c
#include <stdio.h>
// 折半查找函数
int binarySearch(int arr[], int left, int right, int x) {
while (left <= right) {
int mid = left + (right - left) / 2;
// 检查x是否在中间位置
if (arr[mid] == x) {
return mid + 1; // 返回位置,数组从1开始计数
}
// 如果x大于中间元素,则只能在左子数组中查找
if (arr[mid] < x) {
right = mid - 1;
} else {
// 否则,x只能在右子数组中查找
left = mid + 1;
}
}
// 如果元素不存在返回0
return 0;
}
int main() {
int arr[10] = {50, 45, 40, 35, 30, 25, 20, 15, 10, 5}; // 已排序的数组
int n = sizeof(arr) / sizeof(arr[0]);
int x;
printf("请输入一个数:");
scanf("%d", &x);
int result = binarySearch(arr, 0, n - 1, x);
if (result == 0) {
printf("无此数\n");
} else {
printf("该数是数组中第%d个元素的值\n", result);
}
return 0;
}
```
在这个程序中,我们首先定义了一个名为`binarySearch`的函数,它通过折半查找的方式在数组中查找给定的数。`main`函数中初始化了一个降序排列的数组,并提示用户输入一个数,然后调用`binarySearch`函数查找该数。查找成功会返回数组中的位置,查找失败会返回0,并在`main`函数中输出相应的信息。
阅读全文