【C语言解题篇】必须要会的循环试题!!
发布日期:2021-05-04 20:14:43 浏览次数:21 分类:技术文章

本文共 2271 字,大约阅读时间需要 7 分钟。

目录

 


查找数字

编写代码在一个整形有序数组中查找具体的某个数

要求:找到了就打印数字所在的下标,找不到则输出:找不到。

解题关键:利用while循环,利用二分查找法,即找出每次的中间元素,当找的数比中间下标元素小时,就不用从右边找,当找的数比中间元素大时,就不用从坐边找。

代码示例:

#include
int main(){ int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 0; scanf_s("%d", &k);//输入要查找的数字 int i = 0; int left = 0;//数组首元素下标 int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数 int right = sz - 1;//数组最后元素下标 while (left <= right) { int mid = (left + right) / 2;//中间元素下标 if (arr[mid] < k)//要找的数在中间元素的右边 { left = mid + 1; } else if (arr[mid] > k)//要找的数在中间元素的左边 { right = mid - 1; } else { printf("找到了,下标是:%d", mid); break; } } if (left > right) { printf("找不到了"); } return 0;}

字符从中间缩聚

要求:演示多个字符从两端移动,向中间汇聚

解题关键:

初始化两个字符串数组,数组大小必须一致,用strlen求出字符串的长度。

定义left,right作为数组第一个元素和最后一个元素的下标,将一个数组的左下标元素赋值另一个数组的左下标元素,右边也一样,然后让left++,right--。

代码示例:

#include
#include
#include
int main(){ char arr1[] = "welcom to bit"; 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); left++; right--; //Sleep(300);//睡眠 //system("cls");//清空屏幕,让代码一行显示 } return 0;}

密码登录

编写代码实现,模拟用户登录情景,并且只能登录三次。

要求:只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序

解题关键:

for循环控制输入次数

使用strcmp(字符串比较函数)判断输入的字符串是否与密码相等,当其值为0时则表示相等,输入正确

代码示例:

#include
#include
int main(){ int i = 0; char password[20] = { 0 }; for (i = 0; i < 3; i++) { printf("请输入密码:\n"); scanf("%s", password); if (strcmp(password, "123456") == 0) { printf("登录成功!\n"); break; } else { printf("输入错误,重新输入!\n"); } } if (3 == i) { printf("三次均输入错误,即将退出程序!\n"); } return 0;}

 


最大公约数

给定两个数,求这两个数的最大公约数

解题方法:

相减法,两个数最大公约数最大为两数中的较小值,若不是则max--

辗转相除法,利用while循环反复求余,当余数为0时,被除数则是最大公约数

代码示例:

#include
int main(){ int m = 0; int n = 0; int c = 0;//余数 scanf_s("%d%d", &m, &n); //相减法 int max = 0; if (m > n)//判断两个数中的较大值 { max = n; } else { max = m; } while (1) { if (m % max == 0 && n % max == 0) printf("%d", max); break; } max--;//两个数最大公约数最大为两数中的较小值,不是则max--; return 0; //辗转相除法 while (c = m % n)//当m%n=0时,n就是最大公约数 { m = n; n = c; } printf("%d", n); return 0; //最小公倍数=(m*n)/最大公约数}

总结

相信这些题大家多多少少看过,解题方法也有很多,这些题对于大家掌握循环语句的知识很重要,他们也可以运用在自定义函数中求解,但是这是最基本的思路方法。如果大家感觉有帮助的话,那就请一键三连支持我吧!

 

 

 

 

 

 

 

 

 

上一篇:《算法竞赛进阶指南》0x01 T1 a^b
下一篇:【C语言】吃透getchar()函数,超详细解析!!!

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月31日 11时34分53秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章