文档库 最新最全的文档下载
当前位置:文档库 › 第6章_面向对象程序的设计_习题

第6章_面向对象程序的设计_习题

第6章_面向对象程序的设计_习题
第6章_面向对象程序的设计_习题

第6章面向对象程序设计

一.选择题

1.下面有关类和对象的说法中,不正确的是【】。

A) 类是系统提供的一种数据类型B) 对象是类的实例

C) 类和对象的关系是抽象和具体的关系D) 任何一个对象只能属于一个具体的类

2.面向对象的特点主要概括为【】。

A) 可分解性、可组合型性和可分类性B) 继承性、封装性和多态性

C) 封装性、易维护性、可扩展性和可通用性D) 抽象性、继承性和封装性3.要使一个类能被同一命名空间中的其他类访问,但不能被这个命名空间以外的类访问,该类可以【】。

A) 不使用任何修饰符B) 使用private修饰符

C) 使用public修饰符D) 使用internal修饰符

4.在C#中,【】访问修饰符修饰的字段只能由当前程序集访问。

A) private B) public C) protected D) internal 5.类的字段和方法的默认访问修饰符是【】。

A) public B) private C) protected D) internal 6.下列关于构造函数的描述中,不正确的是【】。

A) 构造函数中,不可以包含return语句B) 一个类只能有一个构造函数

C) 实例构造函数在生成类实例时被自动调用D) 用户可以定义无参构造函数7.下列关于构造函数的描述中,【】是正确的。

A) 构造函数名必须与类名相同B) 构造函数不可以重载

C) 构造函数不能带参数D) 构造函数可以声明返回类型8.下列的【】不是构造函数的特征。

A) 构造函数的函数名与类名相同B) 构造函数可以重载

C) 构造函数可以带有参数D) 可以指定构造函数的返回值类型

9.类ClassA有一个名为M1的方法,在程序中有如下一段代码,假设该段代码是可以执行的,则声明M1方法时一定使用了【】修饰符。

ClassA Aobj=new ClassA();

ClassA.M1();

A) public B) public static C) private D) virtual 10.在C#中,从属性的读写特性上来进行分类,可以划分为以下3种,除了【】。

A) 只读属性B) 只写属性C) 读写属性D) 不可读不可写属性

11.在C#中,以下关于属性的描述中正确的是【】。

A) 属性是以public关键字修饰的字段,以public关键字修饰的字段也可称为属性

B) 属性是访问字段值的一种灵活机制,属性更好地实现了数据的封装和隐藏

C) 要定义只读属性只需在属性名前加上readonly关键字

D) C#的类中不能自定义属性

12.以下类MyClass的属性count属于【】属性。

class MyClass

{ int i;

int count { get { r eturn i; } }

}

A) 只读B) 只写属性C) 读写D) 不可读不可写

13.C#中的TestClass为一自定义类,其中有如下属性定义:

public int Property{ …… }

使用以下语句创建了该类的对象,并让变量obj引用该对象。

TestClass obj=new TestClass();

那么,可通过【】方式访问类TestClass的Property属性。

A) MyClass. Property B) obj. Property

C) TestClass. Property D) obj. Property()

14.关于C#语言的方法,下列叙述正确的是【】。

A) 方法的定义不能嵌套,但方法的调用可以嵌套

B) 方法的定义可以嵌套,但方法的调用不能嵌套

C) 方法的定义和调用都不能嵌套

D) 方法的定义和调用都可以嵌套

15.以下所列的各方法头部中,正确的是【】。

A) void play(var a:Integer, var b:Integer) B) void play(int a, b)

C) void play(int a, int b) D) Sub play(a as integer, b as integer) 16.在类A中定义了属性y:

class A

{ public int y

{ get { return 1; }

set { }

}

}

并试图通过下列代码来实现对属性y的访问:

A b=new A();

b.y=2;

int x=b.y;

对此,下列说确的是【】。

A) 属性y可读可写,因此变量x的值为2

B) 属性y可读,但不可写,因此语句“b.y=2;”是错误的

C) 属性y可写,但不可读,因此语句“int x=b.y;”是错误的

D) 属性y可读可写,变量x的值为1

17.有以下类声明:

public class Class1

{ private string _sData="OK!";

privare string sData

{ set { _sData = value;} }

}

在Main函数中,在成功创建该类的对象obj后,以下【】语句是合法的。

A) obj. _sData="Hello!" B) obj. set(obj.sData);

C) obj. sData="Hello!"D) Console.WriteLine(obj. sData); 18.在类的定义中,类的【】描述了该类的对象的行为特征。

A) 字段B) 方法C) 属性D) 类名

19.调用重载方法时,系统根据【】来选择具体的方法。

A) 参数的类型B) 参数的个数和类型

C) 参数个数D) 方法的返回值类型

20.下列关于方法重载的说法中,完全正确的是【】。

A) 重载方法的参数个数必须不同B) 重载方法必须具有不同的形参列表

C) 重载方法必须具有不同的返回值类型D) 重载方法的参数类型必须不同21.关于静态成员,下列说确的是【】。

A) 同一个类中的静态成员,类实例化后,在不同的对象中形成不同的静态成员

B) 在类实例化后,同类型的对象都共享类的静态成员,静态成员只有一个版本

C) 在类定义时静态成员属于类,在类实例化后静态成员属于对象

D) 在类实例化后静态成员已被实例化,因此不同的对象有不同的静态成员

22.下列关于静态方法的说法,错误的是【】。

A) 静态方法不对特定实例进行操作,不与实例相关联

B) 使用静态方法的语法格式:类名.静态方法(实参列表)

C) 静态方法只能访问类中的静态成员,不能访问非静态成员

D) 静态方法不能访问类中的静态成员

23.已知:int a=100;

void Func(ref int b) { …… }

则下列函数调用正确的是【】。

A) Func(ref(10*a)) B) Func(ref 10*a) C) Func(ref(a) )D) Func(ref a) 24.下面对方法中的ref和out参数说明错误的是【】。

A) ref和out参数传递方法相同,都是把实参的存地址传递给形参,实参与形参指向同

一个存存储区域,但ref要参必须在调用之前明确赋过值

B) ref是将实参传入形参,out只能用于从方法中传出值,而不能从方法调用处接受实

参数据。

C) ref和out参数因为传递的是实参的地址,所以要参和形参的数据类型必须一致

D) ref和out参数要参和形参的数据类型或者一致,或者实参能被隐式地转化为形参的

类型

25.设方法Max的签名为:public void Max(out int max, params int[] a),maxval是一个int 型的值类型变量,arrayA是一个int型的数组对象,则下列调用该方法的语句中有错的是【】。

A) Max(maxval,4,5,3) B) Max(out maxval, 4, 5, 3)

C) Max(out maxval, arrayA) D) Max(out maxval, 4, 5)

26. 有以下类声明:

class Class1

{ public static int Count = 0;

public Class1()

{ Count++; }

}

在执行以下语句后,Class1.Count的值是【】。

Class1 o1 = new Class1();

Class1 o2 = new Class1();

A) 1 B) 2 C) 3 D) 0

27.在类MyClass中有下列方法定义:

public void test(params int[] arr) { Console.Write("使用params参数!"); }

public void test(int x, int y) { Console.Write("使用两个整形参数!"); } 请问上述方法重载有无二义性?若没有,则下列语句的输出为【】。

Myclass x=new MyClass();

x.test(0); x.test(0,1); x.test(0,1,2);

A) 有语义二义性

B) 使用params参数!使用params参数!使用params参数!

C) 使用params参数!使用两个整形参数!使用params参数!

D) 使用params参数!使用两个整形参数!使用两个整形参数!

28.分析以下C#语句,注意类MyClass没有访问修饰符。若必须为类MyClass添加访问修饰符,并使MyClass的可访问域保持不变,则应选择【】。

namespace test

{ class MyClass

{ int i; }

}

A) private B) public C) protected D) internal 29.C#中MyClass为一个自定义类,其中有以下方法定义:

public void Hello() { …… }

