第5章循环结构设计程设计_第1页
第5章循环结构设计程设计_第2页
第5章循环结构设计程设计_第3页
第5章循环结构设计程设计_第4页
第5章循环结构设计程设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1高级语言程序设计 南京邮电大学传媒技术学院第第5 5章章 循环结构程序设计循环结构程序设计 2高级语言程序设计 南京邮电大学传媒技术学院学习目标学习目标n 理解循环结构的概念。理解循环结构的概念。n 掌握如何用掌握如何用while语句构成循环结构。语句构成循环结构。n 掌握如何用掌握如何用do-while语句构成循环结构。语句构成循环结构。n 熟练掌握如何用熟练掌握如何用for语句构成循环结构。语句构成循环结构。n 掌握循环结构的嵌套使用。掌握循环结构的嵌套使用。n 理解理解break和和continue语句应用于循环体时的区别。语句应用于循环体时的区别。3高级语言程序设计 南京邮电大学传媒

2、技术学院在在c c语言中可以用以下语句来实现循环:语言中可以用以下语句来实现循环:1)while语句。语句。2)do-while语句。语句。3)for语句。语句。4)goto语句和语句和if语句。语句。循环循环 是一种对同一程序段有规律的重复是一种对同一程序段有规律的重复被重复执行的部分叫被重复执行的部分叫循环体循环体。4高级语言程序设计 南京邮电大学传媒技术学院n! =123n,用,用fac来存放结果:来存放结果:初始化初始化值为值为1fac12nfac1facfac2facfacnfac作n次乘法facifac累乘器计数器例如,求阶乘例如,求阶乘5高级语言程序设计 南京邮电大学传媒技术学院

3、5.2 while5.2 while语句语句真真(非零非零)表达式表达式 循环体循环体假假(零零)while 语句的形式:语句的形式: while (表达式)表达式) 循环体;循环体; while while 语句常称为语句常称为“当型当型”循环语句。循环语句。6高级语言程序设计 南京邮电大学传媒技术学院【例【例5-1】用】用while语句构成的循环语句构成的循环结构求结构求n!算法:算法:l step1:定义初始化变量。:定义初始化变量。 本程序需要三个变量,一个用来接收本程序需要三个变量,一个用来接收n,一个用来表,一个用来表示求阶乘过程中数据从示求阶乘过程中数据从1到到n的变化,还有一个

4、保存的变化,还有一个保存计算结果计算结果l step2:输入:输入n,需要考虑输入数据合法性的问题,需要考虑输入数据合法性的问题l step3:计算:计算n!就是一个循环累乘求积的过程就是一个循环累乘求积的过程 n!= 1*2* 3* . (n - 1)* n7高级语言程序设计 南京邮电大学传媒技术学院【例【例5-1】 n!的的c语言程序语言程序#include void main ( ) int n,i=1; long int fac; printf(please input n(n=0):); scanf(%d,&n) ; if (n=0) fac=1; else printf(i

5、nvalid input! n); return 0; while(i0) printf( + ); else printf( - ); scanf( %f ,&x); 判断正负号判断正负号继续输入下一个数继续输入下一个数10高级语言程序设计 南京邮电大学传媒技术学院#include stdio.h void main()char ch;int num=0; ch=getchar();例:统计从键盘输入的一行字符的个数(以回例:统计从键盘输入的一行字符的个数(以回车键作为输入结束标记车键作为输入结束标记) )while(ch!=n) 判断是否输入结束判断是否输入结束 num+; ch=

6、getchar(); printf(num=%dn,num); 11高级语言程序设计 南京邮电大学传媒技术学院注意:注意:表达式在判断前,必须要有明确的值。表达式在判断前,必须要有明确的值。 循环体中一般有改变条件表达式的语句。循环体中一般有改变条件表达式的语句。 while (while (表达式表达式) )后面没有分号。后面没有分号。 12高级语言程序设计 南京邮电大学传媒技术学院 do-while的形式:的形式: do 循环体;循环体; while (表达式);表达式);do-while语句形式与与直到型语句形式与与直到型循环相似,但它仍然是当型循循环相似,但它仍然是当型循环。条件为真时

7、执行循环环。条件为真时执行循环真真(非零非零)表达式表达式 循环体循环体假假(零零)13高级语言程序设计 南京邮电大学传媒技术学院【例【例5-2】用】用do-while语句构成的循环语句构成的循环结构求结构求n! do fac*=i; i+; while(i=n);说明:说明:先执行语句,后判断表达式先执行语句,后判断表达式。第一次条件为真时,第一次条件为真时,while,do-whilewhile,do-while等价;等价;第一次条件为假时,二者不同。第一次条件为假时,二者不同。14高级语言程序设计 南京邮电大学传媒技术学院注意:注意:在在ifif、whilewhile语句中,表达式后面都

