1、二分查找(折半查找)
#include<stdio.h> int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int left = 0; int sz = sizeof(arr) / sizeof(arr[0]); int right = sz - 1; int k; printf("请输入要查找的数字:"); scanf_s("%d",&k); 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; }
还是多用scanf_s()做输入,避免内存泄漏;break不知道在哪放的话就看实际想要结束循环的地方放,在这里是找到了的那句。
当数组元素个数为偶数时,除以2得到一个小数,然而数组的下标里没有小数,很多人就很难受,但其实他们忘了int类型是如何取值的了,虽然除出来是小数,但因为int的强制取整,会丢弃掉小数部分,注意不是四舍五入,所以中间值依然为整数。
2、编写代码,演示多个字符从两端移动向中间汇聚。
#include<stdio.h> #include<Windows.h> #include<string.h> #include<stdlib.h> int main() { char arr1[] = { "Welcome to the Avalon" }; char arr2[] = { "*********************" }; int left = 0; int right = strlen(arr1) - 1; while (left <= right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%s\n", arr2); Sleep(800); system("cls"); left++; right--; } printf("%s", arr2); return 0; }
如果非要用int right=sizeof(arr1)/sizeof(arr1[0]),那就要末尾-2而不是-1,因为char arr1[]="abc"实际上有a,b,c,\0四个元素
3、仅3次登录机会的登录界面
#include<stdio.h> #include<string.h> int main() { int i = 0; char password[16] = { 0 }; for (i = 0; i < 3; i++) { printf("Please enter the password:"); scanf("%s", password); if (strcmp(password, "201110") == 0) { printf("Passed\n"); break; } else printf("Failed\n"); } if (i == 3) printf("All the chances wasted, U idiot"); return 0; }
卡最久的还是scanf那里,scanf_s、fscanf_s 输入字符串而非整型数字的时候, 需要在后面加上第三个参数,表示捕获的字符个数,如scanf_s("%s",str,10)、fscanf_s(&fp,"%s",str,10);不过最好还是对预处理器做设置会简易点,加参数这个我没试过。
不然就是按照此处链接对项目设置里的预处理器做设置:https://blog.csdn.net/oguro/article/details/52685662?utm_medium=distribute.pc_relevant_download.none-task-blog-2~default~BlogCommendFromBaidu~default-1.test_version_3&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-2~default~BlogCommendFromBaidu~default-1.test_version_
标签:right,int,scanf,学习,printf,include,left From: https://www.cnblogs.com/AvalonForLovers/p/17631953.html