资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,2,章 算法,算法在程序中的重要性,一个程序包含以下内容,数据的类型与组织形式,数据结构,操作步骤,算法,结构化程序设计方法,计算机语言,计算机算法,数值运算,非数值运算,算法实例,在一组数,a,1,a,2,a,3,a,4,.,a,10,中找出最大值,算法的特征,有穷性:,操作步骤有限,确定性:,每一步骤有确切定义,输入:,0,个或多个输入,从外界获得信息,输出:,一个或多个输出,反映数据处理结果,有效性:,每个步骤能执行,并有确定结果,“,正确”的算法有优劣之分,时间、空间的复杂度,算法的表达方式,自然语言,流程图,N-S,图,伪代码,计算机语言,算法的表达方式,自然语言,流程图,N-S,图,伪代码,计算机语言,如果,x,是正数,就打印,x,;否则打印,-x,算法的表达方式,自然语言,流程图,N-S,图,伪代码,计算机语言,x0,打印,x,打印,-x,T,F,算法的表达方式,自然语言,流程图,N-S,图,伪代码,计算机语言,x0,T F,打印,x,打印,-x,算法的表达方式,自然语言,流程图,N-S,图,伪代码,1,计算机语言,如果,x0,就,打印,x,否则,打印,-x,算法的表达方式,自然语言,流程图,N-S,图,伪代码,2,计算机语言,if x0 then,print x,else,print-x,算法的表达方式,自然语言,流程图,N-S,图,伪代码,2,计算机语言,if(x0),printf(%d,x);,else,printf(%d,-x,);,判断框,处理框,输入,/,输出框,流程线,程序流程图常用符号,结构化程序设计方法,自顶向下,逐步细化,模块化设计,结构化编码,大任务分解为小任务,三种基本程序结构,顺序结构,选择结构,循环结构,顺序结构流程,步骤,1,步骤,2,步骤,3,选择结构,(,分支结构,),流程,语句组,1,语句组,2,条件,Y,N,循环结构流程,语句组,条件,Y,N,第,4,章 选择结构,选择结构,(,分支结构,),流程,语句组,1,语句组,2,条件,Y,N,选择结构实例,P.66,例,3.5,一元二次方程,程序存在的问题:用户输入的数据必须保证,b,2,-4ac0,,否则调用,sqrt,函数会出错。,改进:,P.86,例,4.1,是否还有不完善之处?,if,语句,if(,条件,),语句,if(,条件,),复合语句,else,复合语句,if(,条件,),语句,else,语句,if,语句,int,x;,printf(x,=);,scanf(%d,&x,);,if(x=0),printf(greater,than zero or equal to zero,n);,else,printf(less,than zero,n,);,printf(Its,a negative,n,);,分别输入正数、负数、零,判断程序的运行结果,if,语句,int,x;,printf(x,=);,scanf(%d,&x,);,if(x=0),printf(greater,than zero or equal to zero,n,);,printf(Its,a,positive numbern,);,else,printf(less,than zero,n,);,分别输入正数、负数、零,判断程序的运行结果,关系运算符,=!=,优先级高,优先级低,关系运算符,算术运算关系运算赋值运算,优先于,优先于,例:,P.92 L.8,关系表达式,用关系运算符连接算术表达式(或字符,/,关系,/,逻辑,/,赋值表达式)形成,关系表达式的值是真,(,以,1,表示,),或假,(,以,0,表示,),字符,/,关系,/,逻辑,/,赋值表达式均以数值形式参加关系运算,关系表达式,判断下面程序运行时显示的结果:,int a=5,b=3;,printf(%dn,ab);,printf(%dn,(a,3)(b=3);,printf(%dn,a3b=3);,printf(%dn,ab2);,printf(%dn,a-3(b=2);,printf(%dn,a,A);,逻辑运算符,!,非,&,与,|,或,运算规则见表,4-2,4-3,例,P.93-94,优先级,逻辑表达式,例:,P.95-96,闰年的表达,以逻辑运算符连接关系表达式和逻辑量形成,逻辑表达式的结果是真,(,以,1,表示,),或假,(,以,0,表示,),0,和,1,以外的数据,(,数值、字符等,),参加逻辑运算时,以,0,为假,非,0,为真,逻辑变量,C+,,,C99,版本使用,类型符,_,Bool,值为,true,和,false,头文件,stdbool.h,if,语句,if(,条件,),语句,if(,条件,),语句,else,语句,if(,条件,),复合语句,else,复合语句,说明:,“条件”是关系表达式或逻辑表达式,其值为“真”,(,非,0),或“假”,(0),语句均要以分号结束,,括起的复合语句每句都以分号结束,if,语句,例:,P.88,例,4.3,三个数从小到大排列,例 求分段函数的值,*用多个平行的,if,语句表达,*用,if else if else,表达,*,abs,,,pow,,,exp,函数的使用,if,语句,if(,条件,1),语句,1,else if(,条件,2),语句,2,else if(,条件,3),语句,3,.,else,语句,n,例,:求一元二次方程的解,输入,a,b,c,输出,x1,x2,b2-4ac0,Y,N,复数解,a0,N,Y,b0,Y,输出,x,N,C=0,Y,N,无解,任意,if,语句的嵌套,if,语句的嵌套,if(.),if(.),语句,1,else,语句,2,else,if(.),语句,3,else,语句,4,“,语句”包括复合语句,读教材,101,页代码,条件运算符和条件表达式,条件运算符,?,:,唯一的三目运算符,条件表达式,表达式,1?,表达式,2:,表达式,3,当表达式,1,为真时返回表达式,2,的值,否则返回表达式,3,的值,条件运算符和条件表达式,例,int,a,b,x,;,a=5;,b=8;,x=,a,b?a:b,;,printf(%d,x,);,switch,语句实现多分支选择结构,switch(,表达式,),case,常量表达式,1:,语句,1,case,常量表达式,2:,语句,2,.,case,常量表达式,n:,语句,n,default:,语句,n+1,switch,语句实现多分支选择结构,说明:,switch,会执行相符的分支之后的所有语句;,为了使程序在执行一个相符的分支后不再继续执行后面的语句,可使用,break,语句终止,switch,;,相邻的多个分支可执行共同的语句。,阅读下面的程序,判断编译和运行结果,int,x;char y;,scanf(%d,x,);,if(90=x=100)y=A;,if(80=x=89)y=B;,if(70=x80)y=C;,if(60=x70)y=D;,else y=E;,printf(Level:%cn,y,);,注意:,scanf,函数中的地址运算符;,90=x5),printf(y,=20);,printf(y,=10);,printf(%d,y,);,注意:,y,没有被赋值的错误;分支结束后的语句,阅读下面的程序,判断运行结果,float,r,S,;,scanf(r,=%,f,&,r,);,if(r=0),s=3.14159*r*r,;,printf(S,=%,f,s,);,else,printf(radius,can not be negative);,注意:,(1),条件后未写,造成分支语句不匹配,,(2),变量名大小写问题;,阅读下面的程序,判断编译和运行结果,int,x,y,;,scanf(%d,&x,);,if(x1)y=x;,if(1=x=10)y=3x-1;,printf(y,=%,d,y,);,float,x,y,;,scanf(%f,&x,);,if(x1)y=x;,else if(x10)y=2*x-1;,else y=3*x-1;,printf(y,=%,f,y,);,提醒,数学式,10 x20,在计算机语言中的表达,switch,语句的特殊语法格式,表达式的正确书写,库函数的使用(见附录,F,),正确的数据类型,正确的程序结构,十分重要!,
展开阅读全文