C++填空题

更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
下列程序定义了类Fruits(“水果类”,用于判断对象是否是所指定的水果)和主函数main,程序中位于每个“//ERROR**********found**********”下的语句行有错误,请加以更正。

更正后程序的输出应该是:

         fruit1是苹果吗?true

         fruit1是梨吗?false

         fruit2是苹果吗?false

         fruit2是梨吗?true

[程序]

#include<iostream>

#pragma warning(disable:4996)

using namespace std;

class Fruits{//水果类

public:

      Fruits(char *the_name,float the_price);

      //ERROR**********found**********

      void ~Fruits(){}//  定义析构函数

      bool  isFruit(char   *name)const;//  判断是否是参数所指定的水果

private:

      char  name[50]; //   水果名称

      float  price; //   水果价格

};

Fruits::Fruits(char *the_name,float  the_price)

{

      //ERROR**********found**********

      name=the_name;

      price=the_price;

}

bool  Fruits::isFruit(char *name)const

{

      //ERROR**********found**********

      return  (strcmp(name,name)==0);

}

int  main()

{

      Fruits  fruit1(苹果,3.00);

      Fruits  fruit2(梨,2.50);

      cout<<boolalpha;

      cout<<”fruit1  是苹果吗?”<<fruit1.isFruit(苹果)<<endl;

      cout<<”fruit1  是梨吗?”<<fruit1.isFruit(梨)<<endl;

      cout<<”fruit2  是苹果吗?”<<fruit2.isFruit(苹果)<<endl;

      cout<<”fruit2  是梨吗?”<<fruit2.isFruit(梨)<<endl;

      system(pause);

      return 0;

}

 

下列程序定义了类MyClassA、类MyClassB和主函数main,用以统计数组中奇数元素的个数。若类MyClassA中元素的值为奇数,则类MyClassB中对应元素的值为1,否则为0;类MyClassB中所有元素的和就是类MyClassA中奇元素的个数。程序位于每个“//ERROR**********found**********”下的语句行有错误,请加以更正。

更正后程序的输出应该是:

 3 0 1 4 7 5 2 9 6 8

 奇数个数是:5

[程序]

#include<iostream>

using namespace std;

class MyClassA{

public:

 MyClassA(int *p,int n):length(n)

 {

 int i;

 //ERROR**********found**********

 arr=new int(length);

 for(i=0;i<length;i++)

 arr[i]=p[i];

 }

 int GetI(int i)const{ return arr[i];}

 int GetLength()const{ return length;}

 ~MyClassA(){ delete []arr; }

protected:

 int *arr; // 数组

 int length; // 元素个数

};

//ERROR**********found**********

class MyClassB: protected MyClassA{

public:

 MyClassB(int *p,int n);

 int GetI(int i)const;

 void count(); // 设置元素标记

 ~MyClassB();

private:

 int *arr; // 元素标记,1表示是奇数,0表示不是奇数

};

 

MyClassB::MyClassB(int *p,int n):MyClassA(p,n)

{

 arr=new int[length];

}

int MyClassB::GetI(int i)const{ return arr[i];}

void MyClassB::count()

{

 int i;

 for(i=0;i<length;i++)

 if(MyClassA::arr[i]%2==1)arr[i]=1;

 else arr[i]=0;

}

MyClassB::~MyClassB()

{

 delete []arr;

}

int main()

{

 int t[10]={3,0,1,4,7,5,2,9,6,8},i,s=0;

 MyClassB test(t,10);

 test.count();

 for(i=0;i<test.GetLength();i++){

//ERROR**********found**********

 cout<<test.GetI(i)<<'\t';

 s+=test.GetI(i);

 }

 cout<<endl;

 cout<<奇数个数是:;

 cout<<s<<endl;

 system(pause);

 return 0;

}

 

下列程序定义了类Array(“数组”类)和主函数main,在主函数中定义了一个数组类的对象,程序实现了求一维数组中最大元素的值及最大元素所处位置。请在程序中“//**********found**********”下的横线处填写适当的代码,以实现上述类定义。

此程序的正确输出结果应为:

 一维数组为: 3 9 6 9 5 9 8 2 9 7

 最大元素的值是:9,其所在位置分别是: 2 4 6 9

