c++编程题
1.设Δ是集合A上的二元运算,如果对于集合A中的任意元素a和b,都有aΔb=c,且c∈A,则称二元运算Δ对于集合A是封闭的。现有一数组a,假定其数组元素构成集合A。试建立...
1. 设Δ是集合A上的二元运算,如果对于集合A中的任意元素a和b,都有aΔb=c,且c∈A,则称二元运算Δ对于集合A是封闭的。现有一数组a,假定其数组元素构成集合A。试建立一个类DATA,判断求余运算“%”对集合A是否封闭。即判断数组中的任意两个元素a[i]和a[j],当a[j]不等于0时,a[i]除以a[j]所得余数仍然属于集合A。具体要求如下:
(1)私有数据成员
l int
*a ; 整数指针,指向动态分配的数组空间
l int
n ; 数组中元素个数
(2)公有成员函数
l DATA(int
t[ ], int n1) ; 构造函数,用n1初始化n,并根据n动态生成数组a,用t数组对a数组初始化。
l int
belong(int a[ ], int n, int x) ; 判断x的值是否在数组a中,如果在返回1,否则返回0。
l void
fun( ) ; 判断求余运算%对本对象是否封闭,如果封闭,输出“封闭”。如果不封闭,则输出“不封闭”,同时输出第一个不满足条件的a[i]和a[j]。
l void
print( ) ; 输出成员数据的值。
l ~DATA(
) ; 析构函数,完成必要的功能。
(3)在主函数中对该类进行测试。先定义两个整型数组d1和d2,分别具有9个元素和8个元素,两个数组的值分别是{1,
3, 22, 4, 15, 2, 7, 5, 0}和{1, 3, 8, 4, 6, 7, 5, 0}。然后用这两个数组初始化两个DATA类的对象test1和test2,测试并输出结果 展开
(1)私有数据成员
l int
*a ; 整数指针,指向动态分配的数组空间
l int
n ; 数组中元素个数
(2)公有成员函数
l DATA(int
t[ ], int n1) ; 构造函数,用n1初始化n,并根据n动态生成数组a,用t数组对a数组初始化。
l int
belong(int a[ ], int n, int x) ; 判断x的值是否在数组a中,如果在返回1,否则返回0。
l void
fun( ) ; 判断求余运算%对本对象是否封闭,如果封闭,输出“封闭”。如果不封闭,则输出“不封闭”,同时输出第一个不满足条件的a[i]和a[j]。
l void
print( ) ; 输出成员数据的值。
l ~DATA(
) ; 析构函数,完成必要的功能。
(3)在主函数中对该类进行测试。先定义两个整型数组d1和d2,分别具有9个元素和8个元素,两个数组的值分别是{1,
3, 22, 4, 15, 2, 7, 5, 0}和{1, 3, 8, 4, 6, 7, 5, 0}。然后用这两个数组初始化两个DATA类的对象test1和test2,测试并输出结果 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
展开全部
#include <iostream>
using namespace std;
class DATA
{
public:
DATA(int t[ ], int n1) ; // 构造函数,用n1初始化n,并根据n动态生成数组a,用t数组对a数组初始化。
int belong(int a[ ], int n, int x) ; //判断x的值是否在数组a中,如果在返回1,否则返回0。
void fun( ) ; //判断求余运算%对本对象是否封闭,如果封闭,输出“封闭”。如果不封闭,则输出“不封闭”,同时输出第一个不满足条件的a[i]和a[j]。
void print( ) ; //输出成员数据的值。
~DATA() ; //析构函数,完成必要的功能。
private:
int *a ; //整数指针,指向动态分配的数组空间
int n ; //数组中元素个数
};
DATA::DATA(int t[],int n1)
{
n=n1;
a=new int [n1];
if(a)
{
memcpy(a,t,n1*sizeof(int));
}
}
int DATA::belong(int a[],int n,int x)
{
for(int i=0;i<n;i++)
if(a[i]==x)return 1;
return 0;
}
void DATA::fun()
{
if(a)
{
int i,j,b1,b2,c,r;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
b1=b2=-1;
c=0; r=0;
if(a[j]!=0)
{
b1=a[i]%a[j];
c++;
}
if(a[i]!=0)
{
b2=a[j]%a[i];
c++;
}
if(c==2)
{
if(!(belong(a,n,b1)&&belong(a,n,b2)))
{
cout<<"不封闭"<<endl;
cout<<a[i]<<'\t'<<a[j]<<endl;
return ;
}
}
if(c==1)
{
if(b1==-1)
{
r=belong(a,n,b2);
}
else
r=belong(a,n,b1);
if(!r)
{
cout<<"不封闭"<<endl;
cout<<a[i]<<'\t'<<a[j]<<endl;
return ;
}
}
}
}
}
cout<<"封闭"<<endl;
}
void DATA::print()
{
for(int i=0;i<n;i++)
{
if(i==0)
cout<<a[i];
else
cout<<'\t'<<a[i];
}
cout<<endl;
}
DATA::~DATA()
{
if(a)
{
n=0;
delete []a;
a=NULL;
}
}
int main()
{
int d1[9]={1,3, 22, 4, 15, 2, 7, 5, 0};
int d2[8]={1, 3, 8, 4, 6, 7, 5, 0};
DATA test1(d1,9);
DATA test2(d2,8);
test1.print();
test1.fun();
test2.print();
test2.fun();
return 0;
}
using namespace std;
class DATA
{
public:
DATA(int t[ ], int n1) ; // 构造函数,用n1初始化n,并根据n动态生成数组a,用t数组对a数组初始化。
int belong(int a[ ], int n, int x) ; //判断x的值是否在数组a中,如果在返回1,否则返回0。
void fun( ) ; //判断求余运算%对本对象是否封闭,如果封闭,输出“封闭”。如果不封闭,则输出“不封闭”,同时输出第一个不满足条件的a[i]和a[j]。
void print( ) ; //输出成员数据的值。
~DATA() ; //析构函数,完成必要的功能。
private:
int *a ; //整数指针,指向动态分配的数组空间
int n ; //数组中元素个数
};
DATA::DATA(int t[],int n1)
{
n=n1;
a=new int [n1];
if(a)
{
memcpy(a,t,n1*sizeof(int));
}
}
int DATA::belong(int a[],int n,int x)
{
for(int i=0;i<n;i++)
if(a[i]==x)return 1;
return 0;
}
void DATA::fun()
{
if(a)
{
int i,j,b1,b2,c,r;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
b1=b2=-1;
c=0; r=0;
if(a[j]!=0)
{
b1=a[i]%a[j];
c++;
}
if(a[i]!=0)
{
b2=a[j]%a[i];
c++;
}
if(c==2)
{
if(!(belong(a,n,b1)&&belong(a,n,b2)))
{
cout<<"不封闭"<<endl;
cout<<a[i]<<'\t'<<a[j]<<endl;
return ;
}
}
if(c==1)
{
if(b1==-1)
{
r=belong(a,n,b2);
}
else
r=belong(a,n,b1);
if(!r)
{
cout<<"不封闭"<<endl;
cout<<a[i]<<'\t'<<a[j]<<endl;
return ;
}
}
}
}
}
cout<<"封闭"<<endl;
}
void DATA::print()
{
for(int i=0;i<n;i++)
{
if(i==0)
cout<<a[i];
else
cout<<'\t'<<a[i];
}
cout<<endl;
}
DATA::~DATA()
{
if(a)
{
n=0;
delete []a;
a=NULL;
}
}
int main()
{
int d1[9]={1,3, 22, 4, 15, 2, 7, 5, 0};
int d2[8]={1, 3, 8, 4, 6, 7, 5, 0};
DATA test1(d1,9);
DATA test2(d2,8);
test1.print();
test1.fun();
test2.print();
test2.fun();
return 0;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询