c语言的探索之路:流程控制(2)

目录

循环语句

while语句

do-while语句

for语句

几种循环的比较

循环的嵌套

转向语句的使用


文前声明:

我们还有个流程控制的小尾巴没有讲完,我们在上节讲了流程控制的分支语句和转向语句,然而,流程控制中同样重要的循环语句却被我们当作一个小尾巴留下了。虽然我们与循环语句奔现的时间长了一些,但却不影响我们的理解,不乏主角分开出场的电视剧,他们都是c语言中不可或缺的一部分。

那么,接下来我们将开始步入循环语句的学习:

循环语句

人生会日复一日的进行,我们的生活在不停的更迭,循环语句所蕴含的意义在我们的生活中也有体现。在我们希望连续不间断的打出一些字符的时候,我们都会想到利用printf进行一串“亲手而作”的输出。

比如我们希望输入数学问题中常见的5的阶乘:"5!”,我们会利用如下代码

int num;
num=5*4*3*2*1;
printf(“%d",num);

这并不会难倒我们,但是你有没有想过,如果我们进行的不仅仅是五的阶乘,而是10,20,甚至是200呢?这个时候还需要我们一个一个打出来?答案一定是否定的。

我们无时无刻都要记住,计算机本身就是一个节省算数时间,提高计算效率的机器,过于复杂的操作我们的前人早已为我们研究出了简单的程序。那么这就开始需要用到我们的第一个循环语句了。

while语句

对于while语句,我们有着最基本的使用格式:

while(循环条件){
//循环体
}

在循环语句中,循环体构成了主要的部分,循环条件起着“守门”的职责,对循环体的执行把关。

在while语句的执行原理是这样的:在执行判断条件后,我们会进入循环体持续执行内部的语句,直到不满足循环条件为止,流程图如下:

 

while语句的作用效果还是较为直观的,为了避免无休止的重复计算,我们通常会以变量作为循环条件,以实现及时的制止循环体的循环。我们的判断条件同样也可以是(1)中所提及到的逻辑判断,在不为0的情况下会对循环体执行一次后继续判断条件是否成立。

while语句还有个孪生兄弟

do-while语句

do-while语句的基本架构和while语句较为相似,却又有不同

do{
//循环体
}while(循环条件);

它与while语句最大的不同在于do-while语句在判断条件前,会执行一次循环体当中的指令,再判断循环:进入循环时不做检查,执行一轮循环体代码后,再检查条件是否满足。这是它与while条件最大的不同之处。

具体流程图如下:

 

特别注意很多新人容易犯的错误:我们的循环条件括号后是需要带有“;”的,这是不可以被省略的,不然我们的编译器会对我们进行一条error的错误提醒。

在部分用法上,do-while语句和while语句是相通的,所以我们不需要过度解释。灯光交给下一种循环语句,我们的循环语句还有尤为重要的一员。

for语句

对于for语句,他对于后续的内容例如数组等都起着不可或缺的作用,当然我们一会将会说到三种循环语句的共通性,但我们通常的习惯会导致我们会偏爱于for语句多一点。

for语句的基本架构如下:

for (语句1;语句2;语句3){
//循环体
}

其实,看着并不复杂,只是有着固定的顺序而已。

for语句的作用效果是:在进入for语句后,语句1通常是一种需要实现的预处理;语句2作为继续条件,实现对for语句是否执行循环体的判断;语句3是作为对循环体的收尾处理或是一种对下一个循环进行的准备工作。所以我们的执行顺序是这样的:

步入for循环后,先进行语句1中的预处理,再进行语句2的判断,若判断条件为true,则进行一次循环体,执行循环体后步入语句3,执行语句3的指令,再重新回到语句2判断循环条件是否为true......

对于语句1:在预处理中我们一般会在这里引入一种变量并对它进行赋值,后利用这个变量实现对for循环的有效利用。

对于语句2:我们会利用引入的变量或其他表达式来对循环体做一个及时的制止,避免多次循环或无效循环。

对于语句3:在执行循环体后绝大多数情况都是需要为了预准备,为了下一次循环体对语句2的判断作出合理的对接。

具体流程图是这样的:

 

当然,在未来那些浩如烟海的程序中,我们难免会见到一些奇怪的写法:

1.省略语句1:意为我们不用在对for循环的起始赋予初始值,直接判断条件是否为真。

2.省略语句2:这标志着我们步入for循环后不会进行条件判断,直接执行循环体中的指令。这种写法很少看到,因为他斌没有严格的意义,甚至不一定可以退出循环体。

3.省略语句3:这样的写法意味着我们不需要在对程序进行善后处理,在执行循环体后直接进行条件判断。


循环语句的深层用法

到了这个时候,不知你是否有了一定的启迪与发现?没错,它们虽然都有着自己的独特之处,但是这些循环语句都有着相通的作用。

几种循环的比较

3种循环的共同之处在于可以处理同一问题,一般情况下它们可以互相代替,如以上for循环的三条不同作用的语句,也可以同样用另外两种循环语句的架构作出完全相同的效果。

首先用while语句的架构:

​语句1; //初始化操作
while(语句2){
...
语句3
...
}

​

在用do-while语句的架构:

​语句1;   //初始化操作
do
{  . . .
语句3
...
}while(语句2);

我们可以看到,它们可以使用不同的架构实现相同的作用效果,这是十分神奇的。需要注意的是,用while和do-while循环语句的时候,循环变量初始化应在循环语句关键词前完成,而for语句可以在括号中语句1的位置实现循环变量的初始化。

所以,虽然循环语句的组成语句都可以实现相近的作用,但总有优劣的使用次序:如果有固定次数用for;如果必须执行一次用do-while;其他情况用while。这是一条虽不严谨却很实用的小技巧。


除此之外,我们还在上篇博客中讲到过关于分支语句中if语句的级联结构,if语句的级联其实就是一种嵌套,编程语言中的嵌套结构就是层层勾连,所以又叫级联结构,在if语句中多次包含if语句,就形成了一种嵌套结构。

循环的嵌套

人类的自我创造能力是十分强大的,堆积能力便是其中之一,这种嵌套就是一种侧面的体现,这种嵌套何尝不是一种堆积。在不断的if堆积中形成了一种分支的结构,我们的循环语句也可以这样,在一种循环语句的使用基础上,我们可以不断向中堆砌。在c语言深入学习的过程中,我们会经常看到这个说法的影子,在不远的将来,我们会学习指针,数组,函数,结构体,它们或多或少都会有这样的体现。

回到正题。

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。

三种循环语句可以自己在自己的结构里构造嵌套循环,如:

while(){
...
    while(){
    ...}
...
}

当然,也可以构造一种循环中的另一种循环:

while()
{...
    do{
    ...
    }while();
...
}

 对于循环语句的嵌套和多重循环,我们就介绍这么铎,因为它可以创造无限的可能,它不可能是被三言两语的阐述尽的。请坚信,在将来,可能许多传奇的程序都会缔造在我们的手中...这个世界本就充满着无限的可能。


转向语句的使用

上节我们所讲到的转向语句,其实更多的是用在循环语句中阻断循环程序的进行,我们的break和continue是为了让循环语句和分支语句更好的善始善终,所以上节所讲到的转向语句的所有语法依然可以用在循环体中,它们所执行的作用如下图所示:

当然,这张流程图中缺少了goto语句的使用,在之前我们也曾提过,goto语句是充满破坏性的,它并不与其他的转向语句相通,它破坏了一种程序循序渐进的结构和顺序,所以不被人们所提倡,但它的作用无与伦比,不过为了避免初学者的混淆,我们不在流程图中标出goto语句对程序的影响。实际上并不是不想标,而是不能标,它的影响是无法估量的。

 抛去goto语句不谈,在图中我们可以很明显的看到break和continue的作用并作出辨识,以此来便利我们在编程语言中不同情况下的使用方法。


那么,我今天的博客到此为止,感谢您认真看完了本篇小白编写的博客,以上均为本人理解,如有错误欢迎在评论区指出。

虽然基础薄弱,但今天仍是在幻想成为大佬的一天。

你要自己发光,而不该总是去折射别人的光芒

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

励志做大佬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值