第5章循环结构程序设计
循环语句概述 for语句和while语句 直到型循环do-while语句 break语句与continue语句
应用举例
良好的源程序书写习惯──注释(续)
[Return]
循环语句概述
求1~100的累计和。
根据已有的知识,可以用“1+2+……+100”来求解,但显然很繁琐。现在换个思路来考虑:
首先设置一个累计器sum,其初值为0,利用sum += n来计算(n依次取1、2、……、100),只要解决以下3个问题即可: (1)将n的初值置为1; (2)每执行1次“sum += n”后,n增1; (3)当n增到101时,停止计算。此时,sum的值就是1~100的累计和。 根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。
在C语言中,可用以下语句实现循环:
(1)用for语句。
(2)用do-while语句。
(3)用while语句。
(4)用goto语句和if语句构成循环。使用goto语句实现求解1~100累计和的程序可以如下:
main()
{ int n=1, sum=0;
loop: sum += n; n++;
if (n<=100) goto loop;
printf(“sum=%d\n”, sum);
}
其中“loop:”为语句标号(格式:标号: 语句行),其命名遵循标识符命名规则。goto语句格式:goto 标号,功能为:使系统转向标号所在的语句行执行。
注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。 另外,从功能上说,for语句可完全代替当型循环语句while,所以该语句也不是必需的。
[Return]
for语句和while语句
在3条循环语句中,for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。[] 求1~100的累计和。/*案例代码文件名:*//*程序功能:求1~100的累计和*/main() { int i,sum=0; /*将累加器sum初始化为0*/ for(i=1; i<=100; i++) sum += i; /*实现累加*/ printf("sum=%d\n",sum); } [程序演示]
程序运行情况如下:
sum=5050
[] 求n的阶乘n!(n!=1*2*……*n)。/*案例代码文件名:*//*程序功能:求n!*/main() { int i, n; long fact=1; /*将累乘器fact初始化为1*/ printf(“Input n: ”); scanf(“%d”, &n);
for(i=1; i<=n; i++) fact *= i; /*实现累乘*/
printf("%d ! = %ld\n", n, fact); } [程序演示]
程序运行情况如下:Input n: 5↙5 ! = 120
for([变量赋初值];[循环继续条件];[循环变量增值]) { 循环体语句组;}
执行过程如图5-1所示。
(1)求解“变量赋初值”表达式。
(2)求解“循环继续条件”表达式。如果其值非0,执行(3);否则,转至(4)。
(3)执行循环体语句组,并求解“循环变量增值”表达式,然后转向(2)。
(4)执行for语句的下一条语句。
(1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可缺省,甚至全部缺省,但其间的分号不能省略。
(2)当循环体语句组仅由一条语句构成时,可以不使用复合语句形式,如上例所示。
(3)“循环变量赋初值”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。
例如,for(sum=0;i<=100;i++) sum += i;
for(sum=0,i=1;i<=100;i++) sum += i;
(4)“循环继续条件”部分是一个逻辑量,除一般的关系(或逻辑)表达式外,也允许是数值(或字符)表达式。
(1)一般格式 while(循环继续条件) { 循环体语句组;}
(2)执行过程
执行过程如图5-2所示。
1)求解“循环继续条件”表达式。如果其值为非0,转2);否则转3)。
2)执行循环体语句组,然后转1)。
3)执行while语句的下一条。
显然,while循环是for循
第05章 循环结构程序设计 来自淘豆网www.taodocs.com转载请标明出处.