分支和循环语句(含goto语句)-Part2

只要你愿意 开始总比放弃好。     Roman.

愿我们都有自己的目标并正在为其不懈努力。

---------------------------------------------------------------------------练习题

1. 计算 n 的阶乘。
2. 计算 1!+2!+3!+……+10!
3. 在一个有序数组中查找具体的某个数字 n 。(讲解二分查找)
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。
-- -------------------------------------------------------------------------解答
//1. 计算 n的阶乘。
#include<stdio.h>
int main()
{
	int n = 0;
	printf("请任意输入一个n:\n");
	scanf("%d", &n);
	if (n >= 0)
	{
		printf("%d的阶乘结果为:\n", n);
		int i = 0;
		int ret = 1;
		for (i = 1; i <= n; i++)
		{
			ret *= i;
		}
		printf("%d\n", ret);
	}
	return 0;
}
//2. 计算 1!+ 2!+ 3!+ …… + 10!
#include<stdio.h>
int main()
{
	int i = 0;
	int sum = 0;
	//方法一:两层循环
	/*for (i = 1; i <= 10; i++)
	{
		int j = 0;
		int ret = 1;
		for (j = 1; j <= i; j++)
		{
			ret *= j;
		}
		sum += ret;
	}*/

	//方法二:单层循环
	int ret = 1;//注意放在外面
	for (i = 1; i <= 10; i++)
	{
		ret *= i;
		sum += ret;
	}
	printf("1!+ 2!+ 3!+ …… + 10!结果为:\n");
	printf("%d\n", sum);
	return 0;
}
//3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
#include<stdio.h>
#include<string.h>
int main()
{
	//char ch1[] = "0,1,2,3,4,5,6,7,8,9";//但是注意此种写法后面其实还有一个\0字符!!
	//printf("ch=%d  ch1=%d", sizeof(ch), sizeof(ch1));
	//sizeof()是求字符串长度大小,单位是字节!
	
	//注意题干条件是有序数组
	int ch[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int left = 0;//左下标
	int right = (sizeof(ch) / sizeof(ch[0]))-1;//右下标:方法一:{ }初始化数组用sizeof
	//int right=strlen(ch)-1;//右下标:方法二:用库函数,此方法适用于" "初始化数组
	//printf("right=%d\n", right);
	int n = 0;
	printf("请输入你想要查找的数字:\n");
	scanf("%d", &n);
	while (left <= right)
	{
		//int mid = (left + right) / 2;//中间值:方法一
		int mid=left+((right-left)/2);//中间值:方法二:优化
		if (ch[mid] < n)
		{
			left++;
			continue;
		}
		else if (ch[mid] > n)
		{
			right--;
			continue;
		}
		else
		{
			printf("找到了!\n");
			break;
		}
	}
	if (left > right)
	{
		printf("找不到!\n");
	}
	return 0;
}
//4. 编写代码,演示多个字符从两端移动,向中间汇聚。
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
	char ch[] = "hello welcome to my world!";
	char ch1[] = "**************************";
	int left = 0;
	int right = strlen(ch) - 1;
	while (left <= right)
	{
		ch1[left] = ch[left];
		ch1[right] = ch[right];
		Sleep(1000);//延迟打印,单位是毫秒,需要头文件:<windows.h>
		//目标是:把所有的过程呈现在同一行上,所以引入system("cls"),需要头文件<stdlib.h>
		system("cls");
		printf("%s\n", ch1);
		left++;
		right--;
	}
	//如果出现最后没有任何打印的情况,在此加上一个打印即可,如下
	//printf("%s\n",ch);
	return 0;
}
//5. 编写代码实现,模拟用户登录情景,并且只能登录三次。
//(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
#include<stdio.h>
#include<string.h>
int main()
{
	char cor[] = "Xianmeng 123";//正确密码设定
	char password[20] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		printf("请输入您的密码:\n");

		//错误!
		/*while (getchar() != '\n')
		{
			password[20] = (char) getchar();
		}*/

		//修正:输入带有空格的字符串
		//方法一:
		//scanf("%[^\n]]", password);
		//方法二:
		gets(password);
		if (strcmp(password, cor) == 0)
		{
			printf("登陆成功!\n");
			break;
		}
		else
		{
			if (i < 2)
			{
				printf("输入错误,请重新输入:\n");
			}
			else
			{
				printf("三次输入错误,退出程序!\n");
			}
		}
	}
	return 0;
}

----------------------------------------------------------注意点:

  • scanf("%s") 只读取空格之前的字符串,但是 printf("%s") 可以完整打印 
  • 延迟打印函数:  Sleep(数字);单位:毫秒,包含在头文件<windows.h>中
  • 集中打印在一行上的函数:system("cls"); 包含在头文件<stdlib.h>中
  • 两个字符串的比较不能用==, 应该使用库函数strcmp( str1 , str2  )  (需要使用头文件#include<string.h>)   str1<str2 输出<0    str1==str2 输出==0   str1>str2  输出>0
  • 注意输入含空格的字符串的两种方法:scanf("%[^\n]],数组名)   或者  gets(数组名)

------------------ 一个人所有的愤怒都来自于对自己无能的痛苦。-------------------

************************关机程序以及猜数字小游戏见下一篇博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值