c语言 分支和循环的练习


前言

记录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;
}

总结

以上就是分支和循环的简单练习了,一起学习一起进步

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值