C++编程题(另外加分)

重载运算符“^”实现数组各对应元素相乘方。如:a[3]={2,2,2},b[3]={3,3,3},则a^b={8,8,8}。具体要求如下:(1)私有数据成员:inta[3... 重载运算符“^”实现数组各对应元素相乘方。如:a[3]={2,2,2},b[3]={3,3,3},则a^b={8,8,8}。
具体要求如下:
(1)私有数据成员:int a[3];
(2)共有成员函数:
构造函数:初始化数据成员。
重载运算符“^”的有元函数。
void print():输出数组成员的函数。
(3)在主函数中定义t1(以数组a作参数)、t2(以数组b作参数)、和t3(无参),通过语句“t3=t1^t2;”对类进行测试。

用友元函数求圆柱体的体积,设圆柱体的半径为r、高为h。
要求如下:(1)定义一个类A,r和h为类A的私有数据成员,利用构造函数对r和h赋初值。
(2)定义A的两个公有成员函数Getr()和Geth(),分别用于提取私有数据r和h。
(3)分别定义一个有元函数doubleV1(A)和普通函数double V2(double,double)来计算圆柱体的体积。

定义一个数组类Array,将二维数组中小于平均值的元素放在数组的前面,大于平均值的元素放在数组的后面。具体要求如下:
(1)私用数据成员:
int(*a)[5]:表示二维数组。

int n;:二维数组的行数。

float ave:二维数组的平均值。
(2)共有成员函数:
arry(int b[][5],int n):构造函数,用n行5列的数组初始化成员数据。

void f():功能函数,求二维数组的平均值。

void fun():功能函数,根据题目要求调整二维数组。

void show():功能函数,输出成员数组。

析构函数
(3)设计一个完整的程序对该类进行测试。
展开
 我来答
pjl110
推荐于2018-04-21 · TA获得超过587个赞
知道小有建树答主
回答量:285
采纳率:0%
帮助的人:98.9万
展开全部
哈哈哈哈!再给你来个纯手工打磨的!
vs2005上运行通过!完全按照题意要求整出来的。
狠吧!

#include <iostream>
#include <math.h>
#include <time.h>
#include <iomanip>

using namespace std;

class YuanSuChenFan
{
public:
YuanSuChenFan()
{
a[0] = 0;
a[1] = 0;
a[2] = 0;
}
YuanSuChenFan(int a1,int a2,int a3)
{
a[0] = a1;
a[1] = a2;
a[2] = a3;
}
~YuanSuChenFan()
{

}
private:
int a[3];
public:
void print()
{
cout<<'{'<<a[0]<<','
<<a[1]<<','
<<a[2]<<'}'<<endl;
}
YuanSuChenFan operator ^(YuanSuChenFan yscf)
{
YuanSuChenFan yscf_res;
yscf_res.a[0]=pow((float)a[0],yscf.a[0]);
yscf_res.a[1]=pow((float)a[1],yscf.a[1]);
yscf_res.a[2]=pow((float)a[2],yscf.a[2]);
return yscf_res;
}

};

const double PI = 3.1415926;
class A
{
public:

A(double radio = 1,double height = 1)
{
r = radio;
h = height;
}
~A(){}
private:
double r;
double h;
public:
double Getr()
{
return r;
}
double Geth()
{
return h;
}
public:
double V2()
{
return PI*r*r*h;
}
friend double V1(A a)
{
return PI*a.r*a.r*a.h;
}
};

class Array
{
public:
Array();
Array(int b[][5],int n);
~Array()
{

}
private:
int (*a)[5];
int n; //二维数组的行数。
float ave; //二维数组的平均值。
public:
void f(); //功能函数,求二维数组的平均值。
void fun(); //功能函数,根据题目要求调整二维数组。
void show(); //功能函数,输出成员数组。
void create(int b[][5],int n);
};
Array::Array(int b[][5],int _n)
{
ave = 0.0f;
a=b;
n=_n;
}

void Array::create(int b[][5],int _n)
{
ave = 0.0f;
a=b;
n=_n;
}

Array::Array()
{

}
void Array::f ()
{
ave = 0.0f;
for(int i=0;i<n;i++)
{
for(int j=0;j<5;j++)
{
ave+=(float)a[i][j];
}

}
ave=ave/(float)(n*5);

show();
cout<<"当前数列Array平均值:"<<ave<<endl;

}
void Array::show ()
{
cout<<endl<<"显示当前数列Array:"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<5;j++)
{
cout<<setw(10)<<a[i][j];
}
cout<<endl;
}

}
void Array::fun ()
{
int *ptp=new int[5*n];
for(int i=0;i<n;i++)
{
for(int j=0;j<5;j++)
{
ptp[i*5+j]=a[i][j];
}
}
for(int i=0;i<5*n;i++)
{
for(int j=0;j<5*n;j++)
{
if(ptp[i]<ptp[j])
{
int temp=ptp[i];
ptp[i]=ptp[j];
ptp[j]=temp;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<5;j++)
{
a[i][j]=ptp[i*5+j];
}
}
cout<<endl<<" 经过“大于平均值的元素放在数组的后面”处理后。"<<endl;
show();
delete []ptp;
}

void main()
{
cout<<"第一题:"<<endl;
YuanSuChenFan t1(2,2,2),t2(3,3,3),t3;
t3 = t1^t2;
cout<<"t1=";
t1.print ();
cout<<"t2=";
t2.print ();
cout<<"t3=";
t3.print ();
cout<<endl;

cout<<"第二题:"<<endl;
A circle(10,15);
cout<<"创建圆柱:半径("<<circle.Getr ()
<<")高度("<<circle.Geth()<<")"<<endl;
cout<<"V1计算面积结果:";
cout<<V1(circle)<<endl;
cout<<"V2计算面积结果:";
cout<<circle.V2 ()<<endl;
cout<<endl;

cout<<"第三题,请选择显示方式:"<<endl;
cout<<"1、使用随机数组显示本题(按1);"<<endl;
cout<<"2、手动输入数组显示本题(按2);"<<endl;
cout<<"3、退出(按3);"<<endl;

int sel;
int cn = 6;
cin>>sel;

if(sel==1)
{
int rand_input[6][5];
Array ar(rand_input,cn);
srand(time(NULL));
for(int i=0;i<cn;i++)
{
for(int j=0;j<5;j++)
{
rand_input[i][j]=rand()%1000;
}
}
ar.show ();
ar.f ();
ar.fun ();
}
else if(sel==2)
{
cout<<"请输入数组行数(回车确认):"<<endl;
cin>>cn;
int (*psn_input)[5]=new int[cn][5];
if(cn>10)
{
cout<<"大佬,"<<cn*5<<"个数字,你想输疯了么?"<<endl;
cout<<"好言难劝该死的鬼,输吧!"<<endl;
}
for(int i=0;i<cn * 5;i++)
{
cout<<"第"<<i/5+1<<"行"<<",第"<<i%5+1<<"列:";
cin >>psn_input[i/5][i%5];
}

Array ar(psn_input,cn);
ar.show ();
ar.f ();
ar.fun ();
delete []psn_input;
}
else
{
return;
}

return;
}

====================================================
补充一下:

下一楼的说的也有一定道理!
那用:
for(int i=0;i<n;i++)
{
for(int j=0;j<5;j++)
{
a[i][j]=b[i][j];
}
}
代替
a=b;
不就可以把b[][]的内容拷贝到a[][]下了么?
因该是这样的吧!还没测试过!你try一下!

int (*p)[N] 等价于:

typedef int Nint[N]; //Nint 被定义为三个int单元大小的类型

Nint *p; //然后定义一个指向Nint类型的指针

其中p又叫做数组指针,主要用于取定长数组。

例如每个汉字占用两个字符,我们就可以定义int (*p)[2]去指向一个字符串,当p每次累加就指向下一个汉字。这样操作更简洁方便。

int *p[N]
则是我们常见的一个大小为N的int型指针数组

他们的用法如下:

int (*p)[3] ,a[2][3]; p=a ; // 则p[][]==a[][]

int *p[2],a[2][3]; p[0]=a[0]; p[1]=a[1]; //则p[][]==a[][]
ad饕饕不绝
2009-12-18 · TA获得超过596个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:0
展开全部
1.

#include<iostream>
#include<cmath>
using namespace std;
class Num
{
private:
//私有数据成员
int a[3];
public:
//初始化数据成员
Num(){}//空构造函数
Num(int _a[]){memcpy(a,_a,sizeof(a));}//数组构造函数
inline Num operator^(Num b)
{
Num ret;
int i,aa,bb,rr;
for(i=0;i<3;++i)
{
rr=1;
aa=a[i];
bb=b.a[i];
while(bb)
{
if(bb&0x1)rr=rr*aa;
aa=aa*aa;
bb>>=1;
}
ret.a[i]=rr;
}
return ret;
}
//输出数组成员的函数
void print(){cout<<a[0]<<' '<<a[1]<<' '<<a[2]<<endl;}
};
int a[3]={2,2,2},b[3]={3,3,3};
int main()
{
Num t1(a),t2(b),t3;
t3=t1^t2;
t3.print();
return 0;
}

2.

#include<iostream>
#include<cmath>
using namespace std;
const double PI = acos(-1.0);
class A
{
private:
//私有数据成员
double h,r;
public:
//初始化数据成员
A():h(0.00),r(0.00){}//空构造函数
A(double _h,double _r):h(_h),r(_r){}//构造函数
inline double Getr(){return r;}
inline double Geth(){return h;}
friend double V1(A);
};
double V1(A a)
{
return PI*a.r*a.r*a.h;
}
double V2(double h,double r)
{
return PI*r*r*h;
}
int main()
{
//A a(1,1);
//cout<<V1(a)<<' '<<V2(a.Geth(),a.Getr())<<endl;
return 0;
}

3.

#include<iostream>
#include<cmath>
using namespace std;
class Array
{
private:
//私有数据成员
int *a[5];//表示二维数组。
int n;//二维数组的行数。
float ave;//二维数组的平均值。
public:
Array(int b[][5],int n)//构造函数,用n行5列的数组初始化成员数据。
{
int i,j;
for(i=0;i<5;++i)
{
a[i]=(int*)malloc(n*sizeof(int));
for(j=0;j<n;++j)
a[i][j]=b[j][i];
}
this->n=n;
this->ave=0.0;
}
void f()//功能函数,求二维数组的平均值。
{
float sum = 0.0;
int i,j;
float tot = 5.0*n;
for(i=0;i<n;++i)
for(j=0;j<5;++j)
sum+=(float)a[i][j];
sum/=tot;
ave=sum;
}
void fun() //功能函数,根据题目要求调整二维数组。
{
if(ave==0.00)//还没有计算平均值
f();
int i,j,curi,curj,lasi,lasj;
curi=curj=0;
lasi=4;
lasj=n-1;
int *buf[5];
for(i=0;i<5;++i)buf[i]=(int*)malloc(n*sizeof(int));
for(i=0;i<n;++i)
for(j=0;j<5;++j)
if(a[j][i]>ave)
{
buf[lasi][lasj]=a[j][i];
--lasj;
if(lasj<0)
lasj=n-1,--lasi;
}
else
{
buf[curi][curj]=a[j][i];
++curj;
if(curj==n)
curj=0,++curi;
}
for(i=0;i<n;++i)
for(j=0;j<5;++j)
a[j][i]=buf[j][i];
}
void show()//功能函数,输出成员数组。
{
int i,j;
for(i=0;i<n;++i,cout<<endl)
for(j=0;j<5;++j)
cout<<a[j][i]<<' ';
}
~Array()
{
int i;
for(i=0;i<5;++i)free(a[i]);
}
};
int b[105][5]={{6,7,1,2,9},{4,3,5,8,10}};
int main()
{
int n;
while(cout<<"请输入n的大小(n<=100,n=0表示结束):",cin>>n,n)
{
int i,j;
cout<<"请输入n行5列的元素:"<<endl;
for(i=0;i<n;++i)
for(j=0;j<5;++j)
cin>>b[i][j];
Array *arr=new Array(b,n);
cout<<"您输入的数据为:"<<endl;
arr->show();
arr->f();
arr->fun();
cout<<"变化以后的数据为:"<<endl;
arr->show();
delete arr;
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寒寒家
2009-12-18 · TA获得超过2920个赞
知道大有可为答主
回答量:1482
采纳率:100%
帮助的人:1982万
展开全部
学习下O(∩_∩)O~
int(*a)[5]:
不太明白这个是什么用处, int *a[5];//表示二维数组。???请教

不过二楼的不对

这样的话是5行,而不是题中要求的5列
三楼的好像也有点问题,为什么 a=b;???这样a,b指向同一片内存空间,但是按理说a[n][5]应该有自己的存储空间,否则如果通过b改变了内存空间中的值,更严重的:b是通过动态申请内存得到的,一旦b的空间被释放,而a还去访问其内存空间的话,危险。
void Array::create(int b[][5],int _n)
{
ave = 0.0f;
a=b;
n=_n;
}
有没有更好的方法?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
安心播音
2009-12-16 · TA获得超过1564个赞
知道小有建树答主
回答量:397
采纳率:0%
帮助的人:381万
展开全部
mark, 回家做。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式