第06章循环程序设计_第1页
第06章循环程序设计_第2页
第06章循环程序设计_第3页
第06章循环程序设计_第4页
第06章循环程序设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章第六章循环结构程序设计循环结构程序设计概概述述我必须跑我必须跑12圈圈我举我举12次次我举我举24次次循环循环:规律性的重复,即依据规律性的重复,即依据特定条件特定条件重复重复执行执行 基本操作基本操作 表现在程序设计中:算法中含有循环结构表现在程序设计中:算法中含有循环结构例:在屏幕上输出例:在屏幕上输出10个个*号号printf(“*n”); 又例:在屏幕上输出又例:在屏幕上输出100,1000,10000个个*号号分分析析输出一个输出一个*号号 putchar(*)输出输出1000个个*号号 putchar(*)执行执行1000次即可次即可分分析析基本操作基本操作为什么使用循环算法

2、呢为什么使用循环算法呢? ? 降低解题难度,减少程序代码,提高执行效率。降低解题难度,减少程序代码,提高执行效率。循环型程序设计解题关键循环型程序设计解题关键1、确定循环体、确定循环体确定哪些操作需反复执行确定哪些操作需反复执行2、确定循环执行条件、确定循环执行条件确定什么条件循环执行确定什么条件循环执行例:在屏幕上输出例:在屏幕上输出1000个个*号号1、确定循环体、确定循环体 putchar(*)2、确定循环条件、确定循环条件 i=1000( i初值为初值为1) 计数器计数器i=i+1(使循环趋向于结束的操作)(使循环趋向于结束的操作)1001nn又如:求又如:求1+2+3+4+.100的

3、和的和分析如下: 1 + 2 + 3 + 4+. +99+100部分和部分和部分和部分和部分和部分和和和sum=0,i=1;i=100sum=sum+i; i+;输出输出sumsum=sum+i1、确定循环体、确定循环体 sum=sum+i;2、确定循环执行条件、确定循环执行条件 i=100初值:初值:sum=0;i=1;i+;sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050if 和和 goto语句语句for语句语句do while语句语句循环语句与洗衣机循环语句与洗衣机循环控制语句的作用:循环控制语句的作用: 控制核心语句(循环体)的执行次数

4、控制核心语句(循环体)的执行次数循环控制语句循环控制语句(用来编制循环结构程序)(用来编制循环结构程序)while语句语句if 和和 goto语句语句无条件转向语句无条件转向语句形式:形式:goto 语句标号语句标号; (标识符标识符:)功能:从功能:从goto语句所在处,转向语句所在处,转向本函数本函数内标号所在处内标号所在处goto er; er: s; 可用可用if和和goto 语句构成循环语句构成循环可执行语句psgotoynloop: if(p) s; goto loop;例:编程输出例:编程输出1000个个*号(用号(用if和和goto)分析问题,描述算法分析问题,描述算法i=1p

5、utchar(*)i+;i=1000#include main()int i=1; loop:if(i=1000) putchar(*);); i+; goto loop;又如:求又如:求1+2+3+4+.100的和的和sum=0,i=1;i=100sum=sum+i; i+;输出输出summain()int sum=0,i=1;loop:if(i=100)sum=sum+i;i+;goto loop;printf(“sum is %dn”,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050while语句v一般形式:while(表达式表

6、达式) 循环体语句;循环体语句;v执行流程:p循环体假(0)真(非0)whiles p简单语句简单语句复合语句复合语句空语句空语句v特点:先判断表达式,后执行循环体特点:先判断表达式,后执行循环体v说明:说明:l循环体有可能一次也不执行循环体有可能一次也不执行l循环体可为任意类型语句循环体可为任意类型语句l下列情况,退出下列情况,退出whilewhile循环循环u条件表达式不成立(为零)条件表达式不成立(为零)u循环体内遇循环体内遇break,return,gotobreak,return,gotol无限循环无限循环: while(1): while(1) 循环体循环体; ;举例例:编程输出例

