文档库 最新最全的文档下载
当前位置:文档库 › 实验11-类继承与接口(三)实验报告

实验11-类继承与接口(三)实验报告

实验11-类继承与接口(三)实验报告
实验11-类继承与接口(三)实验报告

浙江大学城市学院实验报告

课程名称:面向对象程序设计

实验项目名称:类继承与接口(三)

学生姓名专业:学号:

实验地点:实验日期:年月日

【实验目的】

1.巩固Java类继承的相关知识

2.理解对象上转型技术的优点和用途。

3.掌握接口的特点

4.接口与抽象类的异同之处

【实验内容】

一、类继承相关知识强化

1. 执行以下程序,给出执行Bbb的结果,并说明指出类Bbb的this.i与super.i的含义(即它们都对应哪个变量)。

class Aaa{

int i;

Aaa(int a){ i = a;}

}

class Bbb extends Aaa{

int j,k;

Bbb(int i){

super(i);

j = this.i;

k = super.i;

}

public static void main(String[] args){

Bbb b = new Bbb(18);

System.out.println(b.j +"\t" + b.k);

}

}

执行Bbb的结果:

this.i与super.i的含义(即它们都对应哪个类中定义的变量):

都对应Aaa类中的变量。

2.接着上面例子,将类Bbb改写为以下代码,请写出程序运行结果,并说明这个例子与上面例子的区别。

class Bbb extends Aaa{

int i= -1,j= -1,k= -1; //比上面例子增加一个实例变量i;

Bbb(int i){

super(i);

j = this.i; //本语句含义是:Bbb类中的变量i的值赋给j

k = super.i; //本语句含义是:访问Aaa类中的变量i并将值赋给k

}

public static void main(String[] args){

Bbb b = new Bbb(18);

System.out.println(b.j +"\t" + b.k);

}

}

执行Bbb的结果:

-1 18

这个例子与上面例子的区别:

在Bbb类中也定义了变量i,将Bbb的直接超类Aaa中的变量i给覆盖掉了。

3.对以下程序,给出执行Bbb的结果,并分析Bbb中main方法中a.show(1), b.show(1),

c.show(1)的结果。

class Aaa{

void show(){

System.out.println("Aaa中定义的show()");

}

void show(int i){

System.out.println("Aaa中定义的show(int i)");

}

}

class Bbb extends Aaa{

void show(){

System.out.println("Bbb中定义的show()");

}

Aaa a = new Aaa();

Bbb b = new Bbb();

Aaa c = new Bbb();

a.show(1);

b.show(1);

c.show(1);

}

}

执行Bbb的结果:

上面a.show(1)执行了那个类中定义的方法: Aaa类

上面b.show(1);执行了那个类中定义的方法: Aaa类

上面c.show(1)执行了那个类中定义的方法: Aaa类

分析:类Bbb中的方法覆盖的的是类Aaa中的void show()方法,并未覆盖void show(int i),而 a.show(1);b.show(1);c.show(1);都是执行了Aaa类中的void show(int i)方法。a.show(1)是直接访问超类Aaa中的void show(int i)方法,b.show(1)是子类Bbb继承了类Aaa中的void show(int i)方法,从而执行,c.show(1)中c是上转型对象,子类对象的引用向上转型为超类类型,从而执行void show(int i)方法。

4. 对以下程序,给出执行Bbb的结果,并分析这个例子结果与前面第4个例子,你可以得出什么结论。

class Aaa{

int i = 10;

static void show(){

System.out.println("Aaa中定义的show()");

}

}

class Bbb extends Aaa{

int i = 20;

static void show(){

System.out.println("Bbb中定义的show()");

}

Aaa a = new Aaa();

Bbb b = new Bbb();

Aaa c = new Bbb();

a.show();

b.show();

c.show();

((Bbb)c).show();

System.out.println(c.i); //考虑此处

System.out.println(((Bbb)c).i); //考虑此处

}

}

执行Bbb的结果:

((Bbb)c).show()执行结果: Bbb中定义的show()

System.out.println(c.i)执行结果: 10

System.out.println(((Bbb)c).i)执行结果: 20

