概述:利用二分法查找数组中的值时就是根据下标中间值与所查找的值进行比较最后将要查找的值给比较出来
具体步骤:1. 首先需要定义左下标和右下标,左下标的值初始值为0,右下标的初始值为数组的元素个数-1(sizeof(arr)/sizeof(arr[0])-1),然后利用(左下标+右下标)/2得到中间下标,将下标索引的值与要查找的值进行比较
? ? ? ? ? ? ? ? ??2.?若中间下标索引的值大于查找的值,那么右下标的值就变成了中间下标-1;若中间下标索引的值小于查找的值,那么左下标的值就变成了中间下标+1;若相等则找到值了
????????????????3.将这两个条件用一个while循环来进行,那么条件便是左下标的值小于等于右下标的值;若大于则没有找到
注意事项:初始左右下标时要放在循环的外面,而中间下标需要放到循环体的里面,因为就是根据中间值的变化来缩小查找的范围
判断两个字符串是否相等:
可以将字符串放到一个字符数组中去,判断两个字符是否相等需要用到strcmp函数将两个字符放到括号中去它还返回0.正数和负数(相同返回0,前面的小于后面的返回负数,大于则返回正数)
小知识点:
1. 延时函数 Sleep(1000(1s))需要调用函数? #include<windows>
2. 清屏函数 system 需要调用函数 #include<stdlib.h>
3.从键盘上获取字符放到字符数组中时不需要&,直接放到数组名就可以了
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
实例代码:
int main()
{
int arr[] = { 1,2,3,4,5,6,7,65465};
int left = 0;
int sz = sizeof(arr)/sizeof(arr[0]-1);
int right = sz - 1;
int k = 3;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] > k ) {
right=mid-1;
}
else if (arr[mid] < k) {
left=mid+1;
}
else {
printf("找到了数字,它的下标为:%d\n",mid);
break;
}
}
if (left > right) {
printf("没有找到数字\n");
}
return 0;
}
int main(){
char arr1[] = { "welcom to 11b" };
char arr2[] = { "#############" };
int left = 0;
int right = strlen(arr1) - 1;
while (left < right) {
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
Sleep(1000);
system("cls");
}
}
int main() {
char arr[20] = {0};
char password[] = { "123456" };
printf("请输入密码\n");
for (int i = 0; i < 3; i++) {
scanf("%s", arr);
if (strcmp(password , arr)==0) {
printf("输入正确\n");
break;
}
else {
if (i >= 2) {
printf("你没机会了\n");
break;
}
printf("请重新输入\n");
}
}
}
????????????????????????
|