7、:编程输出1000个个*号(用号(用while)while(p) s#include main()int i=1; 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语句v一般形式:do 循环体语句; while(表达式);v执行流程:do循环体p假(0)真(非0)whiles!pv特点:先执行循环体,后判断表达式v说明:

8、l至少执行一次循环体ldowhile可转化成while 结构expr循环体假(0)真(非0)循环体while循环循环举例例:编程输出例:编程输出1000个个*号(用号(用dowhile)do swhile(p);#include main()int i=1;do putchar(*); 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;

9、 scanf(%d,&i); do sum+=i;i+; while(i=10); printf(%d,sum);main() int i,sum=0; scanf(%d,&i); while(i=10) sum+=i;i+; printf(%d,sum);for语句v一般形式:for(expr1 ; expr2 ; expr3) 循环体语句;循环体语句;v执行流程:expr2循环体假(0)真(非0)forexpr1expr3expr1sexpr3expr2v说明:lfor语句中expr1, expr2 ,expr3 类型任意,都可省略,但分号;不可省l无限循环: for(;) ;lfor语句

10、可以转换成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

11、语句语句(1)break语句语句形式:形式: break; 功能:功能: 跳出循环结构跳出循环结构break;while(p) break;do while(p);break;for(e1;e2;e3) lbreak只能只能终止并跳出最近一层的结构终止并跳出最近一层的结构lbreak不能用于循环语句和不能用于循环语句和switch语句之外的语句之外的任何其它语句之中任何其它语句之中pbreak;假(0)真(非0)whiledobreak;.p假(0)真(非0)whilee2break;.假(0)真(非0)fore1e3举举例例例 break举例:输出半径为110的圆面积,面积大于100时停止#

12、define pi 3.14159main() int r; float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 小写字母转换成大写字母,直至输入非小写字母#include main() int i,j; char c; while(1) c=getchar(); if(c=a & c1200。例例2:2:求键盘输入若干个整数的和,直至输入-1main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); #includemain(

13、) char c; for(;(c=getchar()!=n;) printf(%c ,c);练习练习程序分析程序分析循环语句的使用规则循环结构问题分析本讲总结本讲总结重点掌握:打印打印2626个英文字母个英文字母(三种语句编程)打印打印2626个英文字母个英文字母例例4:4:三种语句编程 作业: 6.2、6.3、6.6注意点:注意点:1、各种控制结构的形式及功能、各种控制结构的形式及功能2、如何避免死循环、如何避免死循环3、break语句和语句和continue语句的功能语句的功能循环结构程序设计循环结构程序设计程程 序序 举举 例例循环型程序设计的两种典型算法循环型程序设计的两种典型算法(

14、穷举法,迭代法)(穷举法,迭代法)穷举法(枚举法)穷举法(枚举法)基本思想基本思想对问题的所有可能状态一一测试,直到找到问题对问题的所有可能状态一一测试,直到找到问题的答案或将全部可能状态都测试完为止的答案或将全部可能状态都测试完为止例:录取新生例:录取新生循环体循环体 if(p ) s1 循环结束条件循环结束条件 i10000计数器计数器i=i+1计数法计数法循环次数已知,设置变量用来描述循循环次数已知,设置变量用来描述循环执行的次数,次数达到循环停止环执行的次数,次数达到循环停止例:打印出例:打印出100700之间能被之间能被2整除不能被整除不能被6整除的数字整除的数字穷穷举举法法举举例例

15、循环体循环体 1、 if(p ) s1111111111111 循环结束条件循环结束条件 n700p: n%2=0&n%6!=0 (n初值为初值为100)s1:printf(“%d”,n);2、n+标志法标志法达到某一目标后循环结束(设置标志变量)达到某一目标后循环结束(设置标志变量)循环结构的两种典型算法(穷举法,迭代法)循环结构的两种典型算法(穷举法,迭代法)循环结构的两种典型算法(穷举法,迭代法)循环结构的两种典型算法(穷举法,迭代法)穷穷举举法法举举例例 例:对于任意一整数,判断其是否为素数。例:对于任意一整数,判断其是否为素数。分析:分析:m%n=rm:任意整数任意整数 n:2m-1

16、2 若若r均不为均不为0,则,则m为为素数素数m循环体循环体 1、r=m%n;3、n+;2、if(r= =0) break;循环结束条件循环结束条件 nm或或r=0读入mk=mi=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m”是素数” 输出:m”不是素数”循环结构的两种典型算法(穷举法,迭代法)循环结构的两种典型算法(穷举法,迭代法)迭代法迭代法 基本思想基本思想不断用新值取代变量的旧值,或由旧值递归出新值不断用新值取代变量的旧值,或由旧值递归出新值例:人口增长问题例:人口增长问题例:求例:求1*2*3*4*5例:求例:求1-1/2+1/3-1/4+1/5例:求例:

17、求1+2+3+4.+100sum=sum+n例:人口增长问题例:人口增长问题迭迭代代法法举举例例分析分析现有人口:现有人口: 12亿亿1年以后:年以后: 12*(1+2%)2年以后:年以后: (12*(1+2%))*(1+2%) n年以后:年以后: (12*(1+2%)*.).*(1+2%)现有人口现有人口12亿,每年按亿,每年按2%递增,递增, 问十年后问十年后将有多少人将有多少人?n-1年的人口数 设人口数为设人口数为m(初值为初值为12亿),则其后每一年亿),则其后每一年的人口数的人口数m为为m*(1+2%)(注:注:m为上一年的人口为上一年的人口数),数),m的值不断变化由旧值推出新值

