b站分支与循环的练习题

1.计算n的阶乘

#define _CRT_SECURE_NO_WARNINGS
//计算n的阶乘

#include<stdio.h>
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	scanf("%d", &n);
	for(i=1;i<=n;i++)
	{
		ret = ret * i;
	}
	printf("ret=%d\n",ret);
	return 0;
}

2.求1!+2!+3!…10!的值

//求1!+2!+3!........10!的值



/*#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i = 1;
	int ret = 1;
	int n = 0;
	int num = 0;
	for (n= 1;n <= 3;n++)
	{
		ret = 1;
		for (i = 1;i <= n;i++)
		
		{
			ret = ret * i;
		}
		num = num + ret;
	}
	printf("%d", num);
	return 0;
}
*/
//上面也是可以一个算法,但是两个for循环会导致繁琐,运行起来负责,所以下面这个方法是比较好的
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 0;
	int ret = 1;
	int num = 0;
	for (n = 1;n <= 10;n++)
	{
		ret = ret * n;
		num = num + ret;
	}
	printf("%d", num);
	return 0;
}

3.在一个有序数组中查找具体某个数字n,编写int binsearch(int x,int v[],int n);功能,在v[0]<=v[1]<=v[2]<=…<=[n-1]的数组中查找x

//在一个有序数组中查找具体某个数字n,编写int binsearch(int x,int v[],int n);功能,在v[0]<=v[1]<=v[2]<=...<=[n-1]的数组中查找x


/*#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	               //写一个代码,在arr数组(有序的)中找到7
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);  //这是用数组的长度除以一个元素的长度,就可以得到元素的个数
	for (i = 0;i < sz;i++)
	{
		if (k == arr[i])
		{
				printf("找到了,下标是:%d\n", i);
				break;
		}
	}
	if (i == sz)
		printf("找不到\n");

   return 0;
}*/
              //这是一种方法利用for循环,但是比较繁琐,如果有上千上万,甚至更多的数字时,这种遍历方法就会让文件运行起来极其费劲

//于是有了 二分法/折中法 这种算法

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;

	int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
	int left = 0;//左下标
	int right = sz - 1;//右下标

	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;
		}
	}
	return 0;
}

4.编写代码,演示多个字符从两端移动,向中间汇聚

#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include<stdlib.h>

int main()
{
	char arr1[] = "baby  I love you";
	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);
		//休息1秒
		Sleep(1000);//单位是毫秒
		system("cls");
		left++;
		right--;
	}

	return 0;
}

5.编写代码实现,模拟用户登录情景,并且只能登录三次,(只允许输入三次密码。如果密码正确则提示登录成功,如果三次输入均错误。则退出程序

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>

#include<string.h>


int main()
{
	int i = 0;
	char password[20] = { 0 };
	for (i = 1;i <= 3;i++)
	{
		printf("请输入生日日期:--");
		scanf("%s", password);
		if (strcmp(password, "990503") == 0)//使用一个库函数来比较两个字符串的是否相等-------strcmp
		{
			printf("我小宝贝的生日");
			break;
		}
	}
	if (i == 3)
		printf("三次密码均错误,退出程序\n");
	return 0;
}

6.猜数字

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("**************************\n");
	printf("******** 1.paly **********\n");
	printf("*******  0.exit **********\n");
	printf("**************************\n");
}

void game()
{

	int random_num = rand() % 100 + 1;  //RAND_MAX--rand函数能返回随机书的最大值  这个数比较大,我们控制到0-100
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字--");
		scanf("%d", &input);
		if(input>random_num)
		{
		printf("猜大了\n");
}
		else if (input < random_num)
		{
		printf("猜小了\n");
 }
		else
		{
		printf("恭喜你,猜对了\n");
		break;
 }
	}

}
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));  //时间戳
	do {
		menu();
		printf("请选择---");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
				game();
				break;
		case 0:
					break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
         }
	} while (input);
	return 0;
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值