《全国计算机二级C++上机题库.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C++上机题库.docx(276页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2012全国计算机二级C+上机 完整题库第一套请使用VC6打开考生文件夹下的工程projl,该工程含有一个源程序文件projl.cpp。其 中每个注释ERROR *found*之后的一行有语句存在错误。请 修改这些错误,使程序的输出结果为:123456789 10/ projl.cpp#include using namespace std;class MyClass public:MyClass(int len)array = new intlen;arraySize = len;for(int i = 0; i arraySize; i+) arrayi = i+1;MyClass()11
2、 error*found*delete array; / delete array;void Print() constfor(int i = 0; i arraySize; i+) ERROR *found*cin arrayi / cout arrayi cout endl;private:int *array;int arraySize;int main()11 error*founcl*MyClass obj; /MyClass obj(10); obj.Print();return 0;)请使用VC6打开考生文件夹下的工程proj2,该工程含有一个源程序文件proj2.cpp。其 中
3、定义了类Bag和用于测试该类的主函数main。类Bag是一个袋子类,用来存放带有 数字标号的小球(如台球中的球,在类中用一个整数值表示一个小球),其中运算符成 员函数=用来判断两个袋子对象是否相同(即小球的个数相同,每种小球数目也相同, 但与它们的存储顺序无关);成员函数int lnBag(int ball)用来返回小球ball在当前袋子内 出现的次数,返回0表示该小球不存在。为类实现这两个函数,其用法可参见主函数 mairio运算符函数。perator=中首先判断两个袋子内的小球个数是否相同,再调用InBag函数 来判断每种小球在两个袋子内是否具有相同的出现次数/ proj2.cpp#inc
4、lude using namespace std;const int MAXNUM = 100;class Bag private: int num; int bagMAXNUM;public:Bag(int m, int n=0);/ 构造函数bool operator = (Bag &b);/ 重载运算符二二int lnBag(int ball); /某一小球在袋子内的出现次数,返回0表示不存在 );Bag:Bag(int m, int n)(if(n MAXNUM) cerr Too many membersn; exit(-l);)for(int i = 0; i n; i+) bag
5、i = mi;num = n;bool Bag:operator = (Bag &b) / 实现运算符函数=(if (num != b.num) /元素个数不同 return false;for (int i = 0; i num; i+)if (lnBag(bagi)!=b.lnBag(bagi) / TODO:加入条件,判断当前袋子中每个元素在当前袋子和袋子b中是否出现次数不同 /* *found * *return false return true;/TODO:加入一条语句int Bag:lnBag(int ball)(int count = 0;for (int i = 0; i n
6、um; i+)if (bagi=ball) /TODO:力口入条件,判断小球 ball 是否 与当前袋子中某一元素相同 *found* *count+; /TODO:力口入一条语句return count;)int main()|int dataMAXNUMz n, i;cin n;for (i = 0; i n; i+)cin datai;Bag bl(data, n);/创建袋子对象blcin n;for (i = 0; i n; i+)cin datai;Bag b2(dataz n);/创建袋子对象b2if( bl= b2)/测试bl和b2是否相同cout Bag bl is same
7、 with Bag b2n;elsecout Bag bl is not same with Bag b2n;return 0;)请使用VC6打开考生目录下的工程文件proj3o此工程包含一个源程序文件proj3.cpp, 其中定义了用于表示二维向量的类MyVector:程序应当显示:(6,8)但程序中有缺失部分,请按下面的提示,把下划线标出的三处缺失部分补充完整:(1)在*1* *found*的下方是构造函数的定义,它用参数 提供的坐标对x和y进行初始化。(2)在*2* *found*的下方是减法运算符函数定义中的 一条语句。两个二维向量相减生成另一个二维向量:它的X坐标等于两个向量X的坐标
8、 之差,它的丫坐标等于两个向量丫坐标之差。(3)在*3* *found*的下方的语句的功能是使变量v3 获得新值,它等于向量V1与向量v2之和。/ proj3.cpp#includeusing std:ostream;using std:cout;using std:endl;class MyVector 表示二维向量的类double x;/X 坐标值double y;/Y 坐标值public:MyVector(double i=0.0, double j=0.0);构造函数MyVector operator+( MyVector j);重载运算符+friend MyVector operat
9、or-( MyVector MyVector j); 重载运算符 friend ostream& operator( ostream& os, MyVector v); 重载运算符);/* *found*MyVector:MyVector(double i, double j): x(i),y(j)MyVector MyVector:operator+( MyVector j) return MyVector(x+j.x, y+j.y);)MyVector operator-! MyVector , MyVector j)return MyVector(i.x-j.xj.y-j.y);ostr
10、eam& operator( ostream& os, MyVector v)os ( v.x / v.y ),;输出向量 v 的坐标return os;int main()(MyVector vl(2z3), v2(4,5), v3;v3=vl+v2;coutv3endl;return 0;)第二套请使用VC6打开考生文件夹下的工程projl,该工程含有一个源程序文件projl.cppo其 中位于每个注释ERROR *found*之后的一行语句存在错 误。请修正这些错误,使程序的输出结果为:Constructor called of 10The value is 10Descructor c
11、alled of 10/ projl.cpp#include using namespace std;class MyClasspublic:MyClass(int i)value = i;cout Constructor called of value endl;) ERROR *found* void Print() / void Print() const cout The value is value endl;/ error *found*void MyClass。MyClass。 cout Destructor called of value endl; private:11 er
12、ror *found*int value = 0;/ int value;); int main()const MyClass obj(10);obj.Print();return 0;)凡用过C语言标准库函数strcpy(char*sl,char*s2)的程序员都知道使用该函数时有一个安 全隐患,即当指针si所指向的空间不能容纳字符串S2的内容时,将发生内存错误。类 String的Strcpy成员函数能进行简单的动态内存管理,其内存管理策略为:若已有空间能容纳下新字符串,则直接进行字符串拷贝;(2)若已有空间不够时,它将重新申请一块内存空间(能容纳下新字符串),并将新 字符串内容拷贝到新申请
13、的空间中,释放原字符空间。请使用VC6打开考生文件夹下的工程proj2,该工程含有一个源程序文件proj2.cppo 其中定义了类String和用于测试该类的主函数main,并且成员函数Strcpy的部分实现代 码已在该文件中给出,请在标有注释 *。11向*行的下一行添加适 当的代码,将这个函数补充完整,以实现其功能。/ proj2.cpp#include using namespace std;class String private:int size;/缓冲区大小char *buf;/ 缓冲区public:String(int bufsize);void Strcpy(char *s);/
14、 将字符串 s 复制到 buf 中void Print() const;String。if (buf != NULL) delete buf;);String:String(int bufsize)size = bufsize;buf = new charsize;*buf=O;)void String:Strcpy(char *s)(char *p/q;int len = strlen(s);if (len+1 size) size = len+1;p = q = new charsize;*found* *while(*(q+)=*(s+); / TODO:添加代码将字符串s拷贝到字 符指
15、针q中delete buf;buf = p;)else *founcl* *for(p=buf;*p=*s;P+,s+); TODO:添加代码将字符串 s 拷贝到 buf中void String:Print() constcout size *t buf endl;int main()char s100;String str(32);cin.getlinefs, 99);str.Strcpy(s);str.Print();return 0;请使用VC6打开考生目录下的工程文件proj30此工程包含一个源程序文件proj3.cpp, 其中定义了用于表示平面坐标系中的点的类my Point和表示三
16、角形的类MyTriangle;程 序运行后应当显示:6. 828432但程序中的缺失部分,请按下面的提示,把下划线标出的三处缺失部分补充完整:(1)在*1* *found*的下方是构造函数的定义,它参数提供 的三个顶点对pointl、point2和point3进行初始化。(2)在*2* *found*的下方是成员函数 perimeter 的定义, 该函数返回三角形的周长。(3)在*3* *found*的下方是成员函数area的定义中的一 条语句。函数area返回三角形的面积。方法是:若a、b、c为三角形的三个边长,并令s=(a+b+c)在,则三角形的面积A为A=sqrt(s*(s-a)*(s-
17、b)*(s-c)(其中 sqrt 表示开二次方)/ proj3.cpp#include#includeusing namespace std;class MyPoint表示平面坐标系中的点的类double x;double y;public:MyPoint (double x,double y)this-x=x;this-y=y;double getX()const return x;double getY()const return y;void show()const cout(,x7y,);class MyTriangle表示三角形的类MyPoint pointl;三角形的第一个顶点My
18、Point point2;三角形的第二个顶点MyPoint point3;三角形的第三个顶点public:MyTriangle(MyPoint pl,MyPoint p2,MyPoint p3);double perimeter()const;返回三角形的周长double area()const;返回三角形的面积);* *found*MyTriangle:MyTriangle(MyPoint pl,MyPointp2,MyPointp3):pointl(pl),point2(p2),point3(p3)double distance(MyPoint pl,MyPoint p2)返回两点之间的距
19、离(return sqrt(pl.getX()-p2.getX()*(pl.getX()-p2.getX()+(pl.getY()-p2.getY()*(pl.getY()-p2.getY();/*2* *found*double MyTriangle:perimeter()const (return distance(pointl/point2)+distance(point2/point3)+distance(point3/pointl);double MyTriangle:area()const/*3* *found*double s= perimeter()/2;/ 使用perimet
20、er 函数return sqrt(s*(s-distance(pointl/point2)* (s-distance(point2zpoint3)* (s-distance(point3zpointl);)int main()(MyTriangle tri(MyPoint(0,2),MyPoint(2,0),MyPoint。);couttri.perimeter()endltri.area()endl;return 0;第三套请使用VC6打开考生文件夹下的工程projl,该工程含有一个源程序文件projl.cpp。其 中位于每个注释 ERROR * found*之后的一行语句存在错误。 请修正
21、这些错误,使程序的输出结果为:There are 2 object(s)/ projl.cpp#include using namespace std;class MyClass public:11 error *found*MyClass(int i = 0) value = I / MyClass(int i = 0) :value (i)count+;void Print() cout There are count object(s). endl; private:const int value;static int count;);11 error *found*static int
22、 MyClass:count = 0; / int MyClass:count = 0;int main()MyClass objl, obj2;11 error *found* MyClass.Print();/ objl.Print();return 0;请使用VC6打开考生文件夹下的工程proj2,该工程含有一个源程序 文件 proj2.cpp。其中定义了模板函数 insert(T dataset,int &size,T item)和主函数main0模板函数insert用来将一个数据item插入到一个已 排好序(升序)的数据集dataset中,其中类型T可以为int, double, c
23、har等数据类型,size为当前数据集中元素的个数,当插入操作完成后,size值将更新。模板函数insert的部分实现代码已在文件proj2.cpp 中给出,请在标有注释TODO:的行中添加适当的代码,将运算符 函数的operator-补充完整,以实现其功能。/ proj2.cpp include using namespace std;请在该部分插入insert函数模板的实现template void insert(T setdata, int &size, T item)for (int i = 0; i item/ TODO:添加代码,判断查找元素的插入位置for (int j = i;
24、 j size; j+)/* *fou nd* */TODO:添setdatasize-j+i=setdatasize-j+i-l加一条语句,将插入位置后的所有元素往后移动一个位置/提示:移动元素应从最后一个元素开始移动setdatai = item;/ 插入该元素size+;return;)*found* *;/ TODO:添加一条语句,将元素加到最后setdatai=item;一个位置上size+;return; int main()int idata10 = 22, 35, 56,128 , iitem, isize = 4, dsize = 4, i;double ddata10 =
25、25.1, 33.5, 48.9, 75.3 , ditem;cout Please input one integer number for inserting:;cin iitem;insert(idataz isize, iitem);for (i = 0; i isize; i+)cout idatai cout endl;cout Please input one double number for inserting:;cin ditem;insert(ddataz dsize, ditem);for (i = 0; i dsize; i+)cout ddatai cout end
26、l;return 0;请使用VC6打开考生目录下的工程文件proj3o此工程包含一个源程序文件proj3.cpp,其中定义了用于表示平面坐标中的点的类MyPoint和表示线段的类MyLine:程序应当显 示:(0,0)(1,1)1.41421,1但程序中的缺失部分,请按下面的提示,把下划线标出的三处缺失部分补充完整:(1)在*1* *found*的下方是构造函数的定义,它用参数提 供两个端点对pointl和point2进行初始化。(2)在*2* *found*的下方是成员函数 length 的定义,它 返回线段的长度。(3)在*3* *found*的下方是成员函数slope的定义中的 一条语句
27、。函数slope返回线段的斜率,方法是:若线段的两个端点分别是(xl,yl)和(x2,y2),则斜率k 为:k=(y2-yl)/(x2-xl)/ proj3.cpp#include #include using namespace std;class MyPoint表示平面坐标系中的点的类double x;double y;public:MyPoint (double x,double y)this-x=x;this-y=y; double getX()const return x;double getY()const return y;void show()const cout(,x7y,)
28、; pointl(pl)zpoint2 (p2) /*2* *found* double MyLine:length()constclass MyLine表示线段的类MyPoint pointl;MyPoint point2;public:MyLine(MyPoint pl, MyPoint p2);MyPoint endPointl()const return pointl; MyPoint endPoint2()const return point2; double length()const;double slope()const;);/*1* *found* MyLine:MyLine
29、(MyPointpl,返回端点1返回端点2返回线段的长度返回直线的斜率MyPointP2):return sqrt(pointl.getX()-point2.getX()*(pointl.getX()-point2.getX()+(pointl.getY()-point2.getY()*(pointl.getY()-point2.getY();double MyUne:slope()constreturn(point2.getY()-pointl.getY()/(point2.getX()-pointl.getX();)int main()MyLine line(MyPoint(0,0),My
30、Point(l,l);line.endPointl().show();line.endPoint2().show();coutendlline.length()7line.slope()endl;return 0;)第四套请使用答题菜单或使用VC6打开考生文件夹下的工程projl,该工程含有一个源程序 文件projl.cppo其中每个注释/ ERROR *found*之后的一行语句存在错误。请改正这些错误,使程序 的输出结果为:The value is 10/ projl.cppinclude using namespace std;class MyClass int value;public
31、:/ ERROR *found*void MyClass(int val): value(val) / MyClass(int val): value(val) int GetValue() const return value;void SetValue(int val););/ ERROR *found*inline void SetValue(int val) value = val; / inline void MyClass:SetValue(int val) value = val;int main()(MyClass obj(O);obj.SetValue(lO);/ ERROR
32、 *found*下列语句功能是输出obj的成员value的值cout The value is obj.value endl; / cout The value is obj.GetValue() endl;return 0;请使用“答题”菜单或使用VC6打开考生文件夹下的工程文件proj2,该工程含有一个源 程序文件 poj2.cpp,其中定义了 CharShape 类、Triangle 类和 Rectangle 类。CharShape是一个抽象基类,它表示由字符组成的图形(简称字符图形),纯虚函数 Show用作显示不同字符图形的相同操作接口。Triangle和Rectangle是CharS
33、hape的派 生类,它们分别用于表示字符三角形和字符矩形,并且都定义了成员函数Show,用于 实现各自的显示操作。本程序的正确输出结果为:* *#请先阅读程序,分析输出结果,然后根据下列要求在横线处填写适当的代码并删除 横线。(1)将Triangle类的成员函数Show补充完整,使字符三角形的显示符合输出结果。(2)将Rectangle类的成员函数Show补充完整,使字符矩形的显示符合输出结果。 (3)为类外函数fun添加合适的形参。/ proj2.cpp#include using namespace std;class CharShape public:CharShape(char ch)
34、: _ch(ch) ;virtual void Show() = 0;protected:char_ch; /组成图形的字符;class Triangle : public CharShape public:Triangle(char ch, int r): CharShapefch), _rows(r) void Show();private:int_rows; / 行数;class Rectangle: public CharShape public:Rectangle(char chz int g int c):CharShape(ch),_rows(r), _cols(c) void
35、Show();private:int _rows, _cols; / 行数和列数);voidTriangle:Show() /输出字符组成的三角形for (int i = 1; i = _rows; i+) *found* * *;j+)for (int j = 1; j =i+i-lcout_ch;cout endl; void Rectangle:Show() /输出字符组成的矩形* found* for (int i = 1; i =_rows; i+) *found*for (int j = 1; j = _cols; j+) cout _ch;cout endl;/found* 为
36、fun 函数添加形参 void fun(CharShape &cs) cs.Show();int main()Triangle tri(*, 4);Rectangle rect(#, 3, 8);fun(tri);fun(rect);return 0;)请使用答题菜单或使用VC6打开考生文件夹下的工程文件proj3,此工程包含一个源 程序文件proj3.cpp,补充编制C+程序proj3.cpp,其功能是从文本文件in.dat中读取全 部内容,将文本存放到doc类的对象myDoc中。然后分别统计26个英文字母在文本中 出现的次数,统计时不区分大小写。最后将统计结果输出到文件out.dat中。文
37、件in.dat 长度不超过1000字节。要求:补 充 编 制 的 内 容 写 在 *333* 与 *666*31t两行间实5ft分别计 26 个英文字母在 文本中出现的次数,并将统计结果在屏幕输出,格式不限。不得修改程序的其它部分。 / proj3.cpp#include#include#includeusing namespace std;class docprivate:char *str;文本字符串首地址int counter26;用于存放26个字母的出现次数int length;文本字符个数public:构造函数,读取文件内容,用于初始化新对象。filename是文件名字符串首地址。d
38、oc(char * filename);void count(); 统计26个英文字母在文本中出现的次数,统计时不区分大小写。doc();void writeTbFile(char *filename););doc:doc(char * filename)ifstream myFile(filename);int len=1001ztmp;str=new charlen;length=0;while(tmp=myFile.get()!=EOF)(strlength+=tmp;)strlength=O*;myFile.close();for(int i=0; i=a&*s=A&*s=,a?*s-
39、,a,:*s-A,;counterindex+;s+;for(int i=0;i26;i+)cout(char)(a,+i),:counterin*666*doc:doc()(delete str;)void doc:writeToFile(char * filename)(ofstream outFile(filename);for(int i=0; i26; i+)outFilecounteriendl;outFile.close();)void main()(doc myDoc(in.dat);myDoc.count();myDoc.writeToFile(out.dat);)第五套请使用答题菜单或使用VC6打开考生文件夹下的工程projl,该工程含有一个源 程序文件projl.cpp其中位于每个注释7/ ERROR *found*之后的一行语句存在错误。请改正这些错误, 使程序的输出结果为:(4,4)/ projl.cpp#include using namespace std;class Point public: Error *found*Point(double x, double y) _x(x)z _y(y) / Point(double x, double y): _x(x), _y(y) double Ge
限制150内