循环、分支语句应用实例

  • 1. 计算n的阶乘。1*2*3*4*5...*n
  • 2. 计算1!+2!+3!+4!+...+10!
  • 3. 在一个有序数组中查找具体的某个数字n。(二分查找)
  • 4. 编写代码,演示多个字符从两端移动,向中间汇聚。
  • 5. 编写代码实现,模拟用户登录场景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序。)
  • 6. 猜数字游戏

1. 计算n的阶乘。1*2*3*4*5...*n

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		ret *= i;
	}
	printf("%d\n", ret);
	return 0;
}               /*输出结果为:6
                             720*/

2. 计算1!+2!+3!+4!+...+10!

 //计算阶乘相加 1!+2!+3!+4!
 //代码1
#include <stdio.h>
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int num = 0;
	for (n = 1; n <= 4; n++)
	{
		ret = 1;         //计算n阶乘之前,先将ret初始化为1
		for (i = 1; i <= n; i++)
		{
			ret *= i;
		}
		num += ret;
	}
	printf("%d\n", num);
	return 0;
}                   //输出结果为:33

 //代码2   改进 4!=4*3!
#include <stdio.h>
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int num = 0;
	for (n = 1; n <= 4; n++)
	{
		ret *= n;
		num += ret;
	}
	printf("%d\n", num);
	return 0;
}                   //输出结果为:33

3. 在一个有序数组中查找具体的某个数字n。(二分查找)

  • 最坏查找 \log _{2}^{}\textrm{n} 次
 //在一个有序数组中查找具体的某个数字n  
 //在1 2 3 4 5 6 7 8 9 10 中查找 4
#include <stdio.h>
int main()
{
	int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	int k = 4;      //要查找的数字,在arr这个有序数组中查找 k = 4的值
	int sz = sizeof(arr) / sizeof(arr[0]);   //数组的元素个数
	int left = 0;
	int right = sz - 1;
	while (left < right)
	{
		int mid = (left + right) / 2;
		if (arr[k] < mid)
		{
			right = mid - 1;
		}
		else if (arr[k] > mid)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下标是:%d\n",  mid);
			break;
		}
	}
	if (left > right)
		printf("查找失败\n");
	return 0;
}                //输出结果为:找到了,下标是:5

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

 //编写代码,演示多个字符从两端移动,向中间汇聚
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
	char arr1[] = "Nice to meet you !!!";
	char arr2[] = "####################";       //空格也属于一个# 
	int left = 0;
	int right = strlen(arr1) - 1;
	printf("%s\n", arr2);           //数组名不需要取地址
	 while 语句实现
	//while (left <= right)
	//{
	//	Sleep(1000);           //睡眠一秒,使代码跑的时候是动态的
	//	arr2[left] = arr1[left];
	//	arr2[right] = arr1[right];
	//	left++;
	//	right--;
	//	printf("%s\n", arr2);
	//}
	// for 语句实现
	for (left = 0, right = strlen(arr1) - 1; left <= right; left++, right--)
	{
		Sleep(1000);           //睡眠一秒,使代码跑的时候是动态的
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
	}
	return 0;
}                       /*输出结果为:####################
                                     N##################!
                                     Ni################!!
                                     Nic##############!!!
                                     Nice############ !!!
                                     Nice ##########u !!!
                                     Nice t########ou !!!
                                     Nice to######you !!!
                                     Nice to #### you !!!
                                     Nice to m##t you !!!
                                     Nice to meet you !!!*/

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

 //模拟用户登录场景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序。)
 //假设正确密码为123456
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char password[] = "";
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:");
		scanf("%s", password);
		if (strcmp(password, "123456") == 0)     //两个字符串的比较用strcmp函数,比较的是对应位置的ASCII值,例:abc > abb999  
		{
			printf("登陆成功\n");
			break;
		}
		else
		{
			printf("密码错误,请重新输入\n");
		}
	}
	if (i == 3)
	{
		printf("三次输入均错误,退出程序\n");
	}
	return 0;
}                  /*输出结果1为:请输入密码:7734787
                                 密码错误,请重新输入
                                 请输入密码:17648
                                 密码错误,请重新输入
                                 请输入密码:269748
                                 密码错误,请重新输入
                                 三次输入均错误,退出程序*/

                   /*输出结果2为:请输入密码:89174969
                                 密码错误,请重新输入
                                 请输入密码:123456
                                 登陆成功*/

6. 猜数字游戏

  1. 自动生成一个1-100之间的随机数。
  2. 猜数字:a. 猜对了——恭喜你,猜对了; b. 猜错了——会告诉猜大/猜小了 ,继续猜直到猜对。
  3. 游戏可以一直玩,直到选择0退出游戏。
 //猜数字游戏
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>         //rand()头文件
#include <time.h>           //time()头文件

void menu()
{
	printf("*********************************\n");
	printf("*********   1.play  *************\n");
	printf("*********   2.exit  *************\n");
	printf("*********************************\n");
}

//RAND_MAX--rand函数能返回随机数的最大值,范围为 0-32767
void game()
{
	int random_num = rand()%100+1;           //rand()生成随机数,返回值为int。需搭配srand函数使用。
	int input = 0;
	while(1)         //外面生成随机数,循环内部猜,while循环内部为游戏过程
	{
		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));    /*将time返回值强制转换成unsigned int类型。整个工程设计一次即可,因此放到主函数中;若放到game()中,生成的数间隔很小,若连续快速生成时值可能相同,不够随机。 若想使生成的变量足够随机,需在srand()中加入库指针time()*/
	do          //循环
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch(input)        //选择
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	} while (input);      //为真,继续游戏;为假,游戏结束,退出游戏
	return 0;
}               /*输出结果为:*********************************
                             *********   1.play  *************
                             *********   2.exit  *************
                             *********************************
                             请选择>:1
                             请输入猜的数字>:65
                             猜大了
                             请输入猜的数字>:40
                             猜小了
                             请输入猜的数字>:50
                             猜大了
                             请输入猜的数字>:45
                             猜小了
                             请输入猜的数字>:47
                             恭喜你,猜对啦!
                             *********************************
                             *********   1.play  *************
                             *********   2.exit  *************
                             *********************************
                             请选择>:7
                             选择错误,请重新输入!
                             *********************************
                             *********   1.play  *************
                             *********   2.exit  *************
                             *********************************
                             请选择>:0
                             退出游戏*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值