有关循环的练习讲解

目录

1、计算n的阶乘

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

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

4、编写代码,模拟用户登录情景,并且只能登录三次


1、计算n的阶乘

#include <stdio.h>
int main()
{
	int n = 0;
	int i = 0;
	int ret = 1; //ret不能为0
	scanf("%d", &n);
    //循环产生1~n的数字
	for (i = 1; i <= n; i++)
	{
		ret = ret * i;
	}
	printf("%d\n", ret);
	return 0;
}

思路:n!= 1*2*3*....*n,最好能产生1~n的数字,累积乘在一起,所以运用循环来实现 。

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

法一:

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

思路:1!= 1,2!=1!×2,3!= 2!×3 以此类推,避免了重复计算。

法二:

#include <stdio.h>
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <= 10; n++)
	{
		ret = 1;  //防止有累积效果
		for (i = 1; i <= n; i++)//计算一个数的阶乘
		{
			ret = ret * i;
		}
		sum = sum + ret;  //求和
	}
	printf("%d\n", sum);
}

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

代码效果:

w*******************!
we*****************!!
wel***************!!!
welc*************!!!!
welco***********!!!!!
welcom*********a!!!!!
welcome*******na!!!!!
welcome *****ina!!!!!
welcome t***hina!!!!!
welcome to*China!!!!!
welcome to China!!!!!

代码实现:

#include <stdio.h>
#include <string.h> //使用strlen函数需要包含头文件
int main()
{
	char arr1[] = "welcome to China!!!!!";
	char arr2[] = "*********************";
	int left = 0;
	int right = strlen(arr2) - 1;   //字符串长度-1就是右下标的长度

	while (left<=right)
	{
		arr2[left] = arr1[left];  //将arr1的左下标放到arr2的又下标
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		left++;
		right--;
	}
	return 0;
}

程序运行结果:

 接下来再给大家拓展一点知识,实现一秒打印一个,这时候需要调用一个函数Sleep。

#include <stdio.h>
#include <string.h> //使用strlen函数需要包含头文件
#include <Windows.h>  //使用Sleep函数需要包含头文件
int main()
{
	char arr1[] = "welcome to China!!!!!";
	char arr2[] = "*********************";
	int left = 0;
	int right = strlen(arr2) - 1;   //字符串长度-1

	while (left<=right)
	{
		arr2[left] = arr1[left];  //将arr1的左下标放到arr2的又下标
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000); //Sleep是实现睡眠的(停顿),单位是毫秒
		left++;
		right--;
	}
	return 0;
}

感兴趣的小伙伴可以去vs里试试效果。

接下来还有的人问,能否在一行上让代码往中间走呢?当然可以!用一个system函数就行了。

#include <stdio.h>
#include <string.h> //使用strlen函数需要包含头文件
#include <Windows.h>  //使用Sleep函数需要包含头文件
#include <stdlib.h>   //使用system函数需要包含头文件
int main()
{
	char arr1[] = "welcome to China!!!!!";
	char arr2[] = "*********************";
	int left = 0;
	int right = strlen(arr2) - 1;   //字符串长度-1

	while (left<=right)
	{
		arr2[left] = arr1[left];  //将arr1的左下标放到arr2的又下标
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000); //Sleep是实现睡眠的(停顿),单位是毫秒
		system("cls");
		left++;
		right--;
	}
	return 0;
}

这里讲解一下,system是一个库函数,可以执行系统命令,同时需要包含头文件,cls是清空屏幕的命令。

        我们可以在开始中搜索并打开“命令提示符”,首先我输入“dir”来显示信息如下

然后我再次输入“cls”并回车,就达到了清屏的效果

 

4、编写代码,模拟用户登录情景,并且只能登录三次

要求:只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main()
{
	int i = 0;
	char password[20] = { 0 };
	int flag = 0;
	for (i = 1; i < 4; i++)
	{
		printf("请输入密码:");
		scanf("%s", password);//数组名就是地址
		if (password == "123456")
		{
			printf("登录成功\n");
            flag == 1;
			break;
		}
		else
		{
			printf("第%d次密码错误\n", i);
		}
	}
	if (flag == 0)
	{
		printf("三次密码均输入错误,退出程序\n");
	}
	return 0;
}

 这代码看似没毛病,其实运行起来却和我们想象的不太一样

我假设的密码不就是123456,为什么还是提醒我密码错误了呢?

原因很简单,判断两个字符串是否相等,要使用strcmp函数,不能直接使用”==“,同时,这个函数会接收一个返回值,

如果第一个字符串小于第二个字符串,返回<0的数字。(它们比的是ASCII)

如果第一个字符串大于第二个字符串,返回>0的数字。

如果第一个字符串等于第二个字符串,返回==0。

所以最后正确的代码在下面:

#include <stdio.h>
int main()
{
	int i = 0;
	char password[20] = { 0 };//字符串数组,可以存放字符串
	int flag = 0;
	for (i = 1; i < 4; i++)
	{
		printf("请输入密码:");
		scanf("%s", password);   //数组名本质就是地址,所以不需要取地址
		if (strcmp(password,"123456") == 0)
		{
			printf("登录成功\n");
			flag = 1;
			break;
		}
		else
		{
			printf("第%d次密码错误\n", i);
		}
	}
	if (flag == 0)
	{
		printf("三次密码均输入错误,退出程序\n");
	}
	return 0;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值