C语言分支与循环结构(4)
今天我们正式学习实现循环结构的语句,while、do while、for语句一、while语句它的使用结构跟if相似if表达式语句while表达式语句无论是if还是while,如果有多个语句要用大括号括起来区别在于if执行完后接着走下一个代码了,while里的语句执行完后,还会看满足表达式吗,如果满足,再执行一遍。现在,如果我们想用while输出1-10它的运行逻辑是,现在while外面给a赋值为1,a11,进入循环,打印1,然后a加上1,又看满不满足a11,满足,打印2,a又加一。当最后打印出10后,a加一为11,不满足a11了,于是循环结束。成功实现打印1-10如果我们想实现输入一个整数,从个位开始打印它各个位置上的数字比如输入178,输入8 7 1,用while怎么实现呢先给a赋值为0,要求用户输入一个整数,输入后放入a中,如果a不为0那么进入循环,直接输入a跟10除以10后的余数跟10取余结果是0-9,刚好各个位置上的值就是0-9,如果输入178,178除以10,商为17,余个8,8被输出,是不是实现我们的要求,然后a / 10,等价于a a / 10;意思是,a自已除个10,除出来的数再赋值给a,拿输入的178举例,178就变成了17,因为 / 号两边是整数,除了之后小数点后的不要,只要整数。17满足不为0,又进入循环,17除以10取余7,7输出,又自己除以10,剩个1,1不为0,进入循环,1除以10取余为1,1输出,1除以10为0,0不满足条件,不进入循环,此时所有位上的数都被打印出来了,任务完成。二、for语句for语句的使用方式是for表达式1表达式2表达式3语句表达式1用于循环变量的初始化表达式2用于循环结束条件的判断表达式3用于循环变量的调整与while语句有相似之处,拿我们刚用while写的打印1-10的程序举例如果我们把a初始化为5,那while会先从判断5是否小于11开始,然后满足,输出5,一直到输出10,所以我们发现把变量初始化很重要,在while外面的变量初始化,跟for里面的第一个表达式相同。如果我们把a改为a 2(等价于 a a 2是不是打印完5后会打印7、9呢,所以变量的变化也很重要,他影响了我们程序的运行结果,就跟for的第三个表达式一样,而a 11这个条件跟for的第二个表达式一致,所以for跟while的不同在于,for把三个表达式集成在一起了。我们用for来实现打印1-10你可能有些疑惑,for语句是怎么实现的呢,首先执行表达式1,给i初始化为1,然后看表达式2,判断i是否小于等于10,满足即执行打印i的任务,然后执行表达式三,对变量1,再看表达式2,判断i小于等于10吗,满足有打印i,再执行2,再看2,所以表达式1只执行一次。如果有一次不满足表达式2了,直接退出循环。下面我们写一个算1-100之间是3的倍数的总和的程序结果为因为3是1-100之间3的第一个倍数,所以把变量初始化为3,后面表达式3每次给i加上是因为从3开始加3也是3的倍数,外面设置了sum这个变量来统计总和,sum i等价于sum sum i是3的倍数的i再加上sum赋值给sum,实现上一次的sum值加上这一次i的值,一直叠加。三、do while语句实现方式do{语句循环体}while表达式如何运行的呢上来就先执行语句,然后再判断,满足条件,又执行语句,直到不满足条件,退出循环。特点循环体至少被执行一次。我们再用do-while实现打印1-10的功能练习输入一个正整数,判断他有几位数一开始就有一位 0也是有一位的,统计位数的动作至少要执行一次,所以用do-whilenum / 10这么写的逻辑是,每去掉一位,sum加一,当num等于0时,已经统计完了,退出循环。四、 break和continue语句有些时候,因为某些特殊情况,我们需要提前终止循环,就要用到break跟continue语句。那平时生活来举例子,上班就是一个循环,每天都要去做,除非是周末,那我们 就可以不上班了,但是周一还得上班,周末只是起到一个短暂的终止循环作用,但如果某天是世界末日,那我们就能确定上班这个循环永远终止了,实际上continue就相当于周末,break就相当于世界末日。在代码中 ,continue是跳过本次循环后面的代码,而break是直接跳出整个循环。举个例子还是打印1-10的程序,但加了个if语句,当a等于5时continue,刚我们说continue后的代码不执行了,但是会进入下一次循环,我们看这个程序会发生什么你可能会想a等于5时跳过本次循环,但是6-10应该被打印出来吧,那我们来看真正的运行逻辑。当a等于5时,跳过打印和a加一,然后再看循环条件 a 10,此时a等于5,依然满足,又进入循环,a还是等于5,有跳过下面的代码,回到循环条件,依旧满足,于是陷入了死循环,在4之后鼠标的光标会一直现,但是程序不结束。例子2for循环的6-10被打印出来了,因为它的表达式3不在if的下面,即使触发了if语句,i依然加一。用了break,直接跳出循环了。for循环的变种如果不写表达式1、2、3,尤其是不写表达式2,程序会陷入死循环一直打印哈哈哈哈哈。循环的嵌套有时我们为了解决复杂的问题,要把while、for等语句,合在一起用。例子设计一个找出1-00的素数的程序偶数不能为素数首先素数的概念是除了1和它本身,其它都不能被其它数字整除,那么合数的概念就是除了一和本身,有其他的因子,能被这些因子整除,比如6,2 × 3等于6,2和3就是6的因子,比如8,2×4等于8我们会发现只要我们找到因子,就能确认它不是素数,我们就可以跳过这些数,从下个数开始找 ,怎么确认这些因子呢,只要一个数是合数,那么必定有因子是大于等于根号下的这个数的,3小于等于根号6等价于因子的平方大于等于这个数,所以我们利用这个逻辑,去找合数,它是合数我们就跳过。第一个for循环的意思是先有1-100这些数,第二个循环的意思是对每一个数,我初始化一个变量为2,如果这个数能整除这个变量说明这个变量是它的因子,它就是合数,2不是,接着1,直到变量的平方大于这个数为止,因为是合数必定有个因子小于等于它,在这个范围找不到因子的话,说明就是素数了。然后我们还在第一个for下面初始化yes变量,目的是先认为产生的是素数,如果他找到了因子,就变为0。防止第二个循环出来后不知道该不该打印,因为找到或找不到都要跳出第二个循环,如果yes为1,我们就打印,为0就跳过,找下一个素数。go to 语句当出现某种情况,你可以使用go to语句让程序跳转到你想跳转到的地方例子伪代码fo(){for(){for(){if()go to next:}}}next:直接跳出三个for循环。嘻嘻嘻,分支与循环结构就讲完了,大家要通过刷算法题来巩固对这些语句的应用哦