C++第二章循环语句

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

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

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

资源描述

2.3循环语句-------语句循环操作的实现使计算机真正充当了代替人们工作的角色。例:根据某学生考试成绩grade的等级值’A’,’B’,’C’,’D’,’E’,输出百分制分数段。voidmain(){chargrade;cingrade;switch(grade){……}}如果要处理3个学生呢?voidmain(){chargrade;cingrade;switch(grade){……}cingrade;switch(grade){……}cingrade;switch(grade){……}}第一个学生第二个学生第三个学生voidmain(){chargrade;inti=0;//定义一个计数器while(i3)//当计数不到3时循环{cingrade;switch(grade){……}i++;//计数器加1}//需要重复的工作用花括号括起来}2.3.1while循环while(条件){需要反复执行的语句;}此处的“条件”语法同if语句循环体2.3.1while循环while(条件){需要反复执行的语句;}if(条件){需要执行一次的语句;}对比条件语句真假继续后面的语句前面的语句while循环语句if条件分支语句♥首先,需要一个合适的条件,让循环该继续的时候就能继续。♥其次,大多数情况下,条件需要被恰当地改变。避免死循环。对于while循环:生活中的while循环例子(1)while(父母不给买小红裙){我哭;}生活中的while循环例子(2)while(父母不给买小红裙&&我还没有哭累){我哭;}生活中的while循环例子(3)while(父母不给买小红裙&&疲劳度200){我哭;疲劳度++;}哭也是很累的生活中的while循环例子(4)while(父母不给买小红裙&&疲劳度200){我哭;疲劳度++;我偷看爸妈是否同意买裙;}可能改变主意嘿嘿!例:用while语句实现求从1到100的累加和。voidmain(){intsum=0;inti=1;//i是每次要加的数,同时充当计数器角色,从1开始while(i=100){sum=sum+i;i++;}cout1到100的累加和为:sumendl;}do{需要循环执行的语句;}while(条件);2.3.2do...while循环判断是否继续循环的条件,放在此处表明:就算是条件一开始就不成立,循环也要被执行一次。比较:inta=0;while(a0){a--;}couta;inta=0;do{a--;}while(a0);couta;输出:0输出:-1若此处改为:a++呢?改进版的判别奇数、偶数程序运行结果改进版的判别奇数、偶数程序#includeiostreamusingnamespacestd;voidmain(){intnum;cout请输入一个整数:;cinnum;if(num%2)cout这是一个奇数!endl;elsecout这是一个偶数!endl;}原有程序voidmain(){intnum;do{cout请输入一个整数(输入0结束):;cinnum;if(num%2)cout这是一个奇数!endl;elsecout这是一个偶数!endl;}while(num!=0);}改进版的判别奇数、偶数程序条件每次循环执行的语句继续后面的语句前面的语句真假do-while循环语句条件语句真假继续后面的语句前面的语句while循环语句习题:有以下程序段voidmain(){inti=1,sum=0,n;cinn;do{i+=2;sum+=i;}while(i!=n);coutsum;}若使程序的输出值为8,则应该从键盘输入的n的值是。A)1B)3C)5D)7Cvoidmain(){intsum=0;inti=1;//循环条件的初始化while(i=100)//i=100循环条件{sum+=i;i++;//改变循环条件的成立因素}cout1到100的累加和为:sumendl;}回顾和小结(1)—累加程序回顾和小结(2)—深入挖掘1.条件一般需要进行一定的初始化操作。2.循环需要有结束的机会。while(21){cout死循环endl;}3.在循环中改变循环条件的成立因素。循环条件(状态)的初始化语句;while(循环条件)//循环条件判断{需要循环执行的语句(循环体);改变循环条件的成立因素---循环状态修正语句;}回顾和小结(3)---一般模式while循环四部曲:循环状态初始化;循环条件判断;执行循环体;修正循环状态值;这里的四部曲同样适用于for循环!!2.3.3for循环for(状态初始化;条件判断;状态修正){需要循环执行的语句;}for循环版的累加程序voidmain(){intsum=0;inti;for(i=1;i=100;i++){sum+=i;}cout1到100的累加和为:sumendl;}for循环版的累加程序voidmain(){intsum=0;for(inti=1;i=100;i++){sum+=i;}cout1到100的累加和为:sumendl;}变量i可以在初始化条件时才临时声明当循环体只有一条语句时,可省略{}更简洁的累加程序代码—合并1.for(inti=1;i=100;sum+=i,i++);(利用四部曲中循环体语句和循环状态修正语句的顺序执行关系进行简写,注意逗号、分号的作用)2.for(inti=1;i=100;sum+=i++);(利用后置++的特性,即先参与表达式运算,再自身++,进行简写。)回归“繁琐”的累加程序代码—拆分inti=1;for(;i=100;){sum+=i;i++;}inti=1;while(i=100){sum+=i;i++;}例:6能被1、2、3、6整除,这些数称为6的因子,请使用for循环列出36的所有因子。运行结果分析应对1-36之间的所有数进行判断,若能被36整除则是一个因子实现代码voidmain(){for(inti=1;i=36;i++){if(36%i==0)couti;}coutendl;}思考:若希望能对输入的任意整数求因子,且要求能连续输入,该如何修改本程序?思考好了么?我要的是这样的结果:voidmain(){intnum;coutpleaseinputanumber:;cinnum;while(num!=0){coutnum的因子有:;for(inti=1;i=num;i++){if(num%i==0)couti;}coutendlpleaseinputanumber:;cinnum;}}只能用多重循环了外层使用while循环内层使用for循环2.4循环设计例:请用循环语句输出以下内容112123123412345123456123456712345678123456789谢绝如下答案:cout1endl;cout12endl;cout123endl;cout1234endl;cout12345endl;cout123456endl;cout1234567endl;cout12345678endl;cout123456789endl;标准答案:for(inti=1;i=9;i++){for(intj=1;j=i;j++){coutj;}coutendl;}内层循环的条件初始化或条件判断,和外层循环的某些因素有关,这是很多多重循环的解决问题的关键!小结♥while在每一遍循环开始时检查条件是否成立,如果一开始条件就不成立,则循环中的语句将一次也没有执行。♥do...while的特殊之处在于,第一遍循环前,并不检查条件,所以,就算条件根本就不成立,循环也将并执行一次♥for的特殊之处在于,它除了条件判断以外,还明确地留出了条件初始化,条件变化的位置。阿谷爸爸阿谷爸爸补充♥循环条件直接设为:false,0的含义-----表明循环条件为假,无需循环♥循环条件直接设为:true,1(或其他非0值)的含义------表明循环条件永远为真,需要一直循环下去那么,循环非得等到条件不满足时才能结束么?2.5转移语句2400米长跑考试正在进行中…………while(已跑完的圈数6){跑一圈……;}while(已跑的圈数6){跑一圈……;if(我身体感觉不妙,要晕倒了)break;}cout“gameover!”;//break跳到这,^_^♥循环不是非要等到条件不满足时才能结束的!♥C++允许使用break语句来跳出当前循环体。break语句♥可用在switch中使流程跳出switch♥其主要作用是和if语句结合起来,在循环语句中用于跳出当前循环体:if(跳出循环的条件)break;break;从1开始累加,每次递增1,请问累加到哪个数,累加和超过2000?请输出该数,及当时的累加和。实战练习voidmain(){intsum=0;inti=1;while(){sum=sum+i;if(sum2000)break;i++;}coutiendl;coutsumendl;}true习题♥韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。编程计算韩信至少有多少兵。voidmain(){intx=1;while(true){if(x%5==1&&x%6==5&&x%7==4&&x%11==10){coutxendl;break;}x++;}}多重循环中的break语句。。。break到此处for(inti;;){for(;;){…………if(……)break;}cout“位置1”;…………}cout“位置2”;while(已跑完圈数6)//该循环负责一圈一圈跑完6圈{跑一圈。。。}2400米长跑考试还在进行中…………事实上,每一圈都是由一步步跑出来的;while(已跑完圈数6)//该循环负责一圈一圈跑完6圈{while(一圈未完)//内层循环负责一步一步跑完每一圈{跑一步;if(我身体感觉不妙)break;}if(我身体感觉不妙)break;}2400米长跑考试还在进行中…………事实上,每一圈都是由一步步跑出来的;我们应该每跑一步就检查一次是否快晕倒了最合理。位置1位置2boolneedBreak=false;//是否需要跳出循环while(已跑完图数6){while(一圈未完){跑一步;if(我身体感觉不妙){needBreak=true;//做一标志,需要break;break;}}if(needBreak)break;}完整的跑步代码voidmain(){intx=1;while(true){if(x%5==1&&x%6==5&&x%7==4&&x%11==10){coutxendl;break;}x++;}}回顾“韩信点兵”“韩信点兵”另解voidmain(){intx=1;boolfind=false;for(x=1;!find;x++){if(x%5==1&&x%6==5&&x%7==4&&x%11==10){coutxendl;find=true;}}}判别奇数、偶数程序一不小心,输了并不想要的0,我们的程序就不容商量地就退出了,连补过的机会都不给!不人性!更“人性化”的判别奇数、偶数程序要是这样多好:voidmain(){intnum;do{cout请输入一个整数(输入0结束):;cinnum;if(num%2)cout这是一个奇数!endl;elsecout这是一个偶数!endl;}whil

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

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

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

×
保存成功