有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值,如果该数不在数组中,则输出“无此数” ,并且可以实现连续查找。15个数用赋初值的方法在程序中给出,要找的数用scanf函数
时间: 2023-09-05 07:05:23 浏览: 185
### 回答1:
好的,以下是使用折半查找法实现的程序。我会在程序中添加注释来解释每一步操作。
```c
#include <stdio.h>
int main()
{
int arr[15] = {2, 3, 5, 7, 9, 11, 13, 14, 15, 16, 19, 20, 21, 23, 25}; // 给定的数组
int left = 0, right = 14, mid, num, count = 0; // 定义左右指针、中间值、要查找的数和查找次数
printf("请输入要查找的数:");
scanf("%d", &num); // 输入要查找的数
while (left <= right) {
mid = (left + right) / 2; // 计算中间值
count++; // 记录查找次数
if (arr[mid] == num) { // 如果中间值等于要查找的数
printf("该数是第%d个元素的值\n", mid + 1); // 输出该数是数组中第几个元素的值
printf("查找了%d次\n", count); // 输出查找次数
return 0; // 结束程序
} else if (arr[mid] > num) { // 如果中间值大于要查找的数
right = mid - 1; // 将右指针移到中间值左侧
} else { // 如果中间值小于要查找的数
left = mid + 1; // 将左指针移到中间值右侧
}
}
printf("无此数\n"); // 如果程序能执行到这里,则说明要查找的数不在数组中
return 0;
}
```
这个程序可以实现连续查找。每次查找完毕后,程序会回到输入要查找的数的步骤,直到用户选择退出程序。
### 回答2:
首先,我们需要将15个数存放在一个数组中。假设数组名为arr。
然后,通过scanf函数输入要查找的数,假设输入的数为target。
接下来,使用折半查找法找出该数在数组中的位置。折半查找法的基本思路是:首先将数组的中间位置的数与要查找的数进行比较,如果相等,则找到了要查找的数;如果不相等,则判断要查找的数是在中间数的左边还是右边,然后将数组的范围缩小一半,再进行比较,如此迭代直到找到要查找的数或者确定要查找的数不在数组中。
具体的算法如下:
1. 初始化变量low为数组的第一个位置,high为数组的最后一个位置。
2. 计算数组的中间位置mid = (low + high) / 2。
3. 判断要查找的数target与数组中间位置的数arr[mid]的关系:
- 如果target等于arr[mid],则找到了要查找的数,输出mid+1,表示该数是数组中第(mid+1)个元素的值。
- 如果target小于arr[mid],则要查找的数在数组的左半部分,令high = mid-1,跳到步骤2。
- 如果target大于arr[mid],则要查找的数在数组的右半部分,令low = mid+1,跳到步骤2。
4. 如果low大于high,则说明要查找的数不在数组中,输出"无此数"。
这样就可以通过折半查找法找出要查找的数在数组中的位置了。
值得注意的是,为了实现连续查找,可以使用一个循环,反复输入要查找的数并进行查找。当要退出查找时,可以根据输入的条件设置一个退出循环的条件。
### 回答3:
首先,我们先将15个数赋初值存放在一个数组中。然后通过scanf函数输入要查找的数。
下面是具体的步骤:
1. 定义一个包含15个元素的整型数组,用来存放这15个数。并且给数组赋初值。
```c
int arr[15] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29};
```
2. 使用scanf函数输入要查找的数。
```c
int target;
printf("请输入要查找的数:");
scanf("%d", &target);
```
3. 定义变量low和high分别表示数组的最低索引和最高索引。
```c
int low = 0;
int high = 14;
```
4. 使用while循环进行折半查找。循环条件是low <= high。
```c
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
printf("要查找的数在数组中第%d个元素\n", mid + 1);
break;
}
else if (arr[mid] < target) {
low = mid + 1;
}
else {
high = mid - 1;
}
}
```
5. 在循环结束后,通过判断low是否大于high来确定要查找的数是否在数组中。如果low > high,则输出"无此数"。
```c
if (low > high) {
printf("无此数\n");
}
```
至此,根据输入的数,我们可以使用折半查找法在数组中找到该数是数组中第几个元素的值。如果该数不在数组中,会输出"无此数"。
阅读全文