C语言中的分支和循环(下)

一、 什么是循环

首先,什么是循环呢?

循环是一种程序控制结构,它允许程序反复执行某些语句块,直到满足某个条件为止。

C语言中提供了三种循环语句,分别是: while 循环、 for 循环、 do-while 循环。

二、 while循环

2.1、 while循环的语法结构和执行流程

while 语句的语法结构和 if 语句非常类似

1	while( 表达式 )
2	    语句;

while 循环后面与 if 语句一样,只能控制一条语句,如果想控制多条语句,应加上大括号。

  • if 语句一样,while 循环后面不加 “”,加了即表示循环一条空语句,与后面实际想要执行的语句就没关系了

下面,我们来看看 while 循环的执行流程图:
在这里插入图片描述

首先,上来就是判断表达式是否成立,若表达式的值为0(即表达式不成立),则循环直接结束;若表达式值为非0(表达式成立),则执行循环语句,语句执行完后再次判断,是否进行下一次的循环,以此类推。(图中出现的 breakcontinue 稍后介绍)

2.2、while循环的实践

下面,让我们用刚刚学到的知识,在屏幕上打印 1-10 的值

参考代码如下:

#include<stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

让我们来逐一分析上面的代码:

int i = 1;

这一句是创建了循环变量"i",同时将其初始化为1

while (i <= 10)

这一句是进行循环结束条件判断,当表达式符合括号内的条件时,方可执行后面的循环语句,反之结束语句

printf("%d ", i);

这一句是执行流程

i = i + 1;

这一句是对循环变量进行调整,当没有这一语句时,循环将变成死循环

  • 从上面的代码我们不难看出,循环语句主要有三部分组成:

1、 变量的初始化
2、 循环结束条件的判断
3、 循环变量的调整

三、 for循环

从上面的 while循环,我们知道了循环语句最重要的三个部分,但大家发现没有,在 while循环中,这三个部分太过分散,一旦代码过长,将不好控制,那有没有其他的方法呢,下面就有请我们的 for循环 闪亮登场!

3.1、 for循环的语法结构和执行流程

for循环把三个部分放在一起,正因如此,它也是三种循环中用的最多的

下面,让我们来看看 for循环 的语法结构

for (表达式1; 表达式2; 表达式3{
    循环语句;
}

表达式1: 用于循环变量的初始化
表达式2: 用于循环结束条件的判断
表达式3: 用于循环变量的调整

for循环 的执行流程如下图:
在这里插入图片描述

首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。(图中的 break 和 continue 稍后介绍)

3.2、for循环的实践

下面,让我们用 for循环 在屏幕上打印1–10吧

参考代码:

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

可以看到 for循环 的三个部分都在一起,一目了然

注:
表达式3中,写成 “i++” 或 **“++i”**都可以,在C语言中并没有太大的区别
但有些说法“++i”比“i++”更高效,
这说法在C语言中不存在,在C++中内置类型不存在,自定义类型中确实如此

四、 do-while循环

4.1、do-while循环的语法结构和执行流程

在循环语句中,do-while循环用的最少,下面是他的语法形式:

do
{
	循环语句;
}
while (表达式);

注意:****“do”后面不加 “;”,而while后面加 “;”

下面让我们来看看do-while循环的执行流程图:
在这里插入图片描述

我们可以看到,do-while循环上来不管三七二十一,直接进入循环体,执行循环语句,然后在执行while后的判断式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

虽然在三种循环中,do-while循环用的最少,但它的先执行一次循环语句的这个特性,让它注定在某些地方有用武之地!

4.2、do-while循环的例子

:输入一个正数,计算这个数是几位数

参考代码

#include<stdio.h>

int main()
{
	int i = 0;
	scanf("%d", &i);
	int cnt = 0;
	do
	{
		cnt++;
		i /= 10;
	} while (i);
	printf("%d\n", cnt);
	return 0;
}

要实现这道题,好像for循环while循环也可以做到,但是用do-while循环,但 “i”为0时,也是一位数,也是要统计计数的。

五、break语句和continue语句

5.1、 什么是break语句和continue语句

相信细心的大家在看之前的流程图时,已经注意到了有break和continue的出现,那他们是做什么用的呢?
其实,我们在执行循环时,有时候不一定要等循环结束后才退出,当有些情况发生时,也要终止循环,这是非常常见的现象。
举个生活中的例子:我们每天进行努力敲代码这个循环,当我们拿到好offer后,就停止,即终止循环,但如果中了1000万彩票,是不是立刻失去学习的动力了,不再努力敲代码了,即终止循环。

break语句的作用是用于永久的终止循环,只要break语句被执行,就会直接跳出循环,继续往后执行其他语句。
continue语句的作用是跳过本次循环continue后面的代码,在for循环和while循环中有所差异

5.2、 while循环中的break和continue

(1)break语句

下面看个例子:
题目:输出1-10中出了数字5的所有数

#include<stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d", i);
		i++;
	}
	return 0;
}

