版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、5.1 循环结构问题的提出循环结构问题的提出5.2 解决单重循环的问题解决单重循环的问题5.3 解决多重循环的问题解决多重循环的问题5.4 简单的程序调试简单的程序调试在用计算机解决大量的实际问题时,在用计算机解决大量的实际问题时,经常会遇到如下许多重复运算的问题。经常会遇到如下许多重复运算的问题。(1)求某一同学一学期的平均分。)求某一同学一学期的平均分。解决方法是将该同学这一学期所有考核成解决方法是将该同学这一学期所有考核成绩累加,再除以考核门数,就得到该生的绩累加,再除以考核门数,就得到该生的平均分。平均分。(2)计算:)计算:1*2*3*n。这是一个累。这是一个累乘的问题,每个乘数与前
2、面的一个数都有乘的问题,每个乘数与前面的一个数都有固定的关系(后面的数比前面的数大固定的关系(后面的数比前面的数大1)。)。因此每次累乘的数都是前面的数加因此每次累乘的数都是前面的数加1,方法,方法相同,实际这是一个重复累乘的问题。相同,实际这是一个重复累乘的问题。这一类问题,重复的次数有些情况是这一类问题,重复的次数有些情况是已知的,有些情况是未知的。但是这些问已知的,有些情况是未知的。但是这些问题都带有重复性的工作,解决这类问题,题都带有重复性的工作,解决这类问题,采用循环结构最为适当。采用循环结构最为适当。有些问题,采用单重循环就能解决,有些问题,采用单重循环就能解决,比如上面所举的两个
3、例子,都可以采用单比如上面所举的两个例子,都可以采用单重循环;而有些问题,比如说二维表格数重循环;而有些问题,比如说二维表格数据输出的问题,则需要采用双重循环才能据输出的问题,则需要采用双重循环才能解决。解决。C语言提供了三种实现循环结构的语语言提供了三种实现循环结构的语句,它们分别是:句,它们分别是:while语句、语句、do-while语语句和句和for语句,三种循环语句各有不同的特语句,三种循环语句各有不同的特点,我们可以灵活使用。点,我们可以灵活使用。while循环语句的形式如下:循环语句的形式如下: while(表达式)循环体语句(表达式)循环体语句while循环语句的执行过程如图循
4、环语句的执行过程如图5-1所所示。示。图图5-1 while语句的执行语句的执行说明说明(1)用)用while语句构成的是语句构成的是“当型当型”循环结构,它的特点是:循环结构,它的特点是:“先判断,后执先判断,后执行行”,如果表达式的最初值为,如果表达式的最初值为0,则循环体,则循环体语句一次也不执行。只有当表达式的值为语句一次也不执行。只有当表达式的值为非非0时,才能执行循环体语句。执行完循环时,才能执行循环体语句。执行完循环体语句后,再返回循环的开始部位,判断体语句后,再返回循环的开始部位,判断表达式的值,决定是否继续循环。表达式的值,决定是否继续循环。(2)循环体语句只能是一条语句,)
5、循环体语句只能是一条语句,如需要使用多条语句,必须采用复合语句如需要使用多条语句,必须采用复合语句的形式。的形式。(3)循环体内一定要有能够改变表)循环体内一定要有能够改变表达式的值的操作,最终使其表达式的值变达式的值的操作,最终使其表达式的值变为为0,否则将形成无休止的,否则将形成无休止的“死死”循环。循环。例例5.11 求:求:1+2+3+n的累加求和的累加求和的值。的值。问题分析:问题分析:(1)我们首先需要设置一个存放累)我们首先需要设置一个存放累加求和的变量加求和的变量sum,每一次加一个数放入,每一次加一个数放入变量变量sum中;中;(2)再设置一个存放加数的变量)再设置一个存放加
6、数的变量i,每一次累加时被加的数均需比前一个数大每一次累加时被加的数均需比前一个数大1;(3)最后还需设置一个结束累加的)最后还需设置一个结束累加的变量变量n,确定累加到什么数为止。,确定累加到什么数为止。根据以上分析,写出源程序如下:根据以上分析,写出源程序如下:main ( ) int i, n, sum; i=1; sum=0; printf ( Please input n : ); scanf (%d, &n ); while ( i=n ) /* 累加的数累加的数i 小于或等小于或等于终止数于终止数n就循环累加,否则结束循环就循环累加,否则结束循环*/ sum=sum+i;
7、 i+; printf (sum=%dn, sum );说明说明(1)存放累加求和的变量)存放累加求和的变量sum,说明,说明后必须赋初值,一般为后必须赋初值,一般为0,否则由于说明的,否则由于说明的变量其原有初值不确定,导致结果有误。变量其原有初值不确定,导致结果有误。(2)程序中)程序中sum=sum+i; 语句是一个语句是一个累加求和功能的语句,它是将变量累加求和功能的语句,它是将变量sum中中的数值加上变量的数值加上变量i中的数值,求和后再放入中的数值,求和后再放入变量变量sum中,此时变量中,此时变量sum中存放的数值已中存放的数值已经变为新的数值,原有数值已被覆盖掉。经变为新的数值
8、,原有数值已被覆盖掉。以上程序运行情况如下:以上程序运行情况如下:Please input n : 100 sum=5050do-while 循环语句的形式如下:循环语句的形式如下: do 循环体语句循环体语句 while (表达式)(表达式);do-while语句的执行过程如图语句的执行过程如图5-2所示。所示。图图5-2 do-while语句的执行过程语句的执行过程说明说明(1)用)用do-while语句构成的仍是语句构成的仍是“当当型循环型循环”结构。它的特点是:结构。它的特点是:“先执行,先执行,后判断后判断”。遇到。遇到do关键字后,首先执行循关键字后,首先执行循环体语句,然后计算表
9、达式的值,如表达环体语句,然后计算表达式的值,如表达式的值为非式的值为非0,则继续执行循环体语句,然,则继续执行循环体语句,然后再计算表达式的值,如表达式的值为后再计算表达式的值,如表达式的值为0,则结束循环,执行则结束循环,执行do-while语句后面的语语句后面的语句。因此这种循环结构,最少也可以执行句。因此这种循环结构,最少也可以执行一次循环体语句。一次循环体语句。(2)循环体语句仍然只能是一条语)循环体语句仍然只能是一条语句,如需要使用多条语句,必须采用复合句,如需要使用多条语句,必须采用复合语句的形式。语句的形式。(3)循环体语句中也一定要有改变)循环体语句中也一定要有改变表达式的值
10、的操作,最终使其表达式的值表达式的值的操作,最终使其表达式的值变为变为0,结束循环。否则将成为,结束循环。否则将成为“死死”循环。循环。(4)在关键字)在关键字while的小括号的后面,的小括号的后面,一定要加分号一定要加分号“;”,千万不能忘记,它,千万不能忘记,它表示表示do-while语句到此结束。语句到此结束。例例 5 . 2 2 求 :求 : n ! , 即 计 算, 即 计 算123n的值。的值。源程序如下:源程序如下:main ( ) int i, n, s; i =1; s =1; printf ( Please input n: ); scanf (%d, &n );
11、 do s = s*i ; /* 使用使用“累乘累乘”的公式的公式 */ i+; while ( i=n); printf (%d!= %dn, n, s );说明说明(1)存放累乘求和的变量)存放累乘求和的变量s,说明后,说明后必须赋初值,一般为必须赋初值,一般为1,否则由于说明的变,否则由于说明的变量其原有初值不确定,导致结果有误。量其原有初值不确定,导致结果有误。(2)程序中)程序中s = s*i; 语句是一个累乘语句是一个累乘求和功能的语句,它是将变量求和功能的语句,它是将变量s中的数值乘中的数值乘上变量上变量i中的数值,累乘后再放入变量中的数值,累乘后再放入变量s中,中,此时变量此时
12、变量s中存放的数值已经变为新的数值,中存放的数值已经变为新的数值,原有数值已被覆盖掉。原有数值已被覆盖掉。以上程序运行情况如下:以上程序运行情况如下:Please input n : 5 5!=120for循环语句的形式如下:循环语句的形式如下: for ( 表达式表达式1;表达式;表达式2;表达式;表达式3 ) 循环体语句循环体语句for语句的执行过程如图语句的执行过程如图5-3所示。所示。图图5-3 for语句的执行过程语句的执行过程说明说明(1)由图)由图5-3可知,可知,for循环语句的特循环语句的特点仍是点仍是“先判断,后执行循环体先判断,后执行循环体”。遇到。遇到for关关键字,先
13、计算表达式键字,先计算表达式1的值,然后再的值,然后再判断表达式判断表达式2的值,如其值为非的值,如其值为非0,则执行,则执行循环体语句,执行完循环体语句后,再来循环体语句,执行完循环体语句后,再来计算表达式计算表达式3的值,然后再判断表达式的值,然后再判断表达式2的的值。如其值为值。如其值为0,则结束,则结束for循环语句,执循环语句,执行行for循环语句后面的语句。循环语句后面的语句。(2)循环体语句仍然只能是一条语)循环体语句仍然只能是一条语句,必要时可采用复合语句的形式。句,必要时可采用复合语句的形式。(3)此结构仍需最终使表达式)此结构仍需最终使表达式2的值的值变为变为0,以结束循环
14、。否则将会造成,以结束循环。否则将会造成“死死”循环。循环。(4)for语句的表示形式相当灵活,语句的表示形式相当灵活,其中:表达式其中:表达式1和表达式和表达式3均可省略,但一均可省略,但一定要确保表达式定要确保表达式2最终值等于最终值等于0。表达式。表达式1或或表达式表达式3省略后,其分号省略后,其分号“;”必须有,不必须有,不能省略,即:能省略,即:for ( ; 表达式表达式2 ; ) 循环体语句循环体语句(5)通常情况下:表达式)通常情况下:表达式1代表循环代表循环控制变量的初值,表达式控制变量的初值,表达式2代表循环控制变代表循环控制变量的终值,而表达式量的终值,而表达式3代表循环
15、控制变量的代表循环控制变量的增量,例如:求增量,例如:求n!,可简单表示成:,可简单表示成:s=1; for ( i=1; i=n; i+) s=s*i;for循环和循环和while循环语句结构均是先循环语句结构均是先判断循环条件,条件成立,才执行循环体,判断循环条件,条件成立,才执行循环体,具有具有“先判断,后执行先判断,后执行”特点;而特点;而do-while循环语句则是先执行循环体,然后再循环语句则是先执行循环体,然后再判断循环条件,具有判断循环条件,具有“先执行,后判断先执行,后判断”的特点。的特点。例例5.8 8 求求2100之间的所有素数,并输出。之间的所有素数,并输出。问题分析问
16、题分析判断一个数是否是素数的方法,我们判断一个数是否是素数的方法,我们在前面已经介绍了。设某一个数为在前面已经介绍了。设某一个数为a,判断,判断该数是否为素数,就是用这个数分别被该数是否为素数,就是用这个数分别被2去除,如果都不能被除尽,则该数为素数,去除,如果都不能被除尽,则该数为素数,如有一次被除尽,则该数就不是素数。如有一次被除尽,则该数就不是素数。现需求现需求2100之间的所有素数,判断之间的所有素数,判断素数的方法是相同的,只要利用循环依次素数的方法是相同的,只要利用循环依次从从2100之间取一个数,判断是否是素数,之间取一个数,判断是否是素数,如是素数就输出显示,不是素数就继续判如
17、是素数就输出显示,不是素数就继续判断下一个数,直至判断到断下一个数,直至判断到100为止。为止。源程序如下:源程序如下:# include math.hmain ( ) int n, i, j, flag, x=0; for ( i=2; i=100; i+) flag=1; j=2; n=(int)sqrt(double)i ); while ( flag & j3时,进入内层循环,若时,进入内层循环,若i为素数,为素数,flag的值不变,仍为的值不变,仍为1,若,若i不是素数,不是素数,flag的值的值变为变为0,并立即结束内循环。当退出内循环,并立即结束内循环。当退出内循环后,后
18、,if语句判断语句判断flag的值为的值为1时,输出素数时,输出素数i;若若i不是素数,不是素数,flag的值变为的值变为0,不做输出。,不做输出。外层循环继续取下一个数,通过内层外层循环继续取下一个数,通过内层循环判断是否是素数,直到外层循环取的循环判断是否是素数,直到外层循环取的数数i大于大于100后,结束外层循环,结束程序后,结束外层循环,结束程序运行。运行。通过以上例子我们看到,外层循环的通过以上例子我们看到,外层循环的目的是,每次循环分别从目的是,每次循环分别从2100的数中取的数中取某一个数,已知循环的次数为某一个数,已知循环的次数为99次,采用次,采用for循环比较合适;而内层循
19、环是判断某个循环比较合适;而内层循环是判断某个数是否是素数,在每一次的除法中,当某数是否是素数,在每一次的除法中,当某一次除法运算出现余数为一次除法运算出现余数为0时,表明该数不时,表明该数不是素数,立即结束内层循环,所以内层循是素数,立即结束内层循环,所以内层循环次数事先难以确定,因此采用环次数事先难以确定,因此采用while循环循环最为适当。最为适当。在解决多重循环问题时,往往需要具在解决多重循环问题时,往往需要具体问题具体分析,根据实际问题的内容和体问题具体分析,根据实际问题的内容和特点,采用不同的循环结构。因此在解决特点,采用不同的循环结构。因此在解决多重循环问题时,三种循环结构并举,
20、适多重循环问题时,三种循环结构并举,适合哪一种循环结构,就采用哪一种循环结合哪一种循环结构,就采用哪一种循环结构。读者可在实践过程中灵活使用。构。读者可在实践过程中灵活使用。continue语句的一般形式:语句的一般形式: continue; 该语句的功能是:结束本次循环。也该语句的功能是:结束本次循环。也就是说,不管在该语句的后面是否还有其就是说,不管在该语句的后面是否还有其他执行语句,遇到他执行语句,遇到continue;语句,本次;语句,本次循环到此结束,接着进行下一次循环的判循环到此结束,接着进行下一次循环的判断。断。例例5.9 将将10100之内的不能被之内的不能被5整除的数整除的数
21、输出。输出。源程序如下:源程序如下: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 ); 语句。语句。break语句的一般形式是:语句的一般形式是: break;在循环结构中使用在循环结构中使用break;语句,可;语句,可强制结束循环。不管循环条件是否
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供水稽查员工作效率竞赛考核试卷含答案
- 飞机自动驾驶仪测试调整工岗中技术改进考核试卷含答案
- 有机介质电容器纸、膜切割工安全综合考核试卷含答案
- 活性炭活化工进阶能力考核试卷含答案
- 经编机操作工工作能力测试考核试卷含答案
- 宠物健康护理员工作能力知识考核试卷含答案
- 汽轮机总装配调试工岗位技术应用考核试卷含答案
- 2026中国液体化学品物流企业战略转型与商业模式创新报告
- 2026车载场景杯装饮料防泼洒设计与渠道铺设策略分析报告
- 2026金属冶金加工行业供需现状动态观察及投资价值预测报告
- 人教版九年级英语上册Unit 3 Smart Learning Section A 1a-1d教学设计
- 2026年军队文职技能岗考试《卫生员》题库及答案
- 妊娠期高血压急症应急预案演练脚本
- 2025年广东省军事理论竞赛题库
- 辱骂调解协议书模板
- 直肠癌手术的并发症及处理
- 如何记忆抽象图形
- 液压爬模工程安全专项施工方案
- 中国空白地图大全(可直接打印)(共49页)
- 暗股投资合作协议书范本
评论
0/150
提交评论