18143-00谭浩强-c程序设计教程c演示文稿05_第1页
18143-00谭浩强-c程序设计教程c演示文稿05_第2页
18143-00谭浩强-c程序设计教程c演示文稿05_第3页
18143-00谭浩强-c程序设计教程c演示文稿05_第4页
18143-00谭浩强-c程序设计教程c演示文稿05_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章语句结构 本章要点: 掌握C语言中3个基本循环结构的特点和应用。 掌握循环结构中的无条件控制语句(主要是break和continue)的应用。 掌握怎样避免“无限循环”。 掌握循环结构的嵌套使用。285.1 概述循环结构中也有个“条件”,它是用来决定是否要 “循环”,所谓循环就是要程序重复执行某一个模块。循环结构也是结构化程序设计的基本成分之一。循环结构中根据表达式的两个状态(非0或0)决定 循环是否继续。这些被重复执行的语句或模块,称为 循环体。假定在循环过程中,循环结构中的条件始终 得不到改变,或者是在改变,但始终不可能从一个状 态跳到另一个状态,那么这种循环称为无限循环,或 称“死

2、循环”。一个合理的循环结构,最终会使循环 条件由一个状态转变为另一个状态,使循环正常终止。在C语言中,主要有以下三种循环结构: while循环结构;do-while循环结构;for循环结构。5.2 while循环结构程序运行到while循环结构时,先判该结构中的条件,若条件为“真”执行循环体,条件为“假”不执行循环体。它的一般形式如下:while(表达式)语句(循环体)图5.1以图示的方式表示while循环结构的执行过程, 其中(a)为常用流程图,而(b)为N_S结构化流程图。表达式的值为非0(真)时,执行循环体,循环体可以 是简单句,也可以是复合句。每执行一次循环体以 后,都要判别一下表达式

3、(条件)的值,看是否从一个 状态跳到另一状态,若仍是非0,再执行循环体,如 此循环执行,一直到表达式的值为0(假)时,不执行循环体,循环终止。此后程序执行进入循环结构的下一条语句。(讲解例5.1、例5.2 、例5.3 、例5.4 、例5.5)while(表达式)循环体表达式(a)循环体(b)图5.1while循环结构流程图例5.1补充说明:循环控制变量c在有符号字符型和无符号字符型情况下内存中代码(内码,即补码或机器码)的变化,从中也可看出出现无限循环的原因,如下表所示:表达式c+内码的变化 无符号十进制 有符号十进制0 0 0 0 0 0 0 0000 1 1 1 1 1 1 1127127

