数学院08092C++试题AB卷08级答案.docx

上传人:b****0 文档编号:10075267 上传时间:2023-05-23 格式:DOCX 页数:13 大小:19.65KB
下载 相关 举报
数学院08092C++试题AB卷08级答案.docx_第1页
第1页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第2页
第2页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第3页
第3页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第4页
第4页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第5页
第5页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第6页
第6页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第7页
第7页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第8页
第8页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第9页
第9页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第10页
第10页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第11页
第11页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第12页
第12页 / 共13页
数学院08092C++试题AB卷08级答案.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数学院08092C++试题AB卷08级答案.docx

《数学院08092C++试题AB卷08级答案.docx》由会员分享,可在线阅读,更多相关《数学院08092C++试题AB卷08级答案.docx(13页珍藏版)》请在冰点文库上搜索。

数学院08092C++试题AB卷08级答案.docx

数学院08092C++试题AB卷08级答案

兰州大学2008~2009学年第二学期

期末考试试卷(A卷)

课程名称:

C++任课教师:

董国雄

学院:

数学与统计学院专业:

隆基班、基地班年级:

2008

一、简答(50分)

1、函数可从哪些途径获得其处理的数据?

答:

函数参数、全局变量、外部文件等。

2、指针和引用作为函数参数的目的是什么?

答:

避免大对象的复制、修改实参的值。

3、使用指针时,对其哪两个方面应有清楚的界定?

判断一个指针是否指向了一个合法对象的原则是什么?

答:

指针值(对象地址),指针类型(指向的对象类型)。

是否为null。

4、一个程序加载到内存后,基本的内存影像有哪几部分,各部分用途是什么?

答:

有四个部分,分别是:

代码段、数据段、栈、堆。

代码段为源程序编译后的机器指令;数据段为程序中的全局或具永久生命期的数据;栈为函数调用使用的可变大小内存区;堆为程序中动态分配内存使用。

5、什么是函数重载,举出一个函数重载机制有效发挥作用例子。

答:

函数重载即用相同的函数名、不同的参数列表定义多个不同的函数,调用时这些函数时,由编译器根据参数列表确定实际调用的函数。

6、面向对象的编程语言和非面向对象的编程语言的根本区别是什么?

答:

面向对象的编程语言提供了定义抽象数据的能力。

7、解释等式“程序=对象+消息”。

答:

在面向对象程序设计当中,将数据和对其操作的方法封装在类中,程序通过实例化类得到对象,对象之间彼此调用方法实现程序功能,彼此调用方法也称为彼此发送消息。

8、构造函数的作用是什么?

构造函数中有几个特别命名了的构造函数,各是什么?

答:

创建对象时,进行对象初始化。

缺省构造函数、拷贝构造函数、转换构造函数。

9、简述类的多态机制,其基础是什么?

答:

向不同对象发送同一消息,不同对象会产生不同行为。

首先,必须创建一个类的继承家族;其次,在不同层中定义同名虚函数;再次,用指向同一祖先类的指针或引用指向或引用不同层次类的对象,用这些指针或引用给对象发送同一消息(调用同名函数),即可实现多态行为。

10、文本文件和二进制文件存储信息的区别是什么?

答:

文本文件中保存字符的编码,二进制文件中保存数据的内存映像。

二、函数编写(10分)

写一函数,可以处理任意长度的一维整数数组,此函数将数组中的元素按原存放顺序相反的方向存放。

解:

intArrayReverse(int*array,intn)