并使用以下语句创建了该类的对象obj,则可以访问类MyClass的Hello方法的语句是【】。

MyClass obj=new MyClass()

A) obj.Hello() B) obj:Hello() C) MyClass.Hello D) MyClass:Hello 30.下列的关键字中可用于引用类的当前实例的是【】。

A) base B) this C) new D) override 31.在C#中,以下有关索引器的参数个数的说法中正确的是【】。

A) 索引器只能有一个参数B) 索引器可以有多个参数

C) 索引器可以没有参数D) 索引器至少要有两个参数

32.委托声明的关键字是【】。

A) delegate B) sealed C) operator D) event

33.以下语句的作用是【】。

public delegate void Hello(string s);

A) 声明了一个名称为Hello的全局方法B) 声明了一个名称为Hello的函数原型

C) 声明了一个名称为Hello的函数指针D) 声明了一个名称为Hello的委托类型34.有声明语句:delegate void TimeDelegate(string s),则以下可以和委托TimeDelegate绑定的方法是【】。

A) void f(){ }B) string f(){ }

C) void f(string a){ }D) string f(string a){ }

35.声明一个委托类型:public delegate int myCallBack(int x); 则以下可以和委托myCallBack绑定的方法是【】

A) void myCallBack(int x);B) int receive(int num);

C) string receive(int x);D) 不确定的

36.有以下部分C#代码,其中MyDelegate是一个【】。

static void fun(string s) { Console.WriteLine(s); }

public static void Main()

{ MyDelegate p=new MyDelegate(fun);

p("Hello!");

}

A) 结构类型;B) 委托类型C) 函数D) 类名37.对于下面声明的委托和定义的类:

delegate int Mydelegate(int n);

class A

{ public int f(int i) { return 0; }

public void g(int j) { }

public static int h(int k) { return 0; }

}

下面语句中哪些是正确的【】。

Mydelegate d1=new Mydelegate(A.h); //语句1

A a=new A();

Mydelegate d2=new Mydelegate(a.f); //语句2

Mydelegate d3=new Mydelegate(a.g); //语句3

Mydelegate d4=new Mydelegate(a.h); //语句4

A) 语句1、语句2、语句3、语句4 B) 语句1、语句2

C) 语句3、语句4 D) 语句2、语句3

38.以下用于定义事件的关键字是【】。

A) delegate B) event C) this D) value 39.将发生的事件通知其他对象(订阅者)的对象称为事件的【】。

A) 广播者B) 发行者C) 通知者D) 订阅者40.已知类MyClass中事件MouseClicked定义如下:

public delegate void mydelegate();

public event mydelegate MouseClicked();

执行下列语句:

Method obj=new Method();

MyClass e=new MyClass();

e. MouseClicked +=obj.fun;

e. MouseClicked +=obj.fun;

其中Method类中包含事件处理方法fun,然后引发该MouseClicked 事件,其结果为【】。

A) obj.fun方法被调用一次B) obj.fun方法被调用二次

C) obj.fun方法不会被调用D) obj.fun方法被调用四次

二.填空题

1.【类】是面向对象编程的基础模块,在C#中,所有的容都被封装在其中。

2.声明类之后,通过new创建【类对象】,它是一个引用类型的变量。

3.静态字段是用【static】修饰符声明的字段,无论存在多少个类实例,它们都共享一个字段副本。

4.定义方法时使用的参数是【形参】,调用方法时使用的参数是【实参】。

5.数据类型说明符用来说明方法返回值的类型,如果没有返回值,则类型说明符应为【void】。

6.下列方法的作用是求两个数的较大数,并把较大数作为返回值,请填空。

float max_v(【(1)】)