分析与结论:

A aa c = new Bbb();中c为上转型对象,将子类对象的引用转为超类类型,c本是子类Bbb 的对象,但通过向上转型,c.i引用的是超类的变量,同时也可以通过(Bbb)c)的方式将c强制向下转型,则( (Bbb)c).i访问的是子类Bbb的成员变量。

二、程序分析思考

以下是例5.22的部分关键代码,请分析思考以下问题:

(1)Student类中设计抽象方法cost会带来什么好处?

(2)Student类的compareCost方法可以用于比较哪些类型的对象?如果没有设计抽象方法cost,那么会发生什么问题?

注意:分析重点是软件设计的通用性考虑。

abstract class Student {//定义学生对象的抽象超类

private String name;

public Student(String name){ https://www.wendangku.net/doc/128131848.html, = name; }

public abstract double cost();//声明抽象方法,表示学习费用

public double compareCost(Student otherStudent){//当前对象与参数对象的费用比较return this.cost() - otherStudent.cost(); //返回大于、等于、小于零的数字

}

public String getName(){return https://www.wendangku.net/doc/128131848.html,; }

public void setName(String name){ https://www.wendangku.net/doc/128131848.html, = name; }

}

class StudentCostTool{

static double sumCost(Student[] students){//计算students所有学生的费用之和double sum = 0;

for(int i=0;i

sum = sum + students[i].cost();

return sum;

}

static double averageCost(Student[] students){//计算students学生的平均费用return sumCost(students)/students.length;

}

static double maxCost(Student[] students){//计算students所有学生的费用最大值if(students.length == 1)

return students[0].cost();

int index = 0;

for(int i=0;i

if(students[index].compareCost(students[i]) < 0)

index = i;

return students[index].cost();

}

}

(1)Student类中设计抽象方法cost会带来什么好处?

答:由于不同的学生费用不同,无法做到学费的统一通用,因此设计抽象方法cost,那么就可以在不同学生类中调用抽象方法cost在其中用不同的代码返回相应学生的学费。

(2)Student类的compareCost方法可以用于比较哪些类型的对象?如果没有设计抽象方法cost,那么会发生什么问题?

答:用于比较哪些类型的对象当前对象,上转型对象及其子类对象。

如果没有设计抽象方法cost,那么compareCost方法就只能在Student的子类中设计了,即每个子类都编写一个compareCost方法,这样做就会导致相同代码的多处重复。

三、接口与抽象类实验

1. 编译下面的程序, 指出错误.

interface A{ //语句1

void show();

void show(int i){

System.out.println("A show()");

}

}

(1) 是否出错? 出错原因?

是,接口A中必须为抽象方法,不能定义非抽象方法,而上面的void show(int i)为非

抽象方法,应该为“void show(int i);”,不能有实现代码。

(2) 如果将上面语句1的interface改为abstract class , 编译是否出错?

(提示: 注意abstract修饰符)

出错。当interface改为abstract class时,说明A为抽象类,那么抽象类A中的抽象方法void show();应该在前面加上abstract修饰符。

(3)根据上面的(1)和(2), 可以看出接口与抽象类的什么区别?

接口中只能声明抽象方法,而抽象类中既能声明抽象方法,又能声明非抽象方法,但是抽象类中的抽象方法前面必须加上abstract修饰符,而接口则不需要,因为它被默认为抽象方法。

2. 编译下面的程序, 指出错误.

interface IA{

void show();

void show(int i);

}

class A implements IA{ //语句1

public void show(int i){ //语句2

System.out.println("A show()");

}

}

(1) 上面的程序编译是否出错? 出错原因?

是,A是接口IA的实现类,它继承了接口IA的所有成员,但类A中只实现了接口IA中的无参抽象方法show,但还有一个有参的抽象方法show没有实现,所以必须将类A声明为抽象类,即在class A前面加上修饰符abstract。

(2) 如果将语句1中的class 改为abstract class, 编译是否出错? 为何?

不出错。A是接口IA的实现类,它继承了接口IA的所有成员,但类A中只实现了接口IA 中的无参抽象方法show,但还有一个有参的抽象方法show没有实现,所以必须将类A声明为抽象类,即在class A前面加上修饰符abstract。

(3) 如果将语句2中的public删除, 编译是否出错? 为何?

是,因为接口成员的默认访问控制权限是public,而类成员的默认访问控制权限是包权限,所以必须声明为public访问控制

3. 编译下面的程序, 回答问题

abstract class A {

public void show(){

System.out.println("A show()");

}

}

class AbstractClassTest{

public static void main(String[] args){

A a = new A();

}

}

(1) 编译是否出错?

是。

(2) 类A的定义编译是否出错? 说明什么?(考虑抽象类中是否可以没有抽象方法)

是,说明抽象类是禁止对象创建的,抽象类中是可以没有抽象方法的。

4. 编译下面的程序, 回答问题

abstract class A{

static abstract void show();

}

class B extends A{

public static void main(String[] args){

show();

}

}

(1) 上面的程序编译是否出错?

是。

(2) 如何改正?

改为abstract class A{

public static void show(){

System.out.println("A show()");

}

}

class B extends A{

public static void main(String[] args){

show();

}

}

5. 编译下面的程序, 回答问题

interface IA{

int i;

void show();

}

(1) 上面的程序编译是否出错?

是。

(2) 如果出错, 错在何处?

i应该是一个静态常量,可以是int i = 100;

6. 编译下面的程序, 回答问题.

interface IA{

int i=100;

void show(); //代码1

}

interface IB {

int j=100;

void show(int a); //代码2

}

class A implements IA,IB{

public void show(){}//代码3

public void show(int a){} //代码4

}

(1) 上面的程序编译是否出错?

没有错。

(2) 代码1和代码3的区别是什么? 同样, 代码2与代码4的区别是什么?

区别是代码1是抽象方法show的声明,而是show的实现,代码2与代码4同上。

7. 编译下面的程序, 回答问题.

abstract class A{

void show1(){}

}

abstract class B{

void show2(){ }

}

class C extends A,B{

void show3(){}

}

(1) 上面的程序编译是否出错?

是。

(2) 如果出错, 错在何处?

错在类继承是单重继承,只能直接指定一个超类,但上述代码中类C制定了2个直接超累。

8. 编译下面的程序, 回答问题.

final class A{

void show(){}

}

class B extends A{

void show2(){}

}

(1) 上面的程序编译是否出错?

是。

(2) 如果出错, 错在何处?

错在class A前面多加了final修饰符。Final类不可继承,不能有子类,而上述代码中是有子类的。

9. 编译下面的程序, 回答问题.

class A{

final void show(){}

}

class B extends A{

void show(){

System.out.println("aaa");

}

}

(1) 上面的程序编译是否出错?

是。

(2) 如果出错, 错在何处?

多加了final修饰符,final方法不可继承,在子类中不可用。

10. 编译下面的程序, 回答问题.

interface IA{} //没有定义任何成员

class B{} //没有定义任何成员

(1) 上面的程序编译是否出错?

没有出错。

(2) 如果没有出错, 你可以得出什么结论?

接口与类的声明相似。

11.编译并运行下面程序,分析运行结果

interface IStudent{

void showDetail();

}

class Student implements IStudent{

String name;

int age;

Student(){}

Student(String name,int age){

https://www.wendangku.net/doc/128131848.html, = name;

this.age = age;

}

public void showDetail(){

System.out.println(name+"\t"+age);

}

}

class GraduateStudent implements IStudent{

String name;

int age;

String major;

GraduateStudent(){}

GraduateStudent(String name,int age,String major){

https://www.wendangku.net/doc/128131848.html, = name;

this.age = age;

this.major = major;

}

public void showDetail(){

System.out.println(name+"\t"+age+"\t"+major);

}

}

class InterfaceTest2{

static void showStudent(IStudent iStud){ //代码1

iStud.showDetail();

}

public static void main(String[] args){

Student a = new Student("张三",10);

GraduateStudent b = new GraduateStudent("李斯",10,"cs");

showStudent(a);

showStudent(b);

}

}

(1) 执行类InterfaceTest2, 输出结果是什么?

张三 10

李斯 10 cs

(2) 请注意上面的代码1, 这是否说明如果某个类实现了某个接口所申明的方法, 那么可以通过

该接口类型变量(而不是类引用变量)来调用所实现的方法?

是。

实验报告要求

将编程题源程序、运行结果,以及实验中遇到的问题和解决问题的方法,写在实验报告上。

继承和派生实验报告

实验目的与要求: 1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。 2.掌握派生类构造函数初始化基类成员和对象成员的方法。 3.掌握内联函数和默认函数。 4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。 实验过程及内容: 1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在 派生类中访问基类成员。 ①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员; ②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数; ③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。 编程测试所定义的类体系。 本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。要求计算圆柱的底面积、侧面积、全面积和体积。 请编写所有完整的成员函数,并编写主函数进行验证。 数据处理 1. (1)

(2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。(3)在Line类中添加两个数据成员。

2. #include #include using namespace std; #define PI 3.14159 class Point{ friend class Line; protected: double x, y ; public: Point(){x = 0 ; y = 0 ; } Point(double xv,double yv){ x = xv; y = yv; } double Area(){return 0;} void Show() { cout<<"x="< class animal {public:int age,weight;}; class dog:public animal {private:char color[10]; public: int SetAge(int n) {age=n;return n;} int SetWeight (int m)

C++语言程序设计实验答案_继承与派生教学提纲

C++语言程序设计实验答案_继承与派生

实验07 继承与派生(4学时) (第7章继承与派生) 一、实验目的 二、实验任务 7_1 声明一个基类Animal。 有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。 7_2 声明一个基类BaseClass。 有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。 7_3 声明一个车(vehicle)基类。 具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。

7_4 以实验6中的People(人员)类为基类。 派生出student(学生)类,添加属性:班号char classNo[7]; 派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[21]。 从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser; 从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。 类之间的关系如图7-1所示。 图7-1 类图

计算机组成原理与接口技术实验报告

计算机组成原理与接口技术 课程设计实验报告 学院:计算机科学与工程 专业:计算机科学与技术 班级:计科二班 学号: 姓名: 指导老师: 评分: 2016年12月28日

实验一验证74LS181运算和逻辑功能 1、实验目的 (1)掌握算术逻辑单元(ALU)的工作原理; (2)熟悉简单运算器的数据传送通路; (3)画出逻辑电路图及布出美观整齐的接线图; (4)验证4位运算功能发生器(74LS181)组合功能。 2、实验原理 ALU能进行多种算术运算和逻辑运算。4位ALU-74LS181能进行16种算术运算和逻辑运算。 74ls181芯片介绍: 该芯片总共由22个引脚,其中包括8个数据 输入端(~A0、~A1、~A2、~A3,~B0、~B1、~B2、 ~B3,其中八个输入端中A3和B3是高位),这八 个都是低电平有效。还包括S0、S1、S2、S3这四 个控制端,这四个控制端主要控制两个四位输入 数据的运算,例如加、减、与、或。CN端处理进 入芯片前进位值,M控制芯片的运算方式,包括 算术运算和逻辑运算。F0、F1、F2、F3是四个二 进制输出端,以一个四位二进制形式输出运算的 结果。CN4记录运算后的进位。

3、实验内容 实验电路图:

4、总结及心得体会 本实验通过一个设计一个简单的运算器,使我熟悉了Multisim软件的一些基本操作方法,并掌握了一些简单的电路设计与分析的能力,并对我做下一个运算器的实验有一定的帮助。因为是之前实验课做过的实验,再次做起来过程比较流畅,没有遇到什么大的问题,实验的测试结果与预期的一致。 该芯片总共由22个引脚,其中包括8个数据输入端(~A0、~A1、~A2、~A3,~B0、~B1、~B2、~B3,其中八个输入端中A3和B3是高位),这八个都是低电平有效。还包括S0、S1、S2、S3这四个控制端,这四个控制端主要控制两个四位输入数据的运算,例如加、减、与、或。CN端处理进入芯片前进位值,M控制芯片的运算方式,包括算术运算和逻辑运算。F0、F1、F2、F3是四个二进制输出端,以一个四位二进制形式输出运算的结果。CN4记录运算后的进位。其中AEQB、~P和~G这三个端口与本实验无关,所以这里不做额外介绍。

c++实验3 派生类与继承1

实验三派生类与继承 一、实验目的 1、学习类的继承,能够定义和使用类的继承关系。 2、学习派生类的声明与定义方法。 3、掌握类的定义和对象的声明。 4、熟悉公有派生和私有派生的访问特性。 5、掌握派生类构造函数和析构函数的执行顺序。 6、掌握利用访问声明调整基类成员在派生类中的访问属性。 二、试验内容 1、下面的程序可以输出ASCII字符与所对应的数字的对照表。修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。class table { public: table(int p) { i=p; } void ascii(void); protected: int i; }; void table::ascii(void) { int k=1; for (;i<127;i++) { cout<

c=m; } void print(void); protected: char *c; }; void der_table::print(void) { cout< using namespace std; #include class table { public: table(int p) { i=p; } void ascii(void); protected: int i; }; void table::ascii(void) { int k=1; for (;i<=122;i++)

统计学实验报告【最新】

统计学实验报告 一、实验主题:大学生专业与实习工作的关系 二、实验背景: 二十一世纪的今天大学生已是一个普遍的社会群体,高校毕业人数日益增加,社会、企业所提供的职位日益紧张,大学生就业问题是当今社会关注的焦点。面对日益沉重的就业压力,越来越多的大学毕业生选择了企业需求的职业,而这种职业与自己在校所学专业根本“无关”或相去甚远,大学毕业生就业专业不对口的现象非常严重。专业对口是个广义的概念,就是说你所学的专业与你所作的工作相关,比如你专业是会计,工作后你到了一个企业做会计,或者到银行做柜员,这都是与经济相关的,这就是对口。如果你学机械设计,但工作后却做了统计员,业务员等于你所学专业无关的工作,这就叫专业不对口。专业不对口导致毕业生所学知识没有用武之地,所以这是一种人力资源的浪费。 三、实验目的: 大学生就业专业不对口是客观存在的问题,我们研究此问题有这几点目的:①了解当代大学生实习工作与专业是否对口的情况,当代大学生对工作与专业不对口现象的态度。②分析大学生就业结构和

专业对口问题,了解当今大学生专业对口情况,为以后大学生选择专业、选择工作岗位提供有效的信息和借鉴。③寻找导致专业不对口的原因,以减少社会普遍存在的人力资源的浪费。 四、实验要求:就相关问题收集一定数量的数据,用EXCEL进行如下 分析:1进行数据筛选、排序、分组;2、制作饼图并进行简要解释;3、制作频数分布图,直方图等并进行简要解释。 五、实验设备及材料:计算机,手机,EXCEL软件,WORD软件。 六、实验过程: (一)制作并发放调查问卷。 (二)收回并统计原始数据:收回了102名大学生填写的调查问卷,并对相关数据进行统计。 (三)筛选与实验相关问题: 1.您的性别( ): A. 男B.女

微机原理与接口技术实验报告

新疆农业大学机械交通学院 实习(实验)报告纸 班级:机制072 学号: 073731234 姓名:唐伟 课程名称:微机原理及接口技术实习(实验)名称: DEBUG软件的使用 实验时间: 6.22 指导教师签字:成绩: —、实验目的 1.学习DEBUG软件的基本使用方法。 2.掌握8088/8086的寻址方式。 3.掌握数据传送、算术运算逻辑运算等类指令的基本操作。 二、实验内容与步骤 实验内容: 修改并调试以下程序,使之完成30000H开始的内存单元中存入31个先自然递增然后有自然递减的数据(00H~0F~00H)的功能。程序从CS:0100H开始存放。调试完成后程序命名为PCS.EXE并存盘。 实验步骤: (1)用A命令输入程序; (2)用反汇编U命令显示程序及目标码; 存盘程序命令为PCS1.EXE;

三、思考题 1.EXE文件程序的第一条可执行指令的IP等于多少? 答:EXE文件程序的第一条可执行指令的IP等于0010 。 2.在DEBUG环境下显示的程序和数字是什么形式?标号又是什么形式? 答: DEBUG把所有数据都作为字节序列处理。因此它可以读任何类型的文件。DEB UG可以识别两种数据: 十六进制数据和ASCⅡ码字符。它的显示格式是各个字节的十六进制值以及值在32与126之间的字节的相应ASCⅡ码字符。DEBUG总是用四位十六进制数表示地址。用两位数表示十六进制数据。不支持标号。 3.试述本次实验中你学会的DEBUG命令? 答:本次试验我学会了汇编命令(A命令)、.反汇编命令(U命令)、显示当前环境和寄存器内容(R命令、以十六进制和ASCII码形式显示内存单元内容(D命令)

实验3 继承和派生类的应用

3.1实验目的 1.掌握多重继承和派生类的方法 2.掌握初始化基类成员的方法 3.掌握定义虚基类的方法 3.2实验内容与步骤 1.上机实验题一 定义一个日期(年、月、日)的类和一个时间(时、分、秒)的类,并由这两个类派生出日期和时间类。主函数完成基类和派生类的测试工作。 ⑴分析 定义一个描述日期的类,构造函数完成年、月、日的初始化,包含一个重新设置日期的成员函数,一个获取日期的成员函数。该类可定义为: class Date{ int Year,Month,Day; //分别存放年、月、日 public: Date(int y=0, int m=0,int d=0) { Year= y; Month = m; Day = d; } void SetDate(int ,int ,int ); void GetDate(char *); }; 函数SetDate完成数据成员的赋初值。函数GetDate要将整数年、月、日变换成字符串后,存放到参数所指向的字符串中。把一个整数变换成字符串可通过库函数: char * _itoa(int a , char *s, int b); 来实现,参数a为要变换的整数,b为数制的基数(如10,表示将a转换为对应的十进制的字符串),转换的结果存放到s所指向的字符串中。函数返回变换后字符串的首指针。该成员函数可以是: void Date::GetDate(char *s) { char t[20];

_itoa(Year,s,10); //将年变换为字符串表示 strcat(s,"/"); //年、月、日之间用“/”隔开 _itoa(Month,t,10); //将月变换为字符串表示 strcat(s,t); //将年、月字符串拼接 strcat(s,"/"); _itoa(Day,t,10); strcat(s,t); //将年、月、日拼接成一个字符串} 定义描述时间的类与描述日期的类类同,然后用这二个类作为基类,公有派生出描述日期和时间的类。 简化的参考程序如下: #include #include #include class Date{ int Year,Month,Day; //分别存放年、月、日 public: Date(int y=0, int m=0,int d=0) { Year= y; Month = m; Day = d; } void SetDate(int ,int ,int ); void GetDate(char *); }; void Date::SetDate(int y,int m,int d ) { Year= y; Month = m; Day = d; } void Date::GetDate(char *s) { char t[20]; _itoa(Year,s,10); strcat(s,"/"); _itoa(Month,t,10); strcat(s,t); strcat(s,"/"); _itoa(Day,t,10); strcat(s,t); } class Time { int Hours,Minutes,Seconds; //时、分、秒 public: Array Time(int h=0,int m=0, int s=0)

汇编程序及接口技术实验报告

微机汇编程序及接口技术实验报告 汇编程序实验: 一、实验目的 1、熟悉汇编程序调试过程 2、掌握算术运算指令运用 3、掌握分支程序的编程和调试方法 二、实验设备 80X86微型计算机 三、实验内容 1、编程并调试显示“Hello Word!”字符串的汇编程序 TITLE HELLO DA TA SEGMENT STR DB'Hello World!$' DA TA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET STR MOV AH,9H INT 21H MOV AH,4CH INT 21H CODE ENDS END START

2、A、B、C、D、W是互不相等的在数据段中定义的16位有符号数,并假设加减运算不产生溢出。编写一个完整段定义的汇编语言程序,计算W=(A+B)×(C—D)。 title asmprogram1_1 DA TA SEGMENT A DW 1H B DW 3H C DW 4H D DW 2H W DW 2 DUP(?) DA TA ENDS ; CODE SEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX MOV AX,A ADD AX,B MOV BX,C SUB BX,D IMUL BX MOV W,AX MOV W+2,DX MOV AH,4CH INT 21H CODE ENDS END START

3、设X、Y为在数据段中定义的有符号字变量。编写一个完整段定义的汇编语言程序(包含必要的伪指令,给出必要的注释)完成以下操作:若0

内蒙古科技大学面向对象的程序设计实验8 继承(一)

内蒙古科技大学 面向对象的程序设计 实验报告 一、实验目的 1.理解继承的含义以及声明; 2.理解共有派生、私有派生和保护派生的含义以及使用; 3.理解单派生类中构造函数和析构函数的调用顺序。 二、实验环境 编译器:Visual C++ 6.0. 操作系统:Windows 7 旗舰版 三、实验内容 2.1练习(一): 1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include "iostream.h" class CBase { public: CBase(int a) :a(a) {

} protected: void print() { cout<<"a="<

统计学实验报告

实验报告

二、打开文件“数据”中“城市住房状况评价”工作表,完成以下操作。 1)通过函数,计算出各频率以及向上累计次数和向下累计次数;2)根据两城市频数分布数据,绘制出两城市满意度评价的环形图三、打开文件“数据”中“期末统计成绩”工作表,完成以下操作。1)要求根据数据绘制出雷达图,比较两个班考试成绩的相似情况。实验过程: 实验任务一: 1)利用函数frequency制作一张频数分布表 步骤1:打开文件“数据3. XLS”中“某公司4个月电脑销售情况”工作表 步骤2.在“频率(%)”的右侧加入一列“分组上限”,因统计分组采用“上限不在内”,故每组数据的上限都比真正的上限值小,例如:“140-150”该组的上限实际值应为“150”,但我们为了计算接下来的频数取“”.

步骤3.选定C20:C29,再选择“插入函数”按钮 3 步骤4.选择类别“统计”—选择函数“FREQUENCY” 步骤5.在“data_array”对话框中输入“A2:I13”,在“bins_array”对话框中输入“E20:E29 该函数的第一个参数指定用于编制分布数列的原始数据,第二个参数指定每一组的上限.

步骤6.选定C20:C30区域,再按“自动求和”按钮,即可得到频数的合计 步骤7.在D20中输入“=(C20/$C$30)*1OO”

步骤8:再将该公式复制到D21:D29中,并按“自动求和”按钮 计算得出所有频率的合计。 实验任务二:2)利用工具栏工具绘制插入一张直方图,并说明数据分布的特点

步骤1:选择“工具”——“数据分析”——“直方图” 实验任务三:1)通过函数,计算出各频率以及向上累计次数和向下累计次数 步骤1: 打开文件“数据”中“城市住房状况评价”工作表 步骤2:选定B5:B10单元格,按“自动求和”按钮 步骤3:在C5中输入“=(B5/$B$10)*100”,在将鼠标箭头放在该单元格的右下角,按鼠标左键向下拖动到C10,即可得C6:C10单元格中的值 步骤4:在D5单元格中输入公式“=SUM($B$5:B5)”,再将公式复制到

微机原理及接口技术实验报告

实验一 DEBUG命令及其基本操作 一.实验目的: 1.熟练掌握DEBUG的常用命令,学会用DEBUG来调试程序。 2.深入了解数据在存储器中的存取方法,了解堆栈中数据的压入与弹出方法。 3.掌握各种寻址方法,了解简单指令的执行过程。 二、实验容: 1.打开计算机,在WINXP操作系统下,点击“开始”,选择“运行”,在“打开”一栏中输入“debug”,运行DEBUG应用程序,将出现DEBUG的提示符“-”。 2.在DEBUG提示符后键入字母“-a100”,回车后,屏幕上就会出现下面类似的容: (具体到每个计算机所产生的段地址和偏移地址可能有所不同) 这表示在地址1383:0100处,DEBUG等待用户键入程序助记符,下面键入程序: 3.在DEBUG的提示符后键入G,这是执行程序的命令,然后回车,就可以看到结果了。 4.现在让我们用“d”命令来看一下存储器 在100H~107H这8个单元,程序覆盖了原来的容,右边的字符是组成程序的ASCII码等价字符,圆点表示不可显示字符。 5.下面我们用反汇编命令来查看一下所键入的程序。“U”命令的格式是“U起始地址,终止地址”,即把起始地址到终止地址之间的十六进制码反汇编成汇编语言助记符语句。键入: 大家在屏幕上不仅可以看到地址和助记符,而且还可以看到与汇编语言等价的机器语言。6.现在我们修改存储单元的容,看看显示情况和变化。 我们看到显示的结果发生了变化,这是因为DOS的2号功能调用是显示输入数据的ASCII 码字符。 7.下面我们给程序命名并存盘。在键入“n”后紧跟程序名及扩展名

因为文件的字节数必须事先放在BX和CX中,其中BX保存高16位,CX保存低16位,整个32位的数保存文件的字节数,一般来说,BX设置为0,因为CX可存放的字节数为64K,对于一般的程序已足够了。 8.结束后可用Q命令退出DEBUG程序。 三、实验习题 1.写出完成下列功能的指令序列 (1)传送20H到AL寄存器 (2)将(AL)*2 (3)传送25H到BL寄存器 (4)(AL)*(BL) 问最后的结果(AX)=? 单步执行结果: 2.分别写出完成下列指令要求的指令: (1)将BX的低4位清零; (2)将AX的高4位置1; (3)将DX的低4位取反; (4)将CX的中间八位清零; (5)将AX中与BX中的对应位不相同的位均置1.

实验四 继承与派生

实验四继承与派生 一、实验目的: 掌握利用单继承和多重继承的方式定义派生类的方法; 深刻理解在各种继承方式下构造函数和析构函数的执行顺序; 理解和掌握公有继承,私有继承和保护继承对基类成员的访问机制; 理解虚基类的概念以及引入虚基类的目的和作用。 二、实验时间: 三、实验地点: 四、实验内容: 1.运行以下程序,并对运行结果进行分析 #include"stdafx.h" #include using namespace std; class base{ int n; public: base(int a) {cout<<"constructing base class"<

统计分析实验报告

统计分析综合实验报告 学院: 专业: 姓名: 学号:

统计分析综合实验考题 一.样本数据特征分析: 要求收集国家统计局2011年全国人口普查与2000年全国人口普查相关数据,进行二者的比较,然后写出有说明解释的数据统计分析报告,具体要求如下: 1.报告必须包含所收集的公开数据表,至少包括总人口,流动人口,城乡、性别、年龄、民族构成,教育程度,家庭户人口八大指标; 2.报告中必须有针对某些指标的条形图,饼图,直方图,茎叶图以及累计频率条形图;(注:不同图形针对不同的指标)3.采用适当方式检验二次调查得到的人口年龄比例以及教育程度这两个指标是否有显著不同,写明检验过程及结论。 4.报告文字通顺,通过数据说明问题,重点突出。 二.线性回归模型分析: 自选某个实际问题通过建立线性回归模型进行研究,要求: 1.自行搜集问题所需的相关数据并且建立线性回归模型; 2.通过SPSS软件进行回归系数的计算和模型检验; 3.如果回归模型通过检验,对回归系数以及模型的意义进行 解释并且作出散点图

一、样本数据特征分析 2010年全国人口普查与2000年全国人口普查相关数据分析报告 2011年第六次全国人口普查数据显示,总人口数为1370536875,比2000年的第五次人口普查的1265825048人次,总人口数增加73899804人,增长5.84%,平均年增长率为0.57%。

做茎叶图分析: 描述 年份统计量标准误 人口数量2000年均值40084265.35 4698126.750 均值的 95% 置信区间 下限30489410.50 上限49679120.21 5% 修整均值39305445.50 中值35365072.00 方差 68424424372574 4.400 标准差26158062.691 极小值2616329

相关文档