《五章循环控制ppt课件.ppt》由会员分享,可在线阅读,更多相关《五章循环控制ppt课件.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院五章循环控制ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院第五章第五章 循环控制循环控制本章要点本章要点:建立循环程序设计的基本概念和逻辑思维建立循环程序设计的基本概念和逻辑思维 掌握掌握C语言循环程序设计的方法语言循环程序设计的方法C语语言言程程序序设设计计第第五五章章四川理工学院
2、四川理工学院四川理工学院四川理工学院 第五章第五章 循环控制循环控制5.1 5.1 概述概述1.1.引入循环控制语句的作用引入循环控制语句的作用 当满足一定条件时当满足一定条件时,重复执行一段程序。重复执行一段程序。2.2.设置循环需要考虑的问题设置循环需要考虑的问题 循环初值;循环条件的设置;循环体应包括的循环初值;循环条件的设置;循环体应包括的语句;循环条件的修改。语句;循环条件的修改。3.C3.C语言中可用以下语句实现循环语言中可用以下语句实现循环 循环结构主要有:循环结构主要有:(1 1)用)用gotogoto语句和语句和ifif语句构成循环;语句构成循环;(2 2)用)用whilew
3、hile语句;语句;(3 3)用)用do-whiledo-while语句;语句;(4 4)用)用forfor语句。语句。C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院用用if语句和语句和goto语句构成循环,语句构成循环,第五章第五章 循环控制循环控制5.2 goto5.2 goto语句以及用语句以及用gotogoto语句构成循环语句构成循环 一般形式:一般形式:goto goto 标号;标号;标号:语句标号:语句其中:其中:标号用标识符表示,即由字母、数字和下划线标号用标识符表示,即由字母、数字和下划线组成,且首字符必须为字母或下划线。组成,且首字符必
4、须为字母或下划线。注意:注意:不能用整数来作标号。不能用整数来作标号。用途:用途:1.1.与与ifif语句一起构成循环结构。语句一起构成循环结构。2.2.从循环体中跳到循环体外从循环体中跳到循环体外(常指最深层)。常指最深层)。3.3.改变程序自上而下的执行顺序。改变程序自上而下的执行顺序。缺点:缺点:滥用滥用goto语句,可使程序无规律、可读性差。语句,可使程序无规律、可读性差。例例5.1 用用if语句和语句和goto语句构成循环,语句构成循环,main()int i,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;goto loop;printf(“%d”,sum
5、);用用if语句和语句和goto语句构成循环,语句构成循环,main()int i,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;goto loop;printf(“%d”,sum);例例 5.1 示例示例示例示例C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院例例 5.2 用用while 循环循环求求sum=1+2+100。第五章第五章 循环控制循环控制5.3 while 语句语句一般格式一般格式:while(表达式表达式)语句语句 特点特点:先判断,后执行。先判断,后执行。表达式为表达式为非非 0 值时,执行语句,反之则不执
6、行。值时,执行语句,反之则不执行。属属“当型当型”循环结构。循环结构。当当P P为真为真 A表达式语句语句非非0 00NS 流图流图 传统流程图传统流程图 例例 5.2 main()int i,sum=0;i=1;while(i =100)sum=sum+i;i+;printf(“%d”,sum);1100 求求 n用用 while 循环计算循环计算sum=1+2+100 main()int i,sum=0;i=1;while(i =100)sum=sum+i;i+;printf(“%d”,sum);示例示例示例示例C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川
7、理工学院示例示例 反例反例 说明:说明:(1)循环体可以是一条语句或是复合语句。循环体可以是一条语句或是复合语句。后者应有后者应有 号。号。(2)在循环体中应有使循环趋于结束的语句。在循环体中应有使循环趋于结束的语句。如上述程如上述程 序中的序中的 i+。(3)注意表达式可以是各种类型的表达式或数注意表达式可以是各种类型的表达式或数 值类型。值类型。如如:while(1)、while(2)、while(a)等。等。(4)留心留心“边界值边界值”,注意循环次数。,注意循环次数。(5)注意注意 while(表达式表达式)后不要加分号。后不要加分号。(4)示例)示例 main()int n=0;wh
8、ile(n+=1)printf(“%d n”,n);printf(“%d n”,n);运行结果运行结果:123 (5)重点例重点例5.2中若程序误写成中若程序误写成:main()int i,sum=0;i=1;while(i =100);sum=sum+i;i+;printf(“%d”,sum);程序将进入程序将进入“死死”循环,无法得到正确结果。循环,无法得到正确结果。留心留心“边界值边界值”注意循环次数注意循环次数main()int n=0;while(n+=1)printf(“%d n”,n);printf(“%d n”,n);运行结果运行结果:123示例示例示例示例注意注意 while
9、(表达式表达式)后不要加分号后不要加分号main()int i,sum=0;i=1;while(i =100);sum=sum+i;i+;printf(“%d”,sum);程序将进入程序将进入“死死”循环,无法得循环,无法得到正确结果。到正确结果。示例示例示例示例C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 5.4 do while 语句语句 一般格式一般格式:do 语句语句 while(表达式表达式);特点特点:先执行,后判断。先执行,后判断。属典型的属典型的“直到型直到型”循环结构。循环结构。用用do while循环求循环求sum=1+2+100
10、A直到直到P为假为假NS 流图流图 用用 do while循环循环求求sum=1+2+100 main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(“%d”,sum);例例 5.3 示例示例示例示例用用 do while循环循环求求sum=1+2+100 main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(“%d”,sum);C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院说明说明:一般情况下,用一般情况下,用 while 和和 d
11、o while 处理同处理同一问题时若二者的循环体一样,则它们的结果一问题时若二者的循环体一样,则它们的结果一样。一样。但如但如while后面的表达式一开始就为后面的表达式一开始就为0时,两种时,两种循环体的结果是不同的。循环体的结果是不同的。(1)while循环示例循环示例main()int sum=0,i;scanf(“%d”,&i);while(i =10)sum=sum+i;i+;printf(“%d”,sum);(2)do while循环示例循环示例main()int sum=0,i;scanf(“%d”,&i);do sum=sum+i;i+;while(i=10);printf(
12、“%d”,sum);do while循环结果循环结果若输入若输入 1 则结果为则结果为 55 若输入若输入 11 则结果为则结果为 11 while循环结果循环结果若输入若输入 1 则结果为则结果为 55 若输入若输入 11 则结果为则结果为 0 while循环示例循环示例main()int sum=0,i;scanf(“%d”,&i);while(i =10)sum=sum+i;i+;printf(“%d”,sum);(2)while循环示例循环示例示例示例示例示例 用用 do while循环循环求求sum=1+2+100 main()int i,sum=0;i=1;do sum=sum+i
13、;i+;while(i=100);printf(“%d”,sum);(1)do while循环示例循环示例示例示例示例示例while循环结果循环结果while循环结果循环结果若输入若输入 1 则结果为则结果为 55 若输入若输入 11 则结果为则结果为 0比较比较比较比较do while循环结果循环结果do while循环结果循环结果若输入若输入 1 则结果为则结果为 55 若输入若输入 11 则结果为则结果为 11 比较比较比较比较C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 例例:以下以下while循环执行的循环执行的 次次,输出结果为输出结果为
14、main()int k=2;while(k)printf(“%d,”,k),k ;printf(“n”);A)无限次无限次 B)0 次次 C)1次次 D)2 次次 E)程序有错程序有错答案:答案:D输出为输出为:2,1,C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 求解表达式求解表达式 1求解表达式求解表达式 3表达式表达式 2语句语句for 语句下语句下的其它语句的其它语句真真假假5.5 for 语句语句 一般格式:一般格式:for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句 C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学
15、院四川理工学院四川理工学院最简单最简单格式格式:for(循环变量赋初值循环变量赋初值;循环条件循环条件;循环变量增值循环变量增值)语句语句 1100 求求 n例例5.2 用用for 循环实现循环实现 main()int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(“%d”,sum);C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院(3)可把循环体中完成的内容放在表达式中来完可把循环体中完成的内容放在表达式中来完 成,但应注意成,但应注意“;”(2)for 语句中的表达式可以语句中的表达式可以部分部分或或全部全部省略,
16、省略,但但“;”不能省略。不能省略。说明说明:(1)for 语句中的表达式可以是任何有效的语句中的表达式可以是任何有效的 C语言语言表达式。表达式。for 语句中的表达式语句中的表达式main()int i,sum;for(i=0,sum=0;i=100;i+,sum+=i);printf(“%d”,sum);例如例如 示例示例示例示例 for 语句中的表达式语句中的表达式省略表达式省略表达式1main()int i,sum;i=0;sum=0;for(;i 100)break;sum+=i;printf(“%d”,sum);示例示例示例示例 for 语句中的表达式语句中的表达式省略表达式省略
17、表达式3main()int i,sum;sum=0;for(i=0;i=100;)sum+=i;i+;printf(“%d”,sum);示例示例示例示例 for 语句中语句中省略表达式省略表达式1和和3main()int i,sum;sum=0;i=0;for(;i 100)break;sum+=i;i+;printf(“%d”,sum);示例示例示例示例 用用while实现实现main()int i,sum;sum=0;i=0;while(i=100)sum+=i;i+;printf(“%d”,sum);示例示例示例示例可把循环体中完成的内容可把循环体中完成的内容放在表达式中来完成放在表达式
18、中来完成 但应注意但应注意“;”如如:for(i=0;c!=n;i+=c)c=getchar();printf(“%d”,c);for(i=0;(c=getchar()!=n;i+=c);printf(“%c”,c);示例示例示例示例省省e1 省省e2 省省e3 省省e1和和e3 省省e1 e2 e3 用用while循环实现循环实现循环体置于表达式中循环体置于表达式中 C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 例例:下列下列 for 循环最多执行循环最多执行 次。次。main()int i ,x;for(i=0,x=0;i=9&x!=876;i+)
19、scanf(“%d”,&x);A)9次次 B)10 次次 C)无限循环无限循环 D)一次也不循环一次也不循环 分析分析:次数由次数由(i 9 或或x=876 时结束循环。时结束循环。若一直未输入若一直未输入876,则,则 i 自加当自加当 i 9 时结束。时结束。答案为:答案为:BC语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 5.6 循环的嵌套循环的嵌套 1.while()2.do while()do .while();.while();3.for(;)4.while().for(;)do while();C语语言言程程序序设设计计第第五五章章四川理工
20、学院四川理工学院四川理工学院四川理工学院 5.for(;)6.do .while()for(;).while();对循环嵌套要注意内外循环变量的变化规律:对循环嵌套要注意内外循环变量的变化规律:在循环嵌套中,外循环变量每变化一次,则内循在循环嵌套中,外循环变量每变化一次,则内循 环变量将从其初值变化至终值环变量将从其初值变化至终值。C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院main()int i,j,x=0;for(i=0;i 2;i+)x+;for(j=0;j=3;j+)x+;x+;printf(“%d n”,x);5.7 几种循环的比较几种循环的
21、比较 当外循环变量当外循环变量 i 为为 0 时,内循环变量时,内循环变量 j 将从将从 0 变化到变化到 3。当外循环变量当外循环变量 i 为为 1 时,内循环变量时,内循环变量 j 又将又将从从 0 变化到变化到 3。故:故:x 共计累加共计累加 12 次。次。分析重点重点重点重点C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 5.8 break 和和 continue 语句语句 一一、break 语句语句 格式格式:break ;用途用途:1.在在switch语句中用来使流程跳出语句中用来使流程跳出switch构,构,继续执行继续执行 switch
22、 语句后面的其它语句。语句后面的其它语句。2.用在循环体内用在循环体内,使所在循环立即终止。即跳出使所在循环立即终止。即跳出 循环体,继续执行循环体后面的其它语句循环体,继续执行循环体后面的其它语句。例如例如:for(r=1;r 100)break;printf(“%f”,area);示意流程图示意流程图注意注意:break 语句不能用于循环和语句不能用于循环和switch语句之外语句之外 的任何其它语句中。的任何其它语句中。注意注意:如如:if(a b)max=a;break;a+;else max=b;break;b+;示例示例 break的使用的使用例如例如:for(r=1;r 100)
23、break;printf(“%f”,area);重点重点重点重点程序找错程序找错break找错找错 if(a b)max=a;break;a+;else max=b;break;b+;重点重点重点重点C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 5.8 break 和和 continue 语句语句 一一、break 语句语句 格式格式:break ;用途用途:1.在在switch语句中用来使流程跳出语句中用来使流程跳出switch构,构,继续执行继续执行 switch 语句后面的其它语句。语句后面的其它语句。2.用在循环体内用在循环体内,使所在循环立即
24、终止。即跳出使所在循环立即终止。即跳出 循环体,继续执行循环体后面的其它语句循环体,继续执行循环体后面的其它语句。例如例如:for(r=1;r 100)break;printf(“%f”,area);示意流程图示意流程图注意注意:break 语句不能用于循环和语句不能用于循环和switch语句之外语句之外 的任何其它语句中。的任何其它语句中。注意注意:如如:if(a b)max=a;break;a+;else max=b;break;b+;示例示例 break的使用的使用例如例如:for(r=1;r 100)break;printf(“%f”,area);重点重点重点重点程序找错程序找错bre
25、ak找错找错 if(a b)max=a;break;a+;else max=b;break;b+;重点重点重点重点C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 二、二、continue 语句语句 格式格式:continue ;作用作用:用来结束用来结束本次本次循环。即跳过循环体中尚未执循环。即跳过循环体中尚未执 行的语句,接着进行下一次是否执行循环的行的语句,接着进行下一次是否执行循环的 判断。判断。注意注意:break 和和 continue 的区别。的区别。例如例如:while(表达式表达式1)while(表达式表达式1)if(表达式表达式2)br
26、eak;if(表达式表达式2)continue;另外:在另外:在 for 循环中,遇到循环中,遇到 continue 语句后,语句后,先计算先计算 for 循环循环表达式表达式3的值的值,再执行再执行表达式表达式2,根据其结果来决定是否继续执行根据其结果来决定是否继续执行 for 循环。循环。C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院例例 5.5 把把100 200之间的不能被之间的不能被3整除的数输出整除的数输出 main()int n;for (n=100;n =200;n+)if(n%3=0)continue;printf(“%d”,n);if
27、(n%3!=0)printf(“%d”,n);C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 补充例题补充例题1:main()int i,j,x=0;for(i=0;i 2;i+)x+;for(j=0;j 100)break;C)k=0;D)s=32764;do while(s+%2|s%2)k+;s+;k+;while(k 0);答案:答案:C 分析分析:A)中中i%100的值总在的值总在0 99。(i=i%100;i+)等价于等价于i=i%100 +1。因此。因此 if 的条件总的条件总 为为“真真”break 语句不可能执行。语句不可能执行。C)中
28、随着中随着 k 值的增大,总要溢出,使值的增大,总要溢出,使k值为值为负负或或零零。D)中不论中不论s为何值,表达式为何值,表达式 s+%2 和和 s%2 中中 总有一个为总有一个为非非 0。分析分析 A)中中i%100的值总在的值总在0 99。(i=i%100;i+)等价于等价于 i=i%100 +1。因此,因此,if 的条件总为的条件总为“真真”break 语句不可能执行。语句不可能执行。C)中随着中随着 k 值的增大,总值的增大,总要溢出,使要溢出,使k值为值为负负或或零零。D)中不论中不论s为何值,表达式为何值,表达式 s+%2 和和 s%2 中总有一个中总有一个为为非非 0。分析分析
29、分析分析分析分析C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 3.以下程序运行结果是以下程序运行结果是 。main()int i,b,k=0;for(i=1;i=0)k+;printf(“%d,%d”,k,b);A)3,1 B)8,1 C)3,0 D)8,2答案:答案:D Db 的值为的值为:1,0,1,0,C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 例例5.6 求求 的近似值。的近似值。/4=1 1/3+1/5 1/7.算法算法:S1:sign=1 S2:sum=1 S3:deno=3 S4:sign=(1
30、)sign S5:term=sign (1/deno)S6:sum=sum+term S7:deno=deno+2 S8:若若 deno 1e 6 返回返回 S4,否则算法结束。否则算法结束。5.9 程序举例程序举例 C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院#include “math.h”main()int s;float n,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)=1e 6)pi=pi+t;n=n+2;s=s;t=s/n;pi=pi*4;printf(“pi=%10.6f,pi);运行结果运行结果:pi=3.
31、141397分析分析:(1)pi=1 n=3 s=1 t=1/3(2)pi=1 1/3 n=5 s=1 t=1/5(3)pi=11/3+1/5 .5.9 程序举例程序举例 C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 例例5.7 求求 Fibonacci(斐波纳契斐波纳契)数列数列(前前40个数个数)F1=1 (n=1)F2=1 (n=2)Fn=Fn 1+Fn 2 (n 3 )源程序:源程序:main()long int f1 ,f2;int i;f1=1;f2=1;for(i=1;i =20;i+)printf(“%12ld%12ld”,f1 ,f2
32、);if (i%2=0)printf(“n”);f1=f1+f2;f2=f2+f1;C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院 例例 5.8 判断判断 m 是否为是否为素数素数。#include “math.h”main()int m ,i ,k;scanf(“%d”,&m);k=sqrt(m);for(i=2;i =k+1)printf(“%d is a prime number n”m);else printf(“%d is not a prime numbern”,m);C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院
33、四川理工学院例例 5.9 求求 100 200 之间的全部素数。之间的全部素数。#include “math.h”main()int m ,i ,k ,n=0;for(m=101;m =200;m+=2)k=sqrt(m);for(i=2;i =k+1)printf(“%d n”,m);n=n+1;if (n%10=0)printf(“n”);printf(“n”);n 的作用是累计输出素数的的作用是累计输出素数的个数和控制每行输出个数。个数和控制每行输出个数。C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院例例 5.10 译密码。译密码。源程序:源程序:
34、main()char c;while(c=getchar()!=n)if(c=a&c=A&c Z&c z)c=c 26;printf(“%c”,c);程序修改程序修改程序说明程序说明 说明说明:1.注意字母注意字母 V(或或 v)后的转换。如后的转换。如:W(87)A(65)87+4 26=65 2.if(c Z&c z)c=c 26;不能写成不能写成:if(c Z|c z)c=c 26;例如例如:输入字母输入字母 b 则则 c=98+4=102 应为字母应为字母f。若按若按 c Z|c z 来判断,则应执行还要行来判断,则应执行还要行 c=c 26。即。即 c=74。显然得不到。显然得不到
35、字母字母 f。3.c z为什么不写成为什么不写成 c z&z+4?如输如输 入小写字母,则入小写字母,则 c=a&c=z)if(c=A&c=Z)if (c Z&c z)c=c 26;不能写成不能写成:if(c Z|c z)c=c 26;例如例如:输入字母输入字母 b 则则 c=98+4=102 应为字母应为字母f。若按若按 c Z|c z 来判断,则应执行还要行来判断,则应执行还要行 c=c 26。即。即 c=74。显然得不到。显然得不到 字母字母 f。2.c z为什么不写成为什么不写成 c z&z+4?如输如输 入小写字母,则入小写字母,则 c=a&c=z)if(c=A&c=Z)if (c=V)c=c+4;else c=22;putchar(c);更改更改更改更改C语语言言程程序序设设计计第第五五章章四川理工学院四川理工学院四川理工学院四川理工学院作业作业:p120 6.1,6.2,6.6,6.8,6.10