[程序]

#include<iostream>

using namespace std;

class Array{

 double *p; // 用p指向的动态空间存储要处理的一维数组

 double max; // max存放一维数组中元素的最大值

 int len; // len存放一维数组的大小(元素个数)

public:

 Array(double *t,int n); // 构造函数,用t初始化p,用n初始化len

 void f( ); // 求一维数组中元素的最大值

 void show(); // 输出一维数组、最大元素及其位置

//**********found**********

 _____(1)______ ; // 释放动态空间

};

Array::Array(double *t,int n): len(n)

{

 int i;

 p= new double[len];

 for(i=0;i<len;i++)

//**********found**********

 _____(2)______ ;

}

void Array::f( )

{

 int i;

//**********found**********

 ______(3)_____ ;

 for(i=1;i<len;i++)

 if(p[i]>max)max=p[i];

}

void Array::show()

{

 int i;

 cout<<一维数组为:;

 for(i=0;i<len;i++)

 cout<<p[i]<<'\t';

 cout<<\n最大元素的值是:<<max<<,其所在位置分别是:;

 for(i=0;i<len;i++)

 //**********found**********

 if(p[i]==max)cout<< _____ (4) ______ <<'\t';

 cout<<endl;

}

Array::~Array() { delete []p; }

int main(void)

{

 double t[]={3,9,6,9,5,9,8,2,9,7};

 Array test(t,sizeof(t)/8);

 test.f();

 test.show();

 system(pause);

 return 0;

}

 

下列程序定义了类Array(“数组”)和主函数main,在主函数中定义了一个数组类的对象,程序实现了求数组中比x大的元素个数。请在程序中“//**********found**********”下的横线处填写适当的代码,以实现上述类定义。

此程序的正确输出结果应为:

 数组为:

 6 8 3 9 4 2 1 7 5

 x为:5

 比5大的元素个数为:4

[程序]

#include<iostream>

using namespace std;

class Array{

public:

 Array(float *p,int m,float x1); // 用p初始化a,m初始化n,x1初始化x

 ~Array(); // 释放动态空间

 void print()const; // 按指定格式输出结果

 void count(); // 计算比x大的元素个数

private:

 float *a,x; // 数组及指定的x

 int n; // 数组大小(所有元素个数)

 static int number; // 数组中比x大的元素个数

};

//**********found**********

____________(1)______________ ;

Array::Array(float *p,int m,float x1):n(m),x(x1)

{

 int i;

 //**********found**********

 ____________(2)______________ ;

 for(i=0;i<n;i++)

 a[i]=p[i];

}

Array::~Array()

{

 //**********found**********

 ____________(3)______________ ;

}

void Array::print()const

{

 int i;

 cout<<数组为:\n;

 for(i=0;i<n;i++)

 cout<<a[i]<<'\t';

 cout<<endl;

 cout<<x为:<<x<<endl;

 cout<<比<<x<<大的元素个数为:<<number<<endl;

}

void Array::count()

{

 int i;

 for(i=0;i<n;i++)

 //**********found**********

 ________(4)_________ number++;

}

int main()

{

 float t[9]={6,8,3,9,4,2,1,7,5};

 Array test(t,9,5.0);

 test.count();

 test.print();

 system(pause);

 return 0;

}

 

下列程序定义了类STRING(“字符串”)和主函数main,在主函数中定义了一个字符串类的对象,程序实现了将原字符串(数据成员)第pos个位置之前的字符用另一个字符串(参数)替换,即替换前pos减1个字符。请在程序中“//**********found**********”下的横线处填写适当的代码,以实现上述类定义。

此程序的正确输出结果应为:

 原字符串为:123456789

 pos=5,用abcde替换后为:abcd56789

 pos=8,用abcde替换后为:abcde89

[程序]

#include<iostream>

#include<cstring>

using namespace std;

class STRING{

public:

 STRING(char *s);

 ~STRING();

 void replace(char*s,int pos); // 按题意用s替换pos前的字符

 char* get()const; // 取出字符串

private:

 char *str; // 存储字符串的动态空间

};

