C++期末考试题

1.下面是一个整型数组类intArray的声明,请给出该类所有数据成员的类外定义。要求:
(1)能通过对“>>”、“<<”的重载实现数组元素的直接输入及其输出。输入时,第一次输入的值为数组长度,后面连续输入若干个数作为数组内容。输出时,首先提示该数组元素个数,然后依次输出该数组各元素;
(2)重载“=”、“+”、“-”运算符使之能对两个数组类对象进行直接赋值、加减运算。
(3)写出主函数对该类进行测试。要求:
1)先构造包含10个数组元素的数组对象a,再调用流提取运算符重载函数实现a的元素初始化(元素值分别为1—10),输出a数组;
2)并利用a来构造数组b,输出数组b,并调用get函数获取b中下标为奇数的各元素值并输出,然后调用set函数将上述元素值乘以2,输出b数组;
3)构造一个包含5个元素的数组c,其值全为1,输出该数组,再调用ReSize函数将其大小重置为10,调用“=”重载函数将a的值复制给c,输出数组c;
4)分别将b+c,b-c的值送给数组d和数组e,并输出结果。
class intArray
{public:
intArray(int size);//构造函数
intArray(const intArray &x);//复制构造函数
~intArray();//析构函数
bool Set(int i, int elem);//设置第i个数组元素的值,设置成功返回true,失败返回false
bool Get(int i, int &elem); //获取第i个数组元素的值,获取成功返回true,失败返回false
int Length( ) const;//获取数组的长度
void ReSize ( int size ); //重置数组
intArray &operator=(const intArray&other); //赋值运算符“=”重载函数
intArray &operator+(constintArray &other); //加运算符“=”重载函数
intArray &operator-(constintArray &other) ; //减运算符“=”重载函数
friend ostream &operator>>(ostream &, intArray &); //数组的整体输入
friend ostream & operator<<(ostream&, intArray &); //数组的整体输出
private:
int *element; //指向动态数组的指针
int arraysize; //数组的当前长度
};

// 你们老师给的头文件有点小问题:
// 1. operator+ 和 operator-不能返回intArray引用,局部对象在
//    函数调用结束后会被销毁。
// 2. Get()函数后面加上const,不然拷贝构造函数里的const对象调用不了。
// 3. operaror>>函数的istream错写为ostream.

// 下面的代码已通过VS2008编译,其他编译器应该都可以。
// Update: 2014-04-22 

#include <iostream>
#include <assert.h>

using namespace std;

class intArray
{
public:
intArray(int size);//构造函数
intArray(const intArray &x);//复制构造函数
~intArray();//析构函数
bool Set(int i, int elem);//设置第i个数组元素的值,设置成功返回true,失败返回false
bool Get(int i, int &elem) const; //获取第i个数组元素的值,获取成功返回true,失败返回false
int Length( ) const;//获取数组的长度
void ReSize ( int size ); //重置数组
intArray &operator=(const intArray&other);  //赋值运算符“=”重载函数
intArray operator+(const intArray &other);   //加运算符“=”重载函数
intArray operator-(const intArray &other) ;  //减运算符“=”重载函数
friend istream &operator>>(istream &, intArray &);  //数组的整体输入
friend ostream & operator<<(ostream&, intArray &);  //数组的整体输出
private:
int *element;            //指向动态数组的指针
int arraysize;            //数组的当前长度
};

intArray::intArray(int size)
:arraysize(size)
,element(NULL)
{
assert(this->arraysize >= 0);
if (this->arraysize>0)
element = new int[size];

memset(element, 0, sizeof(int)*arraysize);
}

intArray::intArray(const intArray &x)
{
this->arraysize = x.Length();
if (arraysize > 0)
{
element = new int[arraysize];
for (int i=0; i<arraysize; ++i)
{
int nValue = 0;
x.Get(i, element[i]); 
}
}
}

intArray::~intArray()
{
if (arraysize > 0 && element != NULL)
{
delete[] element;
}
}

//设置第i个数组元素的值,设置成功返回true,失败返回false
bool intArray::Set(int i, int elem)
{
if (i >= this->arraysize)
return false;

if (!this->element)
{
assert(0);
return false;
}

this->element[i] = elem;
return true;
}

