欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    5-2 循环结构程序设计.ppt

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

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

    5-2 循环结构程序设计.ppt

    C语言程序设计语言程序设计 第第5章章 循环程序设计循环程序设计例如:例如:【例例5.1】编写程序,求编写程序,求100个自然数的和个自然数的和即:即:s=1+2+3+100 思路:寻找思路:寻找加数加数与与求和求和的规律的规律 加数加数i i从从1变到变到100,每循环一次,使,每循环一次,使i增增1,直到直到i的值超过的值超过100。i i的的初值初值初值初值设为设为1。求和求和设变量设变量 sum sum 存放和存放和,循环求,循环求sum=sum=sum+isum+i,直至直至i超过超过100。25.2 while循环语句循环语句计算计算sum=1+2+3+100main()int i,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);35.2 while循环语句循环语句循环体循环体循环控制条件循环控制条件i:i:循环控制循环控制变量变量循环的初始化循环的初始化#include void main()int i=1,sum=0;while(i=100)sum=sum+i;i+;printf(Sum=%d n,sum);计算计算sum=1+2+3+1004注意(续):注意(续):为了保证循环正常运行,应该特别注意:为了保证循环正常运行,应该特别注意:循环控制条件的描述循环控制条件的描述 控制条件的初始状态(初始值)控制条件的初始状态(初始值)循环体内部对控制条件的影响循环体内部对控制条件的影响55.2 while循环语句循环语句while语句的执行过程语句的执行过程while语句的执行过程是:语句的执行过程是:计算计算“表达式表达式”的值;的值;若若“表达式表达式”的值不等于的值不等于0,表示为,表示为“真真”,转向,转向;否则,表示为;否则,表示为“假假”,结束循环,转到,结束循环,转到while语句后面语句后面的语句继续执行程序;的语句继续执行程序;执行执行“语句语句”部分,即执行循环体;部分,即执行循环体;返回返回继续执行。继续执行。65.2 do-while语句语句语句一般格式语句一般格式 do 语句语句 while(表达式表达式););功能:功能:先执行内嵌语句先执行内嵌语句(循环体),之后计算表达(循环体),之后计算表达式的值,不为式的值,不为0(逻辑真)时,再执行循环体(逻辑真)时,再执行循环体并判断条件,直到表达式的值为并判断条件,直到表达式的值为 0 结束循环,结束循环,转去执行转去执行while下面的语句。下面的语句。7do-while语句的执行过程语句的执行过程NY循环体循环体表达式非表达式非0?流程图流程图 循环体循环体当表达式为真当表达式为真N-S结构图结构图功能:功能:先执行内嵌语句先执行内嵌语句(循环体),之后计算表达式(循环体),之后计算表达式的值,不为的值,不为0(逻辑真)时,再执行循环体并判断条(逻辑真)时,再执行循环体并判断条件,直到表达式的值为件,直到表达式的值为 0 结束循环,转去执行结束循环,转去执行while下面的语句。下面的语句。8 do-while循环的算法循环的算法main()int i=1,sum=0;do sum=sum+i;i+;while(i=100);printf(%dn,sum);用用用用do-whiledo-while语句求语句求语句求语句求100100个自然数的和个自然数的和个自然数的和个自然数的和 9#include main()int i=1,sum=0;while(i=100)sum=sum+i;i+;printf(“Sum=%d n”,sum);#include main()int i=1,sum=0;dosum=sum+i;i+;while(i=100);printf(“Sum=%d n”,sum);5.2 while和和do while循环循环循环变化形式,循环变化形式,1到到100的累加的累加10说明:说明:while和和do-while都能实现循环控制,都能实现循环控制,while结构程序通常都可以转换成结构程序通常都可以转换成do-while结构结构l l区别:区别:do-while 语句语句先执行循环体再判断条先执行循环体再判断条件,循环体件,循环体至少执行一次至少执行一次;while 语句语句先判断条件再执行循环体,先判断条件再执行循环体,循环体有可能一次也不执行循环体有可能一次也不执行l ldowhile循环体中一定要有能使表达式值循环体中一定要有能使表达式值趋于趋于0的操作的操作(如如i+),否则会出现否则会出现死循环死循环。115.3 for语句语句语句一般格式语句一般格式 for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句l“表达式表达式1 1”用于设定循环开始的条件用于设定循环开始的条件,循环的初始化循环的初始化l“表达式表达式2 2”是是forfor语句的语句的循环控制条件循环控制条件,当循环控制条件为,当循环控制条件为1(True)1(True)或非或非0 0时,运行时,运行循环体的循环体的“语句语句”部分。可以是任何形式部分。可以是任何形式的表达式的表达式l“表达式表达式3 3”用于用于修改修改循环控制变量循环控制变量的值的值,目的是,目的是使使“表达式表达式2 2”的值变为的值变为0(False)0(False),以结束循环,以结束循环l“语句语句”部分是部分是forfor语句的语句的循环体循环体,可以是单一语句,也可以是,可以是单一语句,也可以是复合语句复合语句12for语句的执行过程语句的执行过程13使用使用for语句编程计算语句编程计算100个自然数的和个自然数的和#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(“sum=%d n,sum);145.3 for语句语句 for语句是常用的、特殊的循环控制语句语句是常用的、特殊的循环控制语句for语句语句优点优点:将:将“循环初始化条件循环初始化条件”、“循循环控制条件环控制条件”、“循环控制变量的修改循环控制变量的修改”集集中表示中表示for语句的功能强大,使用灵活,变化多样语句的功能强大,使用灵活,变化多样15使用使用for语句编程计算语句编程计算100个自然数的和个自然数的和#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(“sum=%d n,sum);可部分或全部省略,可部分或全部省略,可部分或全部省略,可部分或全部省略,但但但但“;”不可省略不可省略不可省略不可省略16省略省略for语句的表达式语句的表达式 表达式表达式1、2、3全省略,全省略,即:即:for(;)就等同于:就等同于:while(1),会无限循环(会无限循环(死循环死循环)注意:在省略某个表达式时,应在适当位置进行循注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行环控制的必要操作,以保证循环的正确执行 省略表达式省略表达式省略表达式省略表达式1 1和表达式和表达式和表达式和表达式3 3,即:即:即:即:forfor(;(;(;(;表达式表达式表达式表达式2 2;);););)就等同于:就等同于:就等同于:就等同于:whilewhile(表达式表达式表达式表达式2 2)省略表达式省略表达式省略表达式省略表达式2 2,即:即:即:即:forfor(表达式表达式表达式表达式1 1;表达式;表达式;表达式;表达式3 3)就等同于:就等同于:就等同于:就等同于:表达式表达式表达式表达式1;while(1)1;while(1)表达式表达式表达式表达式3;3;17例如:例如:i=1;for(;i100)for(i=1;i100)i+;18说明:说明:所有用所有用 while 语句语句实现的循环都可以用实现的循环都可以用for 语句语句实现。实现。等价于:等价于:for(表达式表达式1;表达式表达式2;表达式表达式3)语句;语句;表达式表达式1;while(表达式表达式2)语句;语句;表达式表达式3;19几种循环语句的比较几种循环语句的比较while和和do-while语句的语句的表达式表达式只有只有一个一个,for语语句有句有三个三个。while 和和for先判断先判断循环条件循环条件后执行后执行循环体,循环体,do-while语句语句先执行先执行循环体循环体后判断后判断循环条件。循环条件。whilewhile语句多用于语句多用于语句多用于语句多用于循环次数不定循环次数不定循环次数不定循环次数不定的情况的情况的情况的情况do-whiledo-while语句多用于语句多用于语句多用于语句多用于至少要运行一次至少要运行一次至少要运行一次至少要运行一次的情况的情况的情况的情况forfor语句语句语句语句多用于要多用于要多用于要多用于要赋初值赋初值赋初值赋初值或或或或循环次数固定循环次数固定循环次数固定循环次数固定的情况的情况的情况的情况20#include main()int i=1,sum=0;while(i=100)sum=sum+i;i+;printf(“Sum=%d n”,sum);#include main()int i=1,sum=0;dosum=sum+i;i+;while(i=100);printf(“Sum=%d n”,sum);循环变化形式,循环变化形式,1到到100的累加的累加几种循环语句的比较几种循环语句的比较#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(“sum=%d n,sum);215.4 循环的嵌套循环的嵌套如果在一个循环的循环体内包含另一个完整的如果在一个循环的循环体内包含另一个完整的循环则称为循环则称为循环的嵌套循环的嵌套,其中被嵌套的循环称,其中被嵌套的循环称为为内循环内循环,而嵌套了内循环的是,而嵌套了内循环的是外循环外循环内循环还可以嵌套循环,形成多级(层)嵌套内循环还可以嵌套循环,形成多级(层)嵌套22 循环的嵌套不仅可以发生在相同语句之间,如循环的嵌套不仅可以发生在相同语句之间,如while嵌套嵌套while、do-while嵌套嵌套do-while,while语句和语句和do-while语句也可以互相嵌语句也可以互相嵌套套(1)while(.)(2)while()while()dowhile();(3)do(4)dowhile()do while();while();循环的嵌套循环的嵌套23for语句可以嵌套语句可以嵌套for语句构成循环的嵌套语句构成循环的嵌套for语句也可以与语句也可以与while语句、语句、do-while语句语句互相互相嵌套嵌套24注意:注意:while、do-while、for循环语句可以并列,循环语句可以并列,也可以相互嵌套,但也可以相互嵌套,但要层次清楚,不能出要层次清楚,不能出现交叉。现交叉。多多重重循循环环程程序序执执行行时时,外外层层循循环环每每执执行行一一次,内层循环都需要循环执行多次。次,内层循环都需要循环执行多次。例如:例如:for(a=1;a=10;a+)for(b=0;b=5;b+)外循环外循环外循环外循环执行了执行了执行了执行了1010次,次,次,次,内循环内循环内循环内循环执行执行执行执行6 6次次次次循环正常结束时,内循环执行了循环正常结束时,内循环执行了循环正常结束时,内循环执行了循环正常结束时,内循环执行了106=60106=60次次次次 25错误的嵌套形式 循环必须是完整循环必须是完整的,不允许内外循环的,不允许内外循环交叉嵌套交叉嵌套f=1;while(i 10)i=1;do f=f*i;i+;while(i10);混乱的控制条件 内外循环的循环控制条件通内外循环的循环控制条件通常是分开的,相对独立的常是分开的,相对独立的i=1;s=0;while(i 3)s=s+f;i=1;f=1;while(i5)i+=2;f=f*i;i+;循环的嵌套循环的嵌套265.5 循环结构中的跳转语句循环结构中的跳转语句有如下三种语句实现跳转:有如下三种语句实现跳转:continue语句语句break语句语句goto语句语句在循环语句的循环体中使用,可以进行循在循环语句的循环体中使用,可以进行循环的流程控制环的流程控制27后续语句后续语句continue;continue;Y YN N表达式表达式表达式表达式?后续语句后续语句continue;continue;表达式表达式表达式表达式?Y YN Ncontinue语句及应用语句及应用 功能:功能:跳过循环体中尚未执行的语句,立即开始执行下一次跳过循环体中尚未执行的语句,立即开始执行下一次循环。循环。whilewhile语句语句语句语句do-whiledo-while语句语句语句语句后续语句后续语句计算表达式计算表达式计算表达式计算表达式3 3计算表达式计算表达式计算表达式计算表达式1 1continue;continue;表达式表达式表达式表达式2?2?Y YN Nforfor语句语句语句语句28后续语句后续语句break;break;Y YN N表达式表达式表达式表达式?后续语句后续语句break;break;表达式表达式表达式表达式?Y YN N循环中循环中break的应用的应用功能:功能:终止本层循环,转到本层循环的后续语句执行。终止本层循环,转到本层循环的后续语句执行。whilewhile语句语句语句语句do-whiledo-while语句语句语句语句后续语句后续语句计算表达式计算表达式计算表达式计算表达式3 3计算表达式计算表达式计算表达式计算表达式1 1break;break;表达式表达式表达式表达式2?2?Y YN Nforfor语句语句语句语句29goto语句语句有兴趣的同学自学有兴趣的同学自学不提倡使用不提倡使用goto语句语句注意注意:goto语句能实现程序无条件转移,为编程语句能实现程序无条件转移,为编程提供了便利。但是无限制地使用,会破坏提供了便利。但是无限制地使用,会破坏程序的结构化程度。程序的结构化程度。因此应限制使用。因此应限制使用。30第第5章章 循环程序设计循环程序设计5.1 概述概述 5.2 while和和do while循环循环 5.3 for循环循环 5.4 循环的嵌套循环的嵌套 5.5 循环的控制循环的控制 5.6 应用举例应用举例5.7 程序调试程序调试 31for语句的简单应用语句的简单应用求求n!,即计算即计算p=123n的值。的值。思路:求阶乘与求累加的运算处理过程类似,只要思路:求阶乘与求累加的运算处理过程类似,只要将将“+”变为变为“*”。设置:设置:乘数乘数乘数乘数i i,初值为,初值为1,终值为,终值为n(n是循环控制终是循环控制终值,需要从键盘输入)值,需要从键盘输入)累乘器累乘器累乘器累乘器 p p,每次循环令,每次循环令p=p*i32程序:程序:main()int i,n;long p;p=1;printf(Enter n:);scanf(%d,&n);for(i=1;i=n;i+)p=p*i;printf(p=%ld n,p);思考:思考:思考:思考:如何输出如何输出如何输出如何输出1!,2!,n!1!,2!,n!?如何求如何求如何求如何求s=1!+2!+n!s=1!+2!+n!?33程序举例程序举例-1打印出所有的打印出所有的“水仙花数水仙花数”,所谓,所谓“水仙花数水仙花数”是指一个三位数,其各位数字立方和等于该数字是指一个三位数,其各位数字立方和等于该数字本身。本身。例如:例如:153=13+53+3334水仙花数程序实例水仙花数程序实例(解法解法1)#include “stdio.h”main()int l1,l2,l3,l4;for(l4=100;l4=999;l4+)l1=l4/100;l2=(l4%100)/10;l3=I4%10;if(l4=l1*l1*l1+l2*l2*l2+l3*l3*l3)printf(Daffodils number is%dn,l4);35水水仙仙花花数数解解法法2-框框图图开始for l1=1 to 9for l2=0 to 9for l3=0 to 9输出l4l4=l5?l4=l1*100+l2*10+l3l5=l1*l1*l1+l2*l2*l2+l3*l3*l3结束yesno36水仙花数解法水仙花数解法2-程序程序#include “stdio.h”main()int l1,l2,l3,l4;for(l1=1;l1=9;l1+)for(l2=0;l2=9;l2+)for(l3=0;l3=9;l3+)l4=l1*100+l2*10+l3;if(l4=l1*l1*l1+l2*l2*l2+l3*l3*l3)printf(Daffodils number is%dn,l4);37九九九表九表-138九九九表框图和程序九表框图和程序-1开始for I=1 to 9for J=1 to 9输出I*J输出表头结束#include “stdio.h”main()int i,j;for(i=1;i=9;i+)printf(%4d,i);printf(n);for(i=1;i=9;i+)printf(-);printf(n);for(i=1;i=9;i+)for(j=1;j=9;j+)printf(%4d,i*j);printf(n);开始for I=1 to 9for J=1 to 9输出I*J输出表头结束39九九九表九表-240九九九表框图和程序九表框图和程序-2开始for I=1 to 9for J=1 to I输出I*J输出表头结束#include “stdio.h”main()int i,j;for(i=1;i=9;i+)printf(%4d,i);printf(n);for(i=1;i=9;i+)printf(-);printf(n);for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%4d,i*j);printf(n);开始for I=1 to 9for J=1 to I输出I*J输出表头结束41百钱买百鸡百钱买百鸡鸡翁一,值钱五;鸡母一,值钱三;鸡雏鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?雏各几何?x+y+z=1005x+3y+z/3=10042百钱买百鸡百钱买百鸡-1#include “stdio.h”main()int x,y,z,m,n;for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)m=x+y+z;n=5*x+3*y+z/3;if(m=100&n=100)printf(%5d,%5d,%5d n,x,y,z);0 25 754 18 788 11 8112 4 8443百钱买百鸡百钱买百鸡-2#include main()int x,y,z,m,n;for(x=0;x=20;x+)for(y=0;y=33;y+)z=100-x-y;n=5*x+3*y+z/3;if(n=100)printf(%5d,%5d,%5dn,x,y,z);0 25 754 18 788 11 8112 4 8444应用举例应用举例【例例5.7】把把100200之间能被之间能被7整除的数,整除的数,以十个数为一行的形式输出,最后以十个数为一行的形式输出,最后输出一共有多少个这样的数。输出一共有多少个这样的数。for(n=100;n=200;n+)n能被能被7整除整除 T F 终止本次循环终止本次循环 输出输出n 输出输出10个数个数 T F 换行换行45算法和程序算法和程序main()int n,j=0;for(n=100;n=200;n+)if(n%7!=0)continue;printf(%6d,n);j+;if(j%10=0)printf(n);printf(n j=%dn,j);465.3 for语句语句例:打印几何图形例:打印几何图形对于这类问题,每行对于这类问题,每行中星号的个数、总行中星号的个数、总行数等都应该用循环结数等都应该用循环结构进行控制,而不是构进行控制,而不是直接输出若干行字符直接输出若干行字符串串#include void main()int i,j;for(i=1;i=4;i+)for(j=0;ji;j+)putchar();for(j=1;j=6;j+)putchar(*);putchar(n);*47【例例5.10】编程序,输出以下图形。编程序,输出以下图形。*一共有一共有一共有一共有4 4 行,每行由空格和星号组成:空格数行,每行由空格和星号组成:空格数行,每行由空格和星号组成:空格数行,每行由空格和星号组成:空格数按行增加,星号按行减少按行增加,星号按行减少按行增加,星号按行减少按行增加,星号按行减少变量变量变量变量 i i 控制输出行数,控制输出行数,控制输出行数,控制输出行数,从从从从1 1变化到变化到变化到变化到4 4变量变量变量变量 j j 控制输出每行的空格和星号:控制输出每行的空格和星号:控制输出每行的空格和星号:控制输出每行的空格和星号:j j 从从从从1 1变化到变化到变化到变化到 i i,每次输出一个空格每次输出一个空格每次输出一个空格每次输出一个空格 j j 从从从从1 1变化到变化到变化到变化到 8-28-2*i i1 1,每次输出一个星号每次输出一个星号每次输出一个星号每次输出一个星号使用使用使用使用双重循环双重循环双重循环双重循环实现实现实现实现思路:思路:思路:思路:48算法和程序:算法和程序:main()int i,j;for(i=1;i=4;i+)for(j=1;j=i;j+)printf();for(j=1;j=8-(2*i-1);j+)printf(*);printf(n);for(i=1;i=4;i+)for(j=1;j=i;j+)输出一个空格输出一个空格 for(j=1;j=8-(2*i-1);j+)输出一个星号输出一个星号 换行换行思考:思考:思考:思考:l l如何输出如何输出如何输出如何输出1010行行行行图形?图形?图形?图形?l l输出图形向右输出图形向右输出图形向右输出图形向右平移平移平移平移2020个字符个字符个字符个字符位置,应如何修改程序?位置,应如何修改程序?位置,应如何修改程序?位置,应如何修改程序?49杨辉三角形杨辉三角形-框图框图11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1开始输入输出的行数nfor i=0 to nfor j=0 to i输出 输出回车换行开始开始输入输出的行数nfor i=0 to nfor j=0 to i输出 输出回车换行开始50杨杨辉辉三三角角形形-程程序序1#include main()int n,i,j,k,i1,j1,k1;printf(输入输出的行数:输入输出的行数:);scanf(%d,&n);for(i=0;in;i+)for(j=0;j=i;j+)i1=j1=k1=1;for(k=1;k=i;k+)i1*=k;for(k=1;k=j;k+)j1*=k;for(k=1;k=i-j;k+)k1*=k;printf(%7d,i1/(j1*k1);printf(n);51杨杨辉辉三三角角形形-程程序序2#include main()int n,i,j,k,i1,j1,k1;printf(输入输出的行数:输入输出的行数:);scanf(%d,&n);i1=1;for(i=0;i0)i1*=i;j1=1;for(j=0;j0)j1*=j;k1=1;for(k=1;k=i-j;k+)k1*=k;printf(%7d,i1/(j1*k1);printf(n);52杨杨辉辉三三角角形形-程程序序3#include main()int n,i,j,k,i1,j1,k1;printf(输入输出的行数:输入输出的行数:);scanf(%d,&n);for(i=0;in;i+)for(j=0;j=i;j+)i1=j1=1;for(k=j+1;k=i;k+)i1*=k;for(k=1;k=i-j;k+)j1*=k;printf(%7d,i1/j1);printf(n);535.6 程序调试程序调试对于程序设计而言,即使优秀的程序员也不对于程序设计而言,即使优秀的程序员也不能保证不会犯错误能保证不会犯错误一个优秀的程序,不在于使用了先进的算法,一个优秀的程序,不在于使用了先进的算法,而在于仅仅包含少量的错误而在于仅仅包含少量的错误程序中的错误是在所难免的,关键是发现并程序中的错误是在所难免的,关键是发现并纠正错误纠正错误初学程序设计的人有必要从一开始就养成良初学程序设计的人有必要从一开始就养成良好的习惯,培养严谨的工作作风,并逐步掌好的习惯,培养严谨的工作作风,并逐步掌握一些编程技巧握一些编程技巧545.6 程序调试程序调试程序调试的一般策略程序调试的一般策略程序中的错误一般可分为:程序中的错误一般可分为:语法错误语法错误语法错误语法错误比较容易发现,通常,有语法错误的程序不比较容易发现,通常,有语法错误的程序不能通过编译和连接,也就不能生成可执行的程序能通过编译和连接,也就不能生成可执行的程序逻辑错误逻辑错误逻辑错误逻辑错误又叫语义错误,也就是不能正确地表达所需又叫语义错误,也就是不能正确地表达所需要的功能,是较常见的错误之一。其外部表现为,程要的功能,是较常见的错误之一。其外部表现为,程序可以运行,但有时出错,有时又不出错。逻辑错误序可以运行,但有时出错,有时又不出错。逻辑错误通常比较难于被发现,查错和纠错对任何程序员来说通常比较难于被发现,查错和纠错对任何程序员来说都是挑战都是挑战设计错误设计错误设计错误设计错误比较少见,通常是由于对问题的分析不彻底比较少见,通常是由于对问题的分析不彻底造成的,纠正这类错误需要重新设计程序造成的,纠正这类错误需要重新设计程序555.6 程序调试程序调试调试程序的一般步骤为:调试程序的一般步骤为:静态检查静态检查静态检查静态检查,也就是人工检查,是在完成程序设计后,在上机调试,也就是人工检查,是在完成程序设计后,在上机调试前,仔细地对程序代码进行全面的检查。通过静态检查,不仅可前,仔细地对程序代码进行全面的检查。通过静态检查,不仅可以发现程序中的语法错误,也可以发现逻辑错误,甚至发现设计以发现程序中的语法错误,也可以发现逻辑错误,甚至发现设计上的缺陷。为便于查错,应力求做到编码的标准化、文档化,增上的缺陷。为便于查错,应力求做到编码的标准化、文档化,增强编码的可读性、可理解性、可维护性。要做到:采用结构化方强编码的可读性、可理解性、可维护性。要做到:采用结构化方法,划分功能模块和程序段,采用必要的缩进和对齐,简化表达法,划分功能模块和程序段,采用必要的缩进和对齐,简化表达式,每行只有一个语句,尽量使用注释,使用有意义的标识符,式,每行只有一个语句,尽量使用注释,使用有意义的标识符,动态检查动态检查动态检查动态检查,是指通过上机调试发现错误的过程。完成编码后,可,是指通过上机调试发现错误的过程。完成编码后,可以借助编译程序检查隐藏的语法错误,如错误标识符、非法的表以借助编译程序检查隐藏的语法错误,如错误标识符、非法的表达式、错误的函数调用等。利用连接程序,可以检查连接错误,达式、错误的函数调用等。利用连接程序,可以检查连接错误,如调用了未定义的函数、缺乏必要的函数定义等。通过试运行程如调用了未定义的函数、缺乏必要的函数定义等。通过试运行程序,可以发现一些逻辑错误,如错误的计算、有问题的输入和输序,可以发现一些逻辑错误,如错误的计算、有问题的输入和输出等出等565.6 程序调试程序调试程序中的错误有两种:程序中的错误有两种:Error和和WarningError是必须要纠正的,任何是必须要纠正的,任何Error都会导致编译或连接失都会导致编译或连接失败败Warning一般不影响生成可执行的一般不影响生成可执行的“程序程序”,但程序有缺,但程序有缺陷陷合格的程序员不仅要纠正致命合格的程序员不仅要纠正致命Error,也要重视并纠正,也要重视并纠正Warning当程序中错误较多时,应从最前面的错误开始逐一改正当程序中错误较多时,应从最前面的错误开始逐一改正有些错误实际出自同样的原因,只要纠正了其中的一个就有些错误实际出自同样的原因,只要纠正了其中的一个就会消除所有这些错误会消除所有这些错误575.6 程序调试程序调试4、查错的技巧、查错的技巧程序中隐藏的错误通常难于发现,可以采取一些技巧:程序中隐藏的错误通常难于发现,可以采取一些技巧:在程序中加入一些在程序中加入一些在程序中加入一些在程序中加入一些“调试代码调试代码调试代码调试代码”,输出变量的中间值以帮助判断,输出变量的中间值以帮助判断,输出变量的中间值以帮助判断,输出变量的中间值以帮助判断但这种办法并不理想,一来使用起来不方便,二来破坏了程序的原有结构,但这种办法并不理想,一来使用起来不方便,二来破坏了程序的原有结构,三是在不需要的时候还要一一删除,不注意会遗漏。使用条件编译会更好三是在不需要的时候还要一一删除,不注意会遗漏。使用条件编译会更好些些 通过设置断点、跟踪运行等方式调试程序通过设置断点、跟踪运行等方式调试程序通过设置断点、跟踪运行等方式调试程序通过设置断点、跟踪运行等方式调试程序,这是比较高效的方法,这是比较高效的方法一旦怀疑某段程序有错,可以在程序段的开始位置设置断点,当程序运行一旦怀疑某段程序有错,可以在程序段的开始位置设置断点,当程序运行到断点而暂停时,通过一步一步地执行程序,并观察变量的变化,判断错到断点而暂停时,通过一步一步地执行程序,并观察变量的变化,判断错误是否存在。但这种方法也有不利的地方,比如,如果程序段所表达的逻误是否存在。但这种方法也有不利的地方,比如,如果程序段所表达的逻辑比较复杂,或者循环次数很多,都会导致调试困难辑比较复杂,或者循环次数很多,都会导致调试困难 程序的单元测试法程序的单元测试法程序的单元测试法程序的单元测试法。对程序段的执行逻辑进行仔细分析,划分程序执行路。对程序段的执行逻辑进行仔细分析,划分程序执行路径的种类,针对每种路径设计若干组不同的输入数据,依次使用这些数据径的种类,针对每种路径设计若干组不同的输入数据,依次使用这些数据来测试程序,观察程序的运行状态和结果,以发现可能隐藏着的错误来测试程序,观察程序的运行状态和结果,以发现可能隐藏着的错误58举例举例4【例例5.11】编程序求编程序求210000以内的完全数。以内的完全数。完全数:完全数:完全数:完全数:一个数的因子(除了这个数本身)之和一个数的因子(除了这个数本身)之和等于该数本身。等于该数本身。思路:思路:思路:思路:设定设定设定设定i i从从从从2 2变到变到变到变到1000010000,对每个,对每个,对每个,对每个i i找到其因子和找到其因子和找到其因子和找到其因子和s s;判定判定判定判定 i is s?若相等,则若相等,则若相等,则若相等,则i i为完全数,否则不是。为完全数,否则不是。为完全数,否则不是。为完全数,否则不是。例如:例如:例如:例如:6 6的的因子因子是是1、2、3,因子和因子和 1+2+36 6因此因此因此因此 6 6 是完全数是完全数是完全数是完全数l l使用使用使用使用穷举算法穷举算法穷举算法穷举算法l l用用用用双层循环双层循环双层循环双层循环实现实现实现实现59算法和程序:算法和程序:main()int i,j,s;for(i=2;i=10000;i+)s=0;for(j=1;ji;j+)if(i%j=0)s+=j;if(i=s)printf(%6dn,s);for(i=2;i=10000;i+)s=0 for(j=1;ji;j+)i%j=0 T F s=s+j i=s T F i是完全数是完全数60

    注意事项

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

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开