用c语言实现输入有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找#找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
时间: 2024-10-11 08:08:13 浏览: 26
在C语言中,我们可以使用二分查找算法(折半查找)来解决这个问题。下面是一个简单的步骤说明:
1. 定义一个函数 `binary_search`,接受两个参数:存储数的数组 `arr` 和数组长度 `n`。
```c
#include <stdio.h>
int binary_search(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;
}
```
2. 主程序部分,首先接收用户输入的15个数并排序(这里假设输入的数已经是有序的),然后调用 `binary_search` 函数。
```c
int main() {
int arr[15], i;
printf("请输入15个数字按降序排序:\n");
for (i = 0; i < 15; i++) {
scanf("%d", &arr[i]);
}
// 排序数组(这里简化,实际应用中可能需要其他排序函数)
sort(arr, arr+15); // 假设sort函数存在
int target, index;
printf("请输入要查找的数字:");
scanf("%d", &target);
index = binary_search(arr, 15, target);
if (index != -1)
printf("目标数在数组中的位置是 %d\n", index+1);
else
printf("无此数\n");
return 0;
}
阅读全文