8、没有语句中,表达式后面都没有分号,而在分号,而在do-whiledo-while语句的表达式后面则语句的表达式后面则必须加分号。必须加分号。do-whiledo-while和和whilewhile语句相互替换时,要注语句相互替换时,要注意修改循环控制条件意修改循环控制条件 。15高级语言程序设计 南京邮电大学传媒技术学院5.4 for5.4 for语句语句forfor的形式:的形式:for(for(初始表达式初始表达式1 1;条件表达式;条件表达式2 2;循环表达式;循环表达式3 3) 循环体循环体; ; 表达式表达式1 1:用于循环开始前为循环变量设置初始值。:用于循环开始前为循环变量设置初

9、始值。表达式表达式2 2:控制循环执行的条件,决定循环次数。:控制循环执行的条件,决定循环次数。表达式表达式3 3:循环控制变量修改表达式。:循环控制变量修改表达式。循环体语句:循环体语句: 被重复执行的语句。被重复执行的语句。16高级语言程序设计 南京邮电大学传媒技术学院表达式表达式3 3计算表达式计算表达式1 1循环体循环体判断表达式判断表达式2 2假假( (零零) )真真( (非零非零) )forfor的下一条语句的下一条语句执行流程执行流程: :17高级语言程序设计 南京邮电大学传媒技术学院 for(fac=1,i=1; i=n; i+) for(fac=1,i=1; i=n; i+)

10、 fac fac* *=i;=i;例如:例如:它相当于以下语句:它相当于以下语句: fac=1;i=1; fac=1;i=1; while (i=n) while (i=n) fac fac* *=i;=i; i+; i+; 表达式表达式1 1;whilewhile(表达式(表达式2 2)表达式表达式3 3;18高级语言程序设计 南京邮电大学传媒技术学院说明说明:三个表达式都可以是逗号表达式。三个表达式都可以是逗号表达式。 三个表达式都是任选项,都可以省略,三个表达式都是任选项,都可以省略,但要注意省略表达式后,但要注意省略表达式后,分号间隔符分号间隔符不不能省略。能省略。 19高级语言程序设

11、计 南京邮电大学传媒技术学院 for语句中表达式省略的几种情况:语句中表达式省略的几种情况:(1 1)forfor语句一般形式中的语句一般形式中的“表达式表达式1”1”可以可以省略;省略; 如:如:fac=1; i=1; for ( ; in) break; fac*=i; 21高级语言程序设计 南京邮电大学传媒技术学院(3 3)表达式)表达式3 3也可以省略,同样此时循环体中也可以省略,同样此时循环体中要保证循环能正常结束;要保证循环能正常结束; 如:如: for(fac=1,i=1;i=n;) fac*=i; i+; 22高级语言程序设计 南京邮电大学传媒技术学院( (4) 4) 可以省略

12、表达式可以省略表达式1 1和表达式和表达式3 3,只有表达式,只有表达式2 2如:如:fac=1; i=1; for (;i=n;) fac*=i; i+; i=1;fac=1;while (in) break; fac*=i; i+; (5 5)三个表达式都可省略,同样此时)三个表达式都可省略,同样此时循环体中要保证循环能正常结束;循环体中要保证循环能正常结束;fac=1;i=1;for(;) if(in) break; fac*=i; i+; 相当于相当于条件始终为真地执行循环体。条件始终为真地执行循环体。如如 :24高级语言程序设计 南京邮电大学传媒技术学院(6 6)循环体为空语句)循环

13、体为空语句对对forfor语句,循环体为空语句的一般形式为语句,循环体为空语句的一般形式为: : for ( for (表达式表达式1 1;表达式;表达式2 2;表达式;表达式3) 3) ;如:如: 在显示器上输出输入的一串字符在显示器上输出输入的一串字符, ,输入的字输入的字符为符为* *时时, , 结束循环。结束循环。 输入输入abcdabcd* * 输出输出abcdabcd* * while( putchar(getchar( ) )!=while( putchar(getchar( ) )!=* * ) ; ) ;for(fac=1,i=1for(fac=1,i=1;i=ni=n;fa

14、cfac* *=i, i+) =i, i+) ;25高级语言程序设计 南京邮电大学传媒技术学院 5.5 continue语句和语句和break语句在循环体中的语句在循环体中的应用应用5.5.1 continue语句在循环体中的应用语句在循环体中的应用l continue语句的一般形式为:语句的一般形式为: continue;l 其作用是结束本次循环,即跳过本次循环体中其作用是结束本次循环,即跳过本次循环体中continue 语句之后的语句,转入下一次循环条语句之后的语句,转入下一次循环条件的判断,决定循环是否继续执行。件的判断,决定循环是否继续执行。26高级语言程序设计 南京邮电大学传媒技术学