{ float max;

max=a;

if(max

【(2)】;

}

(1) int a, int b (2) return(max)

7.在调用方法时,要使参数按引用方式进行传递,需要使用关键字【ref】。

8. 在调用方法时,要使参数按输出方式进行传递,需要使用关键字【out 】,此时并不

要参变量已经初始化。

9.在类的成员声明时,若使用了【protected】修饰符,则该成员只能在该类或其派生类中进行访问。

10.类的静态成员属于【类】所有,非静态成员属于类的实例所有。

11.已知某类的类名为ClassA,则该类的析构函数名为【~ClassA 】。

12.C#方法的参数有四种,分别是:值参数(对应值传递)、引用参数(对应地址传递)、输出参数和参数数组,在形参中声明参数数组时应使用【params】关键字。13.要给属性对应的数据成员赋值,通常要使用set访问器,set访问器始终使用【value】来设置属性的值。

14.声明一个公有委托类型MyFun1,该委托类型可以与无参且返回值为int类型的方法相关联,则该声明语句应为【public delegate int MyFun1(); 】。

15.下列程序的输出结果是【30】。

class Program

{ static void sub(int x, int y, int z)

{ z=x*x+y*y; }

public static void Main(string[] args)

{ int a=30;

sub(5, 2, a);

Console.WriteLine("{0}",a);

}

}

16.下列程序的运行结果是【3,5 】。

class program

{ static void Func(int a, out int x,out int y)

{ x=a/10; y=a%10; }

static void Main()

{ int m=35; int a, b;

Func(m, out a,out b);

Console.WriteLine("{0},{1}",a,b);

}

}

17.下列程序的运行结果是【18】。

class A

{ private int x;

public static A operator -(A b, A c)

{ A a=new A();

a.x=

b.x *

c.x;

return a;

}

public void setx(int x) { this.x=x; }

public int getx(){ return x; }

}

class Program

{ static void Main()

{ A a=new A(); a.setx(3);

A b=new A(); b.setx(6);

A c = a - b;

Console .WriteLine ("{0}",c.getx());

}

}

18. 下列程序的运行结果是【中国地质大学】。

public class University

{ const int MAX = 10;

private string[] name = new string[MAX];

public string this[ int index ]

{ get

{ if (index >= 0 && index < MAX) return name[index];

else return name[0];

}

set

{ if (index >= 0 && index < MAX) name[index] = value; } }

}

class Program

{ static void Main()

{ University un=new University();

un[0] = "清华大学";

un[1] = "大学";

un[2] = "中国地质大学";

Console.WriteLine(un[2]);

}

}

三.改错题

(说明:下列程序中部分下划线的代码有错误,请将有错误的部分改正过来,并说明原因)

1.class A

{ A(){ } }

A a=new A();

答:“A(){ }”应改为“public A(){ }”。因为在默认修饰符的情况下,类中的成员被默认为私有成员,因此在用A创建a时试图调用此构造函数,会因此构造函数为私有成员而拒绝访问。

2.class A

{ public static int x=100;

public int y=200;

}

class Program

{ static void Main(string[] args)

{ A a=new A();

a.x=10;

a.y=20;

}

}

答:“a.x=10;”应改为“A.x=10;”。因为x是类A中的静态成员。

3.class A

{ A(){ }

void A(){ }

private A(int x){ }

private A(int y){ }

}

答:“void A(){ }”应改为“A(){}”,因为构造函数不能带任何返回类型修饰符。“private A(int x){ }”和“private A(int y){ }”实际上是同一个构造函数,应删除其中一个。

4.class A

{ int f(){ return 1; }

void f(){ }

void g(int x){ }

void g(int y){ }

}

答:类A中试图重载函数f()和函数g(),但函数的重载是通过定义不同的参数个数和类型来实现的,其返回类型不能说明函数的重载特性,因此应删除其中的一个f()函数;类似的原因,函数g()中的形参名不同也不能说明函数的重载特性,实际上这两个g()函数是一样的,因此也需去掉其中之一。

四.问答题

1.简述类和对象的关系。

2.简述面向对象的基本特征。

3.类的声明格式中包含哪些部分?各有什么意义?

[访问修饰符] class 类名[:基类类名]

{

成员定义列表;

}

4.什么是实例方法?什么是静态方法?

5.类可以使用哪些修饰符?各代表什么含义?

6.简述构造函数和析构函数的作用。

?是在创建对象时自动执行的类方法。

?通常用于对成员变量进行初始化。

?在类对象被系统销毁时自动执行。

?析构函数也仅仅执行一次,通常用于对象被销毁前的“扫尾”工作。7.什么是属性?

?是一种特殊的类成员,目的是保护字段、对字段的赋值和取值进行限定。

答:属性是C#中的一种语法结构。如下:

private int _年龄;

public int年龄

{ set { if (value > 0){ _年龄= value;} }

get{ return _年龄; }

}

8.为什么使用属性?

答:属性是实现封装的一种方式,起到保护类成员变量的作用。调用简洁方便。而且,通过属性可以访问私有成员变量。

9.属性的类型有什么?

答:属性类型有:读写属性,只读属性,只写属性。

11.什么是索引器?

答:索引器是C#中的一种语法结构。如下:

[访问修饰符] 数据类型this[数据类型标识符]

{ get{}; //get访问器

set{}; //set访问器

}

12. 索引器的作用是什么?

答:作用:索引器是实现封装的一种方式,起到保护类成员的作用;同时使用起来简单方便:为集合对象创建索引器后,可以对类对象指定索引来直接访问数组元素

即用索引数组的方式索引对象。

13. 索引器可以重载吗?可以为索引器指定几个索引器参数?

答:索引器可以重载。可以为索引器至少指定一个索引器参数。

14.什么时候使用属性,什么时候使用索引器?

答:类中有成员变量就应该有属性。当成员变量是集合类型的时候,可以创建索引器。

五.程序阅读题

1.阅读下列程序,写出程序的输出结果。考察类对象

public class TPoint

{ int x, y;

p ublic void setpoint(int x1,int y1)

{x = x1; y = y1; }

public void dispoint()

{ Console.WriteLine("点:({0},{1})", x, y); }

}

class Program

{ s tatic void Main(string[] args)

{ TPoint p1, p2;

p1= new TPoint(); p1.setpoint(2, 6);

p2 = p1; p2.setpoint(8, 3);

p1.dispoint(); p2.dispoint();

}

}

点:(8,3)

点:(8,3)

2.阅读下列程序,写出程序的输出结果。考察方法参数传递

class Program

{ static void f1(ref int a, ref int b, out int sum, out int sub)

{ int t;

t=a; a=b; b=t;

sum = a + b; sub = a - b;

}

public static void Main(string[] args)

{ int x=10, y=20,xx=30,yy=40;

f1(ref x, ref y, out xx, out yy);

Console.WriteLine("x={0},y={1},xx={2},yy={3}", x,y,xx, yy);

}

}

x=20,y=10,xx=30,yy=10

3.阅读下列程序,写出程序的输出结果。考察索引器

public class Weeks

{ string[] week= { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };

public string this[int i]

{ get

{if (i >= 0 && i< 7) return week[i];

else return week[0];

}

set

{ i f (i >= 0 && i< 7) week[i] = value;

}

}

}

class Program

{ static void Main()

{ Weeks w = new Weeks();

w[0] = "星期天"; w[1] = "星期一";

C onsole.WriteLine(w[2]); Console.WriteLine(w[7]);

}

}

Tues

星期天

4.阅读下列程序,写出程序的输出结果。考察委托使用

delegate void mydelegate(double x, double y);

class MyDeClass

{ public void add(double x, double y)

{ Console.WriteLine("{0}+{1}={2}", x, y, x + y ); }

public void sub(double x, double y)

{ Console.WriteLine("{0}-{1}={2}", x, y, x - y); } }

class Program

{ static void Main(string[] args)

{ MyDeClass obj = new MyDeClass();

mydelegate p;

p = obj.add;

p += obj.sub;

p(10, 20);

}

}

10+20=30

10-20=-10

5.阅读下列程序,写出程序的输出结果。考察委托使用

public delegate int mydelegate(int x, int y);

class Math

{ public int fun1(int x, int y)

{ return x * x + y * y; }

public int fun2(int x, int y)

{ return x * x - y * y; }

}

class Program

{ static void Main(string[] args)

{ int result;

mydelegate objCall;

Math objMath = new Math();

objCall = objMath.fun1;

result = objCall(5, 3);

Console.WriteLine("结果为{0}", result);

objCall = objMath.fun2;

result = objCall(5, 3);

Console.WriteLine("结果为{0}", result);

Console.Read();

}

}

结果为34

结果为16

5. 阅读下列程序,写出程序的输出结果。考察事件

public delegate void mydelegate1(int i);

class MyEvent

{ p ublic event mydelegate1 Event1;

p ublic void FireEvent1(int i)

{if (Event1 != null) Event1(i); }

}

public class Program

{ public static void show(int i)

{ Console.Write("{0} ", i); }

p ublic static void Main()

{MyEvent a = new MyEvent();

a.Event1 += new mydelegate1(show);

f or (int i = 0; i <= 30; i++)

i f (i % 7 == 0) a.FireEvent1(i);

}

}

0 7 14 21 28

6. 阅读下列程序,写出程序的输出结果。考察运算符重载

class Complex

{ double a, b;

p ublic Complex(double m, double n)

{a=m; b=n; }

p ublic static Complex operator +(Complex x,Complex y)

{Complex t=new Complex(0,0);

t.a=x.a+y.a; t.b=x.b+y.b;

r eturn(t);

}

p ublic void DispCom()

{i f (b>0 ) Console.WriteLine("{0}+{1}i",a,b);

e lse Console.WriteLine("{0}-{1}i",a,-b);

}

}

class Program

{ p ublic static void Main(string[] args)

{Complex x=new Complex(1,2); Complex y=new Complex(3,4);

C omplex z=new Complex(0,0);

z=x+y;

x.DispCom();

y.DispCom();

z.DispCom();

}

}

1+2i

3+4i

4+6i

六.编程题

1.创建一个Student类,要求:

?该类封装学生的、性别和成绩等信息。

?通过构造函数给和性别信息赋值。

?和性别信息只能读不能写,成绩信息通过属性进行读写,对成绩属性进行赋值时,若成绩大于100分赋100分,若成绩低于0分赋0分。

?具有一个判断成绩等级的方法

class Student

{ private string name;

private string sex;

private int cj;

public Student(string name, string sex)

{ https://www.wendangku.net/doc/ea16958989.html, = name; this.sex = sex; }

public string Name

{ get { return name; } }

public string Sex

{ get { return sex; } }

public int Score

{ get { return cj; }

set { if (value > 100) cj = 100;

else if (value < 0) cj = 0;

else cj = value;

}

}

public string grade(int a)

{ string dj;

if (a >= 90) dj = "优秀";

else if (a >= 80) dj = "良好";

else if (a >= 70) dj = "中等";

else if (a >= 60) dj = "及格";

else dj = "不及格";

return dj;

}

}

2.声明一个用于检查用户合法性及用户级别的类CheckUser,具体要求如下:?该类包含UserName(用户名)和UsePwd(密码)两个string类型的属性。

?包含一个带有两个string类型参数的构造函数。

?包含一个返回值为int类型的UserLevel()方法,返回值为0表示高级用户,为1表示普通用户,为2表示用户不存在。若用户名为“zhangsan”,密码为”123456”,则为高级用户。若用户名为“lisi”,密码为”654321”,则为普通用户。所有其他用户均为不合法用户。

class CheckUser

{ private string name;

private string pwd;

public string UserName

{ get { return name; }

set { name = value; }

}

private string UserPwd

{ get { return pwd; }

set { pwd = value; }

}

public CheckUser(string name, string pwd)

{ https://www.wendangku.net/doc/ea16958989.html, = name; this.pwd = pwd; }

public int UserLevel()

{ int level = 2;

if (UserName == "zhangsan" && UserPwd == "123456") level = 0;

if (UserName == "lisi" && UserPwd == "654321") level = 1;

return level;

}

}

3.设计实现一个商品销售的简单管理程序。具体要求如下:

?每一种商品对象要存储的是商品名称、库存量及商品的单价。

?每销售一件商品要计算销售总额和商品库存量。

class Goods

{

private string name;

public string Name

{

get { return name; }

set { name = value; }

}

private int count; //商品库存量

private double price; //商品价格

static private double sum = 0; //所有商品的销售额

public Goods(string name, int count, double price)

{ https://www.wendangku.net/doc/ea16958989.html, = name; this.count = count; this.price = price; }

public void makesale(int num)

{

this.count = this.count - num; //修改商品库存量

sum = sum + this.price * num; //修改所有商品的销售总额

}

public int Count

{ get { return count; } }

public static double Sum

{ get { return sum; } }

}

class Program

{

static void Main(string[] args)

{

Goods Candy = new Goods("糖果", 200, 2);

Goods Chips = new Goods("薯片", 500, 5);

Candy.makesale(50); Chips.makesale(10);

Console.WriteLine("{0}的库存={1}", https://www.wendangku.net/doc/ea16958989.html,, Candy.Count);

Console.WriteLine("{0}的库存={1}", https://www.wendangku.net/doc/ea16958989.html,,Chips.Count);

Console.WriteLine("Sum={0}", Goods.Sum);

Console.Read();

}

}

4.声明一个名为MyCar的类,具体要求如下:

?MyCar类可以被任何类访问

?该类包含有两个属性:string类型的CarType和double类型的CarPrice

?该类具有两个重载构造函数:一个无参数,一个包含两个参数(对应CarType和CarPrice属性)。使用无参数构造函数初始化MyCar类对象时,CarType属性值默认为“SUV”,CarPrice属性值默认为24.5。

5.编写一个名为CTimer1的类,该类能够存放时间信息(设定三个域分别用来存放时分秒信息),并且具有设置时间和显示时间的功能(设置和显示时间可定义成类的方法)。

6.创建一个名为Person的类,具体要求如下:

?含有静态字段total(存放学生总数),实例字段ID(学号)、name()、sex(性别)

?创建构造函数,为新实例设置字段值,并记录实例个数。

?创建静态方法,显示当前学生总数。

?创建实例方法,显示学生的学号、和性别。

?在主函数中调用实例化Person类,并调用静态方法和实例方法,要求第一次实例化显示自己的学号和等。

class Person

{ public static int total=0;

public int num;

public string name;

public string sex;

public Person(int n, string a, string s)

{ num = n; name = a; sex = s; total++; }

public static void displayNum()

{ Console .WriteLine ("total:{0}",total ); }

public void DisplayAll()

{ Console.WriteLine("学号:{0}\t:{1}\t性别:{2}", num ,name,sex ); } }

public class test

{ static void Main()

{ Person myPerson = new Person(1001, "小为", "女");

Person.displayNum();

myPerson.DisplayAll();

}

}

7.创建一个复数类Complex,可以实现复数的赋值(通过构造函数)、显示(通过实例方法)和加法运算(通过“+”运算符重载)。

class Complex

{ int real, imag;

public Complex(int a, int b)

{ real = a; imag = b; }

public void Display()

{ Console.WriteLine("Complex.real={0},Complex.imag={1}", real, imag); }

public static Complex operator +(Complex p1, Complex p2)

{ Complex p=new Complex(0,0);

p.real = p1.real + p2.real;

p.imag = p1.imag + p2.imag;

return p;

}

}

8.设计一个控制台应用程序,创建一个List类,可以存储整数、实数、字符数据等(最多存放100个元素),并可以添加元素、删除元素、获取指定位置的元素、获取元素的实际个数、获取所有元素等。用相关数据进行测试。

class List

{ private int Max = 100; //存储最多元素

private int num = 0; //存储的实际元素个数

private object[] list; //存储数组元素

public List() //构造函数

{ list = new object[Max]; }

public void add(object obj) //添加一个元素

{ list[num] = obj; num++; }

public void delete(int pos) //删除一个元素

{ for (int i = pos + 1; i < num; i++) list[i - 1] = list[i];

num--;

}

public object get(int pos) //获取指定位置的元素

{ if (pos < num) return list[pos];

else return null;

}

public int getnum() //获取实际元素个数

{ return num; }

public string disp() //获取所有元素

{ string s = "";

for (int i = 0; i < num; i++) s += list[i] + " ";

return s;

}

}

class Program

{ static void Main(string[] args)

{ List list = new List();

list.add("abc");

list.add(1.23);

list.add(2);

list.add('a');

Console.WriteLine("元素序列:{0}", list.disp());

Console.WriteLine("元素个数:{0}", list.getnum());

Console.WriteLine("位置1的元素:{0}", list.get(1));

Console.WriteLine("删除位置2的元素");

list.delete(2);

Console.WriteLine("元素序列:{0}", list.disp());

Console.Read();

}

}

9.设计一个控制台应用程序,编程计算0~100中所有能被7整除的整数。要求:将输出结

果的命令置于事件处理程序中,每找到一个符合条件的数,就通过触发事件来执行输出程序。

public delegate void mydelegate1(int i);

c lass MyEvent //事件源类

{ public event mydelegate1 Event1; //定义事件

public void FireEvent1(int i) //引发事件Event1的方法

{ if (Event1 != null) Event1(i); }

}

public class Program //创建订阅者类

{ public static void show(int i)

{ Console.WriteLine("事件触发,能被7整除的数是:{0}", i); }

public static void Main()

{ MyEvent a = new MyEvent();

//订阅事件,把方法FireEvent1添加到事件Event1的列表中

a.Event1 += new mydelegate1(show);

for(int i=0;i<=100;i++)

if (i % 7 == 0) a.FireEvent1(i); //触发事件

Console.Read();

}

}

10.请设计一个类,用来模拟栈及其操作。

说明:栈是一种重要的数据结构,在存中占用连续的存储单元。栈有两个端点,固定的栈底和浮动的栈顶。栈有两种基本操作:push(压栈)和pop(出栈)。压栈是向栈顶位置写入一个元素,然后使栈顶指示器加1;出栈是先使栈顶指示器减1,再把该位置的元素读出来。

提示:可用一个数组成员(假设为buffer)表示栈的空间,用一个整型成员(假设为sp)表示栈顶指示器,并在构造函数中分配栈的空间和设置sp的值为0。出栈与压栈均用类的方法来实现,一般设其方法名分别为push和pop。

class Stack

{ private int[] arr; //栈空间

private int sp; //栈顶指示器

private int count; //允许的栈元素的最多个数

public Stack(int Length) //栈的构造函数形式一

{ count = Length; sp = 0; arr = new int[Length]; }

public Stack() //栈的构造函数的另一种形式

{ count = 10; sp = 0; arr = new int[10]; }

public bool isEmptyStack()

{ if (sp == 0) return true;

else return false;

}

public bool isFullStack()

{ if (sp ==count ) return true;

else return false;

}

public void push(int element) //压栈操作

{ arr[sp] = element; sp = sp + 1; }

public int pop() //出栈操作

{ sp = sp - 1; return (arr[sp]); }

public string putstack()

{ int i;

string stack = "";

for (i = 0; i < sp; i++) stack = stack + arr[i].ToString()+ " " ;

return stack;

}

}

11.设计一个控制台应用程序项目a,输入若干个学生的、英语和数学成绩,求出总分,并按总分从高到低排序。要求设计一个学生类Student,所有学生对象存放在一个Student对象数组中,通过一个方法对其按照总分进行降序排序,最出输出排序后的结果,输出结果类似于下图所示。

控制台应用程序项目a的执行结果

public class Student

{ private string name;

private int eng, math, sum;

public int psum

{ get { return sum; } }

public void inscore()

{ Console.Write(":"); name = Console.ReadLine();

Console.Write("英语:"); eng = int.Parse(Console.ReadLine());

Console.Write("数学:"); math = int.Parse(Console.ReadLine());

sum = eng + math;

}

public void display()

{ Console.WriteLine("\t{0}\t{1}\t{2}\t{3}", name, eng, math, sum); } }

class Program

{ const int Max = 100;

static void sort(int n, params Student[] p) //采用冒泡排序法排序

{ int i, j;

Student tmp;

for (i = 0; i < n - 1; i++)

{ for (j = 0; j < n-i-1; j++)

if (p[j].psum < p[j+1].psum)

{ tmp = p[j + 1]; p[j + 1] = p[j]; p[j] = tmp; }

}

}

static void Main(string[] args)

{ int n, i;

Student[] p = new Student[Max]; //定义对象引用数组

Console.Write("n:");

n = int.Parse(Console.ReadLine());

for (i = 0; i < n; i++) //创建对象引用的实例

p[i] = new Student();

for (i = 0; i < n; i++)

{ Console.WriteLine("输入第{0}个学生数据:", i + 1);

p[i].inscore();

}

Console.WriteLine("排序前:");

Console.WriteLine("\t\t英语\t数学\t总分");

for (i = 0; i < n; i++)

{ Console.Write("序号{0}:", i + 1);

p[i].display();

}

sort(n, p); //按总降序排序

Console.WriteLine("排序后:");

Console.WriteLine("\t\t英语\t数学\t总分");

for (i = 0; i < n; i++)

{ Console.Write("第{0}名:", i + 1);

p[i].display();

}

}

}

说明:可以采用任一种排序方法,也可以采用继承Icomparable接口的方式实现(见第7章习题)。

12. 设计一个控制台应用程序用于模拟考试过程,其中有一个教师类Teacher和一个学生类

Student,教师宣布开始考试,学生接收后开始答题,学生答题完毕引发答题完毕事件,教师收卷。

public delegate void EndExamType(DateTime endtime, Student stud);

//声明完成考试委托

类型

public delegate void StartExamType(DateTime starttime);

//声明开始考试委托类型

c++面向对象程序设计大作业

《面向对象程序设计》 大作业 题目学生成绩管理系统 学院 专业 班级 姓名 指导教师 2015 年11 月11 日

目录 一大作业的目的 (1) 二大作业的内容............................ . .. (2) 三大作业的要求与数据............... ...... . (3) 四大作业应完成的工作.................. . (4) 五总体设计(包含几大功能模块)........... . (5) 六详细设计(各功能模块的具体实现算法——流程图) (6) 七调试分析(包含各模块的测试用例,及测试结果) (7) 八总结 (8) 十参考资料 (9)

一大作业的目的 《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。 二大作业的内容 对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。 三大作业的要求与数据 1、用C++语言实现系统; 2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出. 3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能: (1) 每一条记录包括一个学生的学号、姓名、3门课成绩 (2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录 的输入。) (3)、成绩信息显示浏览功能:完成全部学生记录的显示。 (4)、查询功能:完成按姓名查找学生记录,并显示。 (5)成绩信息的删除:按学号进行删除某学生的成绩. (6)、排序功能:按学生平均成绩进行排序。 (7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!

面向对象程序设计的实训案例的设计

面向对象程序设计的实训案例的设计 一.引言 今天,面向对象编程技能作为应用软件设计人员的基本工作技能在软件业内已经深入人心:任何一个应用软件设计求职者如果敢于声称自己对面向对象编程一无所知,哪怕他其他方面再优秀,也会被公司拒绝;任何一家招聘应用软件设计职位的公司如果在招聘条件中没有列出“熟悉精通面象对象编程”这个条件,该公司一定认为这是默认的条件,没有单独列出的必要。 遗憾的是,应届大学大专毕业生动手能力不强已成为各软件用人单位的另一个共识,而把,等面向对象语言仅仅当作开发网站快速上手的工具的初学者更是大有人在。面对大街上扑天盖地的各类“计算机职业教育广告”,身为一名计算机专业教师,我觉得有必要为提高学生们的面向对象程序设计水平做点什么了。 提高学生的程序设计水平,公认最佳的途径就是多动手实践。在不给学生加负的前提下,精心选择,设计有代表性的实训案例,切实提高实训的效果,就显得尤为重要。 二.案例的评价标准 一个针对初学者的面向对象程序设计的实训案例应由案例的现实原型,案例分析设计和参考代码三个部分组成。其评价标准大致如下: 1.案例的现实原型应是同学们熟悉的题材,规模和复杂度相对较小,初学者容易把握主题。 2.案例的分析应体现出面向对象的思维方式,让同学们感受到“万物皆对象”,用面向对象的方式构建软件是一件自然而然的事情。 3.案例的设计要结构清晰,具备一定的健壮性和扩展性;在不影响结构优雅的前提下,尽可能全面应用到抽象类,接口,继承,多态,重载,覆盖等 面向对象基本特性,体现面向对象编程的特点。 4.案例的参考代码由源码实现,和伪代码相比,初学者对能编译运行的源代码更有好感。 三.案例的现实原型: 根据案例的评价标准,我选择了大家都比较熟悉的餐厅结账作为我们案例的现实原型,其功能要求如下: 1.程序功能: 这是一个餐厅计费的小程序;根据用户提供的消费清单和所应享受的折扣,算出最后用户的账单;根据用户选择,决定是否继续计算; 2.用户界面: 控制台命令行显示输出信息和接受用户输入信息; 3.折扣规定: 餐厅经营普通食品,海鲜,酒水三大类食品,其享受的折扣不同;折扣分为“进餐等待折扣”“折扣”“代金券折扣”三种。 . 进餐等待折扣:普通食品折,酒水折,海鲜不打折; 折扣:菜单总价折; 代金券折扣:总价每消费,可使用代金券,直接从总价中扣除; 补充说明:如果同时满足折扣,折扣,只能享受折扣. .帐单规定: 显示消费的食品的每条记录和单价;显示总共应付费用;显示享受折扣的名称和

计算机程序设计实践

江苏科技大学 课程实践报告 设计题目: 计算机程序设计实践(VC++) 设计时间: 2015. 3.9 至2015. 3.16 学院: 数理学院 专业班级: 13级信息与计算科学1班 学生姓名: 陈明敏学号1340501101 指导老师: 华伟 2015年5月1日

一、 实践任务 任务一:试建立一个类SP ,求(,)123k k k k f n k n =++++ ,另有辅助函数power ()用 于求 n m 。具体要求如下。 (1)私有数据成员。 Int n ,k :存放公式中n 和k 的值。 (2)公有成员函数。 ①SP(int n1,int k1):构造函数,初始化成员数据n 和k 。 ②int power(int m,int n):求n m 。 ③int fun():求公式的累加和。 ④void show():输出求得的结果。 二、源程序清单 #include class SP{ private: int n,k; public: SP(int n1,int k1); int power(int m,int n); int fun(); void show (); }; SP::SP(int n1,int k1){ n=n1; k=k1; } int SP::power(int m,int n){ int a=m; for(int i=1;i

面向对象程序设计实验指导书讲解

面向对象程序设计实验指导书 实验一、C++开发环境应用入门(2学时)(选做) 1、实验目的 (1)了解C++开发工具的特点 (2)熟悉C++开发环境 (3)学习用C++编写标准的C++程序 2、实验任务 使用C++来建立一个非图形化的标准C++程序,编译、运行下例程序: #include void main(void) { cout<<”Hello!\n”; cout<<”Welcome to C++!\n”; } 3、实验步骤 (1)启动Visual C++或C++Builder开发环境 (2)创建一个项目 A)单击File菜单中的New选项,显示示新建对话框 B)选择Console Wizard(C++Builder) 或Win32 Console Application(VC++)。 C)选择项目所在路径及输入项目的名称 D)依次按‘下一步’直至完成为止。 (3)至此,C++Builder已经建立好工程相关的文件(请不要随意更改其自动生成的文件),在生成的main函数中写入必要的内容即可。 (4)对于VC,请继续下面的步骤: A)建立C++源程序文件 a)选选菜单命令Project|Add to Project|New,弹出New对话框 b)在New对话框的Files选项卡中选择C++ Source File,并填入文件名称,单击OK按钮,完成 新建C++源程序文件 B)编辑C++源程序文件 a)在文件编辑窗口中输入代码 b)完成后,选择菜单File|Save保存这个文件 C)建立并运行可执行程序 a)选择菜单命令Build,建立可执行程序 如果你正确输入了源程序,此时便成功地生成了可执行程序。 如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息对源 程序进行修改后,重新选择菜单命令Build建立可执行程序。 b)选择菜单命令Run,运行程序,观察屏幕显示内容。 D)关闭工作空间 选择菜单命令File|Colse WorkSpace关闭工作空间。

2016年电大面向对象程序设计技术-作业题

2015秋季学期计算机科学与技术本科 《面向对象程序设计技术》作业题 (在电大在线该课程讨论区跟帖提交,注明姓名和学号以记录成绩)选择题 1.可以在本类及派生类的成员函数中进行访问的访问控制修饰符是(B) A.private B.protected C.public 2.在IDE中将编程项目采用多文件结构下,类的定义一般放在(A) A.头文件 B.程序文件 C.主程序文件 3.内联成员函数在类外定义时要将其和类定义一起放在(A) A.头文件 B.程序文件 C.主程序文件 4.下面哪个内存区域是C++中的运行时动态内存分配区域?( D ) A.代码区 B.栈区 C.数据区 D.堆区 5.对象作为函数参数使用时,一般使用(A)形式 A.引用 B.指针 C.对象拷贝

6.同类的多个不同对象的数据成员值各有不同,但不同对象可以共享类的成员函数代码, 实际调用成员函数时,是通过(B )来区分不同对象的。 A.显式给出不同对象不同地址 B.隐含的this指针 C.引用 7.下面哪一种情况不会自动调用拷贝构造函数。(E) A.用一个对象初始化另一个对象时 B.当一个对象作为值传递给一个函数时 C.当一个对象作为值从一个函数返回之前,该对象被拷贝到栈区 D.函数调用结束后,栈区中的返回对象拷贝给主调程序的对象 E.建立指向对象的指针并初始化指针值时 8.下列哪些对象的数据成员类型可以不用初始化表的方式进行初始化(D) A.常量数据成员 B.引用数据成员 C.类中对象成员 D.一般数据成员 9.下列哪一种类设计一般无需在类中设计静态数据成员以使建立的多个对象共享静态数 据数据成员。( D ) A.一个链表类的头指针和尾指针 B.一个学生类中用于保存建立了多少个学生对象的计数器 C.银行帐号类中的年利率 D.一般只用于建立一个对象的类 10.一个类中的公有(public)性质的静态数据成员,以下哪一种访问方式是错误的(D) A.对象名.静态数据成员名 B.指向对象的指针—>静态数据成员名 C.类名::静态数据成员名 D.类名.静态数据成员名 11.下列哪一个运算符不能够被类所重载(E) A.“.”成员访问运算符 B.“*”成员指针访问运算符 C.“::”域运算符 D.“?:”条件运算符 E.“=”赋值运算符

《面向对象程序设计》实验指导书

《面向对象程序设计》课程实验指导书

实验一 Java开发环境的安装与配置 一、实验目的: 1. 掌握JDK、Eclipse的安装步骤。 2. 理解环境变量PATH, CLASSPATH的作用,以及Eclipse的配置。 3. 熟悉Eclipse的编辑、编译与调试环境,编写简单的Application程序 编译执行并完成调试。 二、实验内容: 熟悉JDK的安装和配置,学习如何编写并运行简单的Application程序 (能输出一条简单的问候信息); 三、实验要求: 1. 能正确地安装JDK 2. 熟悉环境变量PATH, CLASSPATH设置方法,熟悉编辑环境 3. 调试程序、编译,运行后得到正确的结果 四、实验步骤: 1.从https://www.wendangku.net/doc/ea16958989.html,/technetwork/java/index.html上下载最新版本的JDK,并安装。 2.设置环境变量PATH, CLASSPATH, 使得Java程序能正确编译和执行。 3.在Eclipse环境下编写一个HelloWorld.java程序, (1)在主方法static public void main(String[ ] args)中调用System. out.println()方法,使程序输出一条问候信息; (2) 编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用 javac.exe和java.exe编译和执行程序)

实验二 Java语言基础 一、实验目的: 熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。 二、实验内容: 1.编写Java Application程序,输出1900年到2000年之间的所有润年。 (闰年的判断条件:能被4整除且不能被100整除,或能被400整除); 2.金字塔:Pyramid.java 在屏幕上显示一个由星型符号“*”组成的金字塔图案,示例如下: * *** ***** ******* 要求:金字塔高度h,可以由用户设置。 三、实验要求: 1. 正确使用Java语言的选择语句,循环语句; 2. 调试程序、编译,运行后得到正确的结果 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提成 示,并给出解决办法。 四、实验步骤: 1.编写主类; 2.在static public void main(String[ ] args)方法中加入实现要求功能 的代码,主要步骤如下: (第一题)从1900到2000循环,按照闰年的判断条件是则输出1900年到2000年之间的所有润年。 (第二题)允许用户设置金字塔高度。 4. 编译运行程序,观察输出结果是否正确。

第3章 面向对象程序设计基础

第3章面向对象程序设计基础

第3章面向对象程序设计基础 【1】什么是Java程序使用的类?什么是类库? 答:类是将一类事物的特性描述出来,然后如果用这个类来定义对象,则该对象就拥有了这个类所描述的所有特性。 在Java系统中,系统定义好的类根据实现的功能不同,可以划分成不同的集合,每个集合称为一个包,所有包合称为类库。 【2】如何定义方法?在面向对象程序设计中方法有什么作用? 答:方法的定义由两部分组成:方法声明和方法体。 方法的声明如下: 返回值类型方法名(参数类型形式参数1,参数类型形式参数2…){ 程序代码; 返回值; } 在面向对象程序设计中,方法的作用是完成对类和对象属性操作。 【3】简述构造方法的功能和特点。下面的程序片段是某学生为student类编写的构造方法,请指出其中的错误。 void Student(int no,String name) {

studentNo=no; studentName=name; return no; } 答:构造方法的功能是:构造方法是一个特殊的方法,主要用于初始化新创建的对象; 特点:构造方法的方法名要求与类名相同,用户不能直接调用,只能通过new运算符调用,而且构造方法是不返回任何数据类型,甚至也不返回void数据类型,即不能在构造方法前加void。 错误之处:(1)构造方法Student()前不能加void,(2)不能用return语句,(3)类名Student 首字母S改成小写s. 【4】定义一个表示学生的student类,包括的域有学号、姓名、性别、年龄,包括的方法有获得学号、姓名、性别、年龄及修改年龄。编写Java程序创建student类的对象及测试其方法的功能。 class Student { String id; String name; String sex; int age; void talk(){

面向对象程序设计(答案)

学号:姓名: 第三章面向对象程序设计作业 一、判断题 1、一个Java源程序可有多个类,但只仅有一个public类,而且程序名与public类名相同。对 2、如果类A和类B在同一个包中,则除了私有成员外,类A可以访问类B中所有的成员。对 3、接口中的成员变量全部为常量,方法为抽象方法。对 4、抽象类可以有构造方法,可以直接实例化。错 5、对static方法的调用可以不需要类实例。对 6、包含抽象方法的类一定是抽象类。对 7、方法中的形参可以和方法所属类的属性同名。对 8、接口无构造器,不能有实例,也不能定义常量。错 9、类的实例对象的生命周括实例对象的创建、使用、废弃、垃圾的回收。对 10、Java应用程序的入口main方法只有一种定义法。对 二、选择题 1、下列答案正确的是(A ) A) 在同一个Java源文件中可以包含多个类,只能有一个被声明为public B) 在同一个Java源文件中只能包含一个类,并被声明为public C) 在同一个Java源文件中可以包含多个类,都可以被声明为public D) 在同一个Java源文件中可以包含多个类,只能有一个被声明为default 2、Java实现动态多态性是通过( B )实现的。 A) 重载B) 覆盖 C) 接口D) 抽象类 3、下列哪一个是正确的方法重载描述( A ) A) 重载方法的参数类型必须不同 B) 重载方法的参数名称必须不同 C) 返回值类型必须不同 D) 修饰词必须不同 4、final关键字不可以用来修饰( D ) A) 类B) 成员方法 C) 域D) 接口 5、接口的所有成员方法都具有( B )属性 A) private, final B) public, abstract C) static, protected D) static 6、Java的封装性是通过(A )实现的 A) 访问控制B) 设计内部类 C) 静态域和静态方法D) 包 7、下列接口或类不属于.*包的是( D ) A) Collection B)Vector C) Map D) Integer 8、下述哪一组方法,是一个类中方法重载的正确写法( A ) A) int addValue( int a, int b ){return a+b;}

