问答题请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的DataList类,是一个用于表示数据表的类。sort成员函数的功能是将当前数据表中的元素升序排列。请编写这个sort函数。程序的正确输出应为:排序前:7,1,3,11,6,9,12,10,8,4,5,2排序后:1,2,3,4,5,6,7,8,9,10,11,12要求:补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFfle已经编译为obj文件,并且在本程序调用。//DataLiSt.h#include<iostream>USingnamespacestd;classDataList{//数据表类intlen;double*d;public:DataList(intlen,doubledata[]=NULL);~DataList(){delete[]d;}intlength()const{returnfen;}//数据表长度(即数据元素的个数)doublegetElement(inti)const{returnd[i];,voidsort();//数据表排序voidshow()const;//显示数据表};voidwriteToFile(char*,constDataList&);//main.cpp#include"DataList.h"DataList::DataList(intlen,doubledata[]):len(len){d:newdouble[len];for(inti=0;i<len;i++)d[i]=(data==NULL?0.0:data[i]);}voidDataList::sort(){//数据表排序//********333********//********666********}voidDataList::show()const{//显示数据表for(inti=0;i<len-1;i++)cout<<d[i]<<",";cout<<d[len-1]<<end1;}intmain(){doubles[]=={7,1,3,11,6,9,12,10,8,4,5,2};DataList1ist(12,s);cout<<"排序前:";list.show();list.sort();cout<<end1<<"排序后:";list.show();writeToFile("",list);return0;}
问答题使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。
(1)完成类TestClassl的成员函数seta定义,定义seta对象x为int类型, 请在注释∥********1********后添加适当的语句。
(2)完成类TestClass1(共有)和类YestClass2(私有)派生类TestClass3的定义,请在注释∥********2********后添加适当的语句。
(3)定义类TestClass3中的私有成员C为int,请在注释∥********3********后添加适当的语句。
(4)完成setc中对基类的变量a的赋值,请在注释∥********4********后添加适当的语句。
注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。
#include
C1ass TestClass1
{
int a;
public:
∥********1********
{
return a=x;
}
voi d s howa()
{
cout << a << e ndl:
}
};
C1ass TestClass2
{
int b;
public:
void Setb(int x)
{
b=x ;
}
void showb()
{
cout<
问答题使用VC6打开下的源程序文件modi2.cpp。请完成函数fun(char*str,charch),本函数采用二分法,在已按字母次序从小到大排序的字符数组str中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回-1。二分法查找的思想是:初始查找区间的下界为0,上界为len-1,查找区间的中后,k=(下界+上界)/2;若list[k]等于ch,查找成功;若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。在新区间内继续用二分法查找。注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#include<iostream.h>intfun(char*str,charch){}voidmain(){charstr[]={"a","b","c","d","e","f","g","h","i","j","k",0};charch;return;}
问答题请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,其中该工程中包含定义了用于表示姓名的抽象类Name、表示“先名后姓”的姓名类Name1(名、姓之间用空格隔开)和表示“先姓后名”的姓名类Name2(姓、名之间用逗号隔开);程序应当显示: John Smith Smith,John 但程序中有缺失部分,请按照以下提示,把缺失部分补充完整: (1)在“//**1** ****found****”的下方是函数show中的一个语句,它按先名后姓的格式输出姓名。 (2)在“//**2** ****found****”的下方是函数getWord中的一个语句,它把一个字符序列复制到head所指向的字符空间中,复制从start所指向的字符开始,共复制endstart个字符。 (3)在“//**3** ****found****”的下方是函数ereateName中的语句,它根据指针P的值决定返回何种对象:如果P为空,直接返回一个Name1对象,否则直接返回一个Name2对象。注意:返回的Name1或Name2对象必须是动态对象,返回的实际是指向它的指针。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。填写的内容必须在一行中完成,否则评分将产生错误。//proj3.cpp#include<iostream>using namespace std;clasS Name{protected: char*surname; //姓 char*firstname; //名public: 一Name(){delete[]surname;delete[]firstname;) virtual void show()=0 ; }; class Name1:publiC Name{ public: Namel(const char*name);//**1** **********found********** void show(){_______;} };class Name2:public Name{public: Name2(const char*name); void show() { cout << surname <<’,’ <<firstname;)};char*getWord(const char*start,const char*end){ char*head=new char[end—start+1];//**2** **********found********** for(int i=0;i<end—start;i++)______; head[end—start]='/0'; return head; } Name1::Namel(const char*name) { char*P=strchr(name,”); firstname=getWord(name,P); surname=new char[strlen(p)]; strcpy(surname,P+1); } Name2::Name2(const char*name) { char*P=strchr(name,','); surname=getWord(name,P); firstname=new char[strlen(p)]; strcpy(firstname,P+1); } Name*createName(const char*S) { char*P=strchr(s,’,’);//**3** **********found**********if(P)_________; } int main() { Name*n; n=createName(”John Smith”); n->show();cout<<endl; delete n; n=createName(”Smith,John”); n->show();cout<<endl; delete n; return 0; }
问答题使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正错误,使得程序通过运行。 程序输出: 5 a 1 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#include<iostream>template<class T>//********error********t min(t x,t y){ return(x>y)?Y:X; } Void main(){ int n=5; //********error******** char c="a"; int d=1; //********error******** cout<<min(n,n)<<endl; cout<<min(c,c)<<endl; cout<<min(d,d)<<endl;}
问答题请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,其功能是从文本文件in.dat中读取全部整数,将整数序列存放到intArray类的对象中,然后建立另一对象myArray,将对象内容赋值给myArray。类intArray重载了“=”运算符。程序中给出了一个测试数据文件input,不超过300个的整数。程序的输出是: 10 11 13 16 20 要求: 补充编制的内容写在“//**********333**********”与“//**********666**********”之间。实现重载赋值运算符函数,并将赋值结果在屏幕输出。格式不限。不得修改程序的其他部分。 注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//intArray,hclas S intArray{private: int*array; int length;public: intArray(char*filename); intArray(); intArrayvoid writeToFile(const char*path);//main.cpp#include<ioStream>#include<fstream>#include<cstring>#include”intArray.h”using namespace std;intArray::intArray(){ length=10; array=new int[length];}intArray::intArray(char*filename){ ifstream myFile(filename); array=new int[300]; length=0; while(myFile>>array[1ength++]) length一一; myFile.close();}intArray& intArray:: operator =(const intArray&src){if(array!=NULL)delete[]array;length=src.length;array=new int[length];//*************333***********//*************666*********** return*thiS;}intArray::一intArray(){ delete[]array;}void intArray::show(){ int step=0; for(int i=0;i<length;i=i+step) { cout<<array[i]<<endl; step++; } }void main(){ intArray*arrayP=new intArray(”input.dat”); intArray myArray; myArray=*arrayP; (*arrayP).show(); delete arrayP; writeToFile(””); }
问答题使用VC++6.0打开
下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。
(1)在类TC中定义name为字符串类型,age为int型,请在注释1之后添加语句。
(2)设置类TC0的基类为TC类的定义,请在注释2后添加语句。
(3)在类TC的派生类TC0的公有成员中定义析构函数TC0,请在注释3后添加语句。
(4)设置类TC1的基类为 TC类的定义,请在注释4后添加语句。
程序输出结果为:
TC class constructor
TC0 class constructor
TC on class constructor
TC1 class constructor
TC1class constructor
TC class constructor
TC0 class constructor
TC class constructor
注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。
试题程序:
#include<iostream.h>
class TC
{
//********1********
public:
TC() {cout << "TC class constructor" <<endl;}
~TC() {cout << "TC class constructor" << endl;}
};
//********2********
{
char *departmert;
int level;
public:
TC0()
{cout << "TC0 class constructor" << endl;}
//********3********
{cout << "TC0 class constructor" << endl;}
};
//********4********
{
char *major;
float salary;
public:
TC1() {cout << "TC1 class constructor" <<endl;}
~TC1() {cout << "TC1 class constructor" << endl;}
};
void main()
{
TC0 s1;
TC1 t1;
}
问答题使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)完成构造函数,设置数组元素的个数为0,请在注释//********1********之后添加语句。 (2)完成函数AddMember(int n),如果参数n包含在类的数据成员数组中,则返回0,否则把数据写入数组,然后返回1,请在注释//********2********之后添加语句。 (3)完成函数DelMember(int n),如果变量在数据中,则删除该变量,并且返回1,如果不存在则返回0,请在注释//********3********之后添加语句。 (4)完成成员函数islnclude(int n)的定义,该函数检查参数n是否在类的数据成员数组elems中,如果在返回1,否则返回0。请在注释//********4********之后添加语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h>#define MAX_LENGTH 500class CArray{public: CArray() { //********1******** } int AddMember(int n) { for(int i=0;i<length;i++) { //********2******** if(Array[i]=n) return 0; ) Array[length++]=n; return 1; } int DeiMember(int n) { int i; for(i=0;i<length;i++) { if(Array[i]==n) { break; } } //********3******** if() { for(;i<length-1;i++) { Array[i]=Array[i+1]; ) length--; return 1; } return 0; } int isInclude(int n) { for(int i=0,i<length;i++) { //********4******** if() { return 1; } } return 0; }private: int Array[MAX_LENGTH]; int length;//用来记录数组的个数};int main(){ CArray obj; obj.AddMember(1); obj.AddMember(3); obj.AddMember(8); obj.AddMember(23); cout<<obj.is Include(8)<<end1; cout<<obj.isInclude(11)<<end1; obj.DelMember(3); obj.DelMember(8); cout<<obj.isInclude(2)<<end1; cout<<obj.is Include(1)<<end1; return 0;}
问答题使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: 10 6 30 2 2注意:错误的语句在∥********error********的下面,修改该语句即可。#include<iostream.h>class CMyClasS{private: int number; int Add(int i) { return number+=i; } int Sub(int i) { return number一=i; } int Mul(int i) { return number*=i; } int Div(int i) { if(i!=0) { return number/=i; } else return number; } ∥********error******** typedef int(FUNC)(int); ∥********error******** FUNC func[];public: CMyClass() { func[0]=CMyClass::Add; func[1]=CMyClass::Sub; func[2]=CMyClass::Mul; func[3]=CMyClass::Div; number=0; } int CallFunction(int i,int j) { ∥********error******** return(func[i])(j); }};void mein(){ CMyClas S myobj; cout<<myobj.CallFunction(0,10)<<end1; cout<<myobj.CallFunction(1,4)<<end1; cout<<myobj.CallFunction(2,5)<<endl; cout<<myobj.CallFunction(3,15)<<endl; cout<<myobj.CallFunction(3,0)<<endl;}
问答题使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)定义复数类CComplex的私有成员变量real和imaginary,分别用来表示复数的实部和虚部,都是 double 类型的变量。 请在注释//********1********后添加适当的语句。 (2)添加复数类CComplex的带一个参数的构造函数,分别将real和imaginary赋值为参数r和0。请在注释//********2********后添加适当的语句。 (3)完成对运算符“+”的重载,分别对复数的实部和虚部相加。请在注释//********3********后添加适当的语句。 (4)完成复数的友元函数Equal(CComplex&c1。CComplex&c2)的定义,如果两个数的实部和虚部都相等,则返回1,否则返回0,请在注释//********4********后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h> class CComplex{private: //********1********public: CComplex() { real=imaginary=0; } CComplex(double r) { //********2******** } CComplex operator+(ccomplex&c1) { //********3******** temp.real=real+c1.real; temp.imaginary=imaginary+c1.imaginary; return temp; } void Set(int re,int imag) { real=re; imaglnary=imag; } friend bool Equal(CComplex&c1,CComplex& c2);};bool Equal(CComplex&c1,CComplex&c2){ //********4******** } int main() { CComplex complexl(5); CComplex complex2; cout<<Equal(complex1,complex2)<<end1; : complex2.Set(5,0); cout<<Equal(complexl,complex2)<<end1; return 0;}
问答题使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使该程序的输出结果为:20,1515,20注意:错误的语句在//******error******的下面,修改该语句即可。#include<iostream.h>//******error******void Exchangel(int m,int n){int t=m;m=n;n=t;}//******error******void Exchange2(int m,int n){int t=*m;*m=*n;*n=t;}void main(){int b=20;int a=15;Exchangel(a,b);cout<<a<<','<<b<<endl;//******error******Exchange2(a,b);cout<<a<<','<<b<<endl;}
问答题请编写一个函数fun(char*num),该函数返回与传入的二进制数相应的十进制数,参数num指向存放8位二进制数的字符数组。二进制数转换为十进制数的方法是将二进制数的每一位乘以该位的权然后相加,如二进制数10010100=1*27+0*26 +0*25+1*24+0*23+1*22+0*21+2*0=148。 注意:部分源程序已存在文件test32_2.cpp中。 请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。 文件test32_2.cpp的内容如下: #include<iostream.h> int fun(char *num) { } void main ( ) { char num[8],ch; cout<<"Enter an 8 bit binary number"; for(int i=0;i<8;i++) { cin>>ch; num[i]=ch; } cout<<fun(num)<<end1; }
问答题使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。程序的功能是寻找1~500以内的亲和数并显示出来,函数amicableNum(int m,int n)判定两个数是否是亲和数。亲和数的定义为:两个数m和n,如果n的所有因子之和(因子除掉自身)等于m,且m的所有因子等于n,则m、n是互为亲和数。注意:不能修改程序的其他部分,只能补充amicableNum(int m,int n)函数。#include<iostream.h>int amicableNum(int n){int sum=0;for(int i=1;i<n;i++){if(n%i==0){sum+=i;}}return sum;}bool amicableNum(int m,int n){}void main(){cout<<"1~500以内的亲和数有:"<<endl;for(int i=1;i<500;i++){for(int j=i+1;j<500;j++){if(i!=j){if(amicableNum(i,j)==1){cout<<i<<' '<<j<<endl;}}}}return;}
问答题使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序,使输入某年某月某日,可判断这一天是这一年的第几天。
程序分析:以3月5日为例,应该先把前两个月的天数加起来,然后再加上5天即本年的第几天(特殊情况:闰年输入月份大于3时需考虑多加一天)。
注意:只能补充函数func(int year,int month,int day),请勿改动其他部分的内容。
#include
int func(int year,int month,int
day)
{
}
void main()
{
cout<
问答题使用VC6打开考生文件夹下的源程序文件modi3.cpp。程序通过继承关系,实现对姓名的控制。类TestClass 1实现对名字访问的接口,TestClass2实现对名字的设置和输出。程序输出为:
TestClass2Name
May
其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。
(1)在类TestClassl中定义接口函数GetName,为纯虚函数。请在注释∥********1********后添加适当的语句。
(2)函数GetName20实现获得名字的缓存,但是只获得读允许操作这个缓存,请在注释∥********2********后添加适当的语句。
(3)实现TestClass2的构造函数,请在注释∥********3********后添加适当的语句。
(4)完成TestClass2的构造函数,实现对名字的处理。请在注释∥********4********后添加适当的语句。
注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。
#include
class TestClassl
{
public:
∥********1********
};
class TestClass2:public TestClassl
{
public:
void GetName()
{
coutGetName();
cout<
问答题请使用VC6或使用【答题】菜单打开
proj1下的工程proj1,其中有枚举DOGCOLOR、狗类Dog和主函数main的定义。程序中位于每个“// ERROR ****found****”下的语句行有错误,请加以改正。改正后程序的输出结果应该是:
There is a white dog named Hoho.
There is a black dog named Haha.
There is a motley dog named Hihi.
注意:只修改每个“// ERROR ****found****”下的那一行,不要改动程序中的其他内容。
#include <iostream>
using namespace std;
//狗的颜色:黑、白、黄、褐、花、其他
enum DOGCOLOR {BLACK, WHITE, YELLOW, BROWN, PIEBALD, OTHER};
class Dog{ //狗类
DOGCOLOR color;
char name[20];
static int count;
public:
Dog (char name[], DOGCOLOR color){
strcpy(this->name,name);
// ERROR *******found*******
strcpy (this -> color, color);
}
DOGCOLOR getColor() const {return color;}
// ERROR *******found*******
const char * getName() const {return * name;}
const char * getColorString() const {
switch(color) {
case BLACK: return "black";
case WHITE: return "white";
case YELLOW: return "yellow";
case BROWN: return "brown";
case PIEBALD: return "piebald";
}
return "motley";
}
void show() const {
cout << "There is a" << getColorString() << "dog named" << name << "." << endl;
}
};
int main() {
// ERROR *******found*******
Dog dog1("Hoho", WHITE), dog2("Haha", BLACK); dog3("Hihi", OTHER);
dog1.show();
dog2.show();
dog3.show();
return 0;
}
问答题请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1。程序中位于每个“//ERROR****ound****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:value=63number=1注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classMyClass{int*P;constintN;public://ERROR**********found**********MyClass(intval):N=1{P=newint;*p=val;}//ERROR**********found**********~MyClass(){delete*p;)friendvoidprint(MyClass&obj);};//ERROR**********found**********voidMyClass::print(MyClass&obj){cout<<"value="<<*(obj.P)<<end1;cout<<"number:"<<obj.N<<end1;}intmain(){MyClassobj(63);print(obj);return0;}
问答题使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果是: nember=1 nember=10 nember=100 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#include<iostream.h>Class TestClass{public: TestClass(int i){ nember=i; } void SetNember(int m){ nember=m; } int GetNember()const{ return nember; } void Print()conSt{ cout<<"nember="<<nember<<endl; }private: int nember;};void main(){ //*******error******** TestClass obj1; obj1.Print(); TestClass obj2(3); //*******error******** obj1.nember=10; //********error******** TestClass.SetNember(100); obj1.Print(); obj2.Print();}
问答题请使用VC6或使用[答题]菜单打开考生目录proj3下的工程文件proj3。此工程中包含一个源程序文件proj3.cpp,其中定义了用于表示平面坐标系中的点的类MyPoint和表示三角形的类MyTriangle;程序应当显示:6.828432但程序中有缺少部分,请按照以下提示,把缺失部分补充完整:(1)在“//**1******found****”的下方是构造函数的定义,它用参数提供的3个顶点对point1、point2和point3进行初始化。(2)在“//**2******found****”的下方是成员函数perimeter的定义,该函数返回三角形的周长。(3)在“//**3******found****”的下方是成员函数area的定义中的一条语句。函数area返回三角形的面积。方法是:若a、b、c为三角形的3个边长,并令s=,则三角形的面积A为。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。//proj3.cpp#include<iostream>#include<cmath>usingnamespacestd;classMyPoint{//表示平面坐标系中的点的类doublex;doubley;public:MyPoint(doublex,doubley){this->x=x;this->y=y;}doublegetX()const{returnx;}doublegetY()const{returny;}voidshow()const{cout<<'('<<x<<','<<y<<')';}};classMyTriangle{//表示三角形的类MyPointpoint1;//三角形的第一个顶点MyPointpoint2;//三角形的第二个顶点MyPointpoint3;//三角形的第三个顶点public:MyTriangle(MyPointp1,MyPointp2,MyPointp3);doubleperimeter()const;//返回三角形的周长doublearea()const;//返回三角形的面积};//**1************found**********MyTriangle::MyTriangle(MyPointp1,MyPointp2,MyPointp3):______{}doubledistance(MyPointp1,MyPointp2)//返回两点之间的距离{returnsqrt((p1.getX()-p2.getX())*(p1.getX()-p2.getX())+(p1.getY()-p2.getY())*(p1.getY()-p2.getY()));}//**2************found**********doubleMyTriangle______{returndistance(point1,point2)+distance(point2,point3)+distance(point3,point1);}doubleMyTriangle::area()const{//**3************found**********doubles=______;//使用perimeter函数returnsqrt(s*(s-distance(point1,point2))*(s-distance(point2,point3))*(s-distance(point3,point1)));}intmain(){MyTriangletri(MyPoint(0,2),MyPoint(2,0),MyPoint(0,0));cout<<tri.perimeter()<<endl<<tri.area()<<endl;return0;}
问答题请使用VC6或使用【答题】菜单打开
proj2下的工程proj2,此工程包含有一个源程序文件proj2.cpp。其中定义了Base1类、Base2类和Derived类。
Base1是一个抽象类,其类体中声明了纯虚函数Show。Base2类的构造函数负责动态分配一个字符数组,并将形参指向的字符串复制到该数组中,复制功能要求通过调用strcpy函数来实现。Derived类以公有继承方式继承Base1类,以私有继承方式继承Base2类。在Derived类的构造函数的成员初始化列表中调用Base类的构造函数。
请在程序中的横线处填写适当的代码,然后删除横线,以完成Base1、Base2和Derived类的功能。此程序的正确输出结果应为:
I"m a derived class.
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“// ****found****”。
// proj2.cpp
#include <iostream>
#include <cstring>
using namespace std;
class Base1 {
public:
// ********found******** 下列语句需要声明纯虚函数Show
______;
};
class Base2 {
protected:
char * _p;
Base2 (const char * s)
{
_p = new char[strlen (s) +i];
// ********found******** 下列语句将形参指向的字符串常量复制到该类的字符数组中
}
~Base2() {delete [] _p;}
};
// ********found******** Derived类公有继承Base1,私有继承Base2类
class Derived:______{
public:
// ********found******** 以下构造函数调用Base2类构造函数
Derived (const char * s):______
{ }
void Show()
{cout << _p << endl;}
};
int main()
{
Base1 * pb = new Derived("I"m a derived class.");
pb -> Show();
delete pb;
return 0;
}