📄 第11章 循环语句.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm --><HTML><HEAD><TITLE>教学--第十章 循环语句</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>P {
MARGIN: 1px 2px; LINE-HEIGHT: 150%
}
.节标题 {
FONT-WEIGHT: bold; FONT-SIZE: 12pt
}
TD {
FONT-SIZE: 9pt
}
.tdtitle {
FONT-SIZE: 20pt
}
.celltopline {
BORDER-TOP: #000000 1px solid
}
.menucell {
FONT-SIZE: 10pt
}
#glowtext {
FONT-SIZE: 10pt; FILTER: glow(color=red,strength=1); WIDTH: 100%
}
A:link {
FONT: 10pt 宋体; COLOR: blue; TEXT-DECORATION: none
}
A:visited {
FONT: 10pt 宋体; COLOR: purple; TEXT-DECORATION: none
}
A:active {
FONT: 10pt 宋体; COLOR: red; TEXT-DECORATION: underline
}
A:hover {
COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>
<META content="MSHTML 6.00.2900.2769" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=3><!-- 标题 --><!--标题结束 --><A name=页首></A>
<CENTER>
<TABLE height=154 cellSpacing=4 cellPadding=4 width=760 border=0>
<TBODY>
<TR>
<TD
style="FONT-SIZE: 10pt; MARGIN-LEFT: 12px; TEXT-INDENT: 20px; LINE-HEIGHT: 150%; MARGIN-RIGHT: 12px; FONT-FAMILY: 宋体"
width="100%" height=148>
<H2>第十一章 流程控制拾遗与混合训练</H2>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1">11.1
break</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1.1">11.1.1
break的作用与用法</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1.2">11.1.2
break 的一个“高级用法”</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1.3">11.1.3
break 在for循环中的一点注意</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1.4">11.1.4
多层循环中的break</A>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.2">11.2
continue</A>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.3">11.3
goto</A>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4">11.4
流程控制强化训练</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.1">11.4.1
求绝对值</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.2">11.4.2
判断用户输入字符的类型</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.3">11.4.3 等腰三角形图形的输出</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.4">11.4.4
输出正弦曲线图</A>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.5">11.4.5
标准体重计算程序</A></P>
<P> </P>
<P>说“拾遗”,可能你会以为本章的内容不是重点?那可不是,流程控制的内容并不多,却支撑着所有程序的框架!所所有有关流程的内容都是基础加重点。只是本章中继续讲到一些关键字可以改变流程,但并不独自构成完整流程结构。</P>
<P>另外,作为流程控制内容的结束章节,我们于最后安排了一些各流程混合使用的训练。</P>
<P> </P>
<H3><A name=11.1>11.1</A> break</H3>
<H4><A name=11.1.1>11.1.1</A> break的作用与用法</H4>
<P> </P>
<P>循环就象绕圈子。比如,体育课,跑1200米,跑道一圈400米,所以我们要做的事就是一边跑一边在心里计数(当然要已数,否则老师万一少计一圈,我们可就玩完了),当计数到3圈时,“循环”结束。
<P>如果,我在跑步时不幸由于体力不支而晕倒……怎么办?
<P>
<P>有两种办法,一种是在判断是否继续循环的条件中加入新增条件的判断:
<P>假设原来的循环表达为:
<P>
<P>while(已跑完的圈数 < 3)
<P>{
<P> 跑一圈……;
<P>}
<P>
<P>那么,加上附加条件后,循环表达为:
<P>
<P>while(已跑完的圈数 <3 && 我还跑得好好的) //&& 就是"并且",没忘吧?
<P>{
<P> 跑一圈……
<P>}
<P>
<P>第二种方法是在循环中使用条件分支,在指定的条件成立时,中途跳出循环,用于实现跳出的关键字为:break。
<P>
<P>while(已跑的圈数 < 3 )
<P>{
<P> 跑一圈……;
<P>
<P> if(我身体感觉不妙)
<P> <B>break;</B>
<P>}
<P>
<P>在循环中,每跑完一圈,都检查一下自已是否感觉不妙,如果是,则程序执行break,直接跳出while,而不管此时圈数是否到达3圈。
<P>
<P>还记得“小女孩买裙子”的故事吗?那时候,我们将“父母不给买小红裙 &&
我还没有哭累”作为循环继续的条件,如果使用break,则可以写成这样:
<P>while(父母不给买小红裙)
<P>{
<P> 我哭;
<P>
<P> if(我哭累了)
<P> <B>break;</B>
<P>}
<P>
<P>在循环中,“我”每哭一次,都想想是否累了,如果是,则程序执行break,直接跳出while,而不管此时爸妈是否已经买了我的裙。
<P>
<P>通过这两个例子,你应该注意到了,如果要用break,则if的条件(也就是要执行break分支的条件),正好是把原来放在循环判断中的条件反正过来。比如,原来是判断“我还跑得好好的”,现在则是判断“我身体感觉不妙”;原来是判断“我还没有哭累”,现在是判断“我哭累了”。
<P>一句话,原来是判断“是否继续循环”,现在是判断“是否跳出循环”……
<P>
<P>再来看那个“可以多次统计”的统计程序。看看是否也能把它改成使用break来结束循环。
<P>为了节省篇幅同时也是为了突出重点,我们将其中用于实现一次统计的代码,用一句<B>伪代码</B>来实现。(什么叫伪代码?我们用得很经常啊,就是那些用自然语言写的“代码”,这些代码当然无法在计算机上运行,它们只是要方便地表达实际代码要实现的功能)。
<P>
<P>int main(int argc, char* argv[])
<P>{
<P> 实现统计一个学员的成绩; //伪代码,详细代码请见上章相关部分
<P>
<P> do
<P> {
<P> //提问是否继续统计:
<P> cout <<"是否开始新的统计?(Y/N)?";
<P> cin >> c;
<P> }
<P> while( c == 'y' || c == 'Y');
<P>}
<P>
<P>改成用 break;
<P>int main(int argc, char* argv[])
<P>{
<P> 实现统计一个学员的成绩; //伪代码,详细代码请见上章相关部分
<P>
<P> do
<P> {
<P> //提问是否继续统计:
<P> cout <<"是否开始新的统计?(Y/N)?";
<P> cin >> c;
<P>
<P><B> //如果用户输出的不是字母Y,说明他不想继续统计了,我们需要中断循环。</B>
<P><B> if( c != 'y' && c != 'Y')</B>
<P><B> break;</B>
<P> }
<P> while (true);
<P>}
<P>
<P>请首先
while(true)部分,其条件直接写上真(true),表明这是一个无条件的循环(即,循环将无条地一直持续下去),这岂不犯了程序界的武林大岂:成了一个“死循环”?其实,相信你已明白,在循环体内,有一个break的分支在呢,当判断用户输入的字母既不是小写的y,也不是大写的Y,break就起它能起的作用了。
<P>
<P>三个例子,都是从循环判断的条件摘出一部分或全部(最后一个例子),然后循环体中,采用一个if判断,结束break来跳出循环。可能你会问:为什么要break呢?直接用原来的方法,在while处判断条件不是很好吗?
<P>
<P>break的长处在于,它可以在循环体内的任意位置进行判断。
<P>继续上一例。假设我们出于慎重,想在用户按入 N 时,再问他一句是否真的退出统计,则此时显示出了break的方便:
<P>int main(int argc, char* argv[])
<P>{
<P> 实现统计一个学员的成绩; //伪代码,详细代码请见上章相关部分
<P>
<P> do
<P> {
<P> //提问是否继续统计:
<P> cout <<"是否开始新的统计?(Y/N)?";
<P> cin >> c;
<P>
<P> //如果用户输出的不是字母Y,说明他不想继续统计了,我们需要中断循环。
<P> if( c != 'y' && c != 'Y')
<P><B> </B>{
<P><B>
//出于慎重起见,我们要再问一句用户是否真的不统计了?</B>
<P><B> cout <<
"您真的不想继续计算了?(Y:真的结束 / N:继续统计)";</B>
<P><B> cin >>
c;</B>
<P><B> </B>
<P><B>
//这回,如果用户输入Y,表明他真的不统计了:</B>
<P><B> if( c == 'Y'
|| c == 'y')</B>
<P><B>
break;</B>
<P> }
<P> }
<P> while (true);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -