思路:
先创建一个有序数组
遍历数组
判断数组元素是否等于输入的数
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //创建一个有序数组
int k = 0; //创建变量k,存放输入值
scanf("%d", &k); //输入
int i = 0; //创建变量i
int flage = 0; //创建变量flage,为1则表示找到下标
for (i = 0; i < 10; i++) //for循环10个数
{
if (arr[i] == k) //判断第i个位置对应的数与k是否相等
{
flage = 1; //相等,则对flage赋值1
printf("找到了,下表是: %d\n", i); //打印提示词
break; //找到后跳出循环
}
}
if (flage == 0) //最后再进行一次判断是否找到,如果前面不满足则打印
{
printf("找不到下标\n");
}
return 0;
}
用二分查账的方式在一个有序数组中查找某个具体的数字
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //创建一个数组,存放10个元素
//下标 0 1 2 3 4 5 6 7 8 9
printf("整个数组arr的大小: %d\n", sizeof(arr));
//计算整个数组大小,单位是字节 40=4*10 整型4个字节,10个元素
printf("数组arr[10]单个元素的大小: %d\n", sizeof(arr[0]));
printf("数组元素的个数: %d\n", sizeof(arr)/sizeof(arr[0]));
int sz = sizeof(arr) / sizeof(arr[0]); //计算数组元素个数
int k = 0;
scanf("%d", &k); //输入
int left = 0; //左边从0开始
int right = sz - 1; //因为下标从0开始的,刚好比元素个数少1
int flage = 0; //设置变量flage,表示
while (left <= right) //左边小于等于右边
{
int mid = (left + right) / 2; //因为mid要实时更新,所以放循环里
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标是: %d", mid);
flage = 1;
break;
}
}
if (flage == 0)
{
printf("找不到\n");
}
return 0;
}