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