STRING::STRING(char *s)

{

 //**********found**********

 ____________(1)______________ ; // 分配动态空间

 strcpy(str,s);

}

STRING::~STRING()

{

 //**********found**********

 _______(2)_______; // 释放动态空间

}

void STRING::replace(char*s,int pos)

{

 int i,j=pos-1;

 if(strlen(s)>=pos)

 for(i=0;i<j;i++)  // 复制字符串s

 str[i]=s[i];

 else{

 char *ss=new char[strlen(str)+strlen(s)-pos+2];

 for(i=0;s[i];i++) // 复制字符串s

 ss[i]=s[i];

 //**********found**********

 while( ____(3)____ ){ // 复制指定位置的字符串

 ss[i]=str[j];

 i++;

 j++;

 }

 ss[i]='@';

 delete []str;

 //**********found**********

 ______(4)______ ; // 将替换后的字符串ss作为数据成员str

 }

}

char* STRING::get()const

{

 return str;

}

int main(void )

{

 int pos;

 char *s=abcde;

 STRING t1(123456789),t2(123456789);

 cout<<原字符串为:<<t1.get()<<endl;

 pos=5;

 t1.replace(s,pos);

 cout<<pos=<<pos<<,用<<s<<替换后为:<<t1.get()<<endl;

 cout<<原字符串为:<<t2.get()<<endl;

 pos=8;

 t2.replace(s,pos);

 cout<<pos=<<pos<<,用<<s<<替换后为:<<t2.get()<<endl;

 system(pause);

 return 0;

}

 

下列程序定义了类Dates(“日期”)和类Plants(“植物”),以及主函数main,在主函数中定义了二个植物类的对象,程序实现了它们开花时间的比较。请在程序中“//**********found**********”下的横线处填写适当的代码,以实现上述类定义。

对于主函数中给定的测试数据,程序的正确输出结果应为:

 桃开花时间是:2020-3-10

 杏开花时间是:2020-4-5

 桃和杏不在同一天开花。

[程序]

#include<iostream>

using namespace std;

class Dates{

public:

 Dates(int y=0,int m=0,int d=0):year(y),month(m),day(d){ }

 ~Dates(){ }

 int GetYear(){return year;}

 int GetMonth(){return month;}

 int GetDay(){return day;}

private:

//**********found**********

 ____________(1)______________ ; // 开花日期(年月日)

};

class Plants:public Dates{

public:

 Plants(char*n,int y=0,int m=0,int d=0);

 ~Plants();

 char*GetName();

private:

 char *name; // 植物名称

};

//**********found**********

Plants::Plants(char*n,int y,int m,int d): _________(2)_____________

{

 int length;

 length=strlen(n);

 name=new char[length+1];

 strcpy_s(name,length+1,n);

}

Plants::~Plants()

{

 delete []name;

}

char* Plants::GetName()

{

//**********found**********

 return ________(3)___________ ;

}

bool IsEqual(Plants &amp;pa,Plants &amp;pb) // 判断pa和pb开花日期是否相同,是返回真,否则返回假

{

 if(pa.GetYear()==pb.GetYear())

//**********found**********

 if( ___________(4)____________ )

 if(pa.GetDay()==pb.GetDay())return true;

 return false;

}

int main()

{

 Plants plantA(桃,2020,3,10);

 Plants plantB(杏,2020,4,5);

 cout<<plantA.GetName()<<开花时间是:<<plantA.GetYear()<<'-'<<plantA.GetMonth()<<'-'<<plantA.GetDay()<<endl;

 cout<<plantB.GetName()<<开花时间是:<<plantB.GetYear()<<'-'<<plantB.GetMonth()<<'-'<<plantB.GetDay()<<endl;

 if(IsEqual(plantA,plantB))

 cout<<plantA.GetName()<<和<<plantB.GetName()<<在同一天开花。<<endl;

 else cout<<plantA.GetName()<<和<<plantB.GetName()<<不在同一天开花。<<endl;

 system(pause);

 return 0;

}

 

下列程序定义了类Date,用于表示年月日;类Plants中有Date类的数据成员。请在程序中//**********found**********之下一行的横线处填写适当的代码,使程序完整、正确。