15、院注意:注意: 执行执行continue语句并没有使整个循环终止语句并没有使整个循环终止l 在在while和和do-while循环中,循环中,continue语句使得流语句使得流程直接跳到循环控制条件的测试部分程直接跳到循环控制条件的测试部分l 在在for循环中,遇到循环中,遇到continue后,跳过循环体中后,跳过循环体中余下的语句,而转去对余下的语句,而转去对for语句中的语句中的“表达式表达式3”求值,然后进行求值,然后进行“表达式表达式2”的条件测试,最后的条件测试,最后根据根据“表达式表达式2”的值来决定的值来决定for循环是否执行。循环是否执行。27高级语言程序设计 南京邮电大学

16、传媒技术学院 语句形式语句形式: : break;break;用用break语句可以使程序执行流程跳出语句可以使程序执行流程跳出switch语句体,语句体, 从而构成多分支选择结构从而构成多分支选择结构。breakbreak语句只能使用在循环体和语句只能使用在循环体和switchswitch语句内。语句内。作用作用: : break出现在循环体中时,用于结束当前循环,出现在循环体中时,用于结束当前循环, 跳出跳出break所在的循环结构所在的循环结构。28高级语言程序设计 南京邮电大学传媒技术学院break语句和语句和continue语句的区别:语句的区别:lbreak语句是完全从循环中跳出语

17、句是完全从循环中跳出lcontinue语句只结束本次循环。语句只结束本次循环。29高级语言程序设计 南京邮电大学传媒技术学院while(条件条件) 语句语句a; break; 语句语句 b; 真真语句语句b条件条件语句语句abreak假假结束循环结束循环 breakbreak语句与语句与continuecontinue语句的区别语句的区别至此位置至此位置30高级语言程序设计 南京邮电大学传媒技术学院while(条件条件) 语句语句a; continue; 语句语句 b; 真真语句语句b条件条件语句语句acontinue假假结束循环结束循环至此位置至此位置31高级语言程序设计 南京邮电大学传媒技

18、术学院【例【例5-3】编程实现如下要求:找出】编程实现如下要求:找出1到到100之间的前之间的前10个偶数并输出。个偶数并输出。while(n100) n+; if(count=10) break; /判断偶数个数判断偶数个数 是否已满是否已满10个个 if(n%2!=0) /判断当前数据是否奇数判断当前数据是否奇数 continue; /是奇数结束本次循环是奇数结束本次循环 printf(“%dt”,n); /打印偶数打印偶数 count+; /统计偶数个数统计偶数个数 程序运行结果:程序运行结果:2 4 6 8 10 12 14 16 18 2032高级语言程序设计 南京邮电大学传媒技术学

19、院 在一个循环体内又包含有另一个完整的循环结构,在一个循环体内又包含有另一个完整的循环结构, 称为循环嵌套。称为循环嵌套。 5.6 5.6 循环的嵌套循环的嵌套嵌套时,每一层循环在逻辑上必须是完整的。嵌套时,每一层循环在逻辑上必须是完整的。 前面介绍的三种类型的循环:前面介绍的三种类型的循环:while while 、do-whiledo-while、forfor三种都可以互相嵌套。三种都可以互相嵌套。33高级语言程序设计 南京邮电大学传媒技术学院循环嵌套时正确和错误的逻辑关系循环嵌套时正确和错误的逻辑关系 for(.).for(.).内循环内循环外循环外循环for(.).for(.).并列循

20、环并列循环嵌套循环嵌套循环交叉循环交叉循环for(.). for(.) . 错误错误34高级语言程序设计 南京邮电大学传媒技术学院真真真真外循环初始条件外循环初始条件内循环初始条件内循环初始条件内循环体内循环体外循环条件外循环条件假假内循环条内循环条件件假假内循环循环条件内循环循环条件外循环循外循环循环条件环条件循环结束循环结束二重二重循环循环嵌套嵌套结构结构执行执行流程流程 35高级语言程序设计 南京邮电大学传媒技术学院程序范例程序范例使用双层循环输出下面的图形使用双层循环输出下面的图形 * * *36高级语言程序设计 南京邮电大学传媒技术学院#include stdio.h37高级语言程序

