3.从键盘输入一整数,然后在一个整型一维数组 a[20]中,用折半查找法找出该数是数 组中第几个元素的值。如果该数不在数组中,则打印”no found”。
时间: 2023-05-31 19:19:36 浏览: 134
### 回答1:
题目意思是:从键盘输入一个整数,然后在一个整型一维数组a[20]中,用折半查找法找出该数是数组中第几个素数的值。如果该数不在数组中,则输出“no found”。
回答:这道题目要求我们用折半查找法在给定的整型数组中找到键盘输入的整数是数组中第几个素数的值。如果键盘输入的整数不在数组中,则输出“no found”。
### 回答2:
折半查找法也被称为二分查找法,是一种高效的查找算法。他的基本思想是利用数组有序排列的规律,不断缩小查找范围,最终找到目标值。
使用折半查找法寻找一个整数在一个整型一维数组a[20]中的位置,可以分以下步骤进行:
1. 从键盘输入要查找的整数。
2. 对给定的一维数组进行排序,排序后的数组可以方便地用于折半查找。
3. 定义左侧和右侧的指针变量,分别指向数组第一个元素和最后一个元素。
4. 判断中间值的大小,如果该值等于要查找的数,返回该元素的下标。
5. 如果该值小于要查找的数,左指针指向中间位置,重复第4步。
6. 如果该值大于要查找的数,右指针指向中间位置,重复第4步。
7. 如果最后左右指针指向的位置重合,则表明要查找的数不在数组中。
下面给出示例程序:
```
#include <stdio.h>
//折半查找函数
int Binary_Search(int a[], int n, int key) {
int lb = 0, ub = n - 1;
int mid;
while (lb <= ub) {
mid = (lb + ub) / 2;
if (a[mid] == key)
return mid;
if (a[mid] < key)
lb = mid + 1;
else
ub = mid - 1;
}
return -1; //如果没找到,返回-1
}
int main() {
int a[20] = {44, 24, 36, 7, 87, 90, 33, 68, 15, 55, 69, 75, 17, 84, 76, 12, 99, 28, 50, 9};
int n = 20;
int key, pos;
printf("请输入要查找的数:");
scanf("%d", &key);
//对数组进行排序,这里使用冒泡排序
for (int i = n - 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
pos = Binary_Search(a, n, key); //调用折半查找函数
if (pos == -1)
printf("no found");
else
printf("%d是数组中第%d个元素\n", key, pos + 1);
return 0;
}
```
在这个程序中,我首先输入了要查找的整数,然后使用冒泡排序对数组进行排序,接着调用折半查找函数,最后根据返回值输出查找结果。如果要查找的数不在数组中,函数将返回-1,程序会输出"no found"。
### 回答3:
折半查找法,也称二分查找法,是一种常见的查找算法。它的核心思想是在有序数组中不断缩小查找范围,直到找到目标元素或者确定目标元素不存在。
在该问题中,我们需要从键盘输入一个整数,然后在一个整型一维数组 a[20] 中查找该数的位置。为了方便演示,这里假设数组已经按照升序排列。
首先,我们需要在程序中输入该整数,可以使用 scanf 函数实现:
```c
int num;
scanf("%d", &num);
```
接下来,我们可以使用一个循环在数组中进行查找,然后根据折半查找法来缩小查找范围,直到找到目标元素或者确定目标元素不存在。
具体实现过程如下:
```c
int left = 0; //查找范围左边界
int right = 19; //查找范围右边界
int mid; //中间位置
while(left <= right)
{
mid = (left + right) / 2; //计算中间位置
if(a[mid] == num) //找到了目标元素
{
printf("%d is found at index %d.\n", num, mid);
break;
}
else if(a[mid] < num) //目标元素在右半边
{
left = mid + 1; //缩小查找范围
}
else //目标元素在左半边
{
right = mid - 1; //缩小查找范围
}
}
if(left > right) //目标元素不存在
{
printf("no found.\n");
}
```
以上代码中,我们首先定义了查找范围的左边界和右边界,初始值分别为数组的第一个元素和最后一个元素。然后,使用一个 while 循环在数组中进行查找,每次计算中间位置,并判断目标元素在左边还是右边。如果找到了目标元素,就输出该元素在数组中的位置。如果查找范围左边界大于右边界,就表示目标元素不存在,输出提示信息即可。
综上所述,使用折半查找法在一个整型一维数组中查找用户输入的整数,可以通过上述代码实现。
阅读全文