内容正文:
第五章循环结构
1
第五章循环结构
while循环结构
while循环结构的用法
for循环结构
break语句和continue语句
循环的嵌套
do-while循环结构
典型例题
do-while循环结构
do-while循环结构的执行与while循环结构的稍有不同,这节课我们讨论do-while循环结构。
3
do-while循环结构
do-while循环结构的一般形式:
do
语句
while(表达式);
关键字do和while之间只能有一条语句。
do-while循环结构执行时,先执行语句,再对表达式求值,若值为真,重复上述过程,……,若表达式的值为假,则循环结构执行完毕。
do-while循环结构的一般形式:
do
语句
while(表达式);
关键字do和while之间只能有一条语句。
do-while循环结构执行时,先执行语句,再对表达式求值,若值为真,重复上述过程,……,若表达式的值为假,则循环结构执行完毕。
do-while循环结构执行的流程如图所示。先执行循环体,再判断循环条件的真假,是do-while循环结构与while循环结构的区别。
4
例5-18 用do-while循环结构改写例4-23。
程序将百分制成绩转换成ABCDE五级成绩,程序运行一次只能处理一个数据,使用起来非常不方便。
可以将处理算法作为do-while循环结构的循环体,先处理一次数据,再由用户决定是退出程序还是继续处理数据。
程序用使用do-while循环结构先处理一次数据,若用户的输入不是-1,则会一直处理数据。
此外,用户输入错误就直接退出程序的作法也不友好。
程序中当用户输入错误时,使用continue语句忽略处理过程,并再次让用户输入,极大地提升了程序的可用性。
5
例5-19 用户输入一个小于1的正数时,编程求出ln(1+x) = x - x2/2 + x3/3 -…… + (-1)k-1xk/k 0<x<1的值,要求精确到小数点后第9位(10-9)。
求出并加上第1项,求出并加上第2项,求出并加上第3项,……,求出并加上第k项。可用循环结构实现连加求和的过程,关键在于求第k项。
第k项(-1)k-1xk/k可改写成-(-x)k/k,表达式为-pow(-x, k)/k,其中pow是进行幂运算的库函数。直接求第k项会有大量的重复计算,效率比较低。
分母比较简单,可只分析相邻项分子的关系。由于第k项分子÷第k-1项分子=(-1)k-1xk ÷ (-1)k-2xk-1 = -x,因此,第k项的分子=第k-1项的分子 * -x。有了迭代公式,就可以方便地用迭代法求出第k项的分子了。
求出并加上第1项,求出并加上第2项,求出并加上第3项,……,求出并加上第k项。可用循环结构实现连加求和的过程,关键在于求第k项。
第k项(-1)k-1xk/k可改写成-(-x)k/k,表达式为-pow(-x, k)/k,其中pow是进行幂运算的库函数。直接求第k项会有大量的重复计算,效率比较低。
分母比较简单,可只分析相邻项分子的关系。由于第k项分子÷第k-1项分子=(-1)k-1xk ÷ (-1)k-2xk-1 = -x,因此,第k项的分子=第k-1项的分子 * -x。
有了迭代公式,就可以方便地用迭代法求出第k项的分子了。用迭代法求值的效率更高。
6
ln(1+x)=x-x2/2+x3/3 - …… + (-1)k-1xk/k
分子用变量fm表示。第1项的分子fm=x;,第2项的分子fm = fm * -x;,第3项的分子fm = fm * -x;,……。
用变量fn表示第k项,变量s表示结果。
处理第1项:k=1; fn=fm=x; s += fn;
处理第2项:++k; fm *= -x; fn = fm / k; s += fn;
处理第3项:++k; fm *= -x; fn = fm / k; s += fn;
……。
分子用变量fm表示。第1项的分子fm=x;,第2项的分子fm = fm * -x;,第3项的分子fm = fm * -x;,……。
用变量fn表示第k项,变量s表示结果。
处理第1项:k=1; fn=fm=x; s += fn;
处理第2项:++k; fm *= -x; fn = fm / k; s += fn;
处理第3项:++k; fm *= -x; fn = fm / k; s += fn;
……。
重复的非常明显,但第1项与其它项不同,与例5-11的情况类似,需要变通一下。
7
ln(1+x)=x-x2/2+x3/3 - …… + (-1)k-1xk/k
用变量fn表示第k项,变量s表示结果。
先求出第一项k=1; fn=fm=x; ,再开始重复“求和;求出下一项” 。
处理第1项: s