//获取第i个数组元素的值,获取成功返回true,失败返回false
bool intArray::Get(int i, int &elem) const
{
if (i >= this->arraysize)
return false;

if (!this->element)
{
assert(0);
return false;
}

elem = this->element[i];
return true;
}

//获取数组的长度
int intArray::Length( ) const
{
return this->arraysize;
}

//重置数组(旧数据丢弃) 
void intArray::ReSize ( int size )
{
if (size == this->arraysize)
return;

if (this->element != NULL)
delete[] element;

this->arraysize = size;
element = new int[size];
assert(element);
memset(element, 0, sizeof(int)*size);
}

//赋值运算符“=”重载函数
intArray& intArray::operator=(const intArray& other)
{
if (arraysize <= 0 || other.Length()<=0 || element==NULL)
return *this;

int nOpCount = min(other.Length(), this->arraysize);
for (int i=0; i<nOpCount; ++i)
{
other.Get(i, element[i]);
}

return *this;
}

//加运算符“+”重载函数
// 如果两个数组大小不一样,直接返回 
intArray& intArray::operator+(const intArray &other)
{
if (arraysize <= 0 || other.Length()<=0 || element==NULL || arraysize!=other.Length())
{
assert(0);
return *this;
}

int nOpCount = this->Length();
intArray temp(nOpCount);
for (int i=0; i<nOpCount; ++i)
{
int nOtherElement = 0;
other.Get(i, nOtherElement);
temp.Set(i. this->element[i] + nOtherElement);
}
return temp;
}

//减运算符“-”重载函数
// 创建一个和this对象相同尺寸的数组 
intArray& intArray::operator-(const intArray &other)
{
if (arraysize <= 0 || other.Length()<=0 || element==NULL || arraysize!=other.Length())
{
assert(0);
return *this;
}

int nOpCount = this->Length();
intArray temp(nOpCount);
for (int i=0; i<nOpCount; ++i)
{
int nOtherElement = 0;
other.Get(i, nOtherElement);
temp.Set(i. this->element[i] - nOtherElement);
}
return temp;
}

