欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载  

    第5部分循环结构的程序设计方案.ppt

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

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

    第5部分循环结构的程序设计方案.ppt

    第5章 循环结构的程序设计,5.1 循环结构问题的提出 5.2 解决单重循环的问题 5.3 解决多重循环的问题 5.4 简单的程序调试,5.1 循环结构问题的提出,在用计算机解决大量的实际问题时,经常会遇到如下许多重复运算的问题。 (1)求某一同学一学期的平均分。解决方法是将该同学这一学期所有考核成绩累加,再除以考核门数,就得到该生的平均分。,(2)计算:1*2*3*n。这是一个累乘的问题,每个乘数与前面的一个数都有固定的关系(后面的数比前面的数大1)。因此每次累乘的数都是前面的数加1,方法相同,实际这是一个重复累乘的问题。 这一类问题,重复的次数有些情况是已知的,有些情况是未知的。但是这些问题都带有重复性的工作,解决这类问题,采用循环结构最为适当。,有些问题,采用单重循环就能解决,比如上面所举的两个例子,都可以采用单重循环;而有些问题,比如说二维表格数据输出的问题,则需要采用双重循环才能解决。 C语言提供了三种实现循环结构的语句,它们分别是:while语句、do-while语句和for语句,三种循环语句各有不同的特点,我们可以灵活使用。,5.2 解决单重循环的问题,5.2.1 while循环语句 while循环语句的形式如下: while(表达式)循环体语句 while循环语句的执行过程如图5-1所示。,图5-1 while语句的执行,说明 (1)用while语句构成的是“当型”循环结构,它的特点是:“先判断,后执行”,如果表达式的最初值为0,则循环体语句一次也不执行。只有当表达式的值为非0时,才能执行循环体语句。执行完循环体语句后,再返回循环的开始部位,判断表达式的值,决定是否继续循环。,(2)循环体语句只能是一条语句,如需要使用多条语句,必须采用复合语句的形式。 (3)循环体内一定要有能够改变表达式的值的操作,最终使其表达式的值变为0,否则将形成无休止的“死”循环。,例5.1 求:1+2+3+n的累加求和的值。 问题分析: (1)我们首先需要设置一个存放累加求和的变量sum,每一次加一个数放入变量sum中; (2)再设置一个存放加数的变量i,每一次累加时被加的数均需比前一个数大1; (3)最后还需设置一个结束累加的变量n,确定累加到什么数为止。,根据以上分析,写出源程序如下: main ( ) int i, n, sum; i=1; sum=0; printf (“ Please input n : “ ); scanf (“%d“, while ( i=n ) /* 累加的数i 小于或等于终止数n就循环累加,否则结束循环*/, sum=sum+i; i+; printf (“sum=%dn“, sum ); 说明 (1)存放累加求和的变量sum,说明后必须赋初值,一般为0,否则由于说明的变量其原有初值不确定,导致结果有误。,(2)程序中sum=sum+i; 语句是一个累加求和功能的语句,它是将变量sum中的数值加上变量i中的数值,求和后再放入变量sum中,此时变量sum中存放的数值已经变为新的数值,原有数值已被覆盖掉。 以上程序运行情况如下: Please input n : 100 sum=5050,5.2.2 do-while 循环语句 do-while 循环语句的形式如下: do 循环体语句 while (表达式); do-while语句的执行过程如图5-2所示。,图5-2 do-while语句的执行过程,说明 (1)用do-while语句构成的仍是“当型循环”结构。它的特点是:“先执行,后判断”。遇到do关键字后,首先执行循环体语句,然后计算表达式的值,如表达式的值为非0,则继续执行循环体语句,然后再计算表达式的值,如表达式的值为0,则结束循环,执行do-while语句后面的语句。因此这种循环结构,最少也可以执行一次循环体语句。,(2)循环体语句仍然只能是一条语句,如需要使用多条语句,必须采用复合语句的形式。 (3)循环体语句中也一定要有改变表达式的值的操作,最终使其表达式的值变为0,结束循环。否则将成为“死”循环。 (4)在关键字while的小括号的后面,一定要加分号“;”,千万不能忘记,它表示do-while语句到此结束。,例5.2 求:n!,即计算1×2×3××n的值。 源程序如下: main ( ) int i, n, s; i =1; s =1; printf ( “Please input n: “ ); scanf (“%d“, ,do s = s*i ; /* 使用“累乘”的公式 */ i+; while ( i=n); printf (“%d!= %dn“, n, s ); ,说明 (1)存放累乘求和的变量s,说明后必须赋初值,一般为1,否则由于说明的变量其原有初值不确定,导致结果有误。 (2)程序中s = s*i; 语句是一个累乘求和功能的语句,它是将变量s中的数值乘上变量i中的数值,累乘后再放入变量s中,此时变量s中存放的数值已经变为新的数值,原有数值已被覆盖掉。,以上程序运行情况如下: Please input n : 5 5!=120,5.2.3 for循环语句 for循环语句的形式如下: for ( 表达式1;表达式2;表达式3 ) 循环体语句 for语句的执行过程如图5-3所示。,图5-3 for语句的执行过程,说明 (1)由图5-3可知,for循环语句的特点仍是“先判断,后执行循环体”。遇到for关 键字,先计算表达式1的值,然后再判断表达式2的值,如其值为非0,则执行循环体语句,执行完循环体语句后,再来计算表达式3的值,然后再判断表达式2的值。如其值为0,则结束for循环语句,执行for循环语句后面的语句。,(2)循环体语句仍然只能是一条语句,必要时可采用复合语句的形式。 (3)此结构仍需最终使表达式2的值变为0,以结束循环。否则将会造成“死”循环。 (4)for语句的表示形式相当灵活,其中:表达式1和表达式3均可省略,但一定要确保表达式2最终值等于0。表达式1或表达式3省略后,其分号“;”必须有,不能省略,即: for ( ; 表达式2 ; ) 循环体语句,(5)通常情况下:表达式1代表循环控制变量的初值,表达式2代表循环控制变量的终值,而表达式3代表循环控制变量的增量,例如:求n!,可简单表示成:s=1; for ( i=1; i=n; i+) s=s*i;,5.2.4 三种循环语句的比较 for循环和while循环语句结构均是先判断循环条件,条件成立,才执行循环体,具有“先判断,后执行”特点;而do-while循环语句则是先执行循环体,然后再判断循环条件,具有“先执行,后判断”的特点。,5.3 解决多重循环的问题,5.3.1 三种循环语句的混合嵌套问题 例5.8 求2100之间的所有素数,并输出。 问题分析 判断一个数是否是素数的方法,我们在前面已经介绍了。设某一个数为a,判断该数是否为素数,就是用这个数分别被2去除,如果都不能被除尽,则该数为素数,如有一次被除尽,则该数就不是素数。,现需求2100之间的所有素数,判断素数的方法是相同的,只要利用循环依次从2100之间取一个数,判断是否是素数,如是素数就输出显示,不是素数就继续判断下一个数,直至判断到100为止。 源程序如下:,# include “math.h“ main ( ) int n, i, j, flag, x=0; for ( i=2; i=100; i+) flag=1; j=2; n=(int)sqrt(double)i ); while ( flag ,if ( flag ) printf (“%d , “, i ); x+; if ( x%5=0 ) printf (“n“); ,程序运行时,当i=2或3时,变量j的初值也为2,大于变量n的值,内嵌的while循环不执行,flag变量值为1,输出素数2或3;当i3时,进入内层循环,若i为素数,flag的值不变,仍为1,若i不是素数,flag的值变为0,并立即结束内循环。当退出内循环后,if语句判断flag的值为1时,输出素数i;若i不是素数,flag的值变为0,不做输出。,外层循环继续取下一个数,通过内层循环判断是否是素数,直到外层循环取的数i大于100后,结束外层循环,结束程序运行。,通过以上例子我们看到,外层循环的目的是,每次循环分别从2100的数中取某一个数,已知循环的次数为99次,采用for循环比较合适;而内层循环是判断某个数是否是素数,在每一次的除法中,当某一次除法运算出现余数为0时,表明该数不是素数,立即结束内层循环,所以内层循环次数事先难以确定,因此采用while循环最为适当。,在解决多重循环问题时,往往需要具体问题具体分析,根据实际问题的内容和特点,采用不同的循环结构。因此在解决多重循环问题时,三种循环结构并举,适合哪一种循环结构,就采用哪一种循环结构。读者可在实践过程中灵活使用。,5.3.2 continue语句和break语句在循环中的应用 1Continue 语句 continue语句的一般形式: continue; 该语句的功能是:结束本次循环。也就是说,不管在该语句的后面是否还有其他执行语句,遇到continue;语句,本次循环到此结束,接着进行下一次循环的判断。,例5.9 将10100之内的不能被5整除的数输出。 源程序如下: main ( ) int n; for ( n=10; n=100; n+ ) if ( n%5=0 ) continue; printf (“%d “, n ); ,程序运行时,当n能被5整除时,将执行continue;语句,这次循环到此结束,不再执行printf (“%d“, n ); 语句,只有当n不能被5整除时,才执行printf (“%d“, n ); 语句。,2Break 语句 break语句的一般形式是: break; 在循环结构中使用break;语句,可强制结束循环。不管循环条件是否成立,都将跳出它所在的本重循环,结束本重循环的执行。注意:它不能跳出多重循环,只能跳出本重循环。,例5.10 使用break语句的例子。 源程序如下: main ( ) int i, s; s=0; for ( i=1; i5 ) break; printf (“s=%dn“, s ); ,此例中,如果没有break语句,则循环将执行10次;而含有break语句后,当循环执行到第3次时,i等于3,s的值为6,if语句的条件成立,将会执行到break语句,于是for循环到此结束,提前终止了循环。 break语句只能用于循环语句和switch语句中。 break语句是终止循环,而continue语句只是结束本次循环,两条语句功能不同,请不要混淆。,5.4 简单的程序调试,读者可能在上机操作时,遇到了一个头疼的问题,怎么修改程序也总是报错,不知从何入手。这就是程序调试的问题。 归纳起来,程序出错大致有三种情况:编译时出错、运行时出错和运行结果不符合要求。,

    注意事项

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

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




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开