4、1 0 0 0 0 0 0 0128-1281 0 0 0 0 0 0 1129-1271 1 1 1 1 1 1 1255-10 0 0 0 0 0 0 000例5.2:求12+22+32+.+1002的和main( )执行当c=100时,循环之初的c与sum值long sum=0; int c=1 ; while(cp时,结束循环执行当c=p时,sum+=(n+c)*(n+c) ; c+ ;c是一个大于p的值 while(c=p); printf(“%d,%ldn”,c,sum) ;5.4 for循环结构for循环结构的一般形式是:for(表达式1;表达式2;表达式3) 语句(循环体)表达

5、式1也称初始化表达式,用来设定循环控制变量或其他变量的初值,若有多个变量需要初始化时, 表达式1要使用逗号表达式。表达式2也称循环条件表达式,用来决定是否执行循环体。当表达式值为非0时,执行循环体,当表达式的值为0时循环终止。表达式3也称增量表达式,执行一次循环体后,求 解一次表达式3的值,目的是对表达式2进行一次修正。表达式3也可用逗号表达式。 for循环结构的执行过程如图5.5所示。求解表达式1求解表达式1当表达式2为真时循环体求解表达式3表达式2非00(a)求解表达式3循环体图5.5for循环结构流程图(b)for循环也可写成while循环的形式: 表达式1语句while(表达式2)循环

6、体(含表达式3语句)由此可见,for循环结构实质上跟while循环结构差不多,它们都是先判条件,后决定是否执行循环体。由 此,一些教科书上称它们为“当”型循环,意思是当 条件成立时执行循环。在完成同样功能的情况下,for 循环结构简洁、方便,而while循环结构的可读性较好, 各有长处,读者可根据自已的具体情况选用。(讲解例5.11、例5.12 、例5.13)又例:输入n和p,求n2+(n+1)2+(n+2)2+(n+p)2的和(用while循环)。main( )long sum=0;int n,p ,c=0; scanf(“%d%d”,&n,&p); while(c=p)sum+=(n+c)

7、*(n+c) ; c+ ;printf(“%d,%ldn”,c,sum) ;又例:输入n和p,求n2+(n+1)2+(n+2)2+(n+p)2的和(用for循环)。main( )long sum=0;int n,p ,c=0; scanf(“%d%d”,&n,&p); for(c=0;c=p;c+)sum+=(n+c)*(n+c) ; printf(“%d,%ldn”,c,sum) ;补充例题:键盘输入一个长整数x,用while循环求x是一个几位数,且把每一位数反向放入数组a的元素中,再用for循环输出a数组的元素。分析:由表2.1可知长整型数的最长位数是10 位,则数组a定义为10个元素;除

8、10取余(用运算符%)可提取个位数,除10取整(用运算符/) 可去掉个位数,两个运算符的交替应用即可取出x的每一位数。通过循环计数获得x是一个几位数。程序设计如下:运行结果是63 2 6 5 4 6 8 1 #includestdio.h main() long int x; int i,n=0,a10; scanf(%ld,&x); while(x) an=x%10;/*提取个位数*/ n+;/*计数*/ x=x/10;/*去掉个位数*/ printf(“n=%dn”,n);/* x是一个几位数*/ for(i=0;in;i+)printf(%2d,ai);/*反向

9、输出x的每一位数*/ 当然上述程序不用数组也可以处理: #includestdio.h运行结果是:18645623122132654681 main() long int x, y=0 ; int i,n=0 ; scanf(%ld,&x); while(x) y=y*10+x%10;/*提取个位数累加到y中*/ n+;/*计数*/ x=x/10;/*去掉个位数*/ printf(“n=%dn”,n);/* x是一个几位数*/ printf(%ld,y ) ;/*y就是x的反向数*/5.5 循环结构的嵌套循环结构的嵌套应用很多,while循环结构的循环体中可以包含while循环;do_whil

10、e循环结构的循环体中可以包含do_while循环;for循环结构的循环体中可以包含for循环。此外,这几种循环结构之间还可以相互嵌套。一般循环体中的循环称为“内循环”,包含内循环的循环称为“外循环”,当然,这只是指二重循环。另外还有多层嵌套的情况,这属于多重循环。(讲解例5.14、例5.15 、例5.16 、例5.17)5.6 无条件转向语句无条件转向语句(或称无条件控制语句)是指当程序执行到该语句时,程序无条件转移到程序的某个地方执行,至于转移到什么地方,要看使用何种无条件控制语句。C语言提供三个无条件控制语句: break语句,continue语句和goto语句。break语句主要用于循环

11、结构和switch语句结构中。continue语句主要用于循环结构中。结构化程序设计要求少用或尽量不用goto语句。1. break语句break语句由关键字break后加分号“;”组成。它的一般形式是:break;上一章介绍switch多分支结构时,我们巳经遇到过break语句,它是用来跳出switch结构,使程序继续执行该结构下面的一个语句。这里我们介绍用在循环结构中的break语句,它被用来跳出循环体,提前结束循环,把程序流程无条件转移到循环结构的下一句继续执行。注意:break语句只能用于switch结构和循环结构中。(讲解例5.18、例5.19 、例5.20)2. continue语

12、句continue语句是由关键字continue后面加分号“;” 构成。它的一般形式是:continue;它的作用是用来结束本次循环(即跳过循环体中尚未执行的语句)。要注意break语句和continue语句的区别,break语句是跳出整个循环结构,不再在循环结构中做任何事情。而continue语句只是结束本次循环,继续执行循环过程中的其它步骤,即循环还是继续进行。 循环体中若满足某条件,执行continue 语句后三个基本循环结构程序流程图中循环体部分可作如下修正:循环体If(条件) continue;满足某条件,循环体中执行continue语句后三个基本循环结构流程图的修正。也就是说,对于

13、while或do_while循环体中执行continue语句后直接进行循环条件的判断来决定循环是否继续;而对于for循环, 执行continue语句后,还应执行增量表达式(表达式3)后再进行循环条件的判断来决定循环是否继续。 (讲解例5.21)3. goto语句 (略)5.7 应用举例数学上的递推(recurence)方法在程序设计中应用很多。递推方法解题的关键是确定递推公式和初始条件。根据初始条件的不同,递推又可分为“顺推”和“倒推” 两种形式:顺推是数列后面的值要根据前面的值才能推算出来。如例5.13求 Fibonacci 数列属顺推。倒推是数列前面的值要根据后面的值才能推算出来。例5.23“猴子吃桃” 问题属倒推。递推方法在程序设计中通过变量的迭代(iterate)方法来实现。(讲解例5.23、例5.24)应用举例补充题:“猴子吃桃”问题新编。猴子第一天摘下1534个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。问到第十天早上想吃时, 还剩几个桃子。分析:新编的“猴子吃桃”问题成了顺推的问题了,设某天的桃子数为a个,那么过了一天后的桃子数应该是a-

温馨提示

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

评论

0/150

提交评论