收藏 分享(赏)

第06章 循环程序设计.ppt

上传人:fcgy86390 文档编号:10171207 上传时间:2019-10-16 格式:PPT 页数:41 大小:684.50KB
下载 相关 举报
第06章     循环程序设计.ppt_第1页
第1页 / 共41页
第06章     循环程序设计.ppt_第2页
第2页 / 共41页
第06章     循环程序设计.ppt_第3页
第3页 / 共41页
第06章     循环程序设计.ppt_第4页
第4页 / 共41页
第06章     循环程序设计.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、第六章,循环结构程序设计,概述,循环:规律性的重复,即依据特定条件重复执行 基本操作,表现在程序设计中:算法中含有循环结构,例:在屏幕上输出10个*号,printf(“*n”);,又例:在屏幕上输出100,1000,10000个*号,分析,输出一个*号 putchar(*),输出1000个*号 putchar(*)执行1000次即可,分析,基本操作,为什么使用循环算法呢?,降低解题难度,减少程序代码,提高执行效率。,循环型程序设计解题关键,1、确定循环体,确定哪些操作需反复执行,2、确定循环执行条件,确定什么条件循环执行,例:在屏幕上输出1000个*号,1、确定循环体 putchar(*),2

2、、确定循环条件 i=1000( i初值为1),计数器,i=i+1 (使循环趋向于结束的操作),又如:求1+2+3+4+100的和,分析如下: 1 + 2 + 3 + 4+ +99+100,部分和,部分和,部分和,和,sum=sum+i,1、确定循环体 sum=sum+i; 2、确定循环执行条件 i=100 初值:sum=0;i=1;,i+;,sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050,if 和 goto语句,for语句,do while语句,循环语句与洗衣机,循环控制语句的作用:控制核心语句(循环体)的执行次数,循环控制语句,(用

3、来编制循环结构程序),while语句,if 和 goto语句,无条件转向语句,形式:goto 语句标号; (标识符:) 功能:从goto语句所在处,转向本函数内标号所在处,可用if和goto 语句构成循环,可执行语句,loop: if(p)s;goto loop;,例:编程输出1000个*号(用if和goto),分析问题,描述算法,#include main() int i=1;loop:if(i=1000)putchar(*);i+;goto loop;,main() int sum=0,i=1; loop:if(i=100) sum=sum+i; i+; goto loop; printf

4、(“sum is %dn”,sum);,sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050,while语句 一般形式:,while(表达式) 循环体语句;,执行流程:,简单语句 复合语句 空语句,特点:先判断表达式,后执行循环体 说明: 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇break,return,goto 无限循环: while(1)循环体;,举例,例:编程输出1000个*号(用while),while(P)s,#include main() int i=1

5、;while(i=100)putchar(*);i+; ,又如:求1+2+3+4+100的和,/#include void main() int i,sum=0;i=1;while(i=100) sum=sum+i;i+;printf(“%d“,sum); ,dowhile语句 一般形式:,do 循环体语句;while(表达式);,执行流程:,特点: 先执行循环体,后判断表达式 说明: 至少执行一次循环体 dowhile可转化成while 结构,While循环,举例,例:编程输出1000个*号(用dowhile),dos while(p);,#include main() int i=1; d

6、oputchar(*);i+; while(i=1000); ,#include main() int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(“%d“,sum); ,又如:求1+2+3+4+100的和,while和dowhile比较,main() int i,sum=0;scanf(“%d“, ,main() int i,sum=0;scanf(“%d“, ,for语句 一般形式:,for(expr1 ; expr2 ; expr3)循环体语句;,执行流程:,说明: for语句中expr1, expr2 ,expr3 类型任意,都可省略,但分

7、号;不可省 无限循环: for(;) ; for语句可以转换成while结构,expr1; while(expr2) 循环体语句;expr3; ,例:编程输出1000个*号(用for),for(i=1 ; i=1000;)putchar(*);i+;,i=1; for( ; i=1000;)putchar(*); i+;,#include main() int i;for(i=1;i=1000;i+) putchar(*);,for(i=1; i=1000;putchar(*),i+) ;,for(循环变量赋初值;循环条件;循环变量增值) 循环体语句; ,break语句与continue语句(

8、1),break语句 形式: break; 功能: 跳出循环结构,break;,break;,break;,break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的任何其它语句之中,举例,例 break举例:输出半径为110的圆面积, 面积大于100时停止,#define PI 3.14159 main() int r;float area;for(r=1;r100)break;printf(“r=%d,area=%.2fn“,r,area); ,小写字母转换成大写字母,直至输入非小写字母,#include main() int i,j;char c;whil

9、e(1) c=getchar();if(c=a ,continue语句 形式: continue; 功能:结束本次循环,break语句与continue语句(2),continue;,break;,区别,例1:,break语句与continue语句(3),求1+2+3+4+5+6+7+8+9+10+的和,直至S1200。,例2:,求键盘输入若干个整数的和,直至输入-1,main() int i,j,k;for(i=0,j=100;i=j;i+,j-) k=i+j;printf(“%d+%d=%dn“,i,j,k); ,#include main() char c;for(;(c=getchar

10、()!=n;)printf(“%c “,c); ,练习 程序分析,循环语句的使用规则,循环结构问题分析,本讲总结,重点掌握:,打印26个英文字母(三种语句编程),打印26个英文字母,例4:,三种语句编程,作业:6.2、6.3、6.6,注意点: 1、各种控制结构的形式及功能 2、如何避免死循环 3、break语句和continue语句的功能,循环结构程序设计,程 序 举 例,循环型程序设计的两种典型算法(穷举法,迭代法),穷举法(枚举法),基本思想 对问题的所有可能状态一一测试,直到找到问题的答案或将全部可能状态都测试完为止,例:录取新生,循环体 if(p ) s1,循环结束条件 i10000,

