您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C语言程序设计课件6-2.3.4
主讲教员:范冰冰单位:信息技术运用教研室第6章循环控制循环语句break和continue循环嵌套循环应用教学目的和基本要求:要求学生了解循环结构程序设计,掌握各种循环语句应用的特点以及异同点,并能够应用循环语句进行基本程序的编写。教学重点:各种循环语句应用的特点及异同点。编程解决这样的一个问题:scanf(“%f”,&a);s=s+a;scanf(“%f”,&a);s=s+a;……这样运行一百次,输出值s?可能的做法:1、设一百个变量,分别输入学生的成绩,然后求和。从键盘输入一百个学生的成绩,求总成绩。2、设一个变量,每次输入一个学生成绩,累加后再输入下一个学生成绩。采用循环结构,利用循环语句,既保留节省内存的优点,又减少书写的麻烦。循环是计算机解题的重要特征,利用循环一方面能够降低问题的复杂性,也减少程序输入的工作量,同时可以充分发挥计算机运算速度快,能自动执行程序的优势。循环语句C语言提供三种循环语句结构whiledo-whileforfloata,s=0;inti=1;while(i=100){scanf(“%f″,&a);s=s+a;i++;}printf(sum=%f“,s);改错#includestdio.hvoidmain(){doubley=0;intm;scanf(%d,&m);inti;while(im){y+=(double)1/(i*i);}printf(y=%f,y);}下列程序用来实现y=1+1/(2*2)+1/(3*3)+1/(4*4)+……+1/(m*m)中y值的计算。例如:若m的值为5,则应该输出1.463611inti=1;(i=m)i++;为保证循环正常运行,必须特别注意:–控制条件的初始状态–循环控制条件的描述–循环体内部对控制条件的影响for(i=1;i=m;i++)for语句#includestdio.hvoidmain(){doubley=0;intm;scanf(%d,&m);inti;for(i=1;i=m;i++){y+=(double)1/(i*i);}printf(y=%f,y);}for(循环变量赋初值;循环条件;循环变量增值){语句;……}例1:求水仙花数(条件:三位数的个、十、百位的立方和等于该数。153=13+53+33)。算法分析:s1:从100~999依次提取数据,存储于变量i当中S2:分别提取这个数的个、十、百位S3:比较个、十、百位的立方和是否等于该数,如果满足条件,则输出这个数。S3:i=i+1S4:如果i不大于999,则重复执行2、3两步骤。根据算法,你能确定循环的三要素吗?循环变量的初值循环条件循环变量增值i=100i=999i++例2:一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹。求它再第n次落地时,共经过多少米?第n次反弹多高?算法分析:1、设s变量为总共经过的米数,h变量为从第2次开始弹跳以后的高度。2、根据第2次弹跳可以得到s=s+2*h3、h=h/24、根据分析还要设变量i代表次数,当i=n时候,重复执行2,3操作。100mfor(inti=2;i=n;i++)三种循环语句比较所有需要用到循环结构的程序,都可以用三种循环语句中的任何一个去实现,区别只在于某些问题用哪种语句更方便。一般能够明确执行次数的问题,习惯使用for语句。而对于循环次数不明确却能够确定循环结束条件的,习惯使用while或do-while语句请分别用三种循环语句完成如下程序,并比较三种循环语句的应用环境.题目:输入一篇文章,用回车键结束输入。请统计所输入的文章中小写字母的个数。1、我国隋朝数学著作《孙子算经》中记载了一个有趣而具有深远影响的“鸡兔同笼”问题:“今有鸡兔同笼,上有35个头,下有94只脚,编写程序求出鸡兔各有多少?2、求s=aa…aa-...-aaa-aa–a(此处aa…aa表示n个a,a和n的值在1至9之间),其中a是一个数字。例如a=3,n=6,则以上表达式为:s=333333-33333-3333-333-33–3其值是:296298练习:3、编写一个程序,输入10个整数,求出其中的最大数例3:请在1~200中,找出一个能够被3、5、7同时整除的整数。算法分析:在1~200中顺序寻找,如果这个数能同时被3、5、7整除,则跳出循环。对于需要强制停止循环需使用break例4:把100~300之间不能被3整除的数输出。算法分析:在100~300中顺序寻找,如果这个数能同时被3整除,则不采纳这个数,继续执行下一次循环,直到输出所有的满足条件的数。对于需要停止此次循环,继续执行下一循环的情况,需使用continue你能用所学知识解决下列问题吗?写程序实现图形的输出:****************************************循环嵌套一个循环体内包含着另一个完整的循环结构。就称为循环嵌套。内嵌的循环又可以嵌套循环,从而凑成多重循环,常用于解决矩阵运算、报表打印这类问题。while,do-while,for这三种循环均可以相互嵌套。循环嵌套说明:什么叫循环的嵌套?for(h=0;h=23;h++)for(m=0;m=59;m++)for(s=0;s=59;s++)时钟分钟秒钟分析:#includestdio.hvoidmain(){inti,j;for(i=1;i=9;i++)for(j=1;j=9;j++)printf(%d*%d=%d\n,i,j,i*j);}注意:内循环完成完整的循环外循环才能完成一次循环,所以一定要选择好哪个变量做内循环变量,哪个做外循环变量。写程序实现图形的输出:****************************************规律:1、行与空格数的关系:空格数为5-i;2、每行的字符数相同。行空格数*数量1482383284185081、用二重循环实现,外循环控制实现行数,内循环控制输出空格数;(设两个循环变量,i代表行数,j代表空格数)算法:2、思考循环语句该怎样表达呢?for(i=1;i=5;i++)for(j=1;j=5-i;j++)写程序实现图形的输出:*************************行空格数*数量141233325417509规律:1、行与空格数的关系:空格数为5-i;2、行与数量的关系:数量为2*i-1。循环嵌套说明:1、嵌套的循环控制变量不能相同;2、内循环变化快,外循环变化慢;3、正确确定循环体;4、循环控制变量常与求解的问题挂钩。例5:制作九九乘法。算法分析:设两个变量,变量i代表行,j代表列行列关系行i列总数111222333能发现行列的关系吗?例6:我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“公鸡每只5元,母鸡每只3元,小鸡3只一元。用100元买100只鸡,问公鸡、母鸡和小鸡各多少只?”1、x,y,z各代表公鸡、母鸡、小鸡的数量2、关系:x+y+z=1005*x+3*y+3*z=100常用算法常用数值计算算法:迭代法、递归法、插值法、差分法等常用非数值计算算法:穷举法、递归法、回溯法、贪婪法、分治法等。在循环中,穷举和迭代是很具代表性的基本算法。循环的应用穷举法的基本思想:对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试为止。穷举法编程中,主要是使用循环语句和选择语句,循环语句用于穷举所有可能的情况,而选择语句判定当前的条件是否为所求的解。循环的应用基本格式:for(循环变量所有可能的值){……if(x满足指定的条件)输出x;:}例7:找出1000以内的完数,所谓完数是指该数的各因子之和等于该数,如6=1+2+3。1、求出一个数的所有因子2、求所有因子之和3、判断和与这个数本身是否相等,是,就为完全数。基本格式:for(循环变量所有可能的值){……if(x满足指定的条件)输出x;:}for(m=2;m=1000;m++){求出m的所有因子之和sif(m==s)输出m;}思考题:⒈36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块。要一次搬完。问:男、女、小孩要多少?2、找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。3、证明6到200以内的数,符合哥德巴赫猜想(一个大于6的偶数,可以分解成两个质数之和)。例8:兔子繁殖问题。著名的意大利数学家Fibonacci曾提出一个有趣的问题:设有一对新生兔子,从第三个月开始它们每个月都生有一对兔子。按此规律,并假设没有兔子死亡,一年后共有多少对兔子?分析:根据题意,兔子数列为;1,1,2,3,5,8,13,21,34……。你能根据数列写出通项公式吗?循环算法——迭代迭代是一个不断用新值取代变量的旧值;或由旧值递推出变量的新值的过程。当一个问题的求解过程能够由一个初值使用一个迭代表达式进行反复迭代时,便可以极高的效率重复描述,所以迭代也用循环结构实现。迭代算法的基本要素:迭代表达式迭代变量迭代初值迭代终止条件迭代基本格式迭代变量赋初值;循环语句{计算迭代式;新值取代旧值;}迭代表达式:f1=f2=1(i3)fi=fi-1+fi-2(i3)a=b=1;for(i=3;i=12;i++)f=a+bb=a;a=f;
本文标题:C语言程序设计课件6-2.3.4
链接地址:https://www.777doc.com/doc-3841145 .html