没有合适的资源?快使用搜索试试~ 我知道了~
(完整版)c++机考题目加答案 (2).pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 71 浏览量
2023-02-26
20:26:21
上传
评论
收藏 413KB PDF 举报
温馨提示
试读
30页
。
资源推荐
资源详情
资源评论
1. 实现一个大小固定的整型数据元素会合及其相应操作(元素的增添、删除;判断两个会合能否相等;判断一个数能否为
会合中的元素;交集;并集)
。 P76. 列
#include <iostream.h>
const maxCard = 16;
enum ErrCode {noErr, overflow};
enum Bool {False, True};
class Set
{
int elems[maxCard];
int card;
public:
void EmptySet( ){card = 0;}
Bool Member(int);
ErrCode AddElem(int);
void RmvElem(int);
void Copy(Set *);
Bool Equal(Set *);
void Print( );
void Intersect(Set *, Set *);
ErrCode Union(Set *, Set *);
};
Bool Set::Member(int elem)
{
for(int i=0;i<card;++i)
if(elems[i] == elem)
return True;
return False;
}
ErrCode Set::AddElem(int elem)
{
if(Member(elem))
return noErr;
if(card < maxCard)
{
// 会合中元素个数的最大值,默以为 int 型
//
错误代码
// Bool 种类定义
//
定义会合类
//
储存元素的数组
//
会合中元素的个数
//
判断一个数能否为会合中的元素
//
向会合中增添元素
//
删除会合中的元素
//
把目前会合拷贝到形参指针指向的会合中
//
判断两个会合能否相等
//
交集
//
并集
elems[card++] = elem;
return noErr;
}
return overflow;
}
void Set::RmvElem(int elem)
{
for(int i = 0; i<card; ++i)
if(elems[i] == elem)
{
for(;i<card-1;++i)
elems[i] = elems[i+1];
--card;
return;
}
}
void Set::Copy(Set *set)
{
for(int i = 0; i < card; ++i)
set->elems[i] = elems[i];
set->card = card;
}
Bool Set::Equal(Set *set)
{
if(card != set->card)
return False;
for(int i = 0; i < card;++i)
//
判断目前会合的某元素是不是
set 所指会合中的元素
if(!set->Member(elems[i]))
return False;
return True;
}
void Set::Print( )
{
cout<<"{";
for(int i = 0; i < card; ++i)
cout << elems[i]<< ";";
cout<<"}\n";
}
void Set::Intersect(Set *set, Set *res)//
交集: *this ∩ *set->*res
{
res->card = 0;
for(int i = 0; i < card; ++i)
for(int j = 0; j < set->card; ++j)
if(elems[i] == set->elems[j]){
res->elems[res->card++] = elems[i];
break;
}
}
ErrCode Set::Union(Set *set,Set *res) //
并集: *set ∪*this->*res
{
set->Copy(res);
for(int i = 0; i < card; ++i)
if(res->AddElem(elems[i]) == overflow)
return overflow;
return noErr;
}
// 下边是测试用的主程序
void main( )
{
Set s1, s2, s3;
s1.EmptySet( );
s2.EmptySet( );
s3.EmptySet( );
s1.AddElem(10);
s1.AddElem(20);
s1.AddElem(30);
s1.AddElem(40);
s2.AddElem(30);
s2.AddElem(50);
s2.AddElem(10);
s2.AddElem(60);
cout<<"s1="; s1.Print( );
cout<<"s2="; s2.Print( );
s2.RmvElem(50);
cout<<"s2-{50}=";
s2.Print( );
if(s1.Member(20))
cout<<"20 is in s1\n";
s1.Intersect(&s2,&s3);
cout<<"s1 intsec s2 =";
s3.Print( );
s1.Union(&s2,&s3);
cout<<"s1 union s2 ="; s3.Print( );
if(!s1.Equal(&s2))
cout<<"s1!=s2\n";
}
2. 实现一个大小可变的整型数据元素会合,会合可储存的数据元素个数在对象结构时给定,由结构函数为数据元素分派存
储空间,在对象被开释时由析构函数开释储存空间。
#include <iostream.h>
const maxCard=16;
enum ErrCode {noErr, overflow};
enum Bool {False, True};
class Set
{int size;
int *elems;
int card;
public:
Set(int sz=maxCard)
//
会合中元素个数的缺省最大值
//
错误代码
// Bool 种类定义
//
元素的最大个数
// 储存元素的数组
//
会合中元素的个数
{card=0;size=sz;elems=new int[size];}
~Set( ){delete []elems;}
Bool Member(int);
ErrCode AddElem(int);
void RmvElem(int);
void Copy(Set *);
Bool Equal(Set *);
void Print( );
void Intersect(Set *, Set *);
ErrCode Union(Set *, Set *);
};
Bool Set::Member(int elem)
{
for(int i=0;i<card;++i)
if(elems[i]==elem)
return True;
return False;
}
ErrCode Set::AddElem(int elem)
{
if(Member(elem))
return noErr;
if(card<size)
{
elems[card++]=elem;
return noErr;
}
return overflow;
}
void Set::RmvElem(int elem)
{
for(int i=0;i<card;++i)
if(elems[i]==elem)
{
for(;i<card-1;++i)
elems[i]=elems[i+1];
--card;
剩余29页未读,继续阅读
资源评论
G11176593
- 粉丝: 6670
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功