输出结果为:

 桃和杏不在同一天开花。

[程序]

#include<iostream>

using namespace std;

class Date{

public:

 Date(int y=0,int m=0,int d=0):year(y),month(m),day(d){ }

 ~Date(){ }

 // 比较date1和date2,若二者相同,则返回true,否则返回false

 friend bool isEqual(Date date1,Date date2);

private:

 //**********found**********

 ____________(1)______________ ; // 开花日期(年月日)

};

class Plants{

public:

 Plants(char*n,Date d);

 ~Plants();

 Date getDate();

 char*GetName();

private:

 char *name; // 植物名称

 Date date; // 该植物的开花日期

};

bool isEqual(Date date1,Date date2)

{

 //**********found**********

 return ____________________(2)________________________________;

}

 

Plants::Plants(char*n,Date d)

{

 int length;

 length=strlen(n);

 //**********found**********

 ____________(3)______________;

 strcpy_s(name,length+1,n);

 date=d;

}

Plants::~Plants()

{

 if(name)

 //**********found**********

 __________(4)_________ ;

}

Date Plants::getDate()

{

 return date;

}

char* Plants::GetName()

{

 return name ;

}

int main()

{

 Plants plantA(桃,Date(2009,3,10));

 Plants plantB(杏,Date(2009,4,5));

 if(isEqual(plantA.getDate(),plantB.getDate()))

 cout<<plantA.GetName()<<和<<plantB.GetName()<<在同一天开花。<<endl;

 else cout<<plantA.GetName()<<和<<plantB.GetName()<<不在同一天开花。<<endl;

 system(pause);

 return 0;

}

 


下列程序定义了类Array(“数组”类)、类IntArray(“整型数组”类)和类CharArray(“字符数组”类)的定义,以及主函数main的定义。在主函数中定义了2个对象,实现了整型数组和字符数组的输入与输出。请在程序中“//**********found**********”下的横线处填写适当的代码,以实现上述类定义。

此程序的正确输出结果应为(下划线部分为键盘输入内容):

 设置整型数组大小: 8 

 输入整型数组: 1 2 3 4 5 6 7 8

 整型数组为:1,2,3,4,5,6,7,8

 设置字符数组大小: 16 

 输入字符数组: I am a student.

 字符数组为:I am a student.

[程序]

#include<iostream>

#include<cstring>

using namespace std;

class Array{ // 数组类

public:

 Array(int n):length(n){ }

 //**********found**********

 ____________(1)_______________ ; // 输入数组

 virtual void output()const=0; // 输出数组

protected:

 int length; // 数组大小(元素个数)

};

class IntArray:public Array{ // 整型数组类

public:

 IntArray(int n):Array(n)

 {

 arr=new int[length];

 }

 //**********found**********

 ____________(2)_______________

 void input()

 {

 int i;

 cout<<输入整型数组:;

 for(i=0;i<length;i++)

 cin>>arr[i];

 }

 void output()const

 {

 int i;

 cout<<整型数组为:;

 for(i=0;i<length;i++)

 if(i==length-1)cout<<arr[i]<<endl;

 //**********found**********

 else __________(3)_________________;

 }

private:

 int *arr;

};

class CharArray:public Array{ // 字符数组类

public:

 //**********found**********

 CharArray(int n): _______(4)________

 {

 arr=new char[length];

 }

 ~CharArray(){ delete []arr; }

 void input()

 {

 char c;

 cin.get(c); // 清除缓存中的换行符

 cout<<输入字符数组:;

 cin.getline(arr,length);

 }

 void output()const

 {

 cout<<字符数组为:;

 cout<<arr<<endl;

 }

private:

 char *arr;

};

void fun(Array *p)

{

 p->input();

 p->output();

}

void fun(Array *p)

{

 p->input();

 p->output();

}

int main(void )

{

 int n;

 cout<<设置整型数组大小:;

 cin>>n;

 IntArray test1(n);

 fun(&amp;test1);

 cout<<设置字符数组大小:;

 cin>>n;

 CharArray test2(n);

 fun(&amp;test2);

 system(pause);

 return 0;

}

 

1 2