{intl,r,temp;

for(l=0,r=n-1;l

{

temp=*(array+l);

*(array+l)=*(array+r);

*(array+r)=temp;

}

}

三、程序设计(10分)

写一程序,在屏幕上输出所有的水仙花数。

水仙花数即三位整数中各位数字的立方和等于整数本身的数。

#include

usingnamespacestd;

voidmain()

{

for(inti=1;i<=9;i++)

for(intj=0;j<=9;j++)

for(intk=0;k<=9;k++)

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

cout<

cout<

}

四、设计类(15分)

设计一个复数类,重载“+”、“*”、“<<”运算符。

写一简单程序,演示你的复数类,调用所有你实现的方法。

解:

程序源文件:

Complex.h、Complex.cpp、TestComplex.cpp

//Complex.h

#ifndefCOMPLEX_H

#defineCOMPLEX_H

#include

usingnamespacestd;

classComplex

{

private:

doublereal;

doubleimag;

public:

Complex(){real=0,imag=0;}

Complex(doubler,doublei){real=r,imag=i;};

~Complex(){};

Complexoperator+(Complexc);

Complexoperator*(Complexc);

friendostream&operator<<(ostream&os,Complex&c);

};

#endif

//Complex.cpp

#include“Complex.h”

ComplexComplex:

:

operator+(Complexc)

{

Complextemp;

temp.real=real+c.real;

temp.imag=imag+c.imag;

returntemp;

}

ComplexComplex:

:

operator*(Complexc)

{

returnComplex(real*c.real-imag*c.imag,

real*c.imag+imag*c.real);

}

ostream&operator<<(ostream&os,Complex&c)

{

..os<<'('<

..returnos;

}

//TestComplex.h

#include“Complex.h”

voidmain()

{

Complexa(1,2),b(1,-2),c,d;

c=a+b;

d=a*b;

cout<<“a=”<

cout<<“a+b=”<

cout<<“a*b=”<

}

五、综合(15分)

1、设计一个长度在声明时确定的整数向量类,至少实现其Copy构造函数、析构函数,重载赋值运算符、加法运算符、内积运算符、插入运算符。

2、写一程序,演示你的类,调用你的类中的所有方法。

解:

(用模板类实现,可以处理整数),程序文件Vector.h、Vector.cpp、TestVector.cpp。

//Vector.h

#include

usingnamespacestd;

template

classVector

{

private:

intm;

int*p;

public:

Vector(intd)

{

m=d;

p=Tint[m];

}

Vector(constVector&v)

{

m=v.m;

p=newT[m];

for(intk=0;k

}

virtual~Vector()

{delete[]p;}

voidSetValue(T*v,intn)

{

for(intk=0;k

}

Vector&operator=(constVector&v)

{

for(intk=0;k

return*this;

}

friendVectoroperator+(Vectora,Vectorb);

friendToperator*(Vectora,Vectorb);

friendostream&operator<<(ostream&os,Vector&v);

};

//Vector.cpp

template

Vectoroperator+(Vectora,Vectorb)

{

Vectortmp(a.m);

for(intk=0;k

returntmp;

}

template

Toperator*(Vectora,Vectorb)

{

Ttmp=0;

for(intk=0;k

returntmp;

}

template

ostream&operator<<(ostream&os,Vector&v)

{

cout<<“(“;

for(intk=0;k

cout<<“)”;

}

//TestVector.cpp

#include“Vector.h”

voidmain()

{

Vectora(10),b(10),c(10);

intt[10],i;

for(i=0;i<10;i++)t[i]=i;

a.SetValue(t,10);

for(i=0;i<10;i++)t[i]=i*i;

b.SetValue(t,10);

..c=a+b;

cout<<“a=”<

cout<<“b=”<

cout<<“a+b=”<

cout<<“a*b=”<

}

兰州大学2008~2009学年第二学期

期末考试试卷(B卷)

课程名称:

C++任课教师:

董国雄

学院:

数学与统计学院专业:

隆基班、基地班年级:

2008

一、简答(50分)

1、函数可从哪些途径获得其处理的数据?

答:

函数参数、全局变量、外部文件等。

2、参数的传递方式有地址传递和值传递,C++具体实现方式有那些?

答:

变量传递、指针传递,属于值传递;引用传递,属于地址传递。

3、使用指针时,对其哪两个方面应有清楚的界定?

判断一个指针是否指向了一个合法对象的原则是什么?

答:

指针类型,即指针指向的对象的类型,指针值,即地址。

是否为空指针。

4、说明类和对象的关系,类封装了哪两类成分?

答:

类是具有共同特性和行为的对象的抽象,对象是类的实例。

封装了特性和行为两类成分。

5、C++的输入输出是通过什么进行的?

有什么特点?

答:

通过输入输出流类的对象进行,类型安全性和可扩展性。

6、面向对象的编程语言和非面向对象的编程语言的根本区别是什么?

答:

OOP语言提供了创建抽象数据类型能力的类和对象机制。

7、类的普通成员函数中的this指针的含义是什么?

答:

指向调用当前成员函数的对象。

8、析构函数的作用什么?

什么时候需要定义析构函数?

答:

在对象销毁时执行最后的清理工作。

如果对象内部动态申请了内存、打开了文件等外部资源,则需要定义析构函数进行清理。

9、类的静态成员和普通成员的区别是什么?

答:

静态成员为类的所有对象共享,生命期不依赖与对象的创建与否,静态成员函数无this指针;普通数据成员只有创建对象才能获得其生命期,每个对象有自己的数据成员,普通成员函数有this指针,只能通过对象才可以调用。

10、请讲述文件输入输出的操作步骤和重要注意事项。

答:

首先通过创建文件流对象打开文件,然后进行文件读写,最后通过关闭文件流对象关闭文件。

判断文件打开是否成功。

二、函数编写(10分)

写一函数,可以处理任意长度的一维整数数组,此函数返回数组中所有元素的和。

解:

intArraySum(int*array,intn)

{intk=0,sum=0;

for(k=0;k

returnsum;

}

三、程序设计(10分)

写一程序,在屏幕上输出1000以内的所有可被11整除的数,统计这些数的个数并输出。

解:

#include

usingnamespacestd;

voidmain

{inti,count=0;

for(i=1;i

if(i%11==0){cout<

cout<

}

四、设计类(15分)

假定实际问题中需要计算几何形体(如:

圆、三角形、球、圆锥等等)的(表)面积和体积。

请用抽象基本类设计一个满足此需求的根类,并派生一个关于圆的派生类。

classShape

{

public:

virtualfloatArea()=0;

virtualfloatVolume()=0;

};

classCircle:

publicShape

{

private:

flaotRadius;

public:

Circle(flaotr){Radius=r;}

virtualfloatArea()

{return3.1415926*Radius*Radius;}

virtualfloatVolume()

{return0;}

};

五、综合(15分)

实现一个学生类Student类,对学号、姓名、三门课的成绩进行管理。

(1)类应能够单独设置和获取三门课的成绩;

(2)可以计算平均成绩;(3)重载插入符以便进行输出;(4)写一段代码测试你的类,其中要用到动态内存申请分配。

解:

#include

usingnamespacestd;

classStudent

{private:

intm_No;stringm_Name;

floatm_English;floatm_Analysis;floatm_Algebra;

public:

voidSetEnglishScore(floataScore){m_English=aScore;}

voidSetAnalysisScore(floataScore){m_Analysis=aScore;}

voidSetAlgebraScore(floataScore){m_Algebra=aScore;}

floatGetEnglishScore()const{returnm_English;}

floatGetAnalysisScore()const{returnm_Analysis;}

floatGetAlgebraScore()const{returnm_Algebra;}

floatAverageScore()

{return(m_English+m_Analysis+m_Algebra)/3.0;}

public:

Student(intaNo,stringaName)

{m_No=aNo;m_Name=aName;}

Student(intaNo,stringaName,floataEnglish,floataAnalysis=0,floataAlgebra=0):

m_No(aNo),m_Name(aName)

{m_English=aEnglish;m_Analysis=aAnalysis;m_Algebra=aAnalysis;}

friendostream&operator<<(ostream&out,Student&s)

};

ostream&operator<<(ostream&out,Student&s)

{out<<'(';

cout<

<

cout<<')';}

voidClassStudentDemoTwo()

{Studentsa;Studentsb(10,"abcde");Studentsc(20,"xyz",95);

cout<

cout<<"newaObject"<

Student*sp=newStudent(111,"new",90,95,100);

cout<<*sp<

deletesp;

cout<<"newedObjectisdeleted"<

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2