上学吧题库

计算机二级C++操作题考试题库模拟卷五

试卷预览
请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR ********* found **********”行语句存在错误。请改正这些错误,使程序的输出结果为:NUM=0Value = 1注意:只修改注释“// ERROR **** found **** ”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include <iostream>using namespacestd;class MyClass {int _i; friend void Increment(MyClass& f);public:const int NUM;//ERROR *******found*******MyClass(int i==0) { NUM = 0;_i = i;}int GetValue () const { return _i; }};//ERROR *******found*******void Increment () { f._i++; }int main (){MyClass obj;//ERROR *******found*******MyClass::Increment(obj);cout << “NUM =” << obj .NUM << endl << “Value =” << obj .GetValue () << endl;return 0 ;}
请打开考生文件夹下的解决方案文件proj1,该工程中包含程序文件main.cpp,其中有类Clock(“时钟”)的定义和主函数main的定义。程序中位于每个“// ERROR **** found ****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:Initial times are0 d:0 h:0 m:59 sAfter one second times are0 d:0 h:1 m:0 s注意:只修改每个“// ERROR **** found ****”下的那一行,不要改动程序中的其他内容。#include <iostream>using namespace std;class Clock{public:Clock (unsigned long i = 0);void set (unsigned long i = 0);void print() const;void tick(); //时间前进一秒Clock operator ++ ();private:unsigned long total_sec, seconds minutes, hours, days;};Clock::Clock(unsigned long i):total_sec (i), seconds (i % 60), minutes((i / 60) % 60), hours ( (i / 3600) % 24), days(i / 86400) { }void Clock: :set (unsigned long i){total_sec= i;seconds=i % 60;minutes=(i / 60)%60;hours =(i / 3600)%60;days = i / 86400;}// ERROR ******* found *******void Clock:: print (){cout << days << “d:” << hours << “h :” << minutes << “m :” << seconds << “s” << endl;}void Clock:: tick (){// ERROR ******* found *******set (total_sec++);}Clock Clock:: operator++ (){tick();// ERROR ******* found *******return this;}int main (){Clock ck (59);cout <<”Initial times are” << endl;ck.print();++ck;cout << “After one second times are” << endl;ck.print ();return 0;}
请打开考生文件夹下的解决方案文件proj2,该工程中包贪程序文件main.cpp,其中有类Mammal(“哺乳动物”)、类Elephant(“大象”)、类Mouse(“老鼠”)的定义和主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果 应为:ELEPHANTMOUSE注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found ****”。#include <iostream>using namespace std;enum category {EMPTY, ELEPHANT, MOUSE};char * output[ ] ={“EMPTY”, “ELEPHANT”, “MOUSE”};class Mammal{public:Mammal(char * str){//********** found **********name = new ________strcpy(name,str);}virtual char *WhoAmI()=0;virtual ~Mammal() {delete[ ] name; }void Print () { cout << WhoAmI()<< endl; }private:char *name;};class Elephant : public Mammal{public:// ********** found **********Elephant (char * str) : ________ { }char *WhoAmI() { return output[elephant]; }};class Mouse : public Mammal{public:Mouse(char * str ):Mammal(str) { }// ********** found **********char* WhoAmI() { ________ }};int main (){// ********** found **********Mammal * pm = new ________ (“Huanhuan”);pm -> Print ();delete pm;pm = new Mouse (“Micky”);pm -> Print();delete pm;return 0;}
请打开考生文件夹下的解决方案文件proj2,此工程包含一个源程序文件proj2. cpp。其中定义了Score 类。Score是一个用于管理考试成绩的类。其中,数据成员_s指向存储成绩的数组,_n表示成绩的个数;成员函数Sort使用冒泡排序法将全部成绩按升序进行排列。请在程序中的横线处填写适当的代码,然后删除横线,以实现Score类的成员函数Sort。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2 .cpp#include <iostream>#include <cstdlib>#include <ctime>using namespace std;class Score {public:Score (double * s, int n) : _s (s) , _n(n) { }double GetScore(int i) const{ return _s[ i]; }void Sort ();private:double * _s;int _n;};void Score : : Sort (){//******** found ********for (int i = 0; i﹤_n -1; ________//******** found ********for (int j = ________; j﹥i; j--)if(_s[j]﹤ _s[j -1]){ //交换 _s[ j]和 _s[j-1]double t = _s[j];//******** found ********________;//******** found ********________;}}int main (){const int NUM = 10;double s[NUM];srand(time(0));for(inti=0; i﹤NUM; i++)s[i]=double(rand())/RAND_MAX * 100;Score ss (s, NUM);ss.Sort ();for(int j = 0; j cout << ss.GetScore (j) << endl;return 0;}
请打开考生文件夹下的解决方案文件proj3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组。ValArray类的复制构造函数应实现对象的深层复制。请编写ValArray类的复制构造函数。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:ValArray v1 = {1,2,3,4,5}ValArray v2= {2,2,2,2,2}要求:补充编制的内容写在“//*******333*******”与“//********666********”之间。不要修改程序的其他部分。注意:相关文件包括:main.cpp、ValArray. h。程序最后调用胃iteToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。//ValArray.h#include <iostream>using namespace std;class ValArray {int *v;int size;public:ValArray (const int * p, int n) : size(n){v = new int[ size];for(int i = 0; i﹤size; i++)v[i]=p[i];}ValArray (const ValArray& other);~ValArray{ delete[ ] v; }void setElement(int i, int val){v[i]=val;}void print(ostream& out) const{out << ‘{’;for(int i=0; i﹤size -1; i++)out << v[i] << “,”;out << v[size -1] << ‘}’;}};void writeToFile (const char * );//main.cpp#include “ValArray.h” ValArray::ValArray ( const ValArray& other){// ******** 333 ********// ******** 666 ********}int main (){const int a[ ] = {1,2,3,4,5};ValArray v1(a, 5);ValArray v2 (v1);for(int i=0; i﹤5; i++ )v2.setElement(i,2);cout << “ValArray v1=”;v1.print(cout);cout << endl;cout << “ValArray v2=”;v2.print(cout);cout << endl;writeToFile(“”);return 0;}
请打开考生文件夹下的解决方案文件proj3,其中声明了一个单向链表类slist。slist的成员函数Prepend的功能是在链表头部加入一个新的元素。请编写成员函数Prepend。在main函数中给出了一组测试数据,此时程序的输出应为:B -> A ->###A->###A ->###exiting inner blockexiting outer block注意:只在函数 Prepend 的“//******** 333 *** *****”和“//******** 666 ********”之间填入若干语句,不要改动程序中的其他内容。//SList.hstruct sListltem {char data;sListltem* next;};class sList {public:sList () :h(0) { }// 0表示空链表~sList ();void Prepend (char c);//在链表前端加入元素void Del ();//删除链表首元素sListltem * First() const { return h; }//返回链表首元素void Print () const;//打印链表内容void Release ();//销毁链表private:sListltem * h;//链表头};void writeToFile (const char * );//main.cpp#include <iostream>#include “sList.h”using namespace std;sList:: ~sList (){Release();}void sList:: Prepend(char c){//********333********//********666********}void sList:: Del(){sListltem* temp = h;h = h -> next;delete temp;}void sList: : Print() const{sListltem* temp=h;while(temp != 0)//判断是否到达链表尾部{cout << temp -> data << “->”;temp = temp -> next;}cout << “\n###” << endl;}void sList:: Release (){while(h!=0)Del();}int main(){sList * ptr;{sList obj;obj.Prepend(‘A’);obj.Prepend(‘B’);obj.Print();obj.Del();obj.Print();ptr = &obj;ptr -> Print();cout << “exiting inner block” << endl;}cout << “exiting outer block” << endl;writeToFile(“”);return 0;}