小bai笔记特别篇:分支和循环语句进阶

1前言:这期来写一下分支和循环的进阶用法,举例时一般都会结合使用,希望这期可以帮助大家更好的理解分支和循环语句,这两种语法结构在我们日常使用中时特别常用的,用法应该是极其灵活多变的,千万不要固化思维,这对学编程是非常可怕的,大家一定要多多思考,同一个问题,想出越多种解决办法约有利于思维的锻炼,灵活的思维是一个程序员所终生受益无穷的,他将让你在众多人中脱颖而出。再有一点,代码的构造固然重要,需要大家的逻辑思维足够强大,同时代码的优化也是重中之重,当你写出了一个代码,实现了你的想法,做到了你想做的事,满足开心的同时,你有没有去思考代码的优化,这样就是最优的写法了吗,能不能有再优化一下呢,这种代码优化思维在无论是职场还是在研究中都非常重要,我们现在用的所有软件几乎没有不更新的,更新就是代码优化的体现,无论是bug修复还是功能创新,或是优化用户体验,这都是代码优化的体现。我们现在初学时由于写的代码都是小程序,本身代码量比较小,优化空间有限,但是我们一定不能养成不思考去优化这个坏习惯,其实即使很少的代码也相当有可能存在优化办法,我记得网上有个很热议的话题:求素数的多种境界,虽然代码量很小,但是思维发散开,真的是方法各有境界,所以在此建议大家平时一定要多思考,不要思维固化。

2分支

        2.1 if else语句:可以嵌套,例如下代码:这里用了for循环,目的是更好的展示结果,多打印几个值。

int main()
{
	for (int i = 15; i < 95; i+=15)
	{
		if (i > 18)
		{
			if (i > 30)
			{
				if (i > 50)
				{
					if (i > 80)
					{
						printf("长寿人\n");
					}
					else
					{
						printf("老年人\n");
					}
				}
				else
				{
					printf("壮年人\n");
				}
			}
			else
			{
				printf("青年人\n");
			}
		}
		else
		{
			printf("未成年\n");
		}
	}
	return 0;
}

运行结果(循环时i值为:18,33,48,63,78,93):

         2.2不是每一个if语句都需要else,可以根据需求进行使用任意个if和任意个else,当然else不能比if多,不过这样用时要注意else悬空问题(参见分支循环语句基础上),其实还是养成良好习惯的问题,不要省略{}就一般不会造成else悬空。

3循环

        3.1while循环括号内是判定真假,所以有无限循环的一种用法while(true)或者写为while(1)当然这个1可以是任意值,只要不是0就不为假,就会一直循环。

        3.2for循环的无限循环为for(;;)。

        3.3do while循环跟while一样,无限循环为do{}while(true)或do{}while(1)

        3.4无限循环有很多应用场景,比如做一个简单的计算器,总不能每次算完一次就重启程序,所以就可以整体加一个无限循环,算完一次算下一次。

        3.5while (getchar() != '\n') {;},利用while循环不停接收缓冲区字符,直到接收到\n也就是回车,这个循环可以用来清除缓冲区内容,比较常用,getchar()和putchar()是<string.h>中的库函数,是专门接收和打印字符串的库函数,接收和打印都是以char为单位一个一个进行的,例如asdfg在getchar()时先接收a然后b......putchar()也是如此,与<stdio.h>中的scanf()与printf()本质不同,效果展现相同。

4综合例子,这里给大家一个完整的猜数字小游戏的代码,用了很多分支和循环语句,希望可以帮助大家更好的理解分支和循环语句。当然就像我之前说的,代码越多肯顶就约有优化空间,我写的肯定不可能是最好的,也欢迎大家多思考,有什么优化建议评论区交流,或者直接找我交流。代码中有很多*是为了运行结果好看,对程序本身逻辑没任何影响。其中用了自定义函数还有很多库函数,是为了代码看起来简洁清楚,不懂也没有关系,下期就是函数的讲解啦。话不多说,例如下代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>

