




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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.1while循环语句while循环语句的形式如下:while(表达式)循环体语句while循环语句的执行过程如图5-1所示。,图5-1while语句的执行,说明(1)用while语句构成的是“当型”循环结构,它的特点是:“先判断,后执行”,如果表达式的最初值为0,则循环体语句一次也不执行。只有当表达式的值为非0时,才能执行循环体语句。执行完循环体语句后,再返回循环的开始部位,判断表达式的值,决定是否继续循环。,(2)循环体语句只能是一条语句,如需要使用多条语句,必须采用复合语句的形式。(3)循环体内一定要有能够改变表达式的值的操作,最终使其表达式的值变为0,否则将形成无休止的“死”循环。,例5.1求:1+2+3+n的累加求和的值。问题分析:(1)我们首先需要设置一个存放累加求和的变量sum,每一次加一个数放入变量sum中;(2)再设置一个存放加数的变量i,每一次累加时被加的数均需比前一个数大1;(3)最后还需设置一个结束累加的变量n,确定累加到什么数为止。,根据以上分析,写出源程序如下:main()inti,n,sum;i=1;sum=0;printf(Pleaseinputn:);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中存放的数值已经变为新的数值,原有数值已被覆盖掉。以上程序运行情况如下:Pleaseinputn:100sum=5050,5.2.2do-while循环语句do-while循环语句的形式如下:do循环体语句while(表达式);do-while语句的执行过程如图5-2所示。,图5-2do-while语句的执行过程,说明(1)用do-while语句构成的仍是“当型循环”结构。它的特点是:“先执行,后判断”。遇到do关键字后,首先执行循环体语句,然后计算表达式的值,如表达式的值为非0,则继续执行循环体语句,然后再计算表达式的值,如表达式的值为0,则结束循环,执行do-while语句后面的语句。因此这种循环结构,最少也可以执行一次循环体语句。,(2)循环体语句仍然只能是一条语句,如需要使用多条语句,必须采用复合语句的形式。(3)循环体语句中也一定要有改变表达式的值的操作,最终使其表达式的值变为0,结束循环。否则将成为“死”循环。(4)在关键字while的小括号的后面,一定要加分号“;”,千万不能忘记,它表示do-while语句到此结束。,例5.2求:n!,即计算123n的值。源程序如下:main()inti,n,s;i=1;s=1;printf(Pleaseinputn:);scanf(%d,dos=s*i;/*使用“累乘”的公式*/i+;while(i=n);printf(%d!=%dn,n,s);,说明(1)存放累乘求和的变量s,说明后必须赋初值,一般为1,否则由于说明的变量其原有初值不确定,导致结果有误。(2)程序中s=s*i;语句是一个累乘求和功能的语句,它是将变量s中的数值乘上变量i中的数值,累乘后再放入变量s中,此时变量s中存放的数值已经变为新的数值,原有数值已被覆盖掉。,以上程序运行情况如下:Pleaseinputn:55!=120,5.2.3for循环语句for循环语句的形式如下:for(表达式1;表达式2;表达式3)循环体语句for语句的执行过程如图5-3所示。,图5-3for语句的执行过程,说明(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为止。源程序如下:,#includemath.hmain()intn,i,j,flag,x=0;for(i=2;i3时,进入内层循环,若i为素数,flag的值不变,仍为1,若i不是素数,flag的值变为0,并立即结束内循环。当退出内循环后,if语句判断flag的值为1时,输出素数i;若i不是素数,flag的值变为0,不做输出。,外层循环继续取下一个数,通过内层循环判断是否是素数,直到外层循环取的数i大于100后,结束外层循环,结束程序运行。,通过以上例子我们看到,外层循环的目的是,每次循环分别从2100的数中取某一个数,已知循环的次数为99次,采用for循环比较合适;而内层循环是判断某个数是否是素数,在每一次的除法中,当某一次除法运算出现余数为0时,表明该数不是素数,立即结束内层循环,所以内层循环次数事先难以确定,因此采用while循环最为适当。,在解决多重循环问题时,往往需要具体问题具体分析,根据实际问题的内容和特点,采用不同的循环结构。因此在解决多重循环问题时,三种循环结构并举,适合哪一种循环结构,就采用哪一种循环结构。读者可在实践过程中灵活使用。,5.3.2continue语句和break语句在循环中的应用1Continue语句continue语句的一般形式:continue;该语句的功能是:结束本次循环。也就是说,不管在该语句的后面是否还有其他执行语句,遇到continue;语句,本次循环到此结束,接着进行下一次循环的判断。,例5.9将10100之内的不能被5整除的数输出。源程序如下:main()intn;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()inti,s;s=0;for(i=1;i5)break;printf(s=%dn,s);,此例中,如果没有break语句,则循环将执行10次;而含有break语句后,当循环执行到第3次时,i等于3,s的值为6,if语句的条件成立,将会执行到b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 奥迪汽车租赁协议7篇
- 销售合同软件产品代理销售合同2篇
- 保证机构会员协议7篇
- 新解读《GB-T 31074-2014科技平台 数据元设计与管理》
- 关于水泥包工合同范本
- 餐馆保安用工合同范本
- 房车出行采购合同范本
- 球队解约合同范本
- 代理销售白酒合同范本
- 自然资源系统干部职工学习《论述摘编》心得体会
- 《就业必读》技工就业课程全套教学课件
- 闪闪发光的我心理健康教育
- 休闲运动组织与管理课件
- 肾移植超声检查临床应用
- 高氯酸浓度>72%(CAS号:7601-90-3)危险特性一览表
- 中望cad培训课件
- 港口物流管理专业教学标准(高等职业教育专科)2025修订
- 电子商务专业英语(附全套音频第3版)教案 张强华 - unit1-6
- 基于多源数据的态势融合-洞察及研究
- 中医馆公司财务管理制度
- 佛寺院内部管理制度
评论
0/150
提交评论