《第4章 循环程序设计2019年4月(第7_8_9周).ppt》由会员分享,可在线阅读,更多相关《第4章 循环程序设计2019年4月(第7_8_9周).ppt(38页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、12022/10/25第第4 4章章 循环程序设计循环程序设计主要内容主要内容n4.1 概述概述n4.2 while语句和语句和do-while语句语句n4.3 for语句语句n4.4 循环的控制循环的控制22022/10/254.1 概述概述n循环结构定义:循环结构定义:n根据条件满足与否,一部分语句被反复执行根据条件满足与否,一部分语句被反复执行n组成:组成:(1 1)循环体)循环体(2 2)循环控制)循环控制控制循环次数控制循环次数包括:循环变量的初值、终止、循环条件包括:循环变量的初值、终止、循环条件专门用于控制循专门用于控制循环次数的变量环次数的变量32022/10/25n实现循环的
2、三种语句实现循环的三种语句nwhile 语句语句 P73P73ndo while 语句语句 P P7474nfor 语句语句 P75P75一般形式:一般形式:while(表达式表达式)循环体;循环体;执行流程:执行流程:while语句语句4.2 while语句和语句和do-while语句语句n特点:特点:先判断表达式,后执行循环体先判断表达式,后执行循环体n说明:说明:n循环体有可能一次也不执行循环体有可能一次也不执行n循环体可为任意类型循环体可为任意类型一条语句一条语句n下列情况,退出下列情况,退出while循环循环n条件表达式不成立(为零)条件表达式不成立(为零)n循环体内遇循环体内遇 b
3、reak,return,goton无限循环无限循环:while(1)循环体循环体;例例 用用while循环求循环求1 1到到100100的和的和#include int main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);return 0;循环初值循环初值循环终值循环终值循环变量增值循环变量增值循环条件循环条件循环体循环体sum=0+1sum=1+2sum=3+3sum=6+4sum=4950+100一般形式:一般形式:do 循环体;循环体;while(表达式表达式););执行流程:执行流程:dowhile语句语句n特点:
4、特点:先执行循环体,后判断表达式先执行循环体,后判断表达式n说明:说明:l至少执行一次循环体至少执行一次循环体ldowhile可转化成可转化成while结构结构例例 用用do-do-while循环求循环求1 1到到100100的和的和#include int main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(%d,sum);return 0;循环初值循环初值循环终值循环终值循环变量增值循环变量增值循环条件循环条件循环体循环体for(表达式表达式1;表达式表达式2;表达式表达式3)循环体;循环体;执行流程:执行流程:一般形式:一般
5、形式:4.3 for语句语句112022/10/25 for(表达式表达式1;表达式表达式2;表达式表达式3)循环体循环体;n说明说明:3个表达式的主要作用是:个表达式的主要作用是:(1 1)表达式表达式1设置初始条件,只执行设置初始条件,只执行1 1次,可以次,可以为零个、一个或多个变量设置初值。为零个、一个或多个变量设置初值。(2 2)表达式表达式2循环条件表达式,用来判定是否循环条件表达式,用来判定是否继续循环。在每次执行循环体前执行此表达式,继续循环。在每次执行循环体前执行此表达式,决定是否需要执行循环。决定是否需要执行循环。(3 3)表达式表达式3循环条件改变的表达式,执行完循环条件
6、改变的表达式,执行完循环体后进行。循环体后进行。for(循环变量赋初值循环变量赋初值;循环条件循环条件;循环变量增值循环变量增值)循环体循环体;n说明说明l表达式表达式1,1,表达式表达式2,2,表达式表达式3 3 类型任意,都可省略,但分号;不可省类型任意,都可省略,但分号;不可省l无限循环无限循环 for(;)lfor语句可以转换成语句可以转换成while结构结构表达式表达式1;while(表达式表达式2)循环体循环体;表达式表达式3;nfor语句一般应用形式语句一般应用形式132022/10/25n例例 用用for语句编写语句编写1+2+100的和。的和。#include int mai
7、n()int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(用用for语句计算语句计算:n1+2+100=%dn,sum);return 0;例例:#include int main()int i=0;for(i=0;i10;i+)putchar(a+i);return 0;运行结果:运行结果:abcdefghij变变1:#include int main()int i=0;for(;i10;i+)putchar(a+i);return 0;变变2:#include int main()int i=0;for(;i10;)putchar(a+(i+);re
8、turn 0;变变3:#include int main()int i=0;for(;i10;putchar(a+i),i+);return 0;for语句的变化形式语句的变化形式n三种循环可互相嵌套三种循环可互相嵌套,层数不限层数不限n外循环可包含两个以上内循环外循环可包含两个以上内循环,但不能相互交叉但不能相互交叉(1)while()while().(2)do do while();.while();(3)while()do while();.(4)for(;)do while();while().内循环内循环外循环外循环内循环内循环n嵌套循环的跳转嵌套循环的跳转禁止:禁止:l从外层跳入内
9、层从外层跳入内层l跳入同层的另一循环跳入同层的另一循环循环的嵌套循环的嵌套定义:一个循环结构中又包含另一个循环结构定义:一个循环结构中又包含另一个循环结构外循环外循环内循环内循环for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);外循环外循环内循环内循环n嵌套循环的执行流程嵌套循环的执行流程172022/10/25n例例 输出九九乘法表。输出九九乘法表。算法描述:算法描述:第一行第一行 1*1=11*2=2 1*9=9第二行第二行 2*1=22*2=4 2*9=18 第九行第九行 9*1=99*2=189*9=81182022/10/
10、25#include int main()int i,j;for(i=1;i10;i+)for(j=1;j10;j+)if(j!=9)printf(%d*%d=%2dt,i,j,i*j);else printf(%d*%d=%2dn,i,j,i*j);return 0;192022/10/25n例例 中国古代数学家张丘建在他的中国古代数学家张丘建在他的算经算经中提出了著名中提出了著名的的“百钱百鸡问题百钱百鸡问题”:鸡翁一,值钱五;鸡翁一,值钱五;鸡母一,值钱三;鸡母一,值钱三;鸡雏三,值钱一;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何百钱买百鸡,翁、母、雏各几何?算法描述:算法描述:设要买
11、设要买 x(cocks)只公鸡,只公鸡,y(hens)只母鸡,只母鸡,z(chicks)只小鸡,只小鸡,必须满足方程:必须满足方程:5 x+3 y+z/3=100 x+y+z=100 202022/10/25#include int main()int cocks=0,hens,chicks;printf(%8s%8s%8sn,cocks,hens,chicks);for(cocks=0;cocks=20;cocks+)for(hens=0;hens=3)根根据据递递推推通通项项公公式式,依依次次将将前前项项代代入入得得到到Fibonacci数列。数列。222022/10/25#include
12、 int main()int fib1=1,fib2=1,i=1;while(i=20)printf(%12d%12d,fib1,fib2);fib1=fib1+fib2;fib2=fib2+fib1;i+;if(i%2!=0)printf(n);return 0;232022/10/254.4 循环的控制循环的控制 P79P79n作用作用n提早结束正在执行的循环操作提早结束正在执行的循环操作n分类分类(1 1)break语句;语句;(2 2)continue语句;语句;(3 3)goto语句。语句。n功能功能 在在循环语句循环语句和和switch语句语句中中,终止并跳出循环体或开关体终止并跳
13、出循环体或开关体n说明:说明:nbreak只能终止并跳出最近一层的结构只能终止并跳出最近一层的结构nbreak不能用于循环语句和不能用于循环语句和switch语句之外的任何其它语句之外的任何其它语句之中语句之中break语句语句辅助控制语句辅助控制语句break(图解(图解1 1)辅助控制语句辅助控制语句break(图解(图解2 2)272022/10/25n例例 将输入的小写字母转换成大写字母,直至输入将输入的小写字母转换成大写字母,直至输入非小写字母。非小写字母。算法描述算法描述:首先输入一个小写字母,然后将小写字母减首先输入一个小写字母,然后将小写字母减3232转化成大写字母,直至输入非
14、小写字母,用转化成大写字母,直至输入非小写字母,用breakbreak语句强制退出循环体。语句强制退出循环体。282022/10/25#include int main()char c;printf(请输入小写字母请输入小写字母c c,直到输入非小写字母,程序结束,直到输入非小写字母,程序结束:);while(1)c=getchar();if(c=a&c=z)putchar(c-a+A);elsebreak;printf(n);return 0;n功能:结束本次循环,跳过功能:结束本次循环,跳过循环体中循环体中尚未执行的尚未执行的 语句,进行下一次是否执行循环体的判断语句,进行下一次是否执行循
15、环体的判断n仅用于循环语句中仅用于循环语句中 continue语句语句302022/10/25n例例 找出找出100100到到200200之间能被之间能被3 3整除的自然数,整除的自然数,且每行输出且每行输出5 5个数。个数。算法描述算法描述:首先将首先将100100到到200200之间的数依次被之间的数依次被3 3整除,然整除,然后判断整除得到的余数是否是后判断整除得到的余数是否是0 0,将余数是,将余数是0 0的数输出。的数输出。312022/10/25#include int main()int n,i=0;for(n=100;n=200;n+)if(n%3!=0)continue;i+
16、;if(i%5=0)printf(%5dn,n);elseprintf(%5d,n);printf(n);return 0;n功能:无条件转移语句功能:无条件转移语句n说明:说明:l标号用标识符表示标号用标识符表示l只能加在可执行语句前面只能加在可执行语句前面l通常通常goto语句与语句与if条件语句连用,条件语句连用,表示:当满足某一条件时,程序跳到标号处运行表示:当满足某一条件时,程序跳到标号处运行l结构化程序设计中结构化程序设计中,限制使用限制使用goto语句语句 goto 标号标号;.标号标号:语句;:语句;标号的命名规则标号的命名规则与变量名相同。与变量名相同。goto 语句语句一般
17、形式一般形式#include int main()int i,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;goto loop;printf(%d,sum);return 0;循环初值循环初值循环终值循环终值循环变量增值循环变量增值循环条件循环条件循环体循环体例例 用用if 和和goto语句构成循环语句构成循环求求1到到100的和的和 342022/10/25n例例 判断输入的整数是否是素数。判断输入的整数是否是素数。算法描述算法描述:素数是除素数是除2 2以外,只能被以外,只能被1 1和自身整除的数。和自身整除的数。使用穷举法,依次从使用穷举法,依次从2 2开始尝
18、试能否整除整数开始尝试能否整除整数m m。应用举例应用举例352022/10/25#include int main()int m,n,flag=1;printf(请输入要测试的整数:请输入要测试的整数:);scanf(%d,&n);for(m=2;m=n/2;m+)if(n%m=0)flag=0;/设置非素数标志设置非素数标志break;/一旦找到一个一旦找到一个m,断定该,断定该n非素数,不需再验证非素数,不需再验证flag?printf(%d是素数是素数n,n):printf(%d不是素数不是素数n,n);return 0;362022/10/25n例例 求求输输入入的的十十个个整整数数
19、中中正正数数的的个个数数及及正正数数的平均值。的平均值。算法描述算法描述:首先输入十个整数,然后数出所有正数的首先输入十个整数,然后数出所有正数的个数,最后求得所有正数的和,除以正数个数,最后求得所有正数的和,除以正数个数,得到所有正数的平均值。个数,得到所有正数的平均值。372022/10/25#include int main()int i,num=0,a;float sum=0;printf(请输入十个整数:请输入十个整数:);for(i=0;i10;i+)scanf(%d,&a);if(a=0)continue;num+;sum+=a;printf(共有共有%d个正数和是个正数和是:%6.0fn,num,sum);printf(正数的平均值是正数的平均值是:%6.2fn,sum/num);return 0;382022/10/25本章小结本章小结n三种循环结构:三种循环结构:n forn whilen do-while n注意避免:注意避免:(1 1)循环体为多条语句,但没有使用花括号。)循环体为多条语句,但没有使用花括号。(2 2)使程序发生无限循环。)使程序发生无限循环。(3 3)混淆)混淆break 语句与语句与continue语句的功能。语句的功能。
限制150内