//猜数字游戏

//定义字符ch用来做分支语句switch入口
char ch = 0;

//游戏体函数
void game()
{
	int a = 0;
    //利用库函数产生随机数a作为被猜数
	a = rand()%100+1;
	//初始化变量b用来接收输入的数
	int b = 0;
	printf("********************************                 请输入一个数字来开始                  *********************************\n");
	//死循环实现猜不对一直猜
	while (1)
	{
		//接收输入数字存入b
		scanf("%d", &b);
		//输入数字比a小,提示猜小了
		if (a > b)
		{
			printf("******************************************               猜小啦!               *****************************************\n");
		}
		//输入数字比a大,提示猜大了
		else if (a < b)
		{
			printf("******************************************               猜大啦!               *****************************************\n");
		}
		//输入数字等于a,提示恭喜你猜对了
		else
		{
			//系统指令清除屏幕内容
			system("cls");
			printf("************************************************************************************************************************\n");
			printf("***************************************************      恭喜你!      **************************************************\n");
			printf("******************************************               猜对啦!               *****************************************\n");
			printf("************************************************************************************************************************\n\n\n\n\n");
			printf("******************************************          按enter回主菜单!           *****************************************\n");
			//按enter返回主菜单,通过getchar函数接收到“\n”(换行符),break跳出死循环
			if (getchar() == '\n')
			{
				break;
			}
		}
	}
}

//菜单函数
void menu()
{
	system("cls");
	printf("************************************************************************************************************************\n");
	printf("****************************************                  菜单                  ****************************************\n");
	printf("****************************************               a.开始游戏               ****************************************\n");
	printf("****************************************               b.结束游戏               ****************************************\n");
	printf("************************************************************************************************************************\n");
	//ch接收用户选择
	ch = getchar();
	//接收回车以及回车之前的所有无用字符,清空缓存区,以防止再次进入循环被ch接收到
	while (getchar() != '\n')
	{
		;
	}
}

int main()
{
	//根据时间产生随机数种子seed,库函数rand会根据seed产生随机数
	srand((unsigned int)time(NULL));
	//do while循环用户只要不退出游戏就一直循环,while条件为(ch != 'b'),即只要用户菜单处不选择b,就不停止循环
	do
	{
		//打印菜单
		menu();
		//switch循环语句,实现通过菜单选择功能
		switch (ch)
		{
		case 'a':
			{
				//用户选择a,执行game函数
				game();
				//接收回车以及回车之前的所有无用字符,清空缓存区,以防止再次进入循环被ch接收到
				while (getchar() != '\n')
				{
					;
				}
				break;
			}
		case 'b':
			{
				system("cls");
				printf("************************************************************************************************************************\n");
				printf("************************************************************************************************************************\n");
				printf("*****************************************               游戏结束!               ****************************************\n");
				printf("************************************************************************************************************************\n");
				printf("************************************************************************************************************************\n");
				Sleep(1000);
				//库函数退出程序,0表示成功
				exit(0);
				break;
			}
		default:
			{
				//菜单输出不是a或者b
				printf("请输入正确指令!\n");
				//库函数延迟1秒,单位是毫秒,1000毫秒=1秒
				Sleep(1000);
				break;
			}
		}
		//ch不等于b重新循环
	} while (ch != 'b');
	return 0;
}

 运行结果图:

 

 5小结:关于上面代码,相信很多小伙伴对于产生随机数那里比较蒙圈,不过没关系,后面的函数期将会详细讲解,除此之外,我在代码上做了详尽的注释,如果还是有什莫不懂得也欢迎大家评论区交流,或者直接联系我,好啦,分支循环到此就结束了,如果有什莫错误欢迎指出,有什莫不懂也欢迎交流,我是小白阿g,关注我让小白不白学,下期再见啦!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值