完成Java面向对象程序设计实验课的心得体会范文

Java面向对象程序设计实验课的心得体会经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。 在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。 学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,Java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。 Java思想:Java是一门面向对向语言,他定义一切都是对象面向对象,就是面对现实; 现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等 原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。 面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。 我想真正的面向对象编程思想不应该是编程思想,应该是面向对象的分析方法才对! 我的理解: 1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),

计算机程序设计(C)综合实践

计算机程序设计(C)综合 实践 设计报告 学院:电子通信与物理学院 设计名称:职工信息管理系统 专业班级:电子信息科学与技术14-2 学生:本良 学号: 201401100211 组号: 140203 指导教师:宋戈 完成时间: 2015年 7月23日

目录 第1部分实训题目与要求 (2) 1. 问题提出 (2) 2. 功能要求 (2) 3. 任务分工 (2) 第2部分设计实训题目功能......................................................................... . (3) 1. 总体设 计...................................................................... (3) 2. 数据结 构...................................................................... (4) 3. 程序设 计...................................................................... (5) 4. 测试与调 试......................................................................

(8) 第3部分实训总结......................................................................... . (12) 1. 个人总 结...................................................................... (12) 2. 结束 语...................................................................... (12) 第4部分参考文献......................................................................... . (13) 《C程序设计综合实践》评分表......................................................................... (14)

