内容正文:
第5章 循环结构
本章内容
5.1循环结构算法
5.2 while语句
5.3 do-while语句
5.4 for语句
5.5 break语句和continue语句
5.6 循环结构的嵌套
5.7 综合案例
5.1循环结构算法
穷举法
基本思想是:根据题目的部分条件确定答案的大致范围,在此范围内对所有可能的情况一一列举,逐一验证,直到全部情况验证完
穷举法解题的过程是:
分析题目,确定答案的数据类型和大致范围。
根据答案的数据类型和范围,确定列举范围和方法,使得循环能遍历范围内的所有情况。
对范围内的所有情况一一验证,如果某一情况为问题的答案,则输出答案,继续遍历其它情况,直到遍历所有情况为止。
穷举法算法举例
【例5.1】鸡兔同笼问题。一个笼子中有100只鸡和兔子,共有260条腿,求鸡和兔子各有多少只?
分析:
首先分析问题的要求,即求鸡和兔子的只数,也就是说只要求出鸡(或兔子)的只数,兔子(或鸡)的只数也就计算出来了。根据问题的要求,确定鸡的只数的数据类型为整型,范围为0~100。
确定列举方法。假设鸡的只数用变量j表示,j的范围为0~100。
根据问题条件确定答案。在j在0~100的范围内,只要j*2+(100-j)*4等于260,那么j就是问题的正确答案。
迭代法
迭代是在程序中用同一个变量来存放每一次推出来的值,每一次循环都执行同一条语句,给同一变量赋以新的值,即用一个新值代替旧值,这种方法称为迭代
利用迭代算法解决问题,需要做好以下三个方面的工作:
确定迭代变量。
建立迭代关系式。
对迭代过程进行控制。
迭代算法举例
【例5.2】求1+2+3+……+100=?
分析:
(1)确定迭代变量。
本问题求1到100的和,可以将所有数据的和放入到一个变量sum中,sum初始为0,整个问题的求解过程就变为:
sum=sum+1
sum=sum+2
……
sum=sum+100
而变量sum就是迭代变量。
(2)建立迭代关系。
根据上面的迭代关系,可以发现所有的求过程都是类似的,因此上面的迭代可以抽象为下面的公式:
sum=sum+i;
i=i+1;
其中,i的范围为1~100,每迭代一次让i的值加1。
(3)对迭代过程进行控制。
在本问题中,变量i的值从1一直到100,当i等于101时,退出迭代。
5.2 while语句
语句一般形式为:
while(<表达式> )
循环语句;
如果表达式的值为真(非0)时,就执行循环语句;如果表达式的值为假(0)时,就退出循环
图5.1 while循环控制结构
程序举例
【例5.3】输入一个整数n,计算n!。
【例5.4】鸡兔同笼问题。一个笼子中有100只鸡和兔子,共有260条腿,求鸡和兔子各有多少只?
5.3 do-while语句
语句一般形式为:
do
循环语句
while(<表达式>);
先执行循环体,然后判断<表达式>的值,如果表达式的值为真(非0)时,就执行循环语句;如果表达式的值为假(0)时,就退出循环
图5.2 do-while循环结构
注意事项:
如果循环语句为多条语句,需要使用{}括起来构成复合语句。
如果<表达式>的值第一次就为假(0),退出循环,但循环语句已经执行1次,因此do…while循环结构的循环语句至少执行1次。
do…while语句的while(<表达式>)后面需要加分号。
除了第一次条件为假的情况,do…while循环和while循环完全等价。
程序举例
【例5.5】猜数游戏。系统产生一个0~100的随机整数,用户猜测这个随机数,如果猜错,继续猜测;如果猜对,根据用户猜测的次数,给出成绩。用户猜对或者输入-1,退出游戏。成绩的评定方法为:
小于等于4次猜中,Very good;
大于4次小于等于7次猜中,Good;
大于7次小于等于10次猜中,Normal;
大于10次猜中,Poor。
程序代码
#include <stdio.h>
#include <time.h>
main()
{
int n,u,c; /*n存放随机数,u用户输入的整数,c记录用户输入的次数*/
srand(time(NULL)); /*将时间作为随机数种子,必须添加*/
n=rand()%100; /*产生[0,100)之间的随机整数*/
c=0; /*输入次数置0*/
do
{
c++;
printf("
Please inut an Integer[0,100):");
scanf("%d",&u);
if(u>n) /*如果u大于n,提示用户输入的数据太大*/
printf("The number of inp