当前位置:文档之家› 完面向对象程序设计期末综合练习三(程序填充)

完面向对象程序设计期末综合练习三(程序填充)

完面向对象程序设计期末综合练习三(程序填充)
完面向对象程序设计期末综合练习三(程序填充)

面向对象程序设计期末综合练习三(程序填充)

1. 斐波那契数列的第1和第2个数分别为0和1 ,从第三个数开始,每个数等于其前两个数之和。求斐波那契数列中的前20个数,要求每行输出5个数。

#include

void main() {

int f,f1,f2,i;

cout<<”斐波那契数列:\n”;

f1=0; f2=1;

cout<

for(i=3;i<=20;i++) {

f=______(1)______;

cout<

if(_____(2)______) cout<

f1=f2;

f2=____(3)_______;

}

cout<

}

(1) (2) (3)

2. 计算∑

=

+ -

10 1

1

!

)1

(

i

i

i

i

x

的值。

#include

void main()

{

double x,p1=1,p2=1,s=0;

int i,j=1;

cout<<"输入x的值:";

cin>>x;

for(i=1;i<=10;i++) {

p1*=___(1)_____;

p2*=____(2)____;

s+=j*p1/p2; //j的值为(-1)i+1

j=____(3)____;

}

cout<

}

(1) (2) (3)

3. 打印出2至99之间的所有素数(即不能被任何数整除的数)。

#include

#include

void main()

{

int i,n;

for(n=2; ___(1)___; n++) {

int temp=int(sqrt(n)); //求出n的平方根并取整

for(i=2; ___(2)___; i++)

if(n%i==0) ___(3)___;

if(i>temp) cout<

}

cout<<'\n';

}

(1) (2) (3)

4. 采用辗转相除法求出两个整数的最大公约数。

#include

void main()

{

int a,b;

cout<<"请输入两个正整数:";

cin>>a>>b;

while(a<=0 || __(1)___) {cout<<"重新输入:"; cin>>a>>b;}

while(b) {

int r;

r=a%b;

___(2)___; ___(3)___; //分别修改a和b的值

}

cout<

}

(1) (2) (3)

5. 把从键盘上输入的一个大于等于3的整数分解为质因子的乘积。如输入24时得到的输出结果为“2 2 2 3”,输入50时得到的输出结果为“2 5 5”,输入37时得到的输出结果为“37”。

#include

void main()

{

int x;

cout<<"请输入一个整数,若小于3则重输:";

do cin>>x; while(___(1)___);

int i=2;

do{

while(___(2)___) {

cout<

x/=i;

}

___(3)___;

}while(i

if(x!=1) cout<

cout<

}

(1) (2) (3)

6. 下面函数是求两个整型参数a和b的最小公倍数。

int f2(int a, int b)

{

int i=2, p=1;

do {

while(a%i==0 && ___(1)___) {

p*=i; a/=i; b/=i;

}

___(2)___;

}while(a>=i && ___(3)___);

return p*a*b;

}

(1) (2) (3)

7. 在输出屏幕上打印出一个由字符’*’组成的等腰三角形,该三角形的高为5行,从上到下每行的字符数依次为1,3,5,7,9。 #include

void main()

{

int i,j;

for(i=1;___(1)___;i++) {

for(j=1;j<=9;j++)

if(j<=5-i || ___(2)___) cout<<’’;

else ___(3)___;

cout<

}

}

(1) (2) (3)

8. 统计字符串中英文字母个数的程序。

#include

int count (char str[]);

void main(){

char s1[80];

cout <<”Enter a line:”;

cin >>s1;

cout <<”count=”<

}

int count(char str[]){

int num=0; //给统计变量赋初值

for(int i=0;str[i];i++)

if (str[i]>=’a’ && str[i]<=’z’ ||___(1)___ )

___(2)___;

___(3)___;

}

(1) (2) (3)

9. 主函数调用一个fun函数将字符串逆序。

#include

#include

___(1)___;

void main( ) {

char s[80];

cin>>s;

___(2)___;

cout<<”逆序后的字符串:”<

}

void fun(char ss[]) {

int n=strlen(ss);

for(int i=0; ___(3)____; i++) {

char c=ss[i];

ss[i]=ss[n–1–i];

ss[n–1–i]=c;

}

}

(1) (2) (3)

10. 从一个字符串中删除所有同一个给定字符后得到一个新字符串并输出。

#include

const int len=20;

void delstr(char a[],char b[],char c);

void main() {

char str1[len],str2[len];

char ch;

cout<<"输入一个字符串:";

cin>>str1;

cout<<"输入一个待删除的字符:";

cin>>ch;

delstr(str1,str2,ch);

cout<

}

void delstr(char a[],char b[],char c)

{

int j=0;

for(int i=0; ___(1)___; i++)

if(___(2)___) b[j++]=a[i];

b[j]=___(2)___;

}

(1) (2) (3)

11. 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出。

#include

const int N=8;

void main()

{

int a[N],*p,*q;

for(p=a; p

p=a;q=a+N-1;

while(p

int r=*p; *p=*q; *q=r;

___(2)___; ___(3)___;

}

for(p=a;p

cout<<*p<<' ';

cout<

}

(1) (2) (3)

12. 从键盘上输入一个正整数,然后把它转换成的二进制数的每一位存放到一维数组中,最后输出该二进制数。注意二进制数的存放是按照从低位到高位的次序进行的。

#include

void main()

{

int x;

cout<<"输入一个整数:";

cin>>x;

int a[20],k=0,r;

do {

r=x%2;

a[k++]=r;

x=___(1)___;

} while(___(2)___);

for(--k;k>=0;k--) ___(3)___;

cout<

}

(1) (2) (3)

13. 对数组a[n]按升序进行的选择排序算法

void SelectSort(int a[], ___(1)___)

{

int i,j,k;

for(i=1;i

k=i-1;

for(j=i;j

if(a[j]

int x=a[i-1]; a[i-1]=a[k]; ___(3)___;

}

}

(1) (2) (3)

14. 对数组a[n]按升序进行的插入排序算法

void InsertSort(___(1)___, int n)

{

int i,j,x;

for(i=1;i

x=a[i];

for(j=i-1;j>=0;j--) //为x顺序向前寻找合适的插入位置

if(x

else ___(3)___;

a[j+1]=x;

}

}

(1) (2) (3)

15. 对按从小到大排列的有序数组a[n]进行二分查找x的算法,若查找成功返回该元素下标,否则返回-1。

int BinarySearch(int a[],int x)

{

int low=0, high=N-1; //定义并初始化区间下界和上界变量

int mid; //定义保存中点元素下标的变量

while(low<=high) {

mid=___(1)___;

if(x==a[mid]) ___(2)___;

else if(x

else ___(3)___;

}

return -1;

}

(1) (2) (3)

16. 用插入排序方法对table指针数组中size个指针所指向的字符串进行按升序排序的算法。

void sort(char *table[], int size){

for(int i=1,___(1)___; i++){

char *p=table[i];

for(int j=i-1; j>=0 ; j--)

if(strcmp(p,table[j])<0) ___(2)___;

else break;

table[j+1]=___(3)___;

}

}

(1) (2) (3)

17. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。

void f5(NODE*& L, int table[], int n)

{

if(n<=0) {L=NULL; return;}

L=new NODE; //生成附加的头结点

int i=0;

NODE* p=L;

while(___(1)___) {

p=p->next=___(2)___;

p->data=___(3)___;

i++;

}

p->next=NULL; //把最后一个结点的指针域置空

p=L;

L=L->next; //使L指向链表的第一个带值的结点

delete p;

}

(1) (2) (3)

18. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序正好相反。

void f6(NODE*& L, int table[], int n)

{

L=NULL;

if(n<=0) return;

int i=0;

NODE* p;

while(___(1)___) {

p=new NODE;

p->data=___(2)___;

p->next=L;

___(3)___;

i++;

}

}

(1) (2) (3)

19. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法是依次显示输出以L为表头指针的链表中各结点的值。

void f7(NODE* L)

{

for(___(1)___; p!=NULL; ___(2)___)

cout<<___(3)___ <<' ';

cout<

}

(1) (2) (3)

20. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法是把以L为表头指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。

NODE* f8(NODE* L)

{

if(L==NULL) return NULL;

NODE *p=NULL, *q=L, *t;

while(q!=NULL) {

t=q;

q=___(1)___;

t->next=___(2)___;

p=t;

}

___(3)___;

}

(1) (2) (3)

21. 已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[ ]要对下标是否越界进行检查。

class ARRAY{

int *v; //指向存放数组数据的空间

int s; //数组大小

public:

ARRAY(int a[], int n);

~ ARRAY(){delete []v;}

int size(){ return s;}

int& operator[](int n);

};

___(1)___ operator[](int n) //[ ]的运算符成员函数定义

{

if(n<0 || ___(2)___) {cerr<<"下标越界!"; exit(1);}

return ___(3)___;

}

(1) (2) (3)

22. 已知一维数组类ARRAY的定义如下,构造函数的作用是把参数n的值赋给s,给v动态分配长度为n的数组空间,接着利用数组参数a初始化v所指向的数组。

class ARRAY{

int *v; //指向存放数组数据的空间

int s; //数组大小

public:

ARRAY(int a[], int n);

~ ARRAY(){delete []v;}

int size(){ return s;}

int& operator[](int n);

};

___(1)___ ARRAY(int a[], int n)

{

if(n<=0) {v=NULL;s=0;return;}

s=n;

v=___(2)___;

for(int i=0; i

}

(1) (2) (3)

23. 下面是一维数组类ARRAY的定义,ARRAY与普通一维数组区别是:(a)用()而不是[]进行下标访问,(2)下标从1而不是从0开始,

(c)要对下标是否越界进行检查。

class ARRAY{

int *v; //指向存放数组数据的空间

int s; //数组大小

public:

ARRAY(int a[], int n);

~ ARRAY(){delete []v;}

int size(){ return s;}

int& operator()(int n);

}; ___(1)___ operator()(int n)

{ // ()的运算符函数定义

if(___(2)___) {cerr<<"下标越界!"; exit(1);}

return ___(3)___;

}

(1) (2) (3)

24. 已知一个类的定义如下:

#include

class AA {

int a[10];

int n;

public:

void SetA(int aa[], int nn); //用数组aa初始化数据成员a,

//用nn初始化数据成员n

int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素

//进行从小到大排序

void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); //依次输出数组a中的前n个元素

};

该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。

int ____(1)_____

{

int x=a[0];

for(int i=1; i

if(a[i]>x) ___(2)___;

___(3)___;

}

(1) (2) (3)

25. 已知一个类的定义如下:

#include

class AA {

int a[10];

int n;

public:

void SetA(int aa[], int nn); //用数组aa初始化数据成员a,

//用nn初始化数据成员n

int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素

//进行从小到大排序

void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); //依次输出数组a中的前n个元素

};

void AA::SortA()

{

int i,j;

for(i=0; ___(1)___; i++) {

int x=a[i], k=i;

for(j=i+1; j

if(a[j]

a[k]=a[i];

___(3)___;

}

}

(1) (2) (3)

26. 已知一个类的定义如下:

#include

class AA {

int a[10];

int n;

public:

void SetA(int aa[], int nn); //用数组aa初始化数据成员a,

//用nn初始化数据成员n

int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素

//进行从小到大排序

void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); //依次输出数组a中的前n个元素

};

void ___(1)___

{

int i,j;

for(i=1; i

int x=a[i];

for(j=i-1; j>=0; j--)

if(x

else ___(3)___;

a[j+1]=x;

}

}

(1) (2) (3)

27. 已知一个类的定义如下:

#include

class AA {

int a[10];

int n;

public:

void SetA(int aa[], int nn); //用数组aa初始化数据成员a,

//用nn初始化数据成员n

int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素

//进行从小到大排序

void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); //依次输出数组a中的前n个元素

//最后输出一个换行

};

使用该类的主函数如下:

void main()

{

int a[10]={23,78,46,55,62,76,90,25,38,42};

AA x;

___(1)___;

int m=___(2)___;

___(3)___;

cout<

}

该程序运行结果为:

23 78 46 55 62 76

78

(1) (2) (3)

28. 已知一个类的定义如下:

#include

class AA {

int a[10];

int n;

public:

void SetA(int aa[], int nn); //用数组aa初始化数据成员a, //用nn初始化数据成员n

int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素

//进行从小到大排序

void PrintA(); //依次输出数组a中的前n个元素,

//最后输出一个换行

};

使用该类的主函数如下:

void main()

{

int a[10]={23,78,46,55,62,76,90,25,38,42};

___(1)___;

x.SetA(a,8);

int ___(2)___;

___(3)___;

x.PrintA();

cout<

}

该程序运行结果为:

23 25 46 55 62 76 78 90

90

(1) (2) (3)

29. 已知一个利用数组实现栈的类定义如下:

const int ARRAY_SIZE=10;

class Stack {

public:

void Init() {top=-1;} //初始化栈为空

void Push(int newElem); //向栈中压入一个元素int Pop(); //从栈顶弹出一个元素

bool Empty() { //判栈空

if(top==-1) return true;else return false;} int Depth() {return top+1;} //返回栈的深度

void Print();

//按照后进先出原则依次输出栈中每个元素,直到栈空为止private:

int elem[ARRAY_SIZE]; //用于保存栈元素的数组

int top; //指明栈顶元素位置的指针

};

void Stack::Push(int newElem) {

if(___(1)___) {

cout<<"栈满!"<

exit(1); //中止运行

}

___(2)___;

elem[top]=___(3)___;

}

(1) (2) (3)

30. 已知一个利用数组实现栈的类定义如下:

const int ARRAY_SIZE=10;

class Stack {

public:

void Init() {top=-1;} //初始化栈为空

void Push(int newElem); //向栈中压入一个元素

int Pop(); //从栈顶弹出一个元素

bool Empty() { //判栈空

if(top==-1) return true;else return false;} int Depth() {return top+1;} //返回栈的深度

void Print();

//按照后进先出原则依次输出栈中每个元素,直到栈空为止private:

int elem[ARRAY_SIZE]; //用于保存堆栈元素的数组

int top; //指明栈顶元素位置的指针

};

该类的Pop和Print函数的实现分别如下:

___(1)___ {

if(top==-1) {

cout<<"栈空!"<

exit(1); //中止运行

}

return ___(2)___;

}

void Stack::Print() {

while(!Empty())

cout<<___(3)___ <<' ';

}

(1) (2) (3)

31.class A {

int a;

public:

A() {a=0;}

___(1)___{} //定义构造函数,用参数aa初始化数据成员a

};

main() {

___(2)___; //定义类A的指针对象p

___(3)__; //用p指向动态对象并初始化为整数5

}

(1) (2) (3)

32.class A {

char *a;

public:

___(1)___ //定义无参构造函数,使a的值为空

A(char *aa) {

a=___(2)___;

strcpy(a,aa); //用aa所指字符串初始化a所指向的动态存储空间

}

___(3)___ //定义析构函数,删除a所指向的动态存储空间

};

(1) (2) (3)

33.class A {

int a,b;

public:

A(int aa=0, int bb=0) ___(1)___ {} //分别用aa和bb对应初始化a和b };

main() {

___(2)___ ; //定义类A的对象x并用5初始化,同时定义y并用x初始化 ___(3)___ ; //定义p指针,使之指向对象x

}

(1) (2) (3)

34.class A {

int a,b;

public:

___(1)___ //定义构造函数,使参数aa和bb的默认值为0,

//在函数体中用aa初始化a,用bb初始化b

};

main() {

A *p1, *p2;

___(2)___ ; //调用无参构造函数生成由p1指向的动态对象

___(3)___ ; //调用带参构造函数生成由p2指向的动态对象,

//使a和b成员分别被初始化为4和5

}

(1) (2) (3)

35. #include

#include

class A {

int *a; int n; int MaxLen;

public:

A(): a(0), n(0), MaxLen(0) {}

A(int *aa, int nn, int MM) {

n=nn;

MaxLen=MM;

if(n>MaxLen) exit(1);

___(1)___; //由a指向长度为MaxLen的动态数组

for(int i=0; i

}

~A() {delete []a;}

int GetValue(int i) ___(2)___ //函数体返回a[i]的值

};

void main()

{

int b[10]={1,2,3,4,5,6,7,8,9,10};

A r(b,10,10);

int i,s=0;

for(i=0; i<10; i++); ___(3)___ //把r对象的a数据成员中的每个

//元素值依次累加到s中

cout<<"s="<

}

(1) (2) (3)

36. #include

#include

class A {

int *a; int n; int MaxLen;

public:

A(): a(0), n(0), MaxLen(0) {}

A(int *aa, int nn, int MM) {

n=nn;

MaxLen=MM;

if(n>MaxLen) exit(1);

a=new int[MaxLen];

___(1)___; //以i为循环变量把aa数组中每个元素值

//传送给a数组的对应元素中

}

~A();

int GetValue(int i) {return a[i];} //函数体返回a[i]的值};

___(2)___ //析构函数的类外定义

void main()

{

int b[10]={1,2,3,4,5,6,7,8,9,10};

A r(b,10,10);

int i,s=0;

___(3)___ ; //以i为循环变量,把r对象的a数据成员中的

//每个元素值依次累加到s中

cout<<"s="<

}

(1) (2) (3)

37. 一种类定义如下:

class Goods

{

private:

char gd_name[20]; //商品名称

int weight; //商品重量

static int totalweight; //同类商品总重量

public:

Goods (char*str,int w){ //构造函数

strcpy(gd_name,str);

weight=w;

totalweight+=weight;

}

~ Goods (){totalweight -= weight;}

char* GetN(){___(1)___;} //返回商品名称

int GetW(){return weight;}

___(2)___ GetTotal_Weight() { //定义静态成员函数返回总重量

___(3)___;

}

}

(1) (2) (3)

38.

class Point

{

private:

int x, y;

public:

Point(){x=y=0;}

Point(int x0,int y0) {x=x0;y=y0;}

int GetX() { return x; }

int GetY() { return y; }

void Print(){cout<<"Point("<

___(1)___; //友元函数声明

___(2)___; //友元函数声明

};

Point operator+(Point& pt,int dd)

//加号操作符重载函数,实现Point类对象与整数加法

{

Point temp=pt;

temp.x+=dd;

temp.y+=dd;

return temp;

}

Point operator+(Point& pt1,Point& pt2)

//加号操作符重载函数,实现两个Point类对象的加法

{

Point temp=pt1;

temp.x+=pt2.x;

___(3)___;

return temp;

}

(1) (2) (3)

39. 在下面一段类定义中, Derived类是由直接基类Base 1和Base 2所派生的,Derived类包含有两个间接基类BaseBase,在初始化函数Init中,需要把x1和x2的值分别赋给属于基类Base1的x成员和属于基类Base2的x成员。

class BaseBase {

protected:

int x;

public:

BaseBase(){ x = 1;}

};

class Base1: public BaseBase {

public:

Base1(){}

};

class Base2: public BaseBase {

public:

Base2(){}

};

class Derived: ___(1)___

{

public:

Derived() {}

void Init(int x1, int x2) {

___(2)___; ___(3)___;

}

void output() {cout<

};

(1) (2) (3)

40. 在下面一段类定义中, Derived类公有继承了基类Base。需要填充的函数由注释内容给出了功能。

class Base

{

private:

int mem1,mem2; //基类的数据成员

public:

Base(int m1,int m2) {

mem1=m1; mem2=m2;

}

void output(){cout<

//...

};

class Derived: public Base

{

private:

int mem3; //派生类本身的数据成员

public:

//构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3

Derived(int m1,int m2, int m3);

//输出mem1,mem2和mem3数据成员的值

void output(){

___(1)___; cout<

}

//...

};

Derived::Derived(int m1,int m2, int m3): ___(2)___ {___(3)___;}

(1) (2) (3)

41. 在下面一段类的定义中,需要填充的函数由注释内容给出了功能。

class Point //定义坐标点类

{

public:

int x,y; //点的横坐标和纵坐标

Point(){x=0;y=0;}

Point(int x0,int y0) {x=x0; y=y0;}

int X(){return x;}

int Y(){return y;}

void PrintP(){cout<<"Point:("<

};

class Line: public Point //利用坐标点类定义直线类

{

private:

class Point pt1,pt2; //直线的两个端点

public:

Line(Point pts, Point pte); //构造函数,分别用参数初始化对应的端点

double Dx(){return pt2.x-pt1.x;}

double Dy(){return pt2.y-pt1.y;}

double Length(){ //计算直线的长度

return sqrt(___(1)___);

};

void PrintL(); //输出直线的两个端点和直线长度

};

Line::Line(Point pts, Point pte) ___(2)___

void Line::PrintL()

{

cout<<"1st ";

pt1.PrintP();

cout<<"2nd ";

pt2.PrintP();

cout<<"The Length of Line: "<<___(3)___ <

}

(1) (2) (3)

42. 在下面一段类的定义中,自行车类的虚基类为车辆类,机动车类的虚基类也为车辆类,摩托车类的基类为自行车类和机动车类,类之间均为公有继承。

class vehicle //车辆类

{

private:

int MaxSpeed; //最大车速

int Weight; //车重

public:

vehicle(){MaxSpeed=0; Weight=0;};

virtual void Run() {cout<<"A vehicle is running!"<

};

class bicycle : ___(1)___ //自行车类

{

private:

int Height; //车高

public:

bicycle(){};

void Run() {cout<<"A bicycle is running!"<

};

class motorcar : ___(2)___ //机动车类

{

private:

int SeatNum; //乘人数

public:

motorcar(){};

void Run() {cout << "A motorcar is running!" << endl; }

};

class motorcycle: ___(3)___ //摩托车类

{

public:

motorcycle (){};

void Run() {cout<<"A motorcycle is running!"<

};

(1) (2) (3)

程序填充参考解答

1. (1) f1+f2 (2) i%5==0 (3) f

2. (1) x (2) i (3) -j

3. (1) n<=99 (2) i<=temp (3) break

4. (1) b<=0 (2) a=b (3) b=r

5. (1) x<3 (或x<=2) (2) x%i==0 (3) i++

6. (1) b%i==0 (2) i++ (或++i) (3) b>=i

7. (1) i<=5 (2) j>=5+I (3) cout<<’*’

8. (1) str[i]>=’A ’&& str[i]<=’Z’

(2) num++ (3) return num

9. (1) void fun(char ss[]) (2) fun(s) (3) i

10. (1) a[i] (或a[i]!=’\0’) (2) a[i]!=c (3) '\0'

11. (1) cin>>*p (2) p++ (或++p) (3) q-- (或--q)

12. (1) x/2 (2) x!=0 (3) cout<

13. (1) int n (2) k=j (3) a[k]=x

14. (1) int a[] (或int* a)

(2) a[j+1]=a[j] (3) break

15. (1) (low+high)/2 (2) return mid (3) low=mid+1

16. (1) i

17. (1) i

18. (1) i

19. (1) NODE* p=L (2) p=p->next (3) p->data

20. (1) q->next (2) p (3) return p

21. (1) int& ARRAY:: (2) n>=s (3) v[n] (或*(v+n))

22. (1) ARRAY:: (2) new int[n] (3) v[i]=a[i]

23. (1) int& ARRAY:: (2) n<1 || n>s (3) v[n-1] (或*(v+n-1))

24. (1) AA::MaxA() (2) x=a[i] (3) return x

25. (1) i

26. (1) AA::InsertA() (2) a[j+1]=a[j] (3) break

27. (1) x.SetA(a,6) (2) x.MaxA() (3) x.PrintA()

28. (1) AA x (2) m=x.MaxA() (3) x.SortA()

29. (1) top==ARRAY_SIZE-1 (2) top++(或++top) (3) newElem

30. (1) int Stack::Pop() (2) elem[top--] (3) Pop()

31. 答案:(1) A(int aa):a(aa)

(2) A *p

(3) p=new A(5)

32. 答案:(1) A() {a=0;} 或A():a(0){} 注:数据0可用NULL代替

(2) new char[strlen(aa)+1]

(3) ~A() {delete []a;}

33. 答案:(1) :a(aa),b(bb)

(2) A x(5),y(x) 注:x(5)与x=5等效,y(x) 与y=x等效

(3) A *p=&x

34. 答案:(1) A(int aa=0, int bb=0){a=aa; b=bb;}

(2) p1=new A

(3) p2= new A(4,5)

35. 答案:(1) a=new int[MaxLen]

(b) {return a[i];}

(c) s+=r.GetValue(i)

36. 答案:(1) for(int i=0; i

(2) A::~A() {delete []a;}

(3) for(i=0; i<10; i++) s+=r.GetValue(i)

37. (1) return gd_name (2) static int (3) return totalweight

38. (1) friend Point operator+(Point& pt,int dd)

(2) friend Point operator+(Point& pt1,Point& pt2)

(3) temp.y+=pt2.y

39. (1) public Base1, public Base2

(2) Base1::x=x1

(3) Base2::x=x2

40. (1) Base::output() (2) Base(m1,m2) (3) mem3=m3

41. (1) Dx()*Dx()+Dy()*Dy()

(2) {pt1=pts;pt2=pte;} (或 :pt1(pts),pt2(pte){})

(3) Length()

42. (1) virtual public vehicle

(2) virtual public vehicle

(3) public bicycle, public motorcar

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 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。

第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(){

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

面向对象程序设计实验指导书 实验一、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.“=”赋值运算符

《面向对象程序设计》答案

实验一熟悉VC++IDE开发环境 一、实验目的 1、熟悉VC++6.0集成开发环境,熟练掌握VC++6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。 2、掌握如何编辑、编译、连接和运行一个C++程序。 3、通过运行简单的C++程序,初步了解C++源程序的结构和特点。 二、实验要求 1、分析下列程序运行的结果。 程序一: #include int add(int x,int y=8); void main() { int x=4; cout< void main() { int *p,i; i=5; p=&i; i=*p+10; cout<<"i="< void main(void) { int i=10; int &r=i; r++; cout<<"i="< void func(); int n=1; void main() { static int a; int b= -9; cout <<"a:"<

《面向对象程序设计》高起专习题三答案

《面向对象程序设计》高起专习题三答案 一、单项选择题(本大题共25小题,每小题2分,共50分) 1、用“>>”运算符从键盘输入多于一个数据时,各数据之间应使用( D )符号作为分隔符。 A、空格或逗号 B、逗号或回车 C、逗号或分号 D、空格或回车 2、C++中声明常量的关键字是( A )。 A、const B、extern C、public D、enum 3、以下叙述中正确的是( B ) A、使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值 B、使用const定义的常量名有类型之分,其值在程序运行时是不可改变的 C、在程序中使用内置函数使程序的可读性变差 D、在定义函数时可以在形参表的任何位置给出缺省形参值 4、下列的符号常变量定义中,错误的定义是( C )。 A、const M=10; B、const int M=20; C、const char ch; D、const bool mark=true; 5、函数原型语句正确的是( B )。 A、int Function(void a) B、void Function (int); C、int Function(a); D、void int(double a); 6、在关键字private后面定义的成员为类的( A )成员。 A、私有 B、公用 C、保护 D、任何 7、在一个类的定义中,包含有( C )成员的定义。 A、数据 B、函数 C、数据和函数 D、数据或函数 8、在类作用域中能够通过直接使用该类的( D )成员名进行访问。 A、私有 B、公用 C、保护 D、任何 9、在关键字public后面定义的成员为类的( B )成员。 A、私有 B、公用 C、保护 D、任何 10、类中定义的成员默认为( B )访问属性。 A、public B、private C、protected D、friend 11、每个类( C )构造函数。

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

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

实验一 Java开发环境的安装与配置 一、实验目的: 1. 掌握JDK、Eclipse的安装步骤。 2. 理解环境变量PATH, CLASSPATH的作用,以及Eclipse的配置。 3. 熟悉Eclipse的编辑、编译与调试环境,编写简单的Application程序 编译执行并完成调试。 二、实验内容: 熟悉JDK的安装和配置,学习如何编写并运行简单的Application程序 (能输出一条简单的问候信息); 三、实验要求: 1. 能正确地安装JDK 2. 熟悉环境变量PATH, CLASSPATH设置方法,熟悉编辑环境 3. 调试程序、编译,运行后得到正确的结果 四、实验步骤: 1.从https://www.doczj.com/doc/f512661313.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. 编译运行程序,观察输出结果是否正确。

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

学号:姓名: 第三章面向对象程序设计作业 一、判断题 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;}

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-4 #include using namespace std; Add(int a,int b); int main() { int x,y,sum; cout<<"please input x and y:"; cin>>x>>y; sum = add(x,y); cout < using namespace std; int main() {

int *p,*init; int countp=0; int countn=0; p = new int[20]; init = p; for(int i=0;i<20;i++) { cin>>*p; p++; } p = p-20; for( i=0;i<20;i++) { if(*p>0) countp++; if(*p<0) countn++; cout<<*p<<" "; p++; } cout<<"正数有:"< //#include using namespace std; void checkagescore(string name,int age) { if (name == "exit") throw name; if(age<0||age>50) throw age;

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

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

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

面向对象程序设计完整版

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的基本原理是用问题领域的模型来模拟大千世界,从而设计出尽可能直接、自然地表示问题求解方法的软件, 这样的软件由对象组成, 而对象则是完整反映客观世界事物具有不可分割的静态属性(”数据结构” )与动态行为(”方法” )的。而且它们是既有联系又

面向对象程序设计笔记

undeclared identifier “未声明的标识符” (1) 十进制整数:在一个整型常量后面加一个字母 l 或 L,则认为是 long int 型常量? (2) 八进制整数?在常数的开头加一个数字 0,就表示这是以八进制数形 式表示的常数? (3)十六进制整数?在常数的开头加一个数字0和一个英文字母X(或x), 就表示这是以十六进制数形式表示的常数? 2. 浮点数的表示方法 如果在实数的数字之后加字母 F 或f,表示此数为单精度浮点数,如1234F,-43f,占 4 个字节?如果加字母 L 或 l,表示此数为长双精度数(long double), 在Visual C++ 6.0 中占 8 个字节. (2) 指数形式(即浮点形式):用字母 e 表示其后的数是以 10 为底的幂,如 e12 表示 1012? 1.普通的字符常量:用单撇号括起来的一个字符就是字符型常量如′a′,′ #′,′%′,′D′都是合法的字符常量,在内存中占一个字节?“cout<<′\n′; ”将输出一个换行,其作用与“cout<

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

习题一 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 ="<

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

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

面向对象程序设计期末复习分析

一、单项选择题( 在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。每小题1 分,共20 分) 3.下列不属于面向对象技术的基本特征的是(B)。 A. 封装性 B. 模块性 C. 多态性 D. 继承性 4. 面向对象程序设计将描述事物的数据与(C ) 封装在一起,作为一个相互依存、不可分割的整体来处理。 A. 信息 B. 数据隐藏 C. 对数据的操作 D. 数据抽象 5. 关于面向对象方法的优点,下列不正确的叙述是(C )。 A. 与人类习惯的思维方法比较一致 B. 可重用性好 C. 以数据操作为中心 D.可维护性好 8. 下列不属于类的成员函数的是( C )。 A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数 9. 继承机制的作用是( C )。 A. 信息隐藏 B. 数据封装 C. 派生新类 D. 数据抽象 14. (D )是从用户使用系统的角度描述系统功能的图形表达方法。 A. 类图 B. 对象图 C. 序列图 D. 用例图 15. (C ) 是表达系统类及其相互联系的图示,它是面向对象设计的核心,建立状态图、协作 图和其他图的基础。 A.对象图 B. 组件图 C. 类图 D. 配置图 16.(D )描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这些对 象之间传递消息的时间顺序。 A.对象图 B. 协作图 C. 状态图 D. 序列图 17.(D )就是用于表示构成分布式系统的节点集和节点之间的联系的图示,它可以表示 系统中软件和硬件的物理架构。 A. 组件图 B. 协作图 C. 状态图 D. 配置图 18. 在用UML进行数据库的分析与设计过程中,( B ) 就是进行数据库的需求分析,使用用 例图、类图、顺序图、活动图等建立业务模型。 A. 逻辑数据模型设计 B 业务Use Case模型设计 C. 物理数据模型设计 D. 物理实现设计 19. 使用UML进行关系数据库的(B )时,需要设计出表达持久数据的实体类及其联系,并把它们映射成为关系数据库表(Table)、视图(View)等。 A. 业务Use Case模型设计 B. 逻辑数据模型设计 C. 物理数据模型设计 C. 物理实现设计 20. UML的动态建模表示包含(C )种图。 A. 9 B. 5 C. 4 D. 2 二、填空题( 每空1 分,共20 分) 1. 面向对象开发方法一改过去传统的以_功能分析,面向过程_为基础的_对象_的结 构化分析与设计方法,它模拟人们理解和处理客观世界的方式来分析问题,把系统视为

实验 3 面向对象程序设计

实验 3 面向对象程序设计(一) 1. 定义一个类MyValue,其中包括:用Value来保存一属性值;方法setValue设置Value,方法getValue获取Value,定义一个类UseValue,在该类的Main方法里面完成如下功能:创建一个MyValue类的对象MyValue;为MyValue对象中的Value赋值10;使用getValue方法获得MyValue对象中的数据并在屏幕上输出。 【参考程序】 class MyValue{ private int value; public void setvalue(int x ){ value=x; } public int getValue(){ return value; } } public class UseValue{ public static void main(String args[]){ MyValue MyV=new MyValue(); MyV.setvalue(10); System.out.println(MyV.getValue()); } } 2. 编写Java代码实现一个计数器类Computer,其中包括: 用CountValue来保存计数器的当前值。 方法Computer(int a)是构造方法并给CountValue赋初值。 方法increment()计数器加一 方法decrement()计数器减一 方法reset()计数器清零 使用计数器类创建一对象,该计数器对象当前值为10,调用三次increment(),输出计数器当前值,调用一次decrement(),输出计数器当前值,调用reset(), 输出计数器当前值. public class Computer{ public int CountValue; Computer (int a){ CountValue=a; } public void increment (){ CountValue++;

相关主题
文本预览
相关文档 最新文档