数学院07081C++试题AB卷06级答案.docx
- 文档编号:24219278
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:10
- 大小:18.73KB
数学院07081C++试题AB卷06级答案.docx
《数学院07081C++试题AB卷06级答案.docx》由会员分享,可在线阅读,更多相关《数学院07081C++试题AB卷06级答案.docx(10页珍藏版)》请在冰豆网上搜索。
数学院07081C++试题AB卷06级答案
兰州大学2007~2008学年第一学期
期末考试试卷(A卷)
课程名称:
C++任课教师:
董国雄
学院:
数学与统计学院专业:
隆基班、基地班年级:
2006
姓名:
校园卡号:
题号
一
二
三
四
五
六
七
八
总分
分数
40
15
15
15
15
100
阅卷教师
一、简答(40分)
1、请讲述文件输入输出的操作步骤和重要注意事项?
答:
包含fstream头文件,声明相应的流对象,并与磁盘文件关联,进行输入输出操作,关闭文件。
特别注意文件打开放式及文件关闭。
2、解释如下公式“程序=数据结构+算法”、“程序=对象+消息”。
答:
在结构化程序设计中,数据和算法彼此分离,程序中定义需处理的数据结构,用单独的函数对数据结构中的数据进行处理。
在面向对象程序设计当中,将数据和对其操作的方法封装在类当中,程序通过实例化类得到对象,对象之间彼此调用方法完成业务处理,彼此调用方法也称为彼此发送消息。
3、C++的输入输出是通过什么进行的?
有什么特点?
答:
在C++通过输入输出流的对象进行输入输出。
灵活性强、安全性高、可扩展。
对象可重载输入输出运算符,实现特定对象与已有的输入输出完全相同的形式进行输入输出。
4、一个程序加载的内存后,基本的内存影像为哪些部分,各部分用途是什么?
答:
有四个部分,分别是:
代码段、数据段、栈、堆。
代码段为源程序编译后的机器指令;数据段位程序中的全局或具永久生命期的数据;栈为函数调用使用的可变大小内存区;堆为程序中动态分配内存使用。
5、参数的传递方式有地址传递和值传递,C++具体实现方式是怎样的,各有什么特点?
答:
普通的参数传递和指针参数传递是地址传递,引用参数传递为地址传递。
值传递仅将参数值复制到函数参数中,对其操作不会影响实际参数;指针传递复制对象或变量的地址给函数参数,函数内部可通过该地址改变实际参数的值;引用传递传递对象地址,在函数内部对参数的修改实际上是对实参的修改。
6、指针和引用作为函数参数的目的是什么?
答:
在函数内部修改实际参数的值,避免函数参数在调用函数时的复制,节省空间。
7、简述类的多态机制,其基础是什么?
答:
通过基类的指针和引用指向派生类对象时,方法随实际对象的类型执行相应的版本。
类层次体系,虚函数。
8、以你的实习环境为例,编制一个程序,需要经过哪些步骤?
答:
实习环境为VS6.0。
建立一个工作空间,在其中建立一个项目。
在项目中编制源程序,经编译、连接得到一个可执行程序。
二、(15分)
写一函数,此函数返回一个整数数组中所有元素的平均值。
要求用指针传递参数,可以处理任意长度的数组。
解:
intArrayAverage(int*array,intn)
{intavg=0,k;
for(k=0;k returnavg/n;} 三、(15分) 写一递归函数,求xn。 其中n为不小于0的整数。 解: floatPowerXofN(floatx,intn) {if(n==1)returnx; elsereturnx*PowerXofN(n-1);} 四、(15分) 假定管理一个班级某门课程的期末考试成绩。 构造一个类表示学生和成绩;从键盘上输入成绩,按成绩由高到低排序后,将结果写入到一个文本文件中。 学生人数,文件名均由键盘输入。 解: //Student.h #include usingnamespacestd; classStudent{ private: intno;stringname;intscore; public: Student(){no=0;name=“”;score=0;} voidSetNo(intn){no=n;} voidSetName(strings){name=s;} voidSetScore(intn){score=n;} intGetNo(){returnno;} stringGetName{returnname;} intGetScore{returenscore;} }; //MainProg.cpp #include #inlcude #include“Student.h” voidSortStudent(Student*stu,intn); intmain(intargc,char*argv[]) {intn,no,score,k; stringname; Student*stu; stu=newStudent[n]; cout<<“EnterStudentNumber: ”; cin>>n;cout< for(k=0;k {cout<<“Enter”< cin>>no>>name>>score; (stu+k)->SetNo(no); (stu+k)->SetName(name); (stu+k)->SetScore(score); } SortStudent(stu,n); ofstreamretfile(argv[1],ios: : out|ios: : trunc); for(k=0;k { retfile<<(stu+k)->GetNo(no)<<“”; retfile< retfile<<(stu+k)->SetScore(score)“”; } }; voidSortStudent(Student*stu,intn) {代码从略}; 五、(15分) 按你对一部电梯的理解,设计一个类表示电梯。 解: (关注的焦点导致不一样的结果) classElevator{ private: intNum;//目前载客 intLoc;//所处楼层 intDoorOpen;//门开或关 public: Elevator(){Num=0;Loc=1;DoorOpen=0;}; voidMoveUp(){Loc++}; voidMoveDown(){Loc--;} voidOpenDoor(){DoorOpen=1}; voidShutDoor(){DoorOpen=0}; } 兰州大学2007~2008学年第一学期 期末考试试卷(A卷) 课程名称: C++任课教师: 董国雄 学院: 数学与统计学院专业: 隆基班、基地班年级: 2006 姓名: 校园卡号: 题号 一 二 三 四 五 六 七 八 总分 分数 40 15 15 15 15 100 阅卷教师 一、简答(40分) 1、使用指针时,对其哪两个方面应有清楚的界定? 判断一个指针是否指向了一个合法对象的原则是什么? 答: 指针值(对象地址),指针类型(指向的对象类型)。 是否为null。 2、构造函数的作用是什么? 构造函数中有几个特别命名了的构造函数,各是什么? 答: 创建对象时进行对象初始化。 缺省构造函数、copy构造函数、转换构造函数。 3、C++中类的静态成员和普通成员的区别是什么? 答: 静态成员是类层次成员,不依赖于对象而存在,访问时通过类名进行。 普通成员是对象层次成员,依赖于对象存在,访问时需通过具体对象进行。 4、如果类中有“virtualvoidexample()const=0;”申明,你可以对该函数和所在的类做出哪些断言? 答: 相应类为抽象基本类,不能实例化,只能用于派生子类对象。 5、类的继承和合成有什么区别? 答: 继承是一个类作为另一个类的基类,合成为一个类的对象作为另一个类的成员。 6、解释标识符的生命期和可见性。 答: 生命期即对象在内存中存在的时间;可见性即对象可以存取的范围。 7、如何定义和使用全局变量? 为什么要尽可能的限制全局变量的使用? 答: 在所有函数的外部定义,再定义其的源文件中可以自由使用,如要在其他源文件中使用,需要恶extern声明。 为了程序的模块化和信息隐蔽,降低模块之间的耦合度。 8、以你的实习环境为例,编制一个程序,需要经过哪些步骤? 答: 实习环境为VS6.0。 建立一个工作空间,在其中建立一个项目。 在项目中编制源程序,经编译、连接得到一个可执行程序。 二、(15分) 写一函数,此函数返回一个整数数组中最后一个最小元素的下标。 要求用指针传递参数,可以处理任意长度的数组。 解: intLastMinOfArray(int*array,intn) {intMinElem,index,k; index=n-1;MinElem=*(array+index); for(k=n-1;k>=n;k--) { if(*(array+n-1) {index=n-1;MinElem=*(array+index);} } returnindex;} 三、(15分) 写一递归函数,求n! 。 其中n为不小于0的整数。 解: intFactorial(intn) {if(n==0)return1; elsereturnn*Facrorial(n-1);} 四、(15分) 设计可在声明时确定长度的向量类,实现求向量长度、向量加减、向量内积运算和其它必须的方法。 解: //Vector.h classVector{ private: intlen; int*data; public: Vector(intl); Vector(constVector&v); ~Vector(); boolSetValue(intv,intindex); intGetLenth(); Vector&Operator=(constVector&v); VectorOperator+(constVector&v); VectorOperator-(constVector&v); intOperator*(constVector&v); }; //Vector.cpp #include“Vector.h” Vecotor: : Vector(intl) {len=l;data=newint[len]; for(intk=0;k Vecotor: : Vector(constVector&v) {deletedata;len=v.len; data=newint[len]; for(intk=0;k Vecotor: : ~Vector() {deletedata;}; boolVecotor: : SetValue(intv,intindex) {if((index<0)||(index>=len))returnfalse; *(data+index)=v;returntrue;}; Vector&Vecotor: : Operator=(constVector&v) {for(intk=0;k return*this;}; VectorVecotor: : Operator+(constVector&v) {Vectorret(this->len) for(intk=0;k *(ret.data+k)=*(this->data+k)+*(v.data+k); returnret;}; VectorVecotor: : Operator-(constVector&v) {Vectorret(this->len) for(intk=0;k *(ret.data+k)=*(this->data+k)-*(v.data+k); returnret;}; intVecotor: : Operator*(constVector&v) {intret=0; for(intk=0;k ret+=*(this->data+k)**(v.data+k); returnret;}; 五、(15分) 按你对一部长途客车的理解,设计一个类表示长途客车。 解: (关注的焦点导致不一样的结果) classCoach{ private: stringsource,dest;//起点、终点 intSeatNum;//座位数; intPassenger;//旅客数; public: Coach(strings,stringd,intn) {source=s;dest=d;SeatNum=n;Passenger=0;}; intGetOn(){Passenger++;returnPassenger;}; intGetOff(){Passenger--;returnPassenger;}; intGetEmpty(){returnSeatNun–Passenger;}; };
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学院 07081 C+ 试题 AB 06 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)