小甲鱼C语言第五章-循环结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第五章,循环结构大家好,我是小布丁,很高兴为大家更新第五章。在生活中,我们要经常重复的去做某件事。比如,每天我们都要睡觉,每天我们都要吃饭等等。生活当中需要重复去做的事太多了。当然我们重复去做某件事的时候是要有条件的,比如说我们困了,或者疲倦了,或者无聊了,我们才去睡觉。当我们饿了,碰到喜欢吃的东西了,我们才会去吃饭。当我们老去的那一天,这些事情也就不需要做了...这种循环往复的做某件事的流程,C语言当中称之为循环结构。也就是说重复的执行C语言中的某段代码。当然,C语言中的循环也是有条件的,因为如果没有结束循环的条件,那循环就永远循环下去,就像舒舒服服地躺下去就不起来了。本章节中将会详细的介绍C语言的循环结构的语法,使大家对C语言的执行流程有更多的认识。本章的编写得到了小甲鱼和超级版主故乡的风的宝贵修改建议,在此表示感谢。6.1while语句while是C语言的关键字,在英语当中,while一般被翻译成:当……时候,那么这个句子在生活中是很常用的,当我手里有100万闲钱的时候,那么我就捐出50万。我们可以看到,这句话可以提供一种条件以供参考。C语言中所有循环的操作中,while语句是最简单也是最基本的。while语句的格式如下所示:while(表达式){执行语句}其中while后面圆括号内的表达式是可以是任意表达式,圆括号后面大括号里的语句是要循环的执行语句,我们大括号括起来的内容为循环体。执行while语句的时候,首先计算圆括号内的条件表达式的值。如果值不为零(即真值),那么执行循环体,接着再次判定表达式。这个过程(判定圆括号内的值,再执行循环体)持续进行直到圆括号内的值变成零(即假值)才停止。然后去执行while语句后面的内容。例6.0.1计算1到5的累加和。#includestdio.hmain(){inti=1,s=0;while(i=5){s=s+i;i++;}printf(s的值为%d\n,s);}让我们分步骤来看看这段程序中循环体运行的情况。i=1;s=0;s现在的值为0,i现在的值为1。第一次运行循环体:i=5成立么?i的值现在为1--是的执行循环体s=s+i;i++;s现在的值为1。第二次运行循环体:i=5成立么?i现在的值为2--是的,继续。执行循环体s=s+i;i++;s现在的值为3。第三次运行循环体:i=5成立么?i的值现在为3--是的。执行循环体s=s+i;i++;s现在的值为6,i现在的值为4。第四次运行循环体:i=5成立么?i的值现在为4--是的。执行循环体s=s+i;i++;s现在的值为10。第五次运行循环体:i=5成立么?i的值现在为5--是的。执行循环体s=s+i;i++;s现在的值为15。i=5成立么?i现在的值为6--不成立,退出循环,执行后面的输出语句。那么s的值是不是15呢?我们来看一下结果注意:每次执行循环体的时候,都要先判断是不是满足while后面圆括号里面的内容,一旦不满足,就退出循环。下面就要对一些需要注意的问题做一些解释:1.while语句的范围是从while语句的开始一直碰到一个分号作为结束,在语法上来说,while循环体中只能有一条执行语句,如果需要执行多条语句,那么就需要用复合语句,也就是用大括号把所有语句都括起来。和if语句一样,很多书籍上在描述while语句的定义的时候并没有大括号。在这里仍旧建议使用大括号,无论是只有一条语句,还有有多条语句。2.如果while后面的圆括号中的条件在一开始不满足,那么就不会执行其中的循环体,而会去执行while语句后面的内容。那么如果条件一直是成立的呢?C语言中有这样的一个用法,利用非零常量作为控制表达式来构造无限循环。while(1)...如果遇到这个情况,除非循环体中含有跳出循环控制的语句(break、goto、return)或者调用了导致程序终止的函数,否则无限循环语句就会像它自己的名字一样,永远的执行下去,无尽的执行、执行、执行......我们称之为死循环,死循环在理论上是很恐怖的,因为它会一直执行下去,直到计算机挂了或者我们挂了(当然现在的计算机也没有那么脆弱),所以在编写循环结构的代码的时候(包括后面讲到的do-while语句和for语句),一定要注意控制循环的执行次数,一定要有可以让循环停止下来的条件,比如例6.0.1中的i++。3.大家不要把while语句和if语句混淆了,while语句,while后面的圆括号中的条件成立,那么就会重复的执行循环体内的内容。而if语句后面的圆括号中的条件如果是成立的,那么其后的执行语句只会执行一次。但是两者有共通的地方,那么就是,无论是while语句还是if语句,只要其后的圆括号中条件不成立,那么便一次也不会执行循环体,会直接跳过而去执行下一条语句。6.2do-while语句在生活中并不是所有的事情都会一直循环着去做的,就像我们学习一本书,我们会在一段时间内都在看这本书,在这段时间内,我们可以说是在重复、循环“看这本书”这件事情,其性质当然也属于循环。但是在看一本书之前,我们是不是要先看看目录?因为我们需要确定一下这本书以自己目前的水平是否看得懂,如果看得懂,我们便可以在接下来的时间里一直看这本书,但是如果发现看目录的时候就看不懂了,我们还会在接下来的时间里来看这本书吗?我想大部分人是选择不会的。在C语言中也提供这样的循环语句,也就是说先去运行一段程序,然后判断条件是不是为真,如果为真,再去循环,如果为假,那么在执行了一次之后,就退出了这个循环。下面我们就要讲解do-while语句的使用。其实,do语句,并不能算是一个严格意义上的循环语句。因为,do语句和while语句关系紧密,就像是孪生兄弟一样,形影不离,却又稍微有点不同,就像是else子句的使用时离不开if的,如果没有if,那么就意味着使用else是无效的。事实上,do语句本质上就是while语句,只不过它的控制表达式实际上是在每次执行完循环体之后进行判定的。它的使用格式如下:do{语句}while(表达式);注意:这里的while(表达式)后面是有分号的。注意:这里的while(表达式)后面是有分号的。注意:这里的while(表达式)后面是有分号的。(小甲鱼觉得这里需要强调三次!!!)do在英文中的意思就是做。那么就意味着do语句中的循环体必须是先循环一遍,然后用while进行判定是否继续循环。我们经常会遇到当我们登录某个网站的时候,刚开始要你输入密码,如果不正确,就要重新输入。下面的例子就是小小的模仿了一下这样的功能:例6.0.2判断数据正确性#includestdio.hintmain(){intcheck;do{printf(请输入一个整数用来判断是否大于100\n);scanf(%d,&check);}while(check100);printf(您输入的值为%d,是大于100的\n,check);return0;}当我们输入一些小于100的数值的时候,其结果是这样的:刚开始就会提示,要求输入一个整数。在输入之后,while后面的条件将会判断这个数值是不是小于100的。在这里我们都输入了小于100的值,所以while后面圆括号中的表达式是真的,所以会重复执行循环体内的内容,也就是会一直显示“请输入一个整数用来判断是否大于100”。我们也看到了,在我截图的时候,程序依旧没有停止,还在循环,等待我输入一个数据(光标还在闪烁)。当我们输入一个大于等于100的值呢?其结果如下:当我们输入了123,由于123是很肯定要大于等于100的,所以,while后面的条件不成立了,循环终止,执行下面的printf语句。请注意比较do-while语句和while语句的区别。do-while语句是先执行后判断,而while是先判断,后执行。也就是说,while语句的循环体可能一次也不执行,因为条件可能从医开始就不成立,比如while(10),那么这个while语句就始终都不会循环。而do-while语句,无论while后面的条件是不是成立的,循环体都至少要被执行一次。鉴于这个区别,如果编写的程序中,有些地方至少需要执行一次的话,do-while语句当然是首选。6.3for语句C语言中的循环语句,肯定不止while语句和do语句两种,要不然何来多姿多彩的C世界?接下来,我们来介绍一下另外一个比较常用的循环语句,也是功能最强大的语句:for语句。for(表达式1;表达式2;表达式3){执行语句}表达式1作为循环结构的初始化,往往都是赋值表达式,设定在循环中需要用到的或其他变量的初始化。表达式2是作为整个循环的判断条件,一般为关系表达式或者逻辑表达式表达式3的作用是改变需要进行判断的变量的值,往往为复合赋值表达式或者自增自减表达式。注意:for后面的括号中,各个表达式之间要有分号隔开。for后面的大括号称为循环体,循环体内就是需要循环的执行语句,如果为一条语句,可以不写大括号。那么整个for循环的执行过程又是什么样的呢?这样用文字的描述,对for循环的理解会有一些不透彻,不要因为for语句表面上的复杂性而灰心,还是要通过例子来理解。还是通过修改例,用for语句来实现。例6.0.3#includestdio.hintmain(){inti,s=0;for(i=1;i=5;i++){s=s+i;}printf(%d\n,s);return0;}这段程序同样是运算1到5的累加。我们来看一下运算的过程、赋初值:s=0进入for语句,对i赋初值1判断i是否小于等于5?此时i的值为1是的:s=s+i;s现在的值为1,执行i++。判断i是否小于等于5?此时i的值为2是的:s=s+i;s现在的值为3,执行i++。判断i是否小于等于5?此时i的值为3是的:s=s+i;s现在的值为6,执行i++。判断i是否小于等于5?此时i的值为4是的:s=s+i;s现在的值为10,执行i++。判断i是否小于等于5?此时i的值为5是的:s=s+i;s现在的值为15,执行i++。判断i是否小于等于5?不是,跳出循环。这个顺序是不是有种似曾相识的感觉呢?因为这个顺序就是while语句的运算顺序,很多情况下,for语句和while语句是可以互相换的,for语句的定义其实可以转换为while语句表示,相当于如下语句:表达式1while(表达式2){循环体表达式3}for语句中有些表达式是可以省略不写的。严格的说法,并不是省略。只是按照运行的方式,将顺序改变了而已。例如for(i=1;i=5;i++)可以写成i=1;for(;i=5;i++)也可以变成for(i=1;i=5;)i++;还可以变成i=1;for(;i=5;)i++;如果你看见了for(;;),也不要惊讶,那是因为这个是for语句的无限循环。但是无论你想省略其中的哪一个表达式,其分号还是不能少的,这一点要切记。6.4continue语句我们常常在生活中遇到这样的例子,我们要吃水果(好东西哦,广大鱼油要注意多吃),我个人很喜欢吃橘子,那当我去市场上买橘子的时候,我要到一个水果摊前挑选橘子,那么有什么挑选规则呢?最常见的就是,当我拿到一个烂橘子的时候,我肯定会放下,去挑选其他的橘子,当橘子看起来没有什么问题的时候,我再放到我的袋子里。其实这样的事情还有很多很多,我们重复去做某一件事,但是重复的过程中呢往往需要一些选择,有些我要,有些我就不要,就像买橘子,我要重复的挑选很多橘子,但是肯定得是没有问题的橘子我才会买下,有问题的橘子我就得放下重新挑选。那么C语言中通过continue语句就可以控制循环结构语句在执行的时候进行一定的选择。continue是一个用于控制的语句,它可以改变循环结构中的语句执行的顺序。其使用方法和break是一样的,在需要的地方加上continue;就可以了。continue语句的使用往往要配合if语句的使用,但是一般在if语句中使用continue语句的时候是不用加大括号的。还是通过例子来理解continue的用法:例6.0.4输出1到10之间的奇数#i

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功