资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,嵌套结构,2,第一讲 嵌套结构,3,主要内容,嵌套结构:自顶向下,逐步细化得分析得结果,选择嵌套结构if 深入,循环嵌套结构,复合嵌套结构,嵌套结构得典型算法,4,嵌套结构,自顶向下,逐步细化得分析得结果,5,程序得三种基本控制结构,Bohra和Jacopini,提出了以下三种基本结构:,顺序结构,选择结构,循环结构,用这三种基本结构作为表示一个良好算法得基本单元。,6,顺序结构,选择结构,三种基本结构得图示,循环结构,7,三种基本结构得共同特点,(1)只有一个入口。,(2)只有一个出口。(请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框得出口和选择结构得出口混淆。),(3)结构内得每一部分都有机会被执行到。,(4)结构内不存在“死循环”(无终止得循环)。,8,嵌套结构,三种基本结构中得语句组(顺序语句组、if分支语句组、else分支语句组、循环体语句组)可以包含任意结构得语句,从而形成不同得嵌套结构。,嵌套结构没有特定得结构形式,由分析方法自然形成,9,嵌套结构示例:求n个数中得最大值,(,sample02_01、cpp,),输入n,输入第一个数,假定为最大值max,循环i从2到n,step 1,输入一个数到x,如果x比假定最大值max还大,则 修正max为x,输出max得值,循环体嵌套:,顺序语句,选择语句,10,if语句深入,复杂条件表示,逻辑运算符连接多个条件,if语句得多种结构,if和else得匹配原则,复杂条件得表示,x就是一个介于0到10得数,0=x=0并且x=0&x&()-|(),逻辑运算符中得“&”和“|”低于关系运算符,“!”,高于算 术运算符,例:,a&b,若,a,b,为真,则,a&b,为真。,a|b,若,a,b,之一为真,则,a|b,为真。,!,a,若,a,为真,则,!a,为假。,14,逻辑表达式,例:设,a=4,b=5,:,!a,得值为,0 a&b,得值为,1,a|b,得值为,1 !a|b,得值为,1,4&0|2,得值为,1,任何非零得数值被认作“真”,用逻辑运算符将关系表达式或逻辑量连接起来得式子就 就是逻辑表达式。,逻辑表达式得值应该就是一个逻辑量“真”或“假”。C语言对应计算值1或0,15,逻辑表达式示例,例:,53&84-!0,自左向右运算,1&0,逻辑值为,0,83,逻辑值为,1,表达式值为,0,16,逻辑表达式 得优化原则,在逻辑表达式得求解中,并不就是所有得逻辑运算符都要被执行。,(1)a&b&c,只有,a,为真时,才需要判断,b,得值,只有,a,和,b,都为真时,才需要判断,c,得值。,(2)a|b|c,只要,a,为真,就不必判断,b,和,c,得值,只有,a,为假,才,判断,b,。,a,和,b,都为假才判断,c,例,:,(m=ab)&(n=cd),当,a=1,b=2,c=3,d=4,m,和,n,得原值为,1,时,由于,“,ab,”,得值,为,0,因此,m=0,而,“,n=cd,”,不被执行,因此,n,得值不就是,0,而,仍保持原值,1,。,17,复杂条件示例,用逻辑表达式来表示闰年的条件,能被,4,整除,但不能被,100,整除。,能被,4,整除,又能被,400,整除。,?,答,(year%4=0&year%100!=0)|year%400=0,案,值为真,(1),就是闰年,否则为非闰年。,18,if语句得多种结构,双分支结构,单分支结构,嵌套结构,多分支结构,19,单分支结构,if(条件),语句,if(c=m),m=m;,else,m=c;,if(c!=m),m=c;,常见错误示范,语句,1,表达式,真,假,单分支结构示例-求绝对值,#include,int main(void),int number;,printf(Enter a number:);,scanf(%d,if(number 0),number=-number;,printf(The absolute value is%d、n,number);,return 0;,20,Enter a number:10,The absolute value is 10、,Enter a number:-300,The absolute value is 300、,sample02_02、cpp,21,选择嵌套结构,在if语句中又包含一个或多个if语句称为if语句得嵌套,22,完整嵌套结构,if(条件1),if(条件2),语句1,else,语句2,else,if(条件3),语句3,else,语句4,表达式,1,表达式,3,语句,4,真,假,表达式,2,语句,3,语句,1,语句,2,真,真,假,假,23,多分支结构,if(表达式1)语句1,else if(表达式2)语句2,else if(表达式n-1)语句n-1,else 语句n,24,多分支结构图示,25,多分支示例-分段计算水费,sample02_03、cpp,#include,int main(void),double x,y;,printf(Enter x:);,scanf(%lf,if(x 0),y=0;,else if(x=15),y=4*x/3;,else,y=2、5*x-10、5;,printf(f(%、2f)=%、2fn,x,y);,return 0;,Enter x:-0、5,f(-0、50)=0、00,Enter x:9、5,f(9、50)=12、67,Enter x:21、3,f(21、30)=42、75,Enter x:?,26,不对称嵌套结构示例:求实足年龄,sample02_04、cpp,age=sysY-bthY;,if(sysMbthM),age=age-1;,else,if(sysM=bthM),if(sysDbthD),age=age-1;,年龄=当前年份-生日年份,如果生日月份还没到,年龄减一岁,否则 如果生日月份已到但生日还没到,年龄减一岁,age=sysY-bthY;,if(sysMbthM),age=age-1;,else,if(sysM=bthM)&(sysDbthD),age=age-1;,27,2种嵌套if,语句得比较,if(x 1)y=x+1;,else if(x 2)y=x+2;,else y=x+3;,if(x 2),if(x 1)y=x+1;,else y=x+2;,else y=x+3;,x2,x1,y=x+1,y=x+2,真,假,真,y=x+3,假,假,x1,x2,y=x+1,y=x+2,真,假,真,y=x+3,28,else 和 if 得匹配,if(表达式1),if(表达式2)语句1,else 语句2,else,if(表达式3)语句3,else 语句4,if(,表达式,1),if(,表达式,2),语句,1,else,if(,表达式,3),语句,3,else,语句,4,else,与最靠近她得、没有与别得,else,匹配过得,if,匹配,if(,表达式,1),if(,表达式,2),语句,1,else,if(,表达式,3),语句,3,else,语句,4,29,改变else 和 if 得配对,例3-10 改写下列 if 语句,使 else 和第1个 if 配对。,if(x 2),if(x 1)y=x+1;,else y=x+2;,if(x 2),if(x 1)y=x+1;,else y=x+2;,if(x 2),if(x 1)y=x+1;,else;,else y=x+2;,每条语句得执行条件,?,作业:写出下列表达式,判断char型变量ch就是否为大写字母,判断整型变量A得值就是否为奇数,判断整型变量x就是否为1100间得整数,31,循环嵌套结构,循环结构体里包含其她循环结构,32,循环嵌套结构(一)统计,sample02_05、cpp,输入n个学生得学号和5,门功课成绩求每位同学得总分和平均分,最后输出班级平均总分,最高总分和学号,每位同学得总分,sum,班级总分 total,最高总分 max,最高分学号maxno,33,算法,1、total=0,max=-1,maxno=-1,2、循环i从1到n step 1,(1)输入学号,(2)sum=0,(3)循环j从1到5 step 1,输入一个成绩x,sum=sum+x,(4)输出该学生得学号,总分和平均分,(5)total=total+sum,(6)如果该学生得总分比max高,修正max和maxno,3、输出班级总分和平均分,最高分学生得学号和总分,34,循环嵌套结构(二)画图形,画图形:n行,i,空格 星号,5 1,4 3,3 5,2 7,1 9,0 11,n-i 2*i-1,35,分析过程,循环i从1到n行 step 1,输出一行,输出一行,1、,输出空格,2、,输出星号,3、,回车,输出空格,循环,j,从,1,到,n-i,输出一个空格,输出星号,循环,j,从,1,到,2*i-1,输出一个星号,36,算法,sample02_06.cpp,循环i从1到n行 step 1,1、输出空格,循环j从1到n-i,输出一个空格,2、输出星号,循环j从1到2*i-1,输出一个星号,3、回车,/循环i从1到n行 step 1,for(i=1;i=n;i+),/1、输出空格,for(j=1;j=n-i;j+),printf();,/2、输出星号,for(j=1;j=2*i-1;j+),printf(*);,/3、回车,printf(n);,37,复合嵌套结构,选择结构和循环结构相互嵌套,38,复合嵌套结构(一)求素数,判断一个数就是不就是素数,求100以内得全部素数 例4-9,sample02_07、cpp,39,判断一个数n就是不就是素数,定义:,除了,1和本身,不能2到n-1,得数整除得数。,算法,循环,i从2到n-1,如果n能被i整除 跳出循环,如果im 则就是素数,输出,42,复合嵌套结构(二)穷举法,穷举所有可能得方案,对每一种方案检查就是否符合约束条件。找出所有可能得解,break语句-跳出一层控制结构,43,真,假,exp,语句,1,假,expb,语 句,2,循环体,真,带break语句得循环控制,for(;符合循环得条件;),、,if(结束循环得条件),break;,44,45,穷举法举例:例4-11 搬砖问题,sample02_08_1、cpp,某地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬一块。问用45人正好搬45块砖,有多少种搬法?,for(men=0;men=45;men+),for(women=0;women=45;women+),for(child=0;child=45;child+),if(men+women+child=45)&(men*3+women*2+child*0、5=45),printf(men=%d women=%d child=%dn,men,women,child);,46,例4-11 源程序(2),sample02_08_2.cpp,for(men=0;men=15;men+),for(women=0;women=22;women+),child=45 women men;,if(men*3+women*2+child*0、5=45),printf(men=%d women=%d child=%dn,men,women,child);,比较循环次数,
展开阅读全文