Hello~我是芝士,前一篇分享的是分支语句,本篇给大家分享循环语句,主要有三个循环语句:while循环、do while 循环和 for 循环。
目录
1. while 循环
在C语言中主要有三种循环,我们首先介绍while循环
。之前已经学习过了if语句,其实while循环与if语句也有相似之处。
1.1 语法形式与逻辑
对于while循环,其语法的形式如下:
while (表达式)
{
执行语句;
}
while能够实现循环的效果,当表达式为真(非零),那么会一直执行语句
。在我们之前学习过的if语句中,if中的表达式为真,会执行相应的语句,而while与if最大的不同之处就是能够实现循环
。
整个循环的逻辑可以如下图所示:
程序执行进入while循环后,先对表达式进行判断,如果表达式判断结果为假(0),循环结束;表达式判断结果为真(非0),执行语句,并且再次进行判断是否进入下一次语句的执行
。
1.2 循环举例
为了更好地理解while循环的逻辑,这里用两个例子进行感受
例子1:在屏幕上打印 1~10 的值
#include <stdio.h>
int main()
{
int i = 0;
while (i <=10)
{
i++;
printf("%d\n", i);
}
return 0;
}
输出结果
1
2
3
4
5
6
7
8
9
10
在这段代码中,我们看到输出了想要的结果,这里需要关注的是while循环判断条件,当i>10时候,表达式为假,因此循环结束。
例子2:假设我们想要实现更加复杂的效果:
1.当遇到数字5的时候跳出循环
2.遇到数字5跳过不打印
遇到数字5的时候跳出的循环,代码如下
#include <stdio.h>
int main()
{
int i = 0;
while (i <=10)
{
i++;//遇到数字5的时候跳出循环
if (i == 5)
{
break;
}
printf("%d\n", i);
}
return 0;
}
遇到数字5跳过不打印,代码如下
#include <stdio.h>
int main()
{
int i = 0;
while (i <=10)
{
//遇到数字5的时候跳过打印
i++;//i++要放在continue之前,不然光标一直停留在打印4之后
if (i == 5)
{
continue;
}
printf("%d\n", i);
}
return 0;
}
最后我们可以看到两种实现效果
不难发现,与第一个例子不同的除了加入了if条件判断外,最关键的是加入了两个新的关键字:break和continue
。并且我们可以直观的看到这两个关键字的效果: break是跳出整个while循环;continue是跳出当前条件的循环
。
1.3 break和continue
关于这两个关键字,break我们在前面的switch语句中已经有所接触,并且不难发现其功能相同,都是跳出整个语句。关于这两个关键字的逻辑在while循环中的体现可以见下图:
从上图可知:
while循环中的break:在循环中只要遇到break,就停止后期的所有的循环,直接终止循环
是循环是永久终止的;
while循环中的continue:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,直接跳转到while语句的判断部分。
进行下一次循环的入口判断。
2. do while 循环
除了while循环外,还有一种do while循环,但是其用的相对较少一些。
2.1语法形式与逻辑
对于do while循环的语法形式如下:
do
{
执行语句;
} while (表达式);
与while循环不同, do while 循环是先进行执行语句,然后再进行表达式的判断
。表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
这里需要注意的是:不要漏了while(表达式)后面的分号( ; )
。
整个循环的逻辑可以如下图所示:
进入do while循环之后,直接先执行do后面的语句,然后再进行while(表达式)判断,如果表达式结果为真(非0),则继续执行语句;表达式结果为假(0),结束循环
。因此我们不难发现,do语句有一个特点:就是能够保证这个循环至少执行一次
。
2.2 循环举例
由于do while 循环的语句至少执行一次,因此常在一些特定情境中使用,下面进行举例来感受do while循环的逻辑。
例子1:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d\n", i);
i++;
} while (i<=10);
return 0;
}
输出结果
1
2
3
4
5
6
7
8
9
10
该段代码中,进入程序入口之后,首先执行do后面的语句即:printf(“%d\n”, i)打印了数字1,i++,然后再进行while中表达式的判断。
同样的,如果我们想要实现遇到某个条件跳出循环或者跳过本次循环的效果,同样可以借助break和continue关键字。
2.3 break和continue
同理,前面介绍了关于do while的逻辑逻辑流程图,在break和continue的影响下,逻辑流程图如下所示:
由上图可知,do while中的break和continue与while循环中的功能相似。
do while中的break:语句开始执行,首先执行do后面的语句,遇到break之后跳出整个循环体,结束循环。
do while中的break:语句开始执行后,同样先执行do后面的语句,当遇到continue时,就跳过本次循环continue后面的代码,直接来到表达式判断部分。
do while 循环 break 举例:
#include <stdio.h>
int main()
{
int i = 0;
do
{
if (i == 5)
{
break;
}
i++;
printf("%d\n", i);
} while (i<=10);
return 0;
}
当程序开始执行起来,一旦触发条件i == 5,则会执行break,使其跳出循环,不再执行后面的语句。因此最后在控制台输出1 2 3 4。
do while 循环continue举例:
#include <stdio.h>
int main()
{
int i = 0;
do
{
if (i == 5)
{
continue;
}
i++;
printf("%d\n", i);
} while (i<=10);
return 0;
}
这是一旦触发条件i==5时,程序直接来到表达式判断部分——i<=10,此时i++没有执行,i的值一直不变,再次进入do语句中,直接陷入死循环。执行效果如下图:
3. for 循环
for循环相比于do while循环会更加常用一些。
3.1 语法形式与逻辑
关于for循环的语法形式如下:
for(表达式1; 表达式2; 表达式3)
{
执行语句;
}
其中,表达式1是循环变量的初始化;表达式2是循环结束的判断条件;表达式3是循环变量的调整。
整个循环的逻辑可以如下图所示:
程序执行进入for循环后,先对表达式1循环变量初始化
,然后进入表达式2的判断
,判断结果为假(0),循环结束
;判断结果为真(非0)
,对for循环中的语句进行执行
,然后进入表达式3,对循环变量进行调整
。循环一直到表达式2的结果为假,跳出循环。
需要注意的是,整个循环过程中,表达式初始化(表达式1),只被执行一次,剩下的表达式2,执行语句、表达式3不断地进行着。
3.2 循环举例
为了更直观地感受for循环的执行逻辑,这里举例感受:
在屏幕上打印1~10的值:
#include <stdio.h>
int main()
{
for (int i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
根据前面的逻辑规则:表达式1:int i =1;表达式2:i <= 10;表达式3:i++
当进入for循环后首先对整型变量i进行初始化赋值,因为此时i=1是小于10(满足表达式2),因此进入循环内部执行语句,在屏幕上打印数字1,然后来到i++的位置,对整型变量i进行调整,如此执行下去。当 i 的值增加到11的时候
不满足条件表达式2,此时循环结束,跳出循环。因此在屏幕上输出的结果为:
那么如果在执行语句中增加某些条件,比如跳过某个数字的打印或者遇到某个数字时直接结束循环,应该运用到哪些操作?
3.3 break和continue
与前面两种循环非常相似的,for循环要中途结束循环或者遇到某个条件不执行本次程序代码,也同样用到break和continue
。对这两个关键字加入到for循环后的整个循环流程图如下所示:
当执行语句中设置了某些条件,遇到break之后,直接跳出并结束循环
;遇到continue之后,跳过本次循环的执行语句来到表达式3的位置
,对变量进行调整,然后为下一次循环做准备。
4. while 和 for 循环对比
通过本次的梳理不难发现其实while循环和for循环有许多相似之处,都包括初始化、判断、调整
三大块。下面进行一个更加直观的对比,以实际例子观察。
在屏幕上打印1~10的数字的while循环和foe循环:
从以上代码中我们可以很直观地发现,while循环和for循环都能够实现相应的循环,并且都具有初始化、判断以及调整这三个部分。但是,相较于while循环for循环的这三个模块相对几种,而while循环会相对分散一些。
因此如果后续在编写程序过程中有较多代码,for循环在形式上更加优于while循环,有利于代码的维护。当然在外面实际应用过程中需要使用哪一种循环,需要根据外面的需要进行灵活使用。
好了,以上就是本次要分享的所用内容,因为自己的拖延症,导致这篇迟迟没有写完,但是但是尊滴需要继续加油啦!