c语言第5章-循环结构.ppt
《c语言第5章-循环结构.ppt》由会员分享,可在线阅读,更多相关《c语言第5章-循环结构.ppt(61页珍藏版)》请在三一办公上搜索。
1、1,回顾,选择结构的关键在于正确描述条件,考虑不同条件下应做的动作。关系运算符,逻辑运算符掌握if语句三种基本结构的语法,场景,注意事项嵌套if结构是在主if块中还包含另一个if 语句C语言规定,嵌套if结构中每个else部分总是属于前面最近的那个缺少对应的else部分的if语句switch结构适用于条件表达式为单值的多分支选择。条件表达式或变量结果必须是整型或字符型条件运算符是 ifelse 语句的另一种表现形式,第五章,循环结构程序设计,3,导入,在第三章里我们已经知道,循环结构就是在一定条件成立的情况下反复执行一些语句或操作,即有些语句会被反复多次执行。要想写好循环,首先要能够从问题的描
2、述和解题步骤中去发现是否需要使用循环。在分析问题时,要注意识别出解决步骤中重复执行的类似动作,这是重要的线索,说明可能需要引进一个循环结构,统一处理这些重复的动作,尤其是重复次数不确定或者过多的情况。,4,本章目标,掌握循环结构的使用时机掌握循环的三种结构牢记构成循环的要素掌握使用continue和break提前结束循环的用法掌握嵌套循环理解三种循环结构各自的特点和适用情况,5,引入,例子1、输出一排50个“*”作为分割线;重复打印50次“*”例子2、一个老师给多个班上同一门课,每次考试后都要统计各个分数段的人数(不及格,中等,良好,优秀)和平均分。如何设计一个程序来完成此功能设有4个计数器,
3、分别记录各个分数段的人数。用一个单元来存放总分数,用一个单元来存放总人数。重复以下动作:读入一个学生的成绩总人数加一总分数加上当前的学生成绩判断当前学生成绩属于哪一个分数段,对应的分数段人数加一,6,循环结构的必要性,例1、应用中我们经常会遇到采用若干个“-”或“*”形成一行,作为项目间的分割线或者对输出进行布局,程序是如何编写这样的输出呢?分析:如果使用当前学习过的顺序设计,有两种方法。1、通过一条printf语句一次性输出指定数量的字符。printf(“-n”);printf(“-n”);printf(“-n”);写printf语句时需要仔细核实字符数量,以免出错。2、连续写n条print
4、f语句,每个printf语句输出一个字符.Printf(“-”);Printf(“-”);Printf(“-”);Printf(“-”);当n过大时,就会出现整个屏幕都是printf语句,不仅书写繁琐,而且可读性也很差。,7,循环结构的必要性,例2、实现数学中常见的累加和问题,求1-4所有数的立方和分析:需要调用4次pow函数来分别计算1-5所有数的立方和,然后再进行多次累加。long a,s;a=pow(1,3);s=s+a;a=pow(2,3);s=s+a;a=pow(3,3);s=s+a;a=pow(4,3);s=s+a;上面两个程序很明显无法令人满意,里面有太多重复的类似的语句,尤其是
5、当重复次数大到一定程度时(10000),其程序书写的繁琐已经使得其失去了计算机辅助计算的优越性。,8,循环结构的必要性,通过观察可以发现,这两个程序共同的特点就是有很多重复类似的操作语句,如果能够将其合并或者简化将会使程序变得更为简洁,也更有效率。针对例2,里面重复的类似语句主要是两个,一个是计算当前数的立方,另一个是把当前计算出的立方结果加到结果变量s上。可以采用如下思路进行简化:变量i代表当前需要计算立方和的数,赋初值为1,s代表立方和的结果,赋初值为0;(int i=1,s=0)如果a的值小于等于100,就重复以下动作:(while(i100)计算i的立方并将其加到变量s上(s+=pow
6、(i,3);)将i的值加1(i+;)这样通过100次的重复操作,即完成了这个计算任务。这样的重复类似动作通过循环语句实现就会变得很清晰,只要把重复动作的控制条件想清楚了,就不难写出如下程序,9,循环结构的必要性,可见,在程序设计中使用循环结构还是非常必要的,循环结构常见的应用情况包括:输出同样字符构成的图案。如常见的若干个“-”构成的点划线,*型图案等需要对一系列类似的数据做同样的处理。如已知50个学生三门课的成绩,计算每个学生的平均分,既是对50组类似的数据,进行同样的加和求平均数的操作。数学计算中常用的累加,累乘等运算。产生一批可以通过统一规律算出来的数据。如根据前两项的值计算出斐波那契数
7、列前20项。从第三项开始,每一项都是由其前两项的和产生。需要反复从一个结果计算出另一个结果,10,常用的循环结构,C语言中对循环结构的表示,大体可以分为两类,即“当型”循环和“直到”型循环。1、当型循环。此种循环为先判断条件是否成立,然后再根据判断结果决定是否执行一次循环体,即当循环条件满足时,才执行一次循环体。故称为“当型”循环。如图6-1所示。执行过程:1、循环变量赋初值2、计算条件表达式的值,若为假,则跳过循环,执行后续语句;若为真,则跳到步骤3)。3、执行循环体语句一次,执行结束后,跳到2)重复执行,11,常用的循环结构,2、直到型循环此种循环先执行一次循环体,然后才进行条件判断,即重
8、复执行循环体直到条件表达式为假为止,故称为“直到型”循环。如图6-2所示。执行过程:1、循环变量赋初值2、执行循环体语句一次。3、计算条件表达式的值,若为假,则跳过循环,执行后续语句;若为真,则跳到步骤2)重复执行。,12,常用的循环结构,二者比较:共同点:都属于循环结构,即在一定条件成立情况下循环执行循环体。不同点:当型循环是先进行条件判断,然后再根据判断结果决定是否执行循环体,故如果一开始条件表达式即为假,则循环体一次都不会被执行到。而对于直到型循环,循环体则至少会被执行一次,即使初始时条件表达式为假,因为是先执行后判断。在条件表达式初始值为真时,这两种循环完全等价。,13,常用的循环结构
9、,1、铁路售票系统,针对某列火车,具有n个座位,进行售票。(注:由于有多个售票点同时进行卖票,故单个售票点并不清楚当前车票是否还有剩余。)分析:对于具体的售票点而言,由于其当前并不清楚车票的剩余情况,故其必须先进行核实,当有剩余票的时候才能卖票,具体卖票的动作包括出票给顾客,同时将剩余票数减一。故属于当型循环,即只有在“有票”这个条件成立的前提下才能执行卖票的动作。流程图如下:,示例:看下面两则例题,判断适合采用哪种循环结构实现,并画出流程图。,14,常用的循环结构,2、猜数游戏,即系统自动产生一个1-100的随机数,看谁能使用最少的次数猜中。分析:系统产生随机数后,用户至少需要猜测1次,才知
10、道是否猜中,即用户需要不断猜数,直到猜中为止。故其适用于直到型循环,流程图如下:,15,构成循环结构的要素,从发现重复类似的动作到写出一个循环结构,需要考虑和解决很多具体问题。首先是确定哪些是循环中要处理的动作,即循环体;再有就是循环的控制,即在循环开始时数据的状态、循环得以继续(或终止)的条件、以及如何在循环停止后得到需要的数据。程序设计时对应需要解决的问题包括:循环的条件如何表示?哪些语句是重复多次执行的?循环中涉及哪些变量?循环开始前应该给它们什么初值?循环体中应该如何修改它们?,16,构成循环结构的要素,我们将上述几个条件称为构成循环的要素,即循环体,循环变量,循环条件循环条件:循环得
11、以继续或终止的条件,通常采用条件表达式表示,当条件表达式为真时执行循环体,为假时结束循环。循环体:重复执行的语句体。循环变量:控制循环次数的变量,即出现在循环条件表达式中的变量,其控制循环是否要重复执行。需要在循环开始前为其赋初值,循环体中需要修改循环变量的值,如果循环体中忘记修改循环变量的值,可能会造成循环无法退出,即死循环,同时也可能引起其他意向不到的结果,如内存溢出等。,17,C 语言中的各种循环,do-while,for,需要多次重复执行一个或多个任务的问题考虑使用循环来解决可以是完全相同的任务,也可是按一定规律变化的任务,18,C 语言中的各种循环,条 件P,A,当型循环(while
12、/for),直到型循环(do-while),真,假,假,条 件P,A,假,真,19,while 循环,while(表达式)语句;,while 循环的一般语法:,Index=0;while(index 100).index+;,工作原理,示例,循环执行的条件,循环体,初始化出口/入口迭代,关键词,20,while循环,说明:1、表达式是控制循环的条件,它可以是任何类型的表达式,结果为逻辑值0或非0。2、循环体语句可以是一条语句或多条语句,若循环体含有多条语句,则必须用大括号把它们括起来,成为复合语句。3、while语句的特点是:先判断,后执行。若表达式一开始就为假,则循环一次也不执行。4、注意每
13、循环一次要修改循环变量的值,以确保循环能够在有限次数后由于循环条件不满足而退出。5、关键字while和后面的表达式用空格分隔,表达式必须用括号括起来,后面不要有“;”,否则会认为while循环的循环体为空。,21,While循环示例,例如:前面提到的售火车票问题读出当前的火车票剩余数量当(剩余票数大于0)打印纸质票给旅客;剩余票数减1;告知顾客无票;,Int count=?/循环变量while(count 0)/循环条件printTicket();/循环体count-;/处理循环变量printf(“票已售罄!”);,22,While循环示例,例如:假设班级有62个学生,从键盘输入每个学生的当前
14、课程成绩,计算整个班级的平均分(流程图+代码),输入完成如何表示:用一个变量表示当前读入学生的数量,每读入一个学生成绩后,数量+1,当数量大于62时,即表示输入完成。int count=0;float score,sum=0;while(count 62)scanf(“%f”,23,/分析程序运行结果#includevoid main()int num=1,result;while(num=10)result=num*10;printf(%d 10%d n,num,result);num+;,while 循环示例1,1,null,10,2,输出:1 10 10,2 10 203 10 304
15、10 405 10 506 10 607 10 708 10 809 10 9010 10 100,11,100,24,while 循环示例2,问题描述:从键盘输入若干个整数,输入-1表示输入结束。统计 输入整数的数量,并计算这些整数的和并打印。分析:输入/输出算法描述是否有重复的部分什么时候重复结束,#include void main()int c=0,count=0,num=0;scanf(%d,输入:1234567-1共输入7个整数,和为:27,25,for(表达式1;表达式2;表达式3)语句;,for 循环的一般语法:,for 循环,counter=0;inum=1;cnt=100;
16、,counter=10;inum 0,counter+;inum=inum+1;cnt-,分号用于分隔 for 循环的三个表达式,1,2,3,4,26,for 循环,说明:表达式1完成变量的初始化工作,表达式2是循环是否继续的条件表达式,表达式3常用语循环变量的更新,语句部分是循环体。执行过程:执行表达式1,此步骤只在循环开始前做一次,用于对循环变量初始化。求表达式2的值,如果得到0,即循环条件不满足,则循环结束,否则就继续。执行作为循环体的语句。执行表达式3,完成对循环变量值的修改。转到2继续执行。,for语句等价于下列语句:表达式1;while(表达式2)语句;表达式3;,27,for 循
17、环示例1,for语句最简单的形式:for(循环变量赋初值;循环条件;循环变量增值),例如:for(i=1;i=100;i+)sum=sum+i;,相当于:i=1;while(i=100)sum=sum+i;i+;,用for语句简单、方便。,28,for 循环示例2,采用for循环输出前面的乘法表,/分析程序运行结果#includevoid main()int num,result;for(num=1;num=10;num+)result=num*10;printf(%d 10%d n,num,result);,输出:1 10 10 2 10 203 10 304 10 405 10 506 1
18、0 607 10 708 10 809 10 9010 10 100,29,for 循环示例3,使用for循环:检测给定整数是否素数。分析:一个自然数,若除了1和它本身外不能被其它整数整除,则称为素数。例如2,3,5,7。根据定义,测试自然数k能否被2,3,k-1整除,只要能被其中一个整除,则k不是素数,否则是素数。程序中设立标志量flag,flag为0时,k不是素数,flag不为0时,k是素数。流程图如下:,30,判断素数:设置一个标记变量,表示k是否为素数,开始时为真;然后,从1开始到k,逐个测试,如果其中的某一个数能够整除k,则说明k不是素数,修改标志变量为假,否则继续。如果循环结束后,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 循环 结构
链接地址:https://www.31ppt.com/p-6504254.html