文章目录
前言
记录c语言选择语句和循环语句的一些练习
一、计算n的阶乘
思路:n的阶乘就是从n到1之间的数相乘。可以用for循环或while循环先产生1到n的数,
再定义一个变量ret,把for循环产生的数乘到ret上就能得到n的阶乘了。
int main()
{
int n = 0;
int ret = 1;
int i = 0;
scanf("%d", &n);
for (i = 1;i <= n;i++)
{
ret *= i;
}
printf("%d ", ret);
return 0;
}
二、 计算 1!+ 2!+ 3!+ …… + 10!
思路:for循环产生1到10的数字,1的阶乘就是1乘1,2的阶乘就是1乘1乘2,那么3的阶乘:1乘1乘2乘3,…10的阶乘:1乘2乘3乘…10;既然for循环依次可以产生1到10的数字,那就可以定义一个变量ret和一个统计的变量,第一次循环ret=1乘1,sum=0+ret,第二次循环ret=1乘2,sum=第一次的ret+第二次的ret,直到循环结束ret=1乘2乘…乘10,sum=第一次产生的ret+…第10次产生的ret,这样sum里面就是1到10的阶乘相加的值了
int main()
{
int i = 1;
int ret = 1;
int sum = 0;
for (i = 1;i <= 10;i++)
{
ret *= i;
sum += ret;
}
printf("%d ", sum);
return 0;
}
三、 在一个有序数组中查找具体的某个数字n。
思路:方法一:枚举法一一列举数组中的元素,再对比一下要查找的数组n
方法二:二分查找,先确定左下标(left)和右下标(right),利用左右下标计算下标居中的(mid)。然后访问下标为mid的元素,如果下标为mid的元素大于我要查找的数字n,那我的右下标就要更改为mid-1,如果下标为mid的元素小于我要查找的数字n,那我的左下标就要更改为mid+1,如果都不是那说明下标为mid的元素此时等于数字n,说明找到了。那如果大于或小于的话就还要继续查找,直到左下标>右下标,说明没有元素可以查找了
方法二代码实现:
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//算出来的是arr的元素个数
int sz = sizeof(arr) / sizeof(arr[0]);
int n = 11;
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] > n)
right = mid - 1;
else if (arr[mid] < n)
left = mid + 1;
else {
printf("找到了,下标为%d\n", mid);
break;
}
}
//判断一下left是否大于right如果left大于right就说明没有找到
//因为它如果找到了就会break跳出while循环,此时left还是小于right的
if(left>right)
printf("找不到");
return 0;
}
四、编写代码,演示多个字符从两端移动,向中间汇聚
思路:首先创建一个全是是##########的字符串,再创建一个字符串例如:helloworld。将字符串(helloworld)的两端的首字符(h和d)复制给全是##########的字符串,然后就是字符串两端的第二个字符,直到(o和w)复制完。每次复制延时一下就行了
int main()
{
char arr1[] = "##########";
char arr2[] = "hello world";
int left = 0;
int sz = sizeof(arr1) / sizeof(arr1[0]);
int right = sz - 1;
while (left <= right)
{
arr1[left] = arr2[left];
arr1[right] = arr2[right];
left++;
right--;
printf("%s\n", arr1);
}
return 0;
}
五、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。
思路:for循环或while循环 循环三次 ,循环里面输入密码,对比密码,如果密码正确就跳出循环,如果不对就第二次循环…,第三次还是不对就退出循环结束程序了。
#include<string.h>
int main()
{
char arr[20] = { 0 };
int i = 3;
printf("请输入密码:");
while (i--)
{
scanf("%s", arr);
if (strcmp(arr, "zh2003") == 0)
{
printf("登录成功\n");
break;
}
else if (i > 0 && strcmp(arr, "zh2003") != 0)
{
printf("输入错误 重新输入:");
continue;
}
else
printf("三次输入错误,退出程序\n");
}
return 0;
}
六、给定两个数,求这两个数的最大公约数
思路:辗转相除法。
例如: 24 %18=6
18%6=0
6就是24和18的最大公约数。
int main()
{
int n1 = 0;
int n2 = 0;
scanf("%d %d", &n1, &n2);
while (n2)
{
//取模(%) 例如:5%3=2
int ret = n1 % n2;
n1 = n2;
n2 = ret;
}
printf("%d", n1);
return 0;
}
总结
以上就是分支和循环的简单练习了,一起学习一起进步