//数组的整体输入
istream &operator>>(istream &is, intArray &arr)
{
int nLength = 0;
is >> nLength;
if (nLength != arr.Length())
{
arr.ReSize(nLength);
}

int nValue = 0;
for (int i=0; i<nLength; ++i)
{
is >> nValue;
arr.Set(i, nValue);
}

    return is;


//数组的整体输出
ostream & operator<<(ostream& os, intArray &arr)
{
os << "该数组元素个数为:" << arr.Length() << endl;
int nValue = 0;
for (int i=0; i<arr.Length(); ++i)
{
arr.Get(i, nValue);
os << nValue << " ";
}
os << endl;

    return os;
}


int main()
{
//(1)先构造包含10个数组元素的数组对象a,再调用流提取运算符重载函数实现a的元素初始化
//(元素值分别为1—10),输出a数组;
intArray a(10);
cin >> a;
cout << a;

// 2)并利用a来构造数组b,输出数组b,并调用get函数获取b中下标为奇数的各元素值并输出,
// 然后调用set函数将上述元素值乘以2,输出b数组;
intArray b(a);
cout << b;
for (int i=0; i<b.Length(); ++i)
{
if (i%2 != 0)//积数
{
int nElement = 0;
b.Get(i, nElement);
b.Set(i, nElement*2);
cout << nElement << " ";
}
}
cout << endl;
cout << b;

// 3)构造一个包含5个元素的数组c,其值全为1,输出该数组,再调用ReSize函数将其大小重置
//  为10,调用“=”重载函数将a的值复制给c,输出数组c;
intArray c(5);
for (int i=0; i<c.Length(); ++i)
c.Set(i, 1);
cout << c;
c.ReSize(10);
c = a;
cout << c;

// 4)分别将b+c,b-c的值送给数组d和数组e,并输出结果。
intArray d = b+c;
cout << d;
intArray e = b-c;
cout << e;

return 0;
}

追问

可是有人做出来了啊。。😳

可是有人做出来了啊。。😳

追答

做出来是做出来,但是肯定有问题。要么编译不过,要么编译过了运行时崩溃。

追问

不知道。老师要我们下次交

追答

你就交这个就行,要是我就直接跟老师说你头文件写的有问题。老师一看就知道有问题了,很明显的错误。

追问

哦哦。谢谢了

温馨提示:内容为网友见解,仅供参考
无其他回答

求大一C++期末考试试卷,感激不尽!!!
A、B、C、D、C、B、B、D、B、C2. 填空题 (共5题,每题2分,共10分)(1)16,FFFF (2)逻辑与、逻辑或 (3)冒泡排序 、 选择排序 或交换排序 (4)查找 回溯(5)# : a[i]>number 或 number=number 或 number<=a[i] @: number → a[10] 二.C++程序设计部分(共计80分)(三)选择题(每题1.5分...

急求!!此C++期末考试题解析
Test *p = new Test[4]; \/\/调用Test的默认构造函数Test::test(),又因为是数组,隐式调用了4次,构造了4个Test实例:p[0] , p[1], p[2], p[3]Test *a[4] ; \/\/声明了1个指针数组,这个数组指向Test类型,数组大小为4。注意,只是定义了这个指针数组,并没有给这个指针数组中的...

马上期末了老师让教c语言大作业...不知道怎么办了..满意后 再追加30分...
数据结构,算法都有现成的下载,或者标准里都包含了,你百度一下STL,还有函数 QUICKSORT,这两个直接在C++标准里面就有,也就是说只要包含了头文件,直接可以用的,瞬间就解决了前面两个问题吧?排序甚至都不用自己来,直接用map,把总成绩作为排序的键值,你插入的时候自动就给你排好序了 然后再学习...

c++大学考试题软件有哪些
一、题多多 收录题目涵盖日常期末考试答题、学历、继续教育、职业技能鉴定、医学、资格、财经、招录、外语、外贸等数千个热门考试。还包含了在线搜题,不过有上限。二、考试酷 这个是我用的次数最多的一款,这个试题含量更多,题库更加丰富,包含了很多相关专业课的题目,也可以自己导入题目自主练习。三、...

C++期末考试,我感觉这学期都没学,还有一个月,有什么办法不挂啊?_百度...
一个月真的不少了,现在开始看老师的PPT开始学习,时间足够了,最好在问问你的学长,让他们告诉你一些重点,按照重点复习,不挂是没什么大问题的,如果是纸面上的考试就更没问题了

求c++考试形式,怎么复习
<),看看考试的题型,刷下题,如果实在不行,就找平时的教材上的编程上机实验题来复习。另外也可以问下身边的同学,尤其是学霸,借他们的笔记来看下,或者请他们为你讲下期末复习的思路,也可以根据C++教材的内容顺序来复习。不要急,慢慢来,特别是。其他科目的复习就不好说了,不敢班门弄斧。

跪求南华大学11年的C++期末考试试题和答案,有的请发到57575737336@qq.c...
下个电驴,在电驴里搜一下,以前好像见过的。电驴里的资源虽远没以前全了但相信你要的东西应该还有的。

c++没学期末怎么办
期末的时候可以买一些题库练习一下,或者是自己学习。如果是大家都没学过,那么大概率考试中也不会出现题目。

大一期末考试高数,物理,英语,C++都考到75以上难吗
高数的难点在于基础的掌握,难题不多(出一个难的就难死人,直接放弃),想上75关键是背各种题型,买5年来的期末试卷,全部做熟搞懂,背下最好。物理这个就不好说了…基本上都是高数的应用几乎没有其他新内容…同高数复习方法,c 是最简单的,不过没学的话也很难,小技巧小知识点很多,同高数复习...

求教,期末C++怎么复习好
比如我读初中高中的时候,有这么一些经验:1.考前要把自己所有要看的都看一遍,才放心去睡觉(不然往往最终会复习不完),然后好好补充了睡眠以后,醒来再一次粗略地浏览一遍,加深印象。2.考试前几个小时有三种材料最值得看,A.以前几次考试的错题,后来懂了的论述题、计算题,或是还未弄懂的选择题...

相似回答