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

考试难度:
0人已考
  • 卷面总分:100
  • 试卷类型:模拟试题
  • 测试费用: 免费
  • 关注人数:89
  • 作答时间:120分钟
  • 解析:
关闭
试卷简介:
本试卷是C++操作题考试题库试题,总分100分。
试题类型:
  • 基本操作题
  • 简单应用题
  • 综合应用题
试卷预览
  • 基本操作题
  • 简单应用题
  • 综合应用题
1
请打开考生文件夹下的解决方案文件proj1,该工程含有一个源程序文件proj1.cpp,其中位于每个注释“//ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:The value is 10注意:只修改注释“//ERROR ****found****”的下一行语句,不要改动程序中的其他内容。// proj1.cpp#include <iostream>using namespace std;class MyClass {int value ;public://ERROR ****** found ******void MyClass (int val) : value (val) {}int GetValue () const { return value; }void SetValue (int val);};// ERROR ****** found ******inline void SetValue (int val){ value = val; }int main (){MyClass obj(0);obj.SetValue(10);// ERROR ******** found*******下列语句功能是输出obj的成员value的值cout << “The value is” << obj.value << endl;return 0 ;}
2
请打开考生文件夹下的解决方案文件proj1,其中在编辑窗口内显示的主程序文件中定义有类AAA和主函数main,程序文本中位于每行“//ERROR **** found ****”下面的一行有错误,请加以改正。改正后程序的输出结果应该是:sum = 60注意:只修改每个“// ERROR **** found ****”下面的一行,不要改动程序中的其他任何内容。#include <iostream>using namespace std;class AAA {int a[10]; int n;//ERROR ******* found *******private:AAA(int aa[ ], int nn): n(nn) {//ERROR ******* found *******for(int i =0; i < n; i++) aa[i]=a[i];}int Geta(int i){ return a[i]; }};int main () {int a[6] = {2,5,8,10,15,20};AAA x (a,6);int sum = 0;//ERROR ******* found *******for (int i =0; i ﹤6; i ++ )sum + =x.a[i];cout << “sum =” << sum << endl;return 0;}
1
请打开考生文件夹下的解决方案文件proj2,该工程中含有一个源程序文件proj2.cPP。其中定义了类Set和用于测试该类的主函数main。类Set是一个用于描述字符集合的类,在该字符集合中,元素不能重复(将“a”和“A”视为不同元素),元素最大个数为100。为该类实现一个构造函数Set(Char *S),它用一个学特串来构造一个集合对象,当学符串中出现重复字符时,只放入一个字符。此外,还要为该类实现另一个成员函数InSet(char c),用于测试一个字符c是否在一个集合中,若在,则返回true;否则返回false。构造函数Set和成员函数InSet的部分实现代码已在文件proj2.cpp中给出,请在标有注释“// T0-D0:”的行中添加适当的代码,将这两个函数补充完整,以实现其功能。提示:在实现构造函数时,可以调用InSet函数来判断一个字符是否已经在集合中。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****foimd****”。//proj2.cpp#include <iostream>using namespace std;const int MAXNUM = 100;class Set {private:int num; //元素个数char setdata[MAXNUM]; //字符数组,用于存储集合元素public:Set(char *s); //构造函数,用字符串s构造一个集合对象bool InSet (char c);//判断一个字符c是否在集合中,若在,返回true,否则返回falsevoid Print ( ) const; //输出集合中所有元素}; Set:: Set(char * s){num = 0;while(*s) {//********** found **********if ( ________ ) //TODO:添加代码,测试元素在集合中不存在//**********found**********__________; // TODO:添加一条语句,加入元素至集合中s ++ ;}}bool Set:: InSet(char c){for(int i = 0; i < mam;i++)//********** found **********if( ________ ) //TODO:添加代码,测试元素c是否与集合中某元素相同//********** found **********________; // TODO:添加一条语句,进行相应处理return false;}void Set:: Print () const{cout << “Set elements:” << endl;for(int i = 0; i < num; i++)cout<< setdata[i] << ‘’;cout << endl;}int main (){char s[MAXNUM];cin.getline(s, MAXNUM-1); //从标准输入中读入一行Set setobj(s); //构造对象setobjsetobj.Print(); //显示对象setobj中内容return 0;}
2
请打开考生文件夹下的解决方案文件proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了Stack类和ArrayStack类。Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack为抽象类,它只定义了栈的用户接口,如下所示:公有成员函数 功能push 入栈:在栈顶位置添加4元素pop 退栈:取出并返回栈顶元素ArrayStack是Stack的派生类,它实现了Stack定义的接口。ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。数据成员maxSize表示的是找的最大容量,top用于记录栈顶的位置。成员函数push和pop分别实现具体的入栈和退栈操作。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为:a,b,cc,b,a注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//**** found****”。//proj2.cpp#include <iostream>using namespace std;class Stack {public:virtual void push (char c) = 0;virtual char pop () =0;};class ArrayStack : public Stack {char * p;int maxSize;int top;public:ArrayStack(int s){top = 0;maxSize = s;//********found********P =________;}~ArrayStack(){//********found********________;}void push (char c){if (top = maxSize) {cerr << “Overflow! \n”;return;}//********found********________;top ++ ;}char pop (){if (top == 0) {cerr << “Underflow! \n”;return ‘\0’;}top--;//********found********________;}};void f (Stack& sRef){char ch[] = {‘a’, ‘b’, ‘c’};cout << ch[0] << “,” << ch[1] << “,” << ch[2] << endl; sRef.push(ch[0]) ; sRef.push(ch[1]);sRef.push(ch[2]);cout << sRef.pop() << “,”;cout << sRef.pop() << “,”;cout << sRef.pop() << endl;}int main (){ArrayStack as (10);f(as);return 0 ;}
1
请打开考生文件夹下的解决方案文件prqj3,此工程中包含一个源程序文件proj3. cpp,补充编制C ++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。要求: 补充编制的内容写在“//**********333**********”与“//**********66666**********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件out.dat中,输出函数writeToFile已经给出并且调用。//proj3.cpp#include <iostream>#include < fstream >#include < cstring >using namespace std;class doc{private:char * str; //文本字符串首地址int length; //文本字符个数public://构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串 首地址doc(char * filename);void reverse (); //将字符序列反转~doc();void writeToFile (char * filename);};doc::doc(char * filename){if stream myFile (filename);int len =1001, tmp;str = new char[len];length = 0 ;while((tmp=myFile.get ()) != EOF){str [length ++] =tmp;}str[ length] = ‘\0’;myFile.close();}void doc : : reverse () {//将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个//字符交换……//*************333***********//*************666***********}doc::~doc (){delete [ ] str;}void doc::writeToFile (char * filename){ofstream outFile (filename);outFile << str;outFile.close();}void main (){doc myDoc (“in.dat”);myDoc.reverse ();myDoc. writeToFile(“out.dat");}
2
请打开考生文件夹下的解决方案文件proj3,其中声明了MiniComplex是一个用于表示复数的类。请编写这个operator +运算符函数,以实现复数的求和运算。两个复数的和是指这样一个复数:其实部等于两个复数的实部之和,其虚部等于两个复数的虚部之和。例如,(23 +34i)+(56 +35i)等于(79 + 69i)。要求:补充编制的内容写在“// ******** 333 ********”与“//********666 ********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out. dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//Minicomplex.h#include <iostream>using namespace std;class MiniComplex //复数类{public:MiniComplex(double real=0, double imag=0);//构造函数MiniCoirplex operator + (const MiniCoitplex& otherComplex) const;//重载运算符+private:double realPart; //存储实部变量double imagPart; //存储虚部变量};void writeToFile (char * );//main.cpp#include “MiniComplex.h”MiniComplex:: MiniComplex(double real, double imag) { realPart =real; imagPart = imag; }MiniConplex MiniComplex:: operator + (const MiniComplex& otherComplex) const{// ******** 333 ********// ******** 666 ********}int main(){void writeToFile( char * );MiniComplex num1(23, 34), num2(56,35);cout << “Initial Value of Num1 =” << num1 << “\nlnitial Value of Num2 =” << num2 << endl ;cout << numl << “+” << num2 << “=” << num1 + num2 << endl; //使用重载的加号运算符writeToFile(“”);return 0;}