11、计数器,i=i+1,计数法 循环次数已知,设置变量用来描述循环执行的次数,次数达到循环停止,例:打印出100700之间能被2整除不能被6整除的数字,穷举法举例,循环体 1、 if(p ) s1111111111111,循环结束条件 n700,p: n%2=0,2、n+,标志法,达到某一目标后循环结束(设置标志变量),循环结构的两种典型算法(穷举法,迭代法),循环结构的两种典型算法(穷举法,迭代法),穷举法举例,例:对于任意一整数,判断其是否为素数。,分析:m%n=r m:任意整数 n:2m-12 若r均不为0,则m为素数,循环体 1、r=m%n;,3、n+;,2、if(r= =0) break

12、;,循环结束条件 n,或r=0,循环结构的两种典型算法(穷举法,迭代法),迭代法,基本思想 不断用新值取代变量的旧值,或由旧值递归出新值,例:人口增长问题,例:求1*2*3*4*5,例:求1-1/2+1/3-1/4+1/5,例:求1+2+3+4.+100,sum=sum+n,例:人口增长问题,迭代法举例,分析,现有人口: 12亿 1年以后: 12*(1+2%) 2年以后: (12*(1+2%))*(1+2%)n年以后: (12*(1+2%)*.).*(1+2%),现有人口12亿,每年按2%递增, 问十年后将有多少人?,设人口数为m(初值为12亿),则其后每一年的人口数m为m*(1+2%)(注:

13、m为上一年的人口数),m的值不断变化由旧值推出新值,反复执行m=m*(1+2%),循环体 1、 m=m*(1+2%),循环结束条件 i10,计数法,2、i+,迭代问题分析关键要素,1、迭代初值 2、迭代公式3、迭代次数,又例:人口增长问题,现有人口12亿,每年按2%递增, 问多少年后人口数超过23亿?,1、迭代初值 m=12 2、迭代公式 m=m*(1+2%) 3、迭代次数 ?,循环体 1、 m=m*(1+2%)2、 year+;(year 初值为0),循环结束条件 m23,标志法,循环型程序设计举例,例1:,/4 求的近似值,直到最后一项的绝对值小于10-6为止,1+2+3+4+5+6+7+

14、8+9+10+.,类似问题,解题关键: 1、迭代公式 sum=sum+t; t=. 2、迭代初值 sum= t= 3、迭代次数 循环退出的条件,关键是找每一项的变化规律,迭代公式推导: pi=pi+t;,迭代初值:pi=0;n=1;s=1;t=1,t=s/n;,迭代次数:由t决定,当fabs(t) 10-6 迭代结束,s=-s; n=n+2;,迭代公式: sum=sum+t; n=n+2; s=-s; t=s/n;,具体分析,相一致,分子:1,-1,1,-1 分母:1,3,5,7,.,例2:打印Fibonacci数列前40个数, 数列具有如下特点:第1,2两个数为1,1从第三个数开始,该数是其

15、前面两个数之和,F1=1 F2=1 Fn=F n-1+F n-2 (n=3),迭代公式推导 F=F1+F2,F代表数列 从第三项起的某一项,F1代表该项的前两项,F2代表该项的前一项,迭代初值:F1=1,F2=1,迭代次数:由题目要求决定(可用标志法或计数法),1,1,2,3,5,8,F1=F2 F2=F,求:打印Fibonacci数列前40个数(方法二),迭代公式推导1 F=F1+F2F1=F2F2=F,迭代公式推导2 F1=F1+F2F2=F1+F2,一次得到两个数,分析F1,F2的含义,思考,例3:判断m是否是素数,算法:m%n=r n: 2sqrt(m) 若r均不为0,则表明m是素数,

16、循环:穷举法,例4:打印100200之间的全部素数,循环的嵌套(自己分析),例5:译密码(输入一行字符,输出其相应密码),算法分析: 1、输入字符为c:(AV或av)转变为c+4; 2、输入字符为c:(V或v之后)转变为c-22;,分析程序,例:输入China!转换为Glmre!,void main() char c; while(c=getchar()!=n) if(c=a ,编程练习,1、爱因斯坦的阶梯问题,设有一阶梯,每步跨2级,最后余 1级;每步跨3级,最后余2级;每步跨5级,最后余4级;每步跨6级,最后余5级;每步跨7级,正好到阶梯顶。问 至少有多少阶梯?,穷举法,设m为阶梯数 m%

17、2=1&m%3=2&m%5=4&m%6=5&m%7=0,例 循环嵌套,输出九九表,/#include main() int i,j;for(i=1;i10;i+)printf(“%4d“,i);printf(“n-n“);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?“%4dn“:“%4d“,i*j); ,例 求输入的十个整数中正数的个数及其平均值,/*ch5_12.c*/ #include main() int i,num=0,a;float sum=0;for(i=0;i10;i+) scanf(“%d“, ,例 (f0r)梯形法求数值积分,main() int m,n,gbs,gys;scanf( );if(mn)t=n;n=m;m=t;for(gbs=m;_;gbs=gbs+m);gys=_;_;,“%d,%d”,&m,&n,gbs%n!=0,m*n/gbs,printf(“%d,%d”,gbs,gys),求两个整数的最小公倍数和最大公约数。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报