18、,反复执的值不断变化由旧值推出新值,反复执行行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

19、)循环结束条件循环结束条件 m23标志法标志法循环型程序设计举例循环型程序设计举例例例1:1:/4 求求的近似值,直的近似值,直到最后一项的绝对值小于到最后一项的绝对值小于10-6为止为止.715131 11+2+3+4+5+6+7+8+9+10+.类类似似问问题题n1.31211nn1.56341n1.4131211解题关键:解题关键:1、迭代公式、迭代公式 sum=sum+t;t=.2、迭代初值、迭代初值sum=t=3、迭代次数、迭代次数循环退出的条件循环退出的条件关键是找每一项的变化规律关键是找每一项的变化规律迭代公式推导迭代公式推导: pi=pi+t; 迭代初值迭代初值:pi=0;n=

20、1;s=1;t=1 t=s/n;迭代次数迭代次数:由:由t决定,当决定,当fabs(t)=3)迭代公式推导迭代公式推导 f=f1+f2 f代表数列 从第三项起的某一项,f1代表该项的前两项,f2代表该项的前一项迭代初值迭代初值:f1=1,f2=1 迭代次数:由题目要求决定迭代次数:由题目要求决定(可用标志法或计数法)(可用标志法或计数法)1,1,2,3,5,8f1=f2f2=f15342331597109467502551422935245782415781718553772584177111213938320405702887390881692138961041812865719641813

21、46269922746563245986321144987676546368317811217830914930352102334155求:打印求:打印fibonacci数列前数列前40个数(方法二)个数(方法二)迭代公式推导迭代公式推导1 f=f1+f2 f1=f2 f2=f迭代公式推导迭代公式推导2 f1=f1+f2 f2=f1+f2 一次得到两一次得到两个数,分析个数,分析f1,f2的含的含义义思考思考f1=1,f2=1for i=1 to 20输出f1,f2f1=f1+f2f2=f2+f1例例3:判断:判断m是否是素数是否是素数算法:算法:m%n=r n: 2sqrt(m) 若若r均不为均不为0,则表明,则表明m是素数是素数循环:穷举法循环:穷举法例例4:打印:打印100200之间的全部素数之间的全部素数循环的嵌套(自己分析)循环的嵌套(自己分析)例例5:译密码(输入一行字符,输出其相应密码):译密码(输入一行字符,输出其相应密码)算法分析:算法分析:1、输入字符为、输入字符为c:(av或或av) 转变为转变为c+4; 2、输入字符为、输入字符为c:(v或或v之后之后) 转变为转变为c-22;分析程序分析程序例:输入例:输入china!转换为转换为glmre!lvoid main()lchar c;lwhile(c=getchar()!=n)lif

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论