代码的输出结果是什么?没错,就是打印“1 2 3 4”!

(2)continue语句

接下来将break换成continue看看会发生什么:

#include<stdio.h>

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

代码的输出结果是什么?是除了5之外的数都打印吗?

让我们看看运行结果:
在这里插入图片描述

是“1234”后死循环!
为什么会出现这种情况呢,这是因为当“i”==5时进入循环体后,并没有执行后面的调整语句“i++”就直接退出本轮循环,下一次又是5进来后5退出,用不得安宁。

那这样子行不行呢:

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

让我们看看输出结果:
在这里插入图片描述

显然,还是错的
这是因为continue是跳过本次循环之后的语句,把continue放在最后,跳过了个寂寞。

下面这是正确写法:

#include<stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		i++;
		if (i == 5)
			continue;
		printf("%d ", i);

	}
	return 0;
}

这是打印结果:
在这里插入图片描述
虚晃一枪,哈哈哈!没错,还是错的!大家要细心点,看仔细哦。

下面是参考代码(这次是尊嘟)

#include<stdio.h>

int main()
{
	int i = 0;
	while (i < 10)
	{
		i++;
		if (i == 5)
			continue;
		printf("%d ", i);

	}
	return 0;
}

可见,这小小的continue,在while中,一不留神,就会犯错,用的时候一定要小心哦

再强调一遍continue是用于跳过本次循环后边的代码,直接去判断部分,看是否进行下一次循环

5.3、 for循环中的break和continue

首先是break语句for循环中的break语句while循环中的基本类似,这里就不多赘述了,让我们直接进入continue语句(我就是懒得写,略略略!)

接下来就是 for循环中的continue语句啦

让我们看看下面这个示例:

#include<stdio.h>

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

在这里插入图片描述
可以看到for循环就没那么多妖了,这是为什么呢

在这里插入图片描述
原来for循环continue跳过后面的语句后,是一定会执行“i++”的,而while则不一定,要看具体情况,因此,用while循环更容易造成死循环。

5.4、 do-while循环中的break和continue

do-while循环中的break语句也相对比较简单,这里也不过多赘述了,下面我们看看continue语句。

下面我们看看这段代码:

#include<stdio.h>

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

在这里插入图片描述
没错,是死循环!
不知踩过一次坑的你这次有没有再跳进去呢?

下面是参考代码:

#include<stdio.h>

int main()
{
	int i = 0;
	do
	{
		i++;
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	while (i < 10);
	return 0;
}

do-while循环和while循环类似,大家可以自己分析原因,他们的这种写法导致他们非常容易陷入死循环,使用的时候一定要小心小心再小心。

好啦,本期循环语句就介绍到这里啦,希望本期博客能对你有所帮助,同时,如果有错误的地方请多多指正,让我们在C语言的学习路上一起进步!

  • 33
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值