C++面向对象程序设计实验报告

C++面向对象程序设计实验报告 学院:信息科学与技术学院 班级:卓越电子1201 姓名:刘强 学号:120910115 实验二 C++面向过程程序设计 实验目的 掌握函数声明、定义和使用的方法 掌握函数递归调用的方法 实验内容 1、编写一个函数,求数列运算中从n个不同的数中取r个数的所有选择的个数,要求如下:主程序中设计一个循环,不断从输入接收n和r的值,计算结果并输出,当用户输入0 0时,程序结束; 能检查输入数据的合法性,要求n>=1并且n>=r; 能得到正确结果。 输入:5 3输出:10 输入:10 20;输出:Input Invalid !; 输入:-1 4;输出:Input Invalid!; 步骤: 利用一个函数fn(int n)计算n!, 利用另一个函数Cnr(int n, int r)计算Cnr,在该函数中调用fn(), 程序代码: #include int fn(int n) { int s=1; for(int i=1;i<=n;i++) { s=s*i; } cout<<"n!="<

int Cnr(int n,int r) { cout<<"Please input two numbers:"<>n>>r; if(n==0&&r==0) { cout<<"Programme shutdown."<=1&&n>=r) { int a; int b; int c; int d; a=fn(n); b=fn(r); c=fn(n-r); d=a/(b*c); cout<

面向对象程序设计实验报告完整版

资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 综合实验报告 面向对象程序设计 专业名称: 物联网工程 ___班级: _____ 级2班__ ___________姓名: 你哥哥 学号: 02051928 信息科学与工程学院 二零一三年七月

第一题: (1) 1.1题目概述 (1) 1.2设计思路 (2) 1.3设计说明与调试分析 (2) 1.4编码实现 (2) 1.5程序运行结果 (5) 1.6设计心得 (5) 第二题: (6) 2.1题目概述 (6) 2.2设计思路 (7) 2.3设计说明与调试分析 (7) 2.4编码实现 (7) 2.5程序运行结果 (11) 2.6设计心得 (11)

第一题: 1.1题目概述 用抽象类设计计算二维平面图形图形面积的程序, 在基类TDshape中设计纯虚函数area()和printName(), area()用于计算几何图形的面积, printName()用于打印输出几何图形的类名, 如Triangle类的对象就打印输出”Triangle”。每个具体形状的类则从抽象类TDshape派生, 各自需要定义其它独有的数据成员和成员函数, 而且定义area()和printName()的具体实现代码, 如图所示。 要求编写以TDshape为接口的函数, 借以访问具体类如

Triangle和Rectangle类的成员函数area(), printName ()。1.2设计思路 由简到繁, 逐步实现。 1.3设计说明与调试分析 编写基类TDshape->编写虚函数->编写继承类Triangle ->实例化TDshape和Triangle ->调用基类虚函数实现调用继承类相应函数->同样的方式处理继承类Rectangle. 1.4编码实现 #include using namespace std; class TDshape{ public: virtual void area()=0; virtual void printName()=0; }; class Triangle:public TDshape{ private: double width,height;

面向对象程序设计大作业(C++)

面向对象分析/设计课程大作业 银行业务处理系统 13级软件学院测试班 1367004029 曾丹 1.需求分析 随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。 现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如

何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。 近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。 随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。 特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。 主要用于银行的储蓄卡管理系统,它可以帮助我们有效、准确、并且高效实现的完成存取事件。此系统操作方便效率、安全性高,只要客户开户并设定好密码就可以轻松的实现存取款。 系统实现的主要有储蓄卡开户管理、存取款管理、用户查询历史数据显示、注销等功能。 储蓄卡开户管理模块:卡号、姓名、开户金额、身份证号、地址、电话、密码、确认密码和保存组成。(开户金额必须是数字,密码和确认密码必须一样是六位数字) *注销模块:一旦注销该卡号就不存在且余额提醒你取出。 通过该银行账户管理系统地运行,使办公人员可以轻松快捷的完成对账户管理的任务,提高账目管理效率,使银行的账目管理工作系统化、规范化、自动化。 该银行帐目管理信息系统,优点是设计过程思路清晰、模块划分简洁,设计各阶段分工明确。经过实践证明,该划分是合理的,极大得提高了本系统的实现。

《面向对象程序设计》实验指导书(实验二)

实验二类与对象㈡——对象初始化、对象数据与指针 一、实验目的 1.理解构造函数、析构函数的意义及作用,掌握构造函数、析构函数的定义及调用时间,熟悉构造函数的种类; 2.理解this指针及使用方法,熟悉对象数组、对象指针、对象引用的定义及使用方法,熟悉对象作为函数参数的使用方法; 3.熟悉类与对象的应用及编程。 二、实验学时 课内实验:2课时课外练习:2课时 三本实验涉及的新知识 ㈠构造函数与析构函数 在C++中,提供了两个特殊的成员函数,即构造函数和析构函数。 构造函数用于对象的初始化,即在定义一个类对象时,计算机在给对象分配相应的存储单元的同时,为对象的数据成员赋初值。 析构执行的是与构造函数相反的操作,用于撤销对象的同时释放对象所占用的内存空间。 1.构造函数 ⑴构造函数的定义 格式: 类名(形参表) { 构造函数体} ⑵构造函数的调用 构造函数的调用是在定义对象时调用的。 格式:类名对象名(实参表); 类名对象名=构造函数名(实参表); ⑶说明 ①构造函数必须与类同名。 ②构造函数没有返回值,但不能在构造函数前加void类型符(其他没有返回值的成员函数必须加类型符void)。 ③在实际应用中,在定义类时通常应定义一至多个构造函数(重载),以对各数据成员进行初始化;如果不给出构造函数,系统将自定义一个构造函数。 ④构造函数可以可以带参数,也可不带任何参数(称无参构选函数),还可以使用缺省参数。 ⑤不能象普通成员函数一样单独调用。 2.析构函数 ⑴析构函数的定义 格式: ~类名(void) { 析构函数体} ⑵析构函数的调用 析构函数是在撤销对象时自动调用的。 ⑶说明

面向对象程序设计完整版

Object- Orien ted Programmi ng C++ 主讲成长生 东华大学计算机科学与技术学院

第一章概述 § 1.1 面向对象程序设计的基本思想 C++是基于C语言发展的,又冲破C语言局限的面向对象的程序设计语言。它与Java 语言都作为当前计算机科学的主流语言, 越来越受到用户的欢迎。 要弄清楚什么是面向对象的程序设计, 首先了解和回顾传统的 ( Pascal(或C))结构化程序设计方法及其设计思想、程序结构及特点。SP(Structure Programming)是60 年代诞生的针对当时爆发的所谓”软件危机” , 为此发展形成了现代软件工程学的基础。 SP的总的设计思想是: . 自顶向下、层次化 . 逐步求精、精细化 程序结构是按功能划分基本模块的树型结构, 使模块间的关系尽可能简单独立。因此SP的程序的基本特点是: . 按层次组织模块(战略上划分战役) . 每一模块只有一个入口, 一个出口 ?代码和数据分离(程序=数据结构+算法) 归纳得到: SP 把数据和过程(代码、函数)分离为相互独立的实体, 用数据代表问题空间中的客体借以表示实际问题中的信 息; 程序代码则用来处理加工这些数据。程序员在编程时 必须时刻考虑所要处理的数据结构和类型。对不同的数据格式即使要作同样

的处理计算, 或者要对相同的数据格式作不同的处理都必须编写不同的程序(如两个整型数和两个浮点数相加)。这样的编程方法,即传统的SP方法设计出来的程序或系统其可重用的成分很少。其次把数据和代码作为不同的分离实体时, 总存在着用错误的数据调用正确的程序模块, 或用正确的数据调用错误的程序模块的危险, 从而使数据与程序始终保持兼容, 已成为程序员 的一个沉重的负担。在开发一个大型软件课题中, 当工程进入到 后期若用户改变了方案要求, 很容易使技术人员的前期工作受到摧毁性的打击,使其前功尽弃。为克服以上的弊端或者该SP方法难以控制处理的矛盾而产生了面向对象程序设计方法, 即Object —Oriented Programming ----------- OOP从二十世纪六十年代提出对象 的雏形, 到七十年代美国国防部的专用语言Ada 语言, 直到当前国际上流行的高品味的Java 和C++(Tc++,Balandc++ 及Vc++), , 应该讲OOP方法与技术吸取了SP的一切优点,同时又正视和顺应现实世界由物质和意识二部分组成。映射到面向对象的解空间就是: 具体事物—对象; 抽象概念—类。 OOP的基本原理是用问题领域的模型来模拟大千世界,从而设计出尽可能直接、自然地表示问题求解方法的软件, 这样的软件由对象组成, 而对象则是完整反映客观世界事物具有不可分割的静态属性(”数据结构” )与动态行为(”方法” )的。而且它们是既有联系又

面向对象程序设计作业参考答案

习题一 5、分析下面程序运行的结果。 # using namespace std; int main() { cout<<”This”<<”is”; cout<<”a”<<”C++”; cout<<”program.”< using namespace std; int main() { int a,b,c; a = 10; b = 23; c = a + b; cout<<'a + b ="; cout< using namespace std; int main() { int a, b; a = b = 0; int c = a + b; cout<<”a + b =”<

9、输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,在进行编译,直到没有错误,然后进行连接和运行,分析运行结果。 修改后的程序如下: #include using namespace std; int add(int x,int y); int main() { int a = 0, b = 0; int c = add(a,b); cout<<" a + b ="<

面向对象程序设计实践教学大纲

《面向对象程序设计实践》课程教学大纲 课程代码:030732038 课程英文名称:Object Oriented Programming Practice 课程总学时:12 讲课:2 实验:10 上机:0 适用专业:电子信息学科学与技术专业 大纲编写(修订)时间:2017.5 一、大纲使用说明 (一)、课程地位及教学目标 本课程是电子信息科学与技术专业本科生的一门重要的专业基础课, 是《面向对象程序设计》课程的辅助教学环节,以锻炼学生面向对象的编程能力为目的,巩固课堂所学知识点,加深对课程中所学理论知识的理解,依据《面向对象程序设计》课程教学计划指导大纲编制。本课程主要利用C++进行程序设计的思想和方法,既有面向过程和面向对象的程序设计的理论知识,又包括极强的实践应用能力的培养。本课程大纲力求结合该《面向对象程序设计》课程教学大纲的相应内容,由浅入深的指导学生了解和掌握如何利用C++程序设计语言进行程序设计,提高学生的动手能力,做到理论和实践相结合,培养学生理解,分析程序,编写,调试程序的能力,使之能把程序设计应用到今后的专业学习中。 (二)知识、能力及技能方面的基本要求 1.基本知识:学会使用通用的C++软件集成开发环境,介绍建立C++程序的基本方法,通过面对像对象理论课程各知识点针对性的专项训练,培养工程化的软件设计习惯。 2.基本理论和方法: (1)熟悉VisualC++、DevC++等软件开发环境,并掌握基本控制台程序设计方法; (2)熟悉C++新增的语言特性,如bool、const常数、特殊函数、引用、new、异常等; (3)掌握类的定义方法、掌握对象的定义和使用; (4)掌握对象的构造、析构函数的定义方法和规则,掌握this指针、静态成员、友元等; (5)掌握继承机制中基类、派生的定义方法,掌握不同权限的成员定义、了解多继承的方法, 了解复制兼容性; (6)掌握虚函数的定义,掌握积累指针指向派生类对象,并且调用虚函数的方法; (7)掌握运算符重载的设计方法,了解模板和STL技术; (8)了解Windows程序设计的基础方法。 3.基本技能:主要培养学生基于C++语言的面向对象编程技能,要求学生能够建立新的程序工程,能够使用已有类,能够编写新的类,掌握继承机制,会使用虚函数和运算符重载,能够编写简单Windows程序,能熟练使用编程软件的各种工具,会单步调试程序,能够发布程序作品等。 (三)实施说明 1.教学方法:本课程主要培养学生的动手能力,使学生在编程的训练中,验证书本上的理论知识,真正掌握面向对象程序设计的实现方法,进一步理解面向对象系统的理论,并能将面向对象程序设计思想应用到问题的求解过程中。教师在讲解过程中应深入浅出、抓住编程实践中普遍存在的问题,联系实际、结合实例,才能收到较好的效果。 2.教学手段:本课程包含2学时理论课时,建议指导教师选择在实验室授课,配合电子白板、多媒体等辅助教学系统,可以更加直观、有效的引导学生学习编程软件的使用方法,演示例子程序及典型BUG的解决办法。

面向对象程序设计基本概念

面向对象程序设计基本概念 面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。 类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。 消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。 面向对象主要特征: 封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。 继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。 多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。

c语言程序设计实践教程答案完整版

4.2练习题 一、选择题 1.D 2.B 3.A 4.B和D 5.C 6.A 7.B 二、填空题 1.//或/* */ 2.主或main 3.函数首部和函数体4.编译和连接 5.分号 5.2练习题 一、选择题 1.A 2.D 3.B 4.B 5.C 6.C 7.D 8.A 9.B 10.B 11.D 12.B 13.A或B 14.C 15.B

17.D 18.D 19.C 20.D 21.B 22.A 23.D 24.C 25.C 26.B 27.C 28.D 29.A 30.B 二、填空题 1.102,10 2.#define 宏名字符串 3.1 4.n=1 5.-4 6.a=1,b= ,c=2 7.c=A 8.n1=%d\nn2=%d 9.a+b>c&&a+c>b&&b+c>a 10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.7 12.0 13.8,4 6.2练习题 一、选择题 1.A 2.C 3.D 4.C 5.A 6.B

8.D 9.B 10.C 11.A 12.A 13.C 14.B 15.正确答案为: 二、填空题 1.10 2.y=1 x%i==0 3.屏幕中间输出一个由星号组成的菱形4.1 5.13 6.(cx=getchar())!=-1 front=cx; 7.m%n 8.4 9.*p px=&x py=&y 三、读程序,写结果 1.-1 2.3,1,-1, 3.a=16,y=60 4.x=12,y=4 5.59 7.2练习题 一、选择题 1.B 2.C 3.C 4.A 5.D 6.C 7.D

相关文档
相关文档 最新文档