1、2008-09-01,版权所有:杨波,武汉科技大学理学院,第一章 数学预备知识 第二章 导引与基本数据结构 第三章 递归算法,武汉科技大学理学院信息与计算科学系 杨 波 cookie_ 2008年9月,2008-09-01,版权所有:杨波,武汉科技大学理学院,SPARKS语言,教材为描述算法选用的一种计算机语言 类PASCAL语言 结构化设计 凡掌握一门程序设计语言的人都能很快看懂,2008-09-01,版权所有:杨波,武汉科技大学理学院,基本语法成分,1)数据类型整型 integer实型 float布尔型 boolean字符型 char,2)变量声明类型说明符 变量integer i,j b
2、oolean b char c 3)数组任意整数下标integer A(1:5,7:20) integer B(5,7:20),2008-09-01,版权所有:杨波,武汉科技大学理学院,4)赋值运算(变量)(表达式)x 2 + x5)逻辑运算:and or not6)关系运算: ,2008-09-01,版权所有:杨波,武汉科技大学理学院,7)控制结构:顺序:(略)分支:if cond then S1 else S2endifcase:cond 1: S1:cond 2: S2:cond n: Sn:else: Sn+1endcase,循环: while cond do S repeat loo
3、p S until cond repeat for vblestart to finish by increment doS repeat,2008-09-01,版权所有:杨波,武汉科技大学理学院,8) 函数的定义与调用过程定义procedure NAME(参数表)(说明部分)Send NAME过程的调用: CALL 过程名函数定义类型名 procedure NAME(参数表)(说明部分)Sreturn (表达式)end NAME函数的引用:x function(参数);,2008-09-01,版权所有:杨波,武汉科技大学理学院,9) 变量的分类a)根据数据类型分类整型、实型、字符型等b)根据
4、作用域分类:全程变量、局部变量、形式参数c)根据是否带入、带出数据值/结果分类:in型变量out型变量inout型变量边界效应:改变了参变量或全程变量的值函数:通过函数值返回输出结果,没有边界效应纯过程:没有函数值返回,只通过边界效应带出输出结果,2008-09-01,版权所有:杨波,武汉科技大学理学院,10) 特殊语句a)exit退出当前一层的循环b)return退出过程return(表达式) : 函数返回结果c)goto 无条件转向语句goto label 11) 递归a)直接递归:过程中包含对自身的调用b)间接递归:间接调用自身 12) 输入输出read、print 13)注释/注释/,
5、2008-09-01,版权所有:杨波,武汉科技大学理学院,JAVA语言,教学算法大多使用JAVA语言 面向对象的语言 使算法结构紧凑、可读性强,2008-09-01,版权所有:杨波,武汉科技大学理学院,Java程序结构(1),应用程序和applet Java应用程序一定有一个主方法main,而applet的主方法名为init。 Java应用程序可在命令行中用命令语句:Java programName Java的applet必须嵌入HTML文件,由Web浏览器或applet阅览器来执行 Java程序必须先编译后执行。系统在编译时将Java源程序转化为Java字节码(bytecode)。Java源
6、程序文件的后缀为.java,编译后字节码文件的后缀为.class。 Java字节码可以看作是在一台虚拟计算机即Java虚拟机(JVM)上运行的语言。本地计算机通过Java虚拟机解释运行Java程序。,2008-09-01,版权所有:杨波,武汉科技大学理学院,Java程序结构(1),Java源代码,Java字节码,编译,JVM,JVM,JVM,操作系统,操作系统,操作系统,硬件,硬件,硬件,2008-09-01,版权所有:杨波,武汉科技大学理学院,Java程序结构(2),包 Java程序和类可以包(packages)的形式组织管理。 Java自带的包有java.awt,java.io,java.
7、lang,java.util等。 Java用户可根据需要将自己的程序组织成各种应用包。 Import语句 Java程序中可以用import语句加载所需的包。 import java.io.*;语句加载java.io包。语句import java.io.PrintStream;则加载java.io包中的PrintStream类。,2008-09-01,版权所有:杨波,武汉科技大学理学院,Java数据类型,Java的基本数据类型,2008-09-01,版权所有:杨波,武汉科技大学理学院,Java数据类型,经过包装的非基本数据类型 Byte Integer Boolean String ,2008-
8、09-01,版权所有:杨波,武汉科技大学理学院,Java数据类型,基本数据类型和包装类型的区别: 在声明一个具有基本数据类型的变量时,自动建立该数据类型的对象(或称为实例) 。 对经过包装的非基本数据类型,并不建立该数据类型的对象,而是建立一个该类型的引用对象(内存地址)。该数据类型的对象可用new语句建立。,2008-09-01,版权所有:杨波,武汉科技大学理学院,Java数据类型,int a;,0,a,String s; s=new String(“str“);,null,s,地址i,s,t,s,r,地址i,2008-09-01,版权所有:杨波,武汉科技大学理学院,方法:在Java语言中,
9、执行特定任务的函数或过程统称为方法(methods),方法,Java的Math类给出的常见数学计算的方法,2008-09-01,版权所有:杨波,武汉科技大学理学院,对计算表达式,值的自定义方法ab描述如下:,public static int ab(int a,int b) return (a+b+Math.abs(a-b)/2; ,public static double ab(double a,double b) return (a+b+Math.abs(a-b)/2; ,重载,2008-09-01,版权所有:杨波,武汉科技大学理学院,异常,Java的异常(exception)提供了一种处
10、理错误的简洁的方法。当程序发现一个错误,就引发一个异常,以便在程序最合适的地方捕获异常并进行处理。,public static int ab(int a,int b) if(a0”);elsereturn (a+b+Math.abs(a-b)/2; ,2008-09-01,版权所有:杨波,武汉科技大学理学院,public static void main(String args) tryf(); /try定义异常处理catch(exception1) /catch捕获异常异常处理1; /出现异常要执行的代码块catch(exception2)异常处理2;finallyfinally块; /无异
11、常产生时都必须执行 ,2008-09-01,版权所有:杨波,武汉科技大学理学院,异常处理完整的例子,public static void main(String args) trySystem.out.println(“ab=“+ab(-5,-7); catch(IllegalArgumentException e)System.out.println(“a=“+(-5)+“ b=“+(-7);System.out.println(e);catch(Throwable e)System.out.println(e);finallySystem.out.println(“Thanks“); ,p
12、ublic static int ab(int a,int b) if(a0“);elsereturn (a+b+Math.abs(a-b)/2; ,2008-09-01,版权所有:杨波,武汉科技大学理学院,Java的类,Java的类一般由4个组成部分: 类名 数据成员 方法 访问修饰,Public(公有):在public域中声明的数据成员和方法可以在程序的任何部分访问。 private(私有):在private域中声明的数据成员和方法构成类的私有部分,只能由该类的对象和方法对它们进行访问 。 protected(保护):在protected域中声明的数据成员和方法允许该类的对象、方法和子类访
13、问。,2008-09-01,版权所有:杨波,武汉科技大学理学院,public class Rectangle public static final int MAX=2000;private int x,y,h,w;/(x,y)是矩形左下角点的坐标,h是高,w是宽public Rectangle(int xx,int yy,int hh,int ww)/构造函数if(hhMAX|wwMAX)throw new IllegalArgumentException(“Illegal values of h or w”);elsex=xx;y=yy;h=hh;w=ww;public Rectangle
14、()/构造方法this(0,0,0,0);public int getHeigth()return h;/返回矩形的高public int getWidth()return w;/返回矩形的宽public static void main(String args)Rectangle r=new Rectangle();Rectangle s=new Rectangle(1,1,20,20);System.out.println(”r.h=”+r.getHeight()+” r.w= “+r.getWidth();System.out.println(“s.h=”+s.GetHeight()+”
15、 s.w= “+s.getWidth(); ,构造函数 Java类的构造方法(Constructor)用于初始化对象的数据成员。构造方法名与它所在的类名相同。构造方法必须声明为类的公有方法。构造方法不可有返回值也不得指明返回类型。,静态类成员 static:类成员前的关键字static表明该类成员是静态成员。Java只维护静态类成员的一个拷贝,而非静态类成员的每个对象都有一个拷贝。 final:表示值不可修改。,类对象 类对象的声明与创建方式类似于变量的声明与创建方式。对一个对象成员进行访问或调用可用运算符来实现。,静态方法 静态方法的调用方式是:方法名(实际参数)。 非静态方法的调用方式是:
16、.,2008-09-01,版权所有:杨波,武汉科技大学理学院,垃圾收集,Java的new运算用于分配所需内存空间。例如,int a=new int5000;分配5000字节空间给整型数组a。频繁用new分配空间可能会耗尽内存。Java的垃圾收集器会适时扫描内存,回收不用的空间(垃圾)给new重新分配。垃圾收集器在扫描内存时,以内存块是否被程序引用作为垃圾判断条件。例如,在程序中不再用数组a时,可用语句a=null;撤消程序对分配给a的内存块的引用,使其成为垃圾,让Java的垃圾收集器回收后重新利用。,2008-09-01,版权所有:杨波,武汉科技大学理学院,递归,计算一维数组a的前n个元素之和的方法sum可用递归方法表示如下: public static int sum(int a,int n) if(n=0) return 0;else return an+sum(a,n-1); ,