📄 sec3-2.htm
字号:
tab-stops:list 18.0pt;mso-char-indent-size:12pt'><a name="第3_2_1a"></a><![if !supportLists]><span
lang=EN-US style='font-family:宋体;mso-bidi-font-family:宋体;color:red'><span
style='mso-list:Ignore'>a)<span style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=ZH-CN style='font-family:宋体;
color:red'>一般形式</span><span lang=EN-US style='font-family:宋体;color:red'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=ZH-CN style='mso-font-kerning:0pt'>这种</span><span
lang=EN-US style='mso-font-kerning:0pt'>DO</span><span lang=ZH-CN
style='mso-font-kerning:0pt'>构造形式非常简单,一般形式为:</span><span lang=EN-US
style='mso-font-kerning:0pt'><o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:22.8pt;text-indent:24.0pt;mso-char-indent-count:
2.0;line-height:15.0pt;mso-line-height-rule:exactly'><span lang=EN-US
style='font-size:12.0pt;font-family:宋体;color:#FF6600'>[</span><span lang=ZH-CN
style='font-size:12.0pt;font-family:宋体;color:#FF6600'>构造名</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体;color:#FF6600'>:] DO<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:106.35pt;text-indent:24.0pt;mso-char-indent-count:
2.0;line-height:15.0pt;mso-line-height-rule:exactly;mso-char-indent-size:12pt'><span
lang=ZH-CN style='font-size:12.0pt;font-family:宋体;color:#FF6600'>块</span><span
lang=EN-US style='font-size:12.0pt;font-family:宋体;color:#FF6600'><o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:3.0cm;text-indent:21.25pt;mso-char-indent-count:
1.77;line-height:15.0pt;mso-line-height-rule:exactly;mso-char-indent-size:12pt'><span
lang=EN-US style='font-size:12.0pt;font-family:宋体;color:#FF6600'>END DO<o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly;mso-char-indent-size:12pt'><span lang=ZH-CN style='mso-font-kerning:
0pt'>不带循环控制变量的</span><span lang=EN-US style='mso-font-kerning:0pt'>DO</span><span
lang=ZH-CN style='mso-font-kerning:0pt'>构造控制机制为:进入</span><span lang=EN-US
style='mso-font-kerning:0pt'>DO</span><span lang=ZH-CN style='mso-font-kerning:
0pt'>构造体后,从</span><span lang=EN-US style='mso-font-kerning:0pt'>DO</span><span
lang=ZH-CN style='mso-font-kerning:0pt'>语句下面第一句执行起顺次执行到</span><span lang=EN-US
style='mso-font-kerning:0pt'>END DO</span><span lang=ZH-CN style='mso-font-kerning:
0pt'>前的最后一句,再返上来从</span><span lang=EN-US style='mso-font-kerning:0pt'>DO</span><span
lang=ZH-CN style='mso-font-kerning:0pt'>语句下面第一句执行起,重复执行整个</span><span
lang=EN-US style='mso-font-kerning:0pt'>DO</span><span lang=ZH-CN
style='mso-font-kerning:0pt'>块。如此反复执行</span><span lang=EN-US style='mso-font-kerning:
0pt'>DO</span><span lang=ZH-CN style='mso-font-kerning:0pt'>块,其间如遇到</span><span
lang=EN-US style='mso-font-kerning:0pt'>EXIT</span><span lang=ZH-CN
style='mso-font-kerning:0pt'>语句,就停止执行</span><span lang=EN-US style='mso-font-kerning:
0pt'>DO</span><span lang=ZH-CN style='mso-font-kerning:0pt'>块,退出循环,转向执行</span><span
lang=EN-US style='mso-font-kerning:0pt'>END DO</span><span lang=ZH-CN
style='mso-font-kerning:0pt'>下面的语句。对于不带控制变量的</span><span lang=EN-US
style='mso-font-kerning:0pt'>DO</span><span lang=ZH-CN style='mso-font-kerning:
0pt'>构造,</span><span lang=EN-US style='mso-font-kerning:0pt'>DO</span><span
lang=ZH-CN style='mso-font-kerning:0pt'>块中必须有</span><span lang=EN-US
style='mso-font-kerning:0pt'>EXIT</span><span lang=ZH-CN style='mso-font-kerning:
0pt'>语句,使它停止循环,否则循环将无休无止地一直进行下去,形成死循环。</span><span lang=EN-US style='mso-font-kerning:
0pt'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=EN-US style='mso-font-kerning:0pt'>DO</span><span
lang=ZH-CN style='mso-font-kerning:0pt'>构造也可在自身中再嵌</span><span lang=EN-US
style='mso-font-kerning:0pt'>DO</span><span lang=ZH-CN style='mso-font-kerning:
0pt'>构造,例如:</span><span lang=EN-US style='mso-font-kerning:0pt'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='margin-left:49.55pt;mso-para-margin-left:
4.72gd;line-height:15.0pt;mso-line-height-rule:exactly'><span lang=EN-US
style='mso-font-kerning:0pt'>FIRST: DO<o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='margin-left:110.25pt;mso-para-margin-left:
10.5gd;text-indent:28.3pt;mso-char-indent-count:2.36;line-height:15.0pt;
mso-line-height-rule:exactly;tab-stops:91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=ZH-CN style='mso-font-kerning:0pt'>块</span><span lang=EN-US
style='mso-font-kerning:0pt'>1</span><span lang=ZH-CN style='mso-font-kerning:
0pt'>的第一部分</span><span lang=EN-US style='mso-font-kerning:0pt'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='margin-left:49.55pt;mso-para-margin-left:
4.72gd;line-height:15.0pt;mso-line-height-rule:exactly'><span lang=EN-US
style='mso-font-kerning:0pt'>SECOND:<span
style='mso-spacerun:yes'> </span>DO<o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='margin-left:134.6pt;mso-para-margin-left:
12.82gd;text-indent:28.3pt;mso-char-indent-count:2.36;line-height:15.0pt;
mso-line-height-rule:exactly;tab-stops:183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=ZH-CN style='mso-font-kerning:0pt'>块</span><span lang=EN-US
style='mso-font-kerning:0pt'>2<o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='margin-left:110.25pt;mso-para-margin-left:
10.5gd;text-indent:28.3pt;mso-char-indent-count:2.36;line-height:15.0pt;
mso-line-height-rule:exactly;tab-stops:91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='mso-font-kerning:0pt'>END DO SECOND<o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='margin-left:110.25pt;mso-para-margin-left:
10.5gd;text-indent:28.3pt;mso-char-indent-count:2.36;line-height:15.0pt;
mso-line-height-rule:exactly;tab-stops:91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=ZH-CN style='mso-font-kerning:0pt'>块</span><span lang=EN-US
style='mso-font-kerning:0pt'>1</span><span lang=ZH-CN style='mso-font-kerning:
0pt'>的第二部分</span><span lang=EN-US style='mso-font-kerning:0pt'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='margin-left:92.1pt;mso-para-margin-left:
8.77gd;line-height:15.0pt;mso-line-height-rule:exactly;tab-stops:91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='mso-font-kerning:0pt'>END DO FIRST<o:p></o:p></span></p>
<p style='margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;
tab-stops:list 18.0pt'><a name="第3_2_1b"></a><![if !supportLists]><span
lang=EN-US style='font-family:宋体;mso-bidi-font-family:宋体;color:red'><span
style='mso-list:Ignore'>b)<span style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=EN-US style='font-family:宋体;
color:red'>EXIT</span><span lang=ZH-CN style='font-family:宋体;color:red'>语句</span><span
lang=EN-US style='font-family:宋体;color:red'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=ZH-CN style='mso-font-kerning:0pt'>许多实际问题中无法预先给定循环次数,而是只给出一个条件,满足此条件时就继续执行循环体,否则退出循环,故</span><span
lang=ZH-CN>有条件循环时循环次数不是固定的。除了可以用</span><span lang=EN-US>GOTO</span><span
lang=ZH-CN>语句跳出循环外</span><span lang=EN-US>(</span><span lang=ZH-CN>非结构化方法</span><span
lang=EN-US>)</span><span lang=ZH-CN>,</span><span lang=EN-US>F90</span><span
lang=ZH-CN>还给出了其它用于条件循环方式的语句。</span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=EN-US>EXIT</span><span lang=ZH-CN>语句的作用是停止循环,使控制退出循环结构,因此又称出口语句。它的一般形式是:</span><span
lang=EN-US style='color:#FF6600'>EXIT [DO</span><span lang=ZH-CN
style='color:#FF6600'>构造名</span><span lang=EN-US style='color:#FF6600'>]</span><span
lang=ZH-CN>。执行</span><span lang=EN-US>EXIT</span><span lang=ZH-CN>语句,其功能是导致循环终止。如果语句引用了</span><span
lang=EN-US>DO</span><span lang=ZH-CN>构造名,则它属于该构造,否则属于它所出现的最内层</span><span
lang=EN-US>DO</span><span lang=ZH-CN>构造。对于多层嵌套的</span><span lang=EN-US>DO</span><span
lang=ZH-CN>构造,尤为需要指明是从哪一个构造名的</span><span lang=EN-US>DO</span><span lang=ZH-CN>构造中退出。如当</span><span
lang=EN-US>EXIT</span><span lang=ZH-CN>指明从第三层结构退出,则第三层与第三层内各层嵌套的</span><span
lang=EN-US>DO</span><span lang=ZH-CN>构造都将被停止执行。</span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=ZH-CN>单独使用将导致无条件地终止循环,没有实用意义。为了控制</span><span lang=EN-US>DO</span><span
lang=ZH-CN>结构在满足某种条件时停止循环,通常将</span><span lang=EN-US>EXIT</span><span
lang=ZH-CN>语句与</span><span lang=EN-US>IF</span><span lang=ZH-CN>语句结合使用,即在</span><span
lang=EN-US>DO</span><span lang=ZH-CN>构造内使用:</span><span lang=EN-US
style='color:#FF6600;mso-font-kerning:0pt'>IF(</span><span lang=ZH-CN
style='color:#FF6600;mso-font-kerning:0pt'>逻辑表达式</span><span lang=EN-US
style='color:#FF6600;mso-font-kerning:0pt'>) EXIT</span><span lang=ZH-CN>。当逻辑表达式为真时,</span><span
lang=EN-US>EXIT</span><span lang=ZH-CN>语句被执行,循环终止,否则循环将继续进行。</span><span
lang=EN-US style='color:#FF6600;mso-font-kerning:0pt'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='line-height:15.0pt;mso-line-height-rule:
exactly'><span lang=ZH-CN>例:</span><span lang=EN-US>do</span><span lang=ZH-CN>;</span><span
lang=EN-US>if((input.eq.'n').or.(input.eq.'y')) exit</span></p>
<p class=MsoBodyTextIndent2 style='margin-left:49.65pt;line-height:15.0pt;
mso-line-height-rule:exactly'><span lang=EN-US>write(*,'(a)') 'Enter y or n:'</span><span
lang=ZH-CN>;</span><span lang=EN-US>read(*,'(a)') input</span></p>
<p class=MsoBodyTextIndent2 style='margin-left:24.0pt;line-height:15.0pt;
mso-line-height-rule:exactly'><span lang=EN-US>end do</span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=ZH-CN>例:一个猜数游戏。用随机数产生器产生</span><span lang=EN-US>1</span><span
lang=ZH-CN>-</span><span lang=EN-US>10</span><span lang=ZH-CN>之间的一个整数,你猜它,如果猜得太大或太小都会提示,猜对了结束。</span><span
lang=EN-US><a href="example/e_321_01.f90">[e_321_01.f90]</a></span></p>
<p class=MsoBodyTextIndent2 style='line-height:normal'><span lang=ZH-CN>例:求级数</span><span
lang=EN-US><span style='position:relative;top:14.0pt;mso-text-raise:-14.0pt'><!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:173.25pt;
height:33pt' o:ole="">
<v:imagedata src="Sec3-2.files/image001.wmz" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=231 height=44
src="Sec3-2.files/image016.gif" v:shapes="_x0000_i1025"><![endif]></span><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1025"
DrawAspect="Content" ObjectID="_1069416768">
</o:OLEObject>
</xml><![endif]--></span><span lang=ZH-CN>的前</span><span lang=EN-US>n</span><span
lang=ZH-CN>项和,但当某项绝对值≤</span><span lang=EN-US>10</span><sup><span lang=ZH-CN>-</span><span
lang=EN-US>5</span></sup><span lang=ZH-CN>时,虽未满</span><span lang=EN-US>n</span><span
lang=ZH-CN>项,也因满足精度而不再加入下一项。</span><span lang=EN-US><a
href="example/e_321_02.f90">[e_321_02.f90]</a></span></p>
<p style='margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;
tab-stops:list 18.0pt'><a name="第3_2_1c"></a><![if !supportLists]><span
lang=EN-US style='font-family:宋体;mso-bidi-font-family:宋体;color:red'><span
style='mso-list:Ignore'>a)<span style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=EN-US style='font-family:宋体;
color:red'>CYCLE</span><span lang=ZH-CN style='font-family:宋体;color:red'>语句</span><span
lang=EN-US style='font-family:宋体;color:red'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=EN-US>CYCLE</span><span lang=ZH-CN>语句的一般形式为:</span><span
lang=EN-US style='color:#FF6600;mso-font-kerning:0pt'>CYCLE [DO</span><span
lang=ZH-CN style='color:#FF6600;mso-font-kerning:0pt'>构造名</span><span
lang=EN-US style='color:#FF6600;mso-font-kerning:0pt'>]</span><span lang=ZH-CN>。</span><span
lang=EN-US>CYCLE</span><span lang=ZH-CN>语句的功能是在循环中跳过它下面那部分的</span><span
lang=EN-US>DO</span><span lang=ZH-CN>块,重新返回到块的第一个语句开始执行。运用</span><span
lang=EN-US>CYCLE</span><span lang=ZH-CN>语句,可以在执行循环中某一次迭代时不执行下面的部分语句,使</span><span
lang=EN-US>DO</span><span lang=ZH-CN>结构更为灵活。</span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=EN-US>CYCLE</span><span lang=ZH-CN>语句与</span><span
lang=EN-US>EXIT</span><span lang=ZH-CN>语句一样属于特定的</span><span lang=EN-US>DO</span><span
lang=ZH-CN>构造。如果语句引用了</span><span lang=EN-US>DO</span><span lang=ZH-CN>构造名,则它属于该构造,否则属于它所出现的最内层</span><span
lang=EN-US>DO</span><span lang=ZH-CN>构造。</span><a name="_Hlk532230865"></a><a
href="example/e_321_03.f90"><span style='mso-bookmark:_Hlk532230865'><span
lang=EN-US>[e_321_03.f90]</span></span><span style='mso-bookmark:_Hlk532230865'></span></a></p>
<p class=MsoNormal align=center style='margin-top:15.6pt;margin-right:0cm;
margin-bottom:15.6pt;margin-left:0cm;mso-para-margin-top:1.0gd;mso-para-margin-right:
0cm;mso-para-margin-bottom:1.0gd;mso-para-margin-left:0cm;text-align:center'><a
name="第3_2_2"><span lang=EN-US style='font-size:16.0pt;mso-bidi-font-size:12.0pt;
mso-fareast-font-family:楷体_GB2312'>3.2.2</span></a><span lang=EN-US
style='font-size:16.0pt;mso-bidi-font-size:12.0pt;mso-fareast-font-family:楷体_GB2312'>
<span style='color:red'>DO</span></span><span lang=EN-US style='font-size:14.0pt;
mso-bidi-font-size:12.0pt;font-family:宋体'> </span><span lang=EN-US
style='font-size:16.0pt;mso-bidi-font-size:12.0pt;mso-fareast-font-family:楷体_GB2312;
color:red'>WHILE</span><span lang=ZH-CN style='font-size:16.0pt;mso-bidi-font-size:
12.0pt;font-family:楷体_GB2312;mso-ascii-font-family:"Times New Roman";
color:red'>语句</span><span lang=EN-US style='font-size:16.0pt;mso-bidi-font-size:
12.0pt;mso-fareast-font-family:楷体_GB2312;color:red'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=ZH-CN style='mso-font-kerning:0pt'>在</span><span
lang=EN-US style='mso-font-kerning:0pt'>F90</span><span lang=ZH-CN
style='mso-font-kerning:0pt'>增强的功能中,增加了</span><span lang=EN-US
style='color:fuchsia'>DO WHILE</span><span lang=ZH-CN style='mso-font-kerning:
0pt'>语句以支持当型循环。因此,</span><span lang=EN-US style='mso-font-kerning:0pt'>DO</span><span
lang=ZH-CN style='mso-font-kerning:0pt'>构造不仅仅能完成循环次数已知的循环,而且能够完成此数未知的循环。它的一般形式为:</span><span
lang=EN-US style='color:#FF6600;mso-font-kerning:0pt'>[</span><span lang=ZH-CN
style='color:#FF6600;mso-font-kerning:0pt'>构造名</span><span lang=EN-US
style='color:#FF6600;mso-font-kerning:0pt'>] DO WHILE (</span><span lang=ZH-CN
style='color:#FF6600;mso-font-kerning:0pt'>逻辑表达式</span><span lang=EN-US
style='color:#FF6600;mso-font-kerning:0pt'>)</span><span lang=ZH-CN
style='mso-font-kerning:0pt'>。</span><span lang=EN-US style='mso-font-kerning:
0pt'>DO WHILE</span><span lang=ZH-CN style='mso-font-kerning:0pt'>语句的规则和块</span><span
lang=EN-US style='mso-font-kerning:0pt'>IF</span><span lang=ZH-CN
style='mso-font-kerning:0pt'>语句所需满足的的块规则类似。</span><span lang=EN-US
style='mso-font-kerning:0pt'><o:p></o:p></span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=ZH-CN>例:上面的例子中用</span><span lang=EN-US>EXIT</span><span
lang=ZH-CN>语句退出循环等价于</span></p>
<p class=MsoBodyTextIndent2 style='margin-left:24.0pt;line-height:15.0pt;
mso-line-height-rule:exactly'><span lang=EN-US>do while
((input.ne.'n').and.(input.ne.'y'))</span></p>
<p class=MsoBodyTextIndent2 style='margin-left:49.65pt;line-height:15.0pt;
mso-line-height-rule:exactly'><span lang=EN-US>write(*,'(a)') 'Enter y or n:'</span><span
lang=ZH-CN>;</span><span lang=EN-US>read(*,'(a)') input</span></p>
<p class=MsoBodyTextIndent2 style='margin-left:24.0pt;line-height:15.0pt;
mso-line-height-rule:exactly'><span lang=EN-US>end do</span></p>
<p class=MsoBodyTextIndent2 style='line-height:17.0pt;mso-line-height-rule:
exactly'><span lang=ZH-CN style='mso-font-kerning:0pt'>例:对一个大于或等于</span><span
lang=EN-US style='mso-font-kerning:0pt'>3</span><span lang=ZH-CN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -