第5章循环结构程序设计
教学目标
掌握循环结构的构成;
掌握循环控制变量的使用;
熟练掌握三种基本的循环控制语句;
熟练掌握一重循环的构建方法,学会构建二重循环;
理解含有多重循环的程序。
5.1循环结构程序设计的概念
循环结构(又称重复结构)是程序设计中一种很重要的基本结构。在实际问题中,常常需要进行大量的重复处理,循环结构可以使我们只写很少的语句,而让计算机反复执行,从而完成大量类同的计算。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。
C语言提供了while语句、dowhile语句和for语句实现循环结构。
5.2while语句
5.2.1while语句的一般格式
由while语句构成的循环也称“当”循环,其一般形式为:
while(表达式)循环体;
说明:
(1) while是C语言的关键字。
(2) while后一对圆括号中的表达式,可以是C语言中任意合法的表达式,由它来控制循环体是否执行。
(3) 在语法上,要求循环体可以是一条简单的可执行语句; 若循环体内需要多个语句,应该用大括号括起来,组成复合语句。
5.2.2while语句的执行过程
while语句的流程图如图51所示,其特点是先判断、后执行,若条件不成立,有可能一次也不执行。其具体执行过程如下。
图51while语句的流程图
(1) 计算while后一对圆括号中表达式的值。当值为非零时,执行步骤(2); 当值为零时,执行步骤(4)。
(2) 执行循环体中语句。
(3) 转去执行步骤(1)。
(4) 退出while循环。
由以上叙述可知,while后一对圆括号中表达式的值决定了循环体是否执行,因此,进入while循环后,一定要有能使此表达式的值变为0的操作; 否则,循环将会无限制地进行下去。
注意: 不要把由if语句构成的选择结构与由while语句构成的循环结构混同起来。若if后条件表达式的值为非0,其后的if子句只执行一次; 而while后条件表达式的值为非0时,其后的循环体中的语句将重复执行,而且在设计循环时,通常应在循环体内改变条件表达式中有关变量的值,使条件表达式的值*终变成0,以便能及时退出循环。
图52例51的流程图
【例51】编写求1 2 3 … 100的值的程序。
分析: 这是一个求100个数的累加和的问题。所加的加数从1变化到100,可以看到加数是有规律变化的,后一个加数比前一个加数增1,**个加数为1,*后一个加数为100,因此可以在循环中使用一个整型变量i,每循环一次使i增1,一直循环到i的值超过100,用这个办法就解决了所需的加数问题; 但是要特别注意的是,变量i需要有一个正确的初值,在这里它的初值应当设定为0。
下面要解决的问题是求累加和。设用一个变量sum来存放这100个数的和值,可以先求0 1的值并将其放在sum中,然后把sum中的数加上2再存放在sum中,以此类推,这和人们心算的过程没有什么区别,sum代表着人们脑中累加的那个和数,不同的是心算的过程由人们自己控制。在这里,sum累加的过程要放在循环中,由计算机来判断所加的数是否已经超过100,加数则放在变量i中,并在循环过程中一次次增1,具体流程图如图52所示。
以下就是求累加和的典型算法。
main()
{ int i,sum=0;/*sum的初值为0*/
i=1;
while(i<=100) /*当i小于或等于100时执行循环体*/
{
sum=sum i;
i ;
} /*在循环体中累加一次,i增1*/
printf("sum=%d\n",sum);
}
运行结果为:
sum=5050
注意:
(1) 如果在**次进入循环时,while后圆括号内表达式的值为0,循环一次也不执行。在本程序中,如果i的初值大于100,将使表达式i<=100的值为0,循环体也不执行。
(2) 在循环体中一定要有使循环趋向结束的操作,以上循环体内的语句i 使i不断增1,当i>100时,循环结束。如果没有i ;这一语句,则i的值始终不变,循环将无限进行。
(3) 在循环体中,语句的先后位置必须符合逻辑,否则将会影响运算结果,例如,若将上例中的while循环体改写如下:
while(i<=100)
{i ; /*先计算i ,后计算sum的值*/
sum=sum i; }
运行后,将输出:
sum=5150
在运行的过程中,少加了**项的值1,而多加了*后一项的值101。