用C语言编写并写出设计思路: 编写程序,从键盘输入10个数存入数组A,将A数按升序排列存入数组B,用二分法在B中查找元素X,输出X在B中的位置,如果未找到,给出相应提示信息。
时间: 2024-05-07 17:23:04 浏览: 87
数组a中已存有互不相同的10个整数从键盘输入一个整数,找出与该值相同的数组元素下标。 (如果没找到,输出“没找到”).c
5星 · 资源好评率100%
设计思路:
1. 定义一个大小为10的整型数组A,用来存储输入的10个数。
2. 通过循环从键盘输入10个数,并将这些数存入数组A中。
3. 定义一个大小为10的整型数组B,用来存储排好序的数列。
4. 将数组A中的数按升序排列存入数组B中。
5. 定义一个变量low和high来表示查找的区间范围,初始时low为0,high为数组长度减1。
6. 定义一个变量mid来表示区间中间位置,计算mid的公式为mid = (low + high) / 2。
7. 在数组B中查找元素X:
1)如果X等于B[mid],则表示查找成功,输出X在B中的位置mid。
2)如果X小于B[mid],则在左半部分继续查找,即将high设为mid - 1。
3)如果X大于B[mid],则在右半部分继续查找,即将low设为mid + 1。
8. 重复步骤6和步骤7,直到查找成功或者low大于high,表示查找失败。
9. 如果查找失败,输出相应提示信息。
C语言代码实现:
```c
#include <stdio.h>
int main()
{
int A[10], B[10];
int i, j, k, X;
int low, high, mid;
// 从键盘输入10个数存入数组A
printf("请输入10个数:\n");
for(i = 0; i < 10; i++)
{
scanf("%d", &A[i]);
}
// 将A数按升序排列存入数组B
for(i = 0; i < 10; i++)
{
B[i] = A[i];
for(j = 0; j < i; j++)
{
if(B[j] > B[i])
{
int tmp = B[j];
B[j] = B[i];
B[i] = tmp;
}
}
}
// 从键盘输入要查找的元素X
printf("请输入要查找的数:\n");
scanf("%d", &X);
// 用二分法在B中查找元素X
low = 0;
high = 9;
while(low <= high)
{
mid = (low + high) / 2;
if(X == B[mid])
{
printf("%d在B中的位置为%d\n", X, mid);
break;
}
else if(X < B[mid])
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
// 如果未找到,给出相应提示信息
if(low > high)
{
printf("未找到%d\n", X);
}
return 0;
}
```
阅读全文