C语言循环结构程序设计
发布时间:2024-11-25
发布时间:2024-11-25
C语言循环结构程序设计
第6章
循环结构程序设计
6.1 循环语句概述 6.2 for语句和while语句 6.3 直到型循环do-while语句 6.4 break语句与continue语句 6.5 应用举例 良好的源程序书写习惯──注释(续) [Return]
C语言循环结构程序设计
6.1 循环语句概述求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语句。
C语言循环结构程序设计
6.2 goto语句和用goto语句构成循环[案例6.1]使用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]
C语言循环结构程序设计
6.3 while语句1.while语句格式 (1)一般格式 while(循环继续条件) { 循环体语句组;} (2)执行过程 2. 执行过程如图6.1所示。 1)求解“循环继续条件”表达式。如果其值 为非0,转2);否则转3)。 2)执行循环体语句组,然后转1)。 3)执行while语句的下一条。
C语言循环结构程序设计
[案例6.2] 用while语句求1~100的累计和。 /*案例代码文件名:AL5_3.C*/ /*程序功能:求1~100的累计和*/ main() { int i=1,sum=0; /*初始化循环控制变量i和累计器sum*/ while( i<=100 ) { sum += i; /*实现累加*/ i++; /*循环控制变量i增1*/ } printf(“sum=%d\n”,sum); } [程序演示] 程序运行情况如下: sum=5050
C语言循环结构程序设计
6.4 直到型循环do-while语句1.一般格式 do { 循环体语句组; } while(循环继续条件); /*本行的分号不能缺省*/ 当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。
2.执行过程 执行过程如图6.3所示。 (1)执行循环体语句组。 (2)计算“循环继续条件”表达式。如果“循环继续条件”表 达式的值为非 0(真),则转向(1)继续执行;否则,转向(3)。 (3)执行do-whil
e的下一条语句。 do-while循环语句的特点是:先执行循环体语句组,然后再判断 循环条件。
C语言循环结构程序设计
[案例6.3] 用do-while语句求解1~100的累计和。 /*案例代码文件名:AL5_4.C*/ /*程序功能:求1~100的累计和*/ main() { int i=1, sum=0; /*定义并初始化循环控制变量,以及累计器*/ do { sum += i; /*累加*/ i++; } while(i<=100); /*循环继续条件:i<=100*/ printf(“sum=%d\n”,sum); } [程序演示]
do-while语句比较适用于处理:不论条件是否成立, 先执行1次循环体语句组的情况。除此之外,do-while语 句能实现的,for语句也能实现,而且更简洁。 [Return]
C语言循环结构程序设计
6.5 for语句在3条循环语句中,for语句最为灵活,不仅可用于循 环次数已经确定的情况,也可用于循环次数虽不确定、 但给出了循环继续条件的情况。 [案例6.4] 用for语句求1~100的累计和。/*案例代码文件名:AL5_1.C*/ /*程序功能:求1~100的累计和*/
main() { int i,sum=0; /*将累加器sum初始化为0*/ for(i=1; i<=100; i++) sum += i; /*实现累加*/ printf("sum=%d\n",sum); } [程序演示]程序运行情况如下: sum=5050
C语言循环结构程序设计
[案例6.5] 求n的阶乘n!(n!=1*2*……*n)。 /*案例代码文件名:AL5_2.C*/ /*程序功能:求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 [程序演示]
/*实现累乘*/
C语言循环结构程序设计
1.for语句的一般格式 for([变量赋初值];[循环继续条件];[循环变量增值]) { 循环体语句组;} 2.for语句的执行过程 执行过程如图6.6示。 (1)求解“变量赋初值”表达式。 (2)求解“循环继续条件”表达式。如果其值非0,执 行(3);否则,转至(4)。 (3)执行循环体语句组,并求解“循环变量增值”表达 式,然后转向(2)。 (4)执行for语句的下一条语句。 3.说明 (1)“变量赋初值”、“循环继续条件”和“循环变量 增值”部分均可缺省,甚至全部缺省,但其间的分号不能省 略。
C语言循环结构程序设计
(2)当循环体语句组仅由一条语句构成时,可以不 使用复合语句形式,如上例所示。 (3)“循环变量赋初值”表达式,既可以是给循环 变量赋初值的赋值表达式,也可以是与此无关的其它表 达式(如逗号表达式)。 例如,for(sum=0;i<=100;i++) sum += i; for(sum=0,i=1;i<=100;i++) sum += i; (4)“循环继续条件”部分是一个逻辑量,除一般 的关系(或逻辑)表达式外,也允许是数值(或字符) 表达式。
C语言循环结构程序设计
6. 6.循环嵌套(1)循环语句的循环体内,又包含另一个完整的循 环结构,称为循环的嵌套。循环嵌套的概念,对所有高 级语言都是一样的。 (2)for语句和while语句允许嵌套,do-while语句也 不
例外。
[Return]
C语言循环结构程序设计
6.8 break语句与continue语句为了使循环控制更加灵活,C语言提供了break语句和continue语句。 1.一般格式: break; continue; 2.功能 (1)break:强行结束循环,转向执行循环语句的下一条语句。 (2)continue:对于for循环,跳过循环体其余语句,转向循环变 量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句, 但转向循环继续条件的判定。 3.break和continue语句对循环控制的影响如图5-4所示。 4.说明 (1)break能用于循环语句和switch语句中,continue只能用于循环 语句中。 (2)循环嵌套时,break和continue只影响包含它们的最内层循环, 与外层循环无关。 [Return]
C语言循环结构程序设计
6.7 几种循环的比较1. 四种循环一般均可相互代替,不提倡用 goto 循环; 2. 循环结束条件位置与控制; 3. 循环条件初始化及判断; 4. 断路(break)与短路(continue)。 for 最灵活!
C语言循环结构程序设计
6.9 应用举例[例6.6] 求Fibonacci数列的前40个数。该数列的生成方法为:F1=1, F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3个数开始,每个数等于前2个数之 和。 算法设计。参考源程序如下: /*案例代码文件名:AL5_6.C*/ main() { long int f1=1,f2=1; int i=1;
/*定义并初始化数列的头2个数*/ /*定义并初始化循环控制变量i*/
for( ; i<=20; i++ ) /*1组2个,20组40个数*/ { printf(“%15ld%15ld”, f1, f2); /*输出当前的2个数*/ if(i%2==0) printf(“\n”); /*输出2次(4个数),换行*/ f1 += f2; f2 += f1; /*计算下2个数*/ } } [程序演示]
C语言循环结构程序设计
[例6.7] 输出10~100之间的全部素数。所谓素数n是 指,除1和n之外,不能被2~(n-1)之间的任何整数整 除。 算法设计要点: (1)显然,只要设计出判断某数n是否是素数的算 法,外面再套一个for循环即可。 (2)判断某数n是否是素数的算法:根据素数的定 义,用2~(n-1)之间的每一个数去整除n,如果都不能 被整除,则表示该数是一个素数。 判断一个数是否能被另一个数整除,可通过判断它 们整除的余数是否为0来实现。 参考源程序如下: main(){ int i=11, j, counter=0; for( ; i<=100; i+=2) /*外循环:为内循环提供一个整数i*/
上一篇:温度计量培训课件
下一篇:吉林大学机械设计2-1