[C语言]分支语句和循环语句

在生活中通常来说有三种情况,第一种:顺序结构,比如流水线工作,我们只能按唯一流程走下去,并没有其他做法能选择;第二种:选择结构,我们在遇到问题时,通常会有几个做法让我们选择,需要选择我们认为较为合理的做法,第三种呢,是循环结构,我们如果仔细观察周围的事物或人,大多都处于一个循环的状态,反反复复每天做着同样的事,这也是生活常态嘛,我们又何尝不是为了生活而日复一日的学习;在我们的生活中有的这三种结构,在C语言里也有,因此C语言是一门结构化的计算机语言,顺序结构自不用说,就是按照代码流程打下去,就是一种顺序;选择结构就是我们今天要分享的分支语句,前面稍微学过一些关于if的两项选择语句,但因为刚接触博客,并没有把敲的代码分享出来,这次学的选择语句是多分支的,if语句里的关键词中的if和else可表示两种选泽,多分支if语句中间增加选择,还可以使用“else if ”这一关键字,下面敲一段代码展现一下

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 3)
		printf("婴儿\n");
	else if (age >= 3 && age < 16)
		printf("少年\n");
	else if (age >= 16 && age < 18)
		printf("青少年\n");
	else if (age >= 18 && age < 26)
		printf("青年\n");
	else if (age >= 26 && age < 40)
		printf("壮年\n");
	else if (age >= 40 && age < 60)
		printf("中年\n");
	else
		printf("老年\n");
	return 0;
}

这里用代码大概分了一下年龄段,定义一个年龄变量,使用scanf输入函数可在后续自行赋值年龄变量,接着用if函数为设定年龄范围;

 38这个数值自行输入的年龄,敲下回车即可显示打印内容;这是用if分支语句做的选择语句代码,当然,我认为if语句能做到的事肯定多的数不过来,只是现在学识薄浅,还未能见识到if语句的奥秘,多观看别人的源码,积累知识,是我现在需要做的事;

说远了,接下来就是分支语句的第二个:switch语句

假如要做个连续性的选择语句,定义变量为1,2,3,4,5,6,7,用if语句是很麻烦的吧,都来写文章了肯定得敲一下,就用一周的星期一到星期天举例来敲个代码吧;

int main()
{
	int a;
	scanf("%d", &a);
	if (1 == a)
		printf("星期一\n");
	else if (2 == a)
		printf("星期二\n");
	else if (3 == a)
		printf("星期三\n");
	else if (4 == a)
		printf("星期四\n");
	else if (5 == a)
		printf("星期五\n");
	else if (6 == a)
		printf("星期六\n");
	else if (7 == a)
		printf("星期天\n");
	else
		printf("输入错误\n");
	return 0;
}

在我们创建的if语句中,列举的每一种情况就得写一次else if关键词,看着就很麻烦,虽然我敲的时候打了一行else if代码后面都复制的哈哈,麻烦的感觉虽然微乎其微,但代码越多,麻烦的感觉就会越明显,下面我用switch语句写一遍;