21、设计 南京邮电大学传媒技术学院u 由由i i控制的外层控制的外层forfor循环中内嵌了两个平行的循环中内嵌了两个平行的forfor循环循环由由j j控制的控制的forfor循环体用来输出空格循环体用来输出空格由由k k控制的控制的forfor循环体用来输出循环体用来输出“* *”号号u 当当i i等于等于0 0时,由时,由j j控制的循环,因为控制的循环,因为j j的值为的值为0 0,表达,表达式式jiji的值为假,循环体一次也不执行,接着执行由的值为假,循环体一次也不执行,接着执行由k k控控制的循环,连续输出四个制的循环,连续输出四个“* *”号;当号;当i i等于等于1 1时,由时,由

22、j j控控制制forfor循环体执行一次,输出一个空格,这就使得接着循环体执行一次,输出一个空格,这就使得接着输出的四个输出的四个“* *”号右移一个字符位置号右移一个字符位置u 第三行续依次类推第三行续依次类推38高级语言程序设计 南京邮电大学传媒技术学院i i的变化的变化j j的变化的变化k k的变化的变化39高级语言程序设计 南京邮电大学传媒技术学院 算法分析:算法分析:采用双重循环,逐行输出。采用双重循环,逐行输出。外层循环控制行数,九九乘法表共有九行,因此外层循环次数为外层循环控制行数,九九乘法表共有九行,因此外层循环次数为9 9每一行的具体输出一般分为每一行的具体输出一般分为3 3

23、步:步:1 1)确定起始打印位置。本例每行左对齐。)确定起始打印位置。本例每行左对齐。2 2)输出该行数据,因为有多项数据,需要嵌套一个内层循环完成)输出该行数据,因为有多项数据,需要嵌套一个内层循环完成对本例,若行号用对本例,若行号用i i表示,每一行有表示,每一行有i i个数据项式子,所以内层个数据项式子,所以内层循环次数与行号相关,从循环次数与行号相关,从1 1变化到变化到i i。3 3)每输完一行进行换行操作。)每输完一行进行换行操作。40高级语言程序设计 南京邮电大学传媒技术学院具体程序如下:具体程序如下: #includevoid main() int i,j; for (i=1;

24、 i=9; i+) for (j=1; j=i; j+) printf (%d*%d=%-4d, i,j,i*j); printf(n); 41高级语言程序设计 南京邮电大学传媒技术学院goto 语句一般形式:语句一般形式:语句标号语句标号:goto 语句标号语句标号;作用:作用:无条件转向无条件转向“语句标号语句标号”处执行。处执行。 “语句标号语句标号”是一个标识符,它表示程序指令的地址。是一个标识符,它表示程序指令的地址。语句标号仅仅对语句标号仅仅对goto 语句有效,对其它语句不影响。语句有效,对其它语句不影响。 无条件转向使程序结构无规律、可读性差。无条件转向使程序结构无规律、可读性

25、差。 所以所以gotogoto语句不符合结构化程序设计准则,语句不符合结构化程序设计准则,一般应避免使用一般应避免使用gotogoto语句,语句,除非能在很大程度上提高程序的执行效率,除非能在很大程度上提高程序的执行效率,才适当使用它。才适当使用它。42高级语言程序设计 南京邮电大学传媒技术学院43高级语言程序设计 南京邮电大学传媒技术学院程序代码:程序代码: #include#includevoid main() int x,k; int flag=1; scanf(%d,&x); for(k=2;k=x-1;k+) if(x%k=0) flag=0; if(flag) printf

26、(%d is a prime ,x); else printf(%d is not a prime ,x);循环部分可优化化为如下形式:循环部分可优化化为如下形式: for(k=2; k=sqrt(x);k+) if(x%k=0) flag=0; break; 44高级语言程序设计 南京邮电大学传媒技术学院 【例【例5-7】计算裴波那契数列的前】计算裴波那契数列的前十项十项算法分析:算法分析:斐波那契数列的变化规律是:斐波那契数列的变化规律是:l 第一项和第二项为第一项和第二项为1l 从第三项开始,每一项的值为前两项的和从第三项开始,每一项的值为前两项的和l 可以用递推算法来求出斐波那契数列中每项的值可以用递推算法来求出斐波那契数列中每项的值l 用变量用变量f1和和f2存储第一个数和第二个数,存储第一个数和第

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论