C语言解题篇必须要会的循环试题!!
Posted Do
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言解题篇必须要会的循环试题!!相关的知识,希望对你有一定的参考价值。
目录
查找数字
编写代码在一个整形有序数组中查找具体的某个数
要求:找到了就打印数字所在的下标,找不到则输出:找不到。
解题关键:利用while循环,利用二分查找法,即找出每次的中间元素,当找的数比中间下标元素小时,就不用从右边找,当找的数比中间元素大时,就不用从坐边找。
代码示例:
#include<stdio.h>
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<stdio.h>
#include<string.h>
#include<windows.h>
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<stdio.h>
#include<string.h>
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<stdio.h>
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)/最大公约数
}
总结
相信这些题大家多多少少看过,解题方法也有很多,这些题对于大家掌握循环语句的知识很重要,他们也可以运用在自定义函数中求解,但是这是最基本的思路方法。如果大家感觉有帮助的话,那就请一键三连支持我吧!
以上是关于C语言解题篇必须要会的循环试题!!的主要内容,如果未能解决你的问题,请参考以下文章
C语言初阶笔记程序员必须要会的实用调试技巧(含库函数strcpy和strlen的模拟实现)!!
C语言初阶笔记程序员必须要会的实用调试技巧(含库函数strcpy和strlen的模拟实现)!!