int main()
{
	int b;
	scanf("%d", &b);
	switch (b)   //括号()内必须是整型表达式
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

switch后面的括号内输入整型表达式;在这串代码中,我放的整型表达式就是我定义的整型变量b,switch语句中用case关键字进行列举变量值对应的打印内容,case后面接整型常量表达式,至于这个整型常量表达式,字符也是可以用的;学过计算机的都知道,计算机有ASCII码;我们存储字符存储整型都是将它所对应ASCII值存储到内存单元中,所以整型和字符是可以互相转换的;这里需要提的是我们设定case1、case2的时候要根据自己的需求看在哪用break跳出循环,像这个代码,假如我们想打印星期一,但是没有输入break,这边只是看一下break的作用,代码如下图;

 当我们把break去掉以后,代码不会终止,我们试下打印星期一,计算机直接从星期一打印到星期天,这是因为前面的case决定的入口,break决定的是代码运行的出口,我们输入1,代码就从第一个入口运行,但因为这个代码没有给到break出口;所以代码不会停下来,会直到将这个switch语句的内容运行完才会停止;,而我们加了break决定了出口,它打印完也就会跳出switch循环,这样我们这段代码的需求就达到了;说句悄悄话哈,其实我没感觉出有简便多少,应该是我还不懂吧;

没有break中止循环;有break中止循环

 那么问题来了,我们一星期只有七天,但输入1到7以外的数字,编译器也不会报错,那当别人输了这七个数字以外的值,我们需要提示它输入错误,这时候我们就需要用到用于switch语句中的default关键词,它用于表示我们列举情况以外的信息,所以就在switch内部末尾加上这个关键字,这里加break是为了养成习惯,避免以后改代码会出错;这是关于switch语句的知识,完整代码在前面有放出来;

 选择结构就告一段落;该开始循环结构了,我学习到了3个循环语句,分别是:while循环,do while循环, for循环;

while循环的书写格式:while(判定表达式)然后在下面将你要循环的操作用大括号括起来就ok;

while(a<10)
{
   a++;
}

 这里随便敲了一点,就作为参照观看,接着,学到了一个读取函数getchar,这是用于读取getchar

getchar函数运行起来跟scanf函数类似,都是输入操作,这里补充一点知识,getchar读取字符不是直接从键盘进行读取的,中间有个存放我们输入信息的区域,叫缓冲区,缓冲区不管你是按回车还是按啥,按的每一个键都会录入成字符;这里我们敲一个模拟输入密码的代码;

int main()
{
	int tmp = 0;
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	printf("是否确认密码[Y/N]:>");
	while ((tmp = getchar()) != '\n');
	{
		;
	}
	int ch = getchar();
	if ('Y' == ch)
		printf("确认成功\n");
	else
		printf("确认失败\n");
	return 0;
}

定义的tmp待会讲;

  1. 首先给密码创建一个数组;
  2. 打印提示输入密码;
  3. 利用scanf函数自行输入密码也就是给password这个字符串数组赋值;
  4. 输入完打印提示是否确认密码;
  5. 此时缓冲区其实还会有字符信息在里面;所以我们需要清理缓冲区;考虑到缓冲区残余信息可能不止一两个,所以这里我们运用while循环进行清理缓冲区操作,定义一个变量tmp作为评判表达式,这个代码里的评判表达式的意思是用将从缓冲区读取的字符信息放到tmp里,如果tmp里存放的字符不是‘ \n '则不显示,也就是丢掉了,不要了,当tmp里的字符信息和 ’ \n ‘相等时则跳出循环,这里有个点困惑了我一下,那缓冲区不是还有个’ \n '吗?刚想明白原来' \n '已经存放到tmp里,所以此时缓冲区里已经清空,就可以进行下一步操作;
  6. 接下来还是要读取字符,因为前面打印的选择还要进行输入,所以定义一个变量来存放读取的字符信息;
  7. 接着用if语句进行分析,这里就不具体讲了;比较简单的一个语句;

循环结构的第二个就是do while语句:

其实没多大区别,while循环是每次执行之前判断一下是否符合条件,如为真则继续,为假则终止;do while循环恰恰相反,先进行循环,再判断是否符合条件,所以do while循环至少可以循环一次;

int main()
{
	int a = 1;
	do
	{
		printf("%d ", a);
		a++;
	} while (a <= 10);

	return 0;
}

第三个就是for循环语句了,

while循环功能很强大,但有个问题,就是我们初始化部分,和判断部分,还有调整部分的位置,当我们代码长的时候。while语句的三个部分可能会离得很远,导致我们找不到相对应的部分,而for循环语句可以解决这个问题,书写格式是

for(初始化部分;判断部分;调整部分)

{
     语句项;
}

下面是for循环语句的一个示例:

int main()
{
	int a = 0;
	for (a = 1; a <= 10; a++)
	{
		if (a == 5)
			continue;
		printf("%d ", a);
	}
	return 0;
}

continue关键字的作用是跳过continue后面的语句,直接进入判断判断部分;

for循环的执行流程是首先为变量初始化一个值,然后进行判断,为真则执行语句,为假则终止循环,为真的话执行语句过后进行调整部分,就是对变量值进行++ --之类的运算,调整部分执行完再到判断部分,这时候为真则继续,为假则终止,反复循环这个流程。

有兴趣的可以试下,我觉得挺好玩的,文章如有不对的地方,还请大佬指出,很欢迎一起来交流分享,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值