程序的控制结构分支循环举例PPT课件_第1页
程序的控制结构分支循环举例PPT课件_第2页
程序的控制结构分支循环举例PPT课件_第3页
程序的控制结构分支循环举例PPT课件_第4页
程序的控制结构分支循环举例PPT课件_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

程序的控制结构,.,2,教学目标,(1)理解控制语句的作用和分类,掌握相关语句的使用方法;(2)了解使用伪代码或流程图描述算法的方法。,.,3,基本内容,3.1基本控制结构3.2选择结构3.3循环结构,.,4,3.1基本控制结构,三大基本程序结构:顺序结构:程序是按程序语句或模块在执行流中的顺序逐个执行。选择结构:程序是按设定的条件实现程序执行流的多路分支。循环结构:程序是按给定的条件重复地执行指定的程序段或模块。结论:理论上已经证明,用以上三种基本程序结构的组合可以实现任何复杂的算法。,.,5,三大基本结构示意图,顺序结构选择结构,循环结构,模块(语句)A,模块(语句)B,条件,程序模块1,成立,不成立,程序模块2,条件,程序模块,不成立,成立,(当型循环),程序模块,成立,不成立,条件,(直到型循环),.,6,顺序结构的实现,r=p;p=q;q=r;,.,7,例3-1交换两个变量的值,#includeusingnamespacestd;intmain()inta=1,b=2;inttmp;/定义一个整型变量作为中间交换之用cout交换前:a=a,b=bendl;tmp=a;a=b;b=tmp;cout交换后:a=a,b=b=60)cout及格endl;elsecout不及格bc;if(a=0),.,12,2.switch语句,多路(开关)选择语句:switch(表达式)case数值1:语句序列1;case数值2:语句序列2;case数值3:语句序列3;default:语句序列n;,.,13,实现真正的多路选择,在每一个case模块的最后加上一个break语句,.,14,例3.2百分制化为优秀、良好、中等、及格和不及格的五级制成绩,算法分析:取一个百分成绩经过运算得到5级制成绩。构造什么样的表达式呢?“百分成绩/10=”?共有5个分数档,选择分支大于2,因此用多路开关语句switch。计算结果应该是唯一的。转换后应从switch中break出来。,#includeusingnamespacestd;intmain()intgrade;coutgrade;switch(grade/10)/根据转换值进行分支选择case10:case9:cout优秀endl;break;case8:cout良好endl;break;case7:cout中等endl;break;case6:cout及格endl;break;default:cout不及格endl;return0;,.,16,3.3循环结构,C+语言中实现循环结构的语句形式主要有三种:while语句do-while语句for语句,.,17,while语句|do-while语句,当型循环while(表达式)语句序列,直到型循环do语句序列while(表达式);,循环体,循环体,条件?,语句序列,成立,不成立,语句序列,不成立,成立,条件?,.,18,案例:谁打烂了玻璃?,有四个小孩踢皮球,不小心打烂了玻璃,老师问是谁干的。A说:不是我B说:是CC说:是DD说:他胡说现已知3个小孩说的是真话,一个小孩是假话。根据这些信息,编程找出打烂玻璃的孩子。,教学设问如何求解逻辑问题?如何根据案例的问题描述给出对应的数学模型?用什么样的控制结构能够从许多种可能性中找出其中的一种或多种正确的解?,打烂玻璃者为:C,*更多案例见本书配套教材C/C+语言程序设计案例教程罗建军等编著,清华大学出版社,A说:不是我B说:是CC说:是DD说:他胡说现已知3个人说的是真话,一个人是假话。,数学模型,k!=1k=3k=4k!=4,(k!=1)+(k=3)+(k=4)+(k!=4)=3,设变量k表示打烂玻璃的孩子,按照这4种状态假定,逐一测试4个人的话有几个为真,如果不满3句为真,就否定这一假定,换下一个状态来试,#includeusingnamespacestd;intmain()for(intk=1;k=4;k+)if(k!=1)+(k=3)+(k=4)+(k!=4)=3)cout打烂玻璃者为:char(64+k)endl;return0;,.,22,进一步思考,考虑更加一般的情况,即本案例出现没有解或有多个解,要为上面的程序增加什么机制,怎么修改程序?如果题目改为有3个小孩说假话,1个小孩说真话,则打烂玻璃的孩子又是谁?,.,23,例3-4:使用while语句计算1+2+3+100,#includeusingnamespacestd;intmain()inti=1,sum=0;/循环初始条件while(i=100)sum=sum+i;/累加求和i+;/改变循环条件cout1+2+3+100=sumendl;return0;,.,24,例3-5:使用do-while语句计算1+2+3+100,#includeusingnamespacestd;intmain()inti=1,sum=0;/循环初始条件dosum=sum+i;/累加求和i+;/改变循环条件while(i=100);cout1+2+3+100=sumendl;return0;,.,25,for语句,for语句用来实现计数循环:for(表达式1;表达式2;表达式3)语句1;语句2;语句n;,.,26,例3-6:使用for语句计算1+2+3+100,#includeusingnamespacestd;intmain()intsum=0;for(inti=1;i=100;i+)sum=sum+i;/累加求和cout1+2+3+100=sumendl;return0;,.,27,例3-7:制作乘法表-多重循环结构(循环的嵌套),#includeusingnamespacestd;intmain()inti,j;for(i=1;i10;i+)for(j=1;j=i;j+)coutj*i=i*jt;coutserviceYears;/计算奖金bonusif(serviceYearstotalSale;/计算提成additionalBonusif(totalSale10000)additionalBonus=0;elseif(totalSale50000)additionalBonus=totalSale*(0.03);elseadditionalBonus=totalSale*(0.05);/计算经纪人的月薪SalarySalary=baseSalary+bonus+additionalBonus;cout该经纪人的月薪为:Salaryn;for(inti=1;i=n;i+)u=u*i;coutn!=u=1.0E-6);coute=e(n=n)endl;return0;,.,36,应用举例,例3-13:求水仙花数如果一个三位数的个位数、十位数和百位数的立方和等于该数自身,则称该数为水仙花数。编一程序求出所有的水仙花数。153=13+53+33370=33+73+03371=33+73+13407=43+03+73,算法分析,用穷举法对100999之间的每个数进行验证。验证公式为:hdn=h3+d3+n3如何分解一个3位数的百位、十位和个位?是关键!百位=n/100整除100,丢弃小数十位=(n/10)%10整除10,得百十位。再对10取余数,得十位数个位=n%10n对10取余数,得个位例:371h=371/100=3d=(371/10)%10=37%10=7n=371%10=1,#includeusingnamespacestd;intmain()intn,i,j,k;for(n=100;n=999;n=n+1)i=n/100;/取出n的百位数j=(n/10)%10;/取数n的十位数k=n%10;/取出n的个位数if(n=i*i*i+j*j*j+k*k*k)coutn=i3+j3+k3endl;return0;,.,39,应用举例,例3-14:计算斐波那契数列一对兔子从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如所有的兔子都不会死,求前24个月中每月的兔子数。F1=1(最初的一对兔子)F2=1(第2个月,最初的一对兔子长成,但尚未生育)F3=2(最初的兔子开始生育)Fn=Fn-1+Fn-2(兔子数量的通项公式,即每月兔子数等于上两个月兔子数之和)从而形成了如下数列1,1,2,3,5,8,13,21,34,55,,.,40,#includeusingnamespacestd;intmain()intf1=1;intf2=1;inti;for(i=1;i=12;i+)coutf1tf2t;f1=f1+f2;/赋值号左边的f1代表第3个数,是第1、2个数之和f2=f2+f1;/赋值号左边的f2代表第4个数,是第2、3个数之和coutendl;return0;,.,41,应用举例,例3-15鸡兔同笼鸡和兔子关在一个笼子里,已知共有头36个,脚100个,求笼内关了多少只兔子和多少只鸡?分析:每只鸡有两只脚,每只兔子有四只脚,由题意得到如下方程:鸡的数目2兔子数目4100鸡的数目兔子数目36,.,42,穷举法,对所有可能情况一一测试,从中找出符合条件的(一个或一组)解,或得出无解的结论。算法如下:chicken=0;while(chicken=36)尝试

温馨提示

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

评论

0/150

提交评论