第一个应用:
多个字符从两端移动,向中间汇聚
头函数
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h>
代码实现
第一种实现方式
int main() { char arr1[] = "白子寰是一位学习C语言的帅哥!!!"; char arr2[] = "##############################"; //两个双引号里的内容字符要对应 int left = 0; int right = strlen(arr1) - 1; //上一行解释说明:例如输出a,b,c;有a b c \0;长度有4,访问C,只用strlen( )-1; while (left <= right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%s\n", arr2); Sleep(1000);//睡眠1000秒 system("cls");//system是库函数,执行系统指令,cls是清除控制台屏幕信息 right--; left++; } printf("%s\n", arr2); return 0; }
注释的内容为代码的解释
第二种实现方式
int main() { char arr1[] = "白子寰是一位学习C语言的帅哥!!!"; char arr2[] = "##############################"; //两个双引号里的字符内容要对应 int left = 0; //int sz = sizeof(arr1) / sizeof(arr1[0]); //int right = sz - 2; //上两行解释说明:如果是数组的话,arr[]="a,b,c"; // 有a b c /0 其元素个数有四个 // 而要访问c的话,因为是数组,访问的是其下标,所以sz-2 while (left <= right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%s\n", arr2); Sleep(1000); //睡眠1000秒 system("cls"); //system是库函数,执行系统指令,cls是清除控制台屏幕信息 right--; left++; } printf("%s\n", arr2); return 0; }
注释的内容为代码的解释
控制台实现
第二个应用:
二分法
头函数
#include<stdio.h>
代码实现
第一种实现方式
运用到的知识:数组和for循环
int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 0;// 0 1 2 3 4 5 6 7 8 9 printf("请输入你要找下标的数字:"); scanf("%d", &k); int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); for (i = 0; i < sz; i++) { if (arr[i] == k) { printf("%d找到了,下标是%d ", k, i);//i访问了数组的下标 break; } } if (i == sz) { printf("找不到\n"); } return 0; }
控制台打印输出:
第二种实现方式
运用到的知识:数组,break语句,while循环,if..else语句
此方式是找中间的值:mid与所找数字k进行比较
int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 0; printf("请输入所需找下标的数字:"); scanf("%d", &k); int sz = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = sz - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == k) { printf("%d找到了,下标是%d\n", k, mid); break; } else if (arr[mid] < k) { left = mid + 1; } else//中间的元素大于所需要找的元素k,就让右边的=中间的-1; { right = mid - 1; } } if (left > right) { printf("%d的下标找不到", k); } return 0; }
控制台打印输出:
第三种实现方式
运用到的知识::数组,break语句,while循环,if..else语句
与第二种比较,增加了一个定义flag
int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 0; printf("请输入所需找下标的数字:"); scanf("%d", &k); int sz = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = sz - 1; int flag = 0; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == k) { printf("%d找到了,下标为%d\n", k, mid); flag = 1; break; } else if (arr[mid] < k) { left = mid + 1; } else { right = mid - 1; } } if (left > right) { printf("%d找不到它的下标\n", k); flag = 0; } return 0; }
控制台实现