欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第五讲循环结构程序设计.ppt

    • 资源ID:5992030       资源大小:326.54KB        全文页数:62页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第五讲循环结构程序设计.ppt

    第五讲 循环结构程序设计,5.1 while语句5.2 do-while语句5.3 for语句5.4 goto语句以及用goto语句构成的循环5.5 break语句和continue语句 5.6 循环的嵌套 5.7 循环结构程序设计举例,在C语言中可以用以下语句来实现循环:1.用goto语句和if语句构成循环;2.用while语句;3.用do-while语句;4.用for语句。,循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。,S=1+2+3+100,0,S,1,2,100,S+1,S,S+2,S,S+100,S,作100次加法,S+i,S,累加器,计数器,5.1 while语句,真(非零),循环体,假(零),1、while 语句的形式:while(表达式)循环体;,2、while 语句 常称为“当型”循环语句。,3、说明:,先判断表达式,后执行语句。,表达式同if语句后的表达式一样,可以是任何类型的表达式。,循环体多于一句时,用一对 括起。,while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。,i=1;s=0;while(i=100)s=s+i;i+;printf(“n1+2+3+100=%d”,s);,循环变量的初始化计数器的初始化,累加器的初始化,循环控制条件,累加,修改循环变量,循环语句的三要素,循环次数固定的循环语句,#include stdio.h void main()float x;scanf(%f,【例5-1】输入一系列整数,判断其正负号,当输入0时,结束循环。,输入数据,为第一次判断做准备,while(x!=0),判断是否结束,if(x0)printf(+);else printf(-);scanf(%f,判断正负号,#include stdio.h void main()char ch;int num=0;ch=getchar();,【例5-2】统计从键盘输入的一行字符的个数(以回车键作为输入结束标记)。,while(ch!=n),判断是否输入结束,num+;ch=getchar();,printf(num=%dn,num);,注意,表达式在判断前,必须要有明确的值。,循环体中一般有改变条件表达式的语句。,while(表达式)后面没有分号。,5.2 do-while语句,1、do-while的形式:do 循环体;while(表达式);,2、do-while语句 常称为“直到型”循环语句。,真(非零),循环体,假(零),3、说明:,先执行语句,后判断表达式。,第一次条件为真时,while,do-while等价;第一次条件为假时,二者不同。,【例5-3】用do-while语句编写程序统计从键盘输入的一行非空字符的个数(以回车键作为输入结束标记)。,#include stdio.hvoid main()char ch;int num=0;ch=getchar();do num+;ch=getchar();while(ch!=n);printf(num=%dn,num);,注意,在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。,do-while和while语句相互替换时,要注意修改循环控制条件。,5.3 for语句,1、for的形式:for(初始表达式1;条件表达式2;循环表达式3)循环体;,表达式1:用于循环开始前为循环变量设置初始值。,表达式2:控制循环执行的条件,决定循环次数。,表达式3:循环控制变量修改表达式。,循环体语句:被重复执行的语句。,表达式3,计算表达式1,循环体,零,非零,for的下一条语句,2、执行过程,for(i=1;i=100;i+)sum=sum+i;,例如:,它相当于以下语句:i=1;while(i=100)sum=sum+i;i+;,表达式1;,while(表达式2),表达式3;,3、说明,三个表达式都可以是逗号表达式。,三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符不能省略。,4.for语句中表达式省略的形式,(1)for语句一般形式中的“表达式1”可以省略;如:sum=0;i=1;for(;i=100;i+)sum=sum+i;,(2)表达式2省略,即不判断循环条件,循环无终止地进行下去;如:for(sum=0,i=1;i+)if(i100)break;sum=sum+i;,(3)表达式3也可以省略,但此时保证循环能正常结束如:for(sum=0,i=1;i=100;)sum=sum+i;i+;,(4)可以省略表达式1和表达式3,只有表达式2,如:i=1;sum=0;for(;i=100;)sum=sum+i;i+;,i=1;sum=0;while(i=100)sum=sum+i;i+;,相当于,while(1)循环体;即不设初值,不判断条件,循环变量不增值。无终止地执行循环体。,(5)三个表达式都可省略,如 for(;)循环体;,如:sum=0,i=1;for(;)if(i100)break;sum=sum+i;i+;,相当于,(6)循环体为空语句 对for语句,循环体为空语句的一般形式为:for(表达式1;表达式2;表达式3);如:for(sum=0,i=1;i=100;sum+=i,i+);,要在显示器上复制输入的字符,输入的字符为.时,结束循环。输入abcdefg.输出abcdefg.while(putchar(getchar()!=.);,(1)在进入累加前先给累加器赋初值(一般为0);(2)用循环语句实现累加;for(循环变量赋初值;循环条件;循环变量改变规律)(3)循环体语句的设计。累加器当前值=累加器原值+循环变量当前值;,典型例题分析,【例5-4】求累加和1+2+3+1000,基本方法:,属于“累加器”类型问题。,累加器赋初值,求偶数和2+4+6+100,参考程序:,void main()long int k,s;,s=0;,for(k=1;k=1000;k+)s=s+k;,printf(s=%ld,s);,累加,思考,(1)给累乘器赋初值,一般为1;(2)用循环语句实现累乘;for(循环变量赋初值;循环条件;循环变量改变规律)(3)循环体设计。累乘器当前值=累乘器原值*循环变量当前值;,例5-5:求累乘积。如:123.100,基本方法:,属于“累乘器”类型问题。,累乘器赋初值,求n!=1 2 3 n,参考程序:,void main()double s=1;,int k;,for(k=1;k=100;k+)s=s*k;,printf(s=%lf,s);,累乘,思考,例5-6 判断一个数是否为素数?,一个数x在2,sqrt(x)范围内没有因子,我们就称其为素数(质数),主要编程方法:循环变量终值法、标记变量法,#include math.h void main()int x,k;scanf(%d,排除法:如果有因子,不再往下判断是否是素数,循环变量终值法,for(k=2;k=sqrt(x);k+)if(x%k=0)break;,if(ksqrt(x)printf(%d is a prime,x);else printf(%d is not a prime,x);,在判断范围内无因子,程序正常终止,有因子,程序非正常终止,#include math.h void main()int x,k,f=1;scanf(%d,排除法:如果有因子,不再往下判断是否是素数,for(k=2;k=sqrt(x);k+)if(x%k=0)f=0;break;,if(f=1)printf(%d is a prime,x);else printf(%d is not a prime,x);,在判断范围内无因子,程序正常终止,有因子,程序非正常终止,标记变量法,例5-7 用0-9这十个数字可以组成多少无重复的三位数?,编程方法:“枚举法”按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。,#include stdio.hvoid main()/*a,b,c代表百位、十位、个位*/int x,a,b,c,num=0;/*num存放满足条件的数的个数,注意num要赋初值*/for(x=100;x=999;x+)a=x/100;b=x/10%10;c=x%10;if(a!=b,编程方法:“递推法”,例5-8 裴波那契数列的第1、2项分别为1、1,以后各项的值均是其前两项之和。求前30项菲波那契数。,所谓递推法就是从初值出发,归纳出新值与旧值间的关系,直到求出所需值为止。新值的求出依赖于旧值,不知道旧值,无法推导出新值。数学上递推公式正是这一类问题。,f1-第一个数 f2-第二个数 f3-第三个数 f1=1;f2=1;f3=f1+f2;,以后只要改变f1,f2的值,即可求出下一个数.f1=f2;f2=f3;f3=f1+f2;,递推,void main()long f1=1,f2=1,f3;int k;,参考程序:,printf(%ldt%ldt,f1,f2);,for(k=3;k=30;k+)f3=f1+f2;printf(%ldt,f3);f1=f2;f2=f3;,注意f1、f2、f3、x 的类型,递推,1、语句形式:goto 语句标号;,例如:goto label;label:.,语句标号用标识符表示,它的定名规则与变量名相同。,5.4 goto语句以及用goto语句构成的循环,2、语句执行流程:在程序执行过程中,如果遇到goto语句,则程序执行流程无条件地转向语句标号后的语句继续执行。,3、说明,语句标号仅仅对goto 语句有效,对其它语句不影响。,同一个程序中,不允许有同名标号。,goto语句通常与条件语句配合使用。可用来实现条件转移、构成循环、跳出循环体等功能,【例5-9】分析下面程序的运行结果:,#include stdio.hvoid main()char c;loop:c=getchar();if(c=n)goto end;putchar(c);goto loop;end:printf(The endn);,程序运行情况为:123asd123asdThe end,1.break语句,(1)语句形式:break;,(2)作用:结束break所在的 switch语句。结束当前循环,跳出break所在的循 环结构。,5.5 break语句和continue语句,【例5-10】求300以内能被17整除的最大的数。,#include stdio.hvoid main()int x,k;for(x=300;x=1;x-)if(x%17=0)break;printf(x=%dn,x);,找到满足条件的最大数,结束循环,(1)语句形式:continue;,(2)语句作用:结束本次循环。,2、continue 语句,(3)语句执行流程:continue语句可以结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。,【例5-11】求300以内能被17整除的所有整数。,#include stdio.hvoid main()int x,k;for(x=1;x=300;x+)if(x%17!=0)continue;printf(%dt,x);,while(条件)语句A;break;语句 B;,真,语句B,条件,语句A,break,假,结束循环,4、break语句与continue语句的区别,至此位置,while(条件)语句A;continue;语句 B;,真,语句B,条件,语句A,continue,假,结束循环,至此位置,#include stdio.hvoid main()int a,b;for(a=1,b=1;a=10)break;if(b%3=1)b+=3;continue;printf(%dn,a);,【例5-12】分析以下程序的运行结果。,程序运行结果:4,在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。如果内循环体中又有嵌套的循环语句,则构成多重循环。,5.6 循环的嵌套,嵌套在循环体内的循环体称为内循环,外面的循环称为外循环。,while、do-while、for三种循环都可以互相嵌套。,循环语句之间的关系,真,真,外循环初始条件,内循环初始条件,内循环体,外循环条件,假,内循环条件,假,内循环循环条件,外循环循环条件,循环结束,二重循环嵌套结构执行流程,例5-13:输出图形:,*,编程分析:,采用双重循环,一行一行输出。,每一行输出步骤:一般3步。1)光标定位,3)每输完一行光标换行(n),2)输出图形。例如本题:共4行,若行号用k表示,则每一行有2*k-1个*号。,#include stdio.h void main()int k1,k2;for(k1=1;k1=4;k1+)putchar(t);for(k2=1;k2=k1;k2+)putchar(b);,for(k2=1;k2=k1*2-1;k2+)putchar(*);,putchar(n);,定位(还可以用空格的方法),输出,5.7 循环结构程序设计举例,【例5-14】求,#include stdio.hvoid main()float s=0,f1=2,f2=1,f=1,t,n;/*累加器赋初值*/for(n=1;n=10;n+)s=s+f*f1/f2;/*累加器当前值=累加器原来的值+新的要加的数据*/f=f*(-1);t=f2;f2=f1;f1=f1+t;/*为求下一个要加的数据做准备*/printf(s=%fn,s);,【例5-15】输入任意一个整数,将其逆序输出,例如输入1234,输出4321。,include stdio.hvoid main()long y,n;scanf(%ld,【例5-16】猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个。以后每天早晨猴子都吃掉前一天剩下的一半多一个。到第5天时,猴子再去吃桃子时发现只剩下1个桃子。问第一天猴子摘了多少个桃子?,#include stdio.hvoid main()int x=1,n;for(n=4;n=1;n-)x=(x+1)*2;printf(%d,x);,【例5-17】猜数游戏:任意设置一个整数,请用户从键盘上输入数据猜想设值的数是什么,告诉用户是猜大了还是小了。10次以内猜对,用户获胜。否则,告诉用户设置的数据是什么。,#include stdio.hvoid main()int num=123,x,n;printf(hint:0num)printf(bigger!n);if(xnum)printf(smaller!n);if(n=11)printf(Lost!the number is%dn,x);,1、写出程序运行结果:void main()int i,j,x=0;for(i=0;i2;i+)x+;for(j=0;j=3;j+)if(j%2)continue;x+;x+;printf(“x=%dn”,x);,运行结果:x=8,练 习,void main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%dn”,a,b);,运行结果:a=2,b=1,2、将程序补充完整。以下程序从输入数据中统计正整数和负整数的个数.用输入0来结束输入.变量i存放正整数个数,变量j存放负整数的个数.void main()1 i,j,n;i=j=0;scanf(“%d”,3.百钱买百鸡.公鸡5元一只,母鸡3元一只,小鸡1元三只;一百元买一百只鸡,且公鸡,母鸡,小鸡都要有.有几种买法?void main()int i,j,k,n=0;for(i=1)for(j=2)k=100-i-j;if(3=100)n+;printf(i=%d,j=%d,k=%dn”,i,j,k);printf(“n n=%d”,n);,4、编程输出下面的数字金字塔(1到9)。,1 121 12321.12345678987654321,课后思考:,以下问题可以用穷举法编程,某旅行团有男人、女人和小孩共30人,在纽约一家小饭馆里吃饭,该饭馆按人头收费,每个男人收3美元,每个女人收2美元,每个小孩收1美元,共收取50美元。共有多少组解?(答案:11组解或9组解),本 章 小 结,1.掌握while,for及多重循环,注意!,2.掌握典型例题及方法(1)累加、连乘、判断素数、费氏数列等(2)枚举、递推方法,

    注意事项

    本文(第五讲循环结构程序设计.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开