设计整数类1

更新时间:2023-03-14 12:18:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《高级语言程序设计II实验》实验报告三

学生姓名: 班级: 学号:

一 问题描述

定义一个集合类,有如下的功能: (1)输出两个集合的交集 (2)输出两个集合的并集

(3)判断一个元素是否属于这个集合 (4)往集合里插入一个元素 (5)判断两个集合是否相等 二、实验环境

在codeblock,等编译环境下都能用。

二 程序设计 (此处占分最重,请尽量详细描述) // 描述如何设计程序的文件结构,各文件中主要内容,对于自定义类可用UML图描述各个类的接口 如:

1. 文件结构及类描述

test1.cpp vehicle.h

主函数 main() jh p(3),y(4); (p-y).show(); (p+y).show(); (p<3).showcha(); jh q(3),w(3); (q>w).showdeng(); (q*8).showshu(); return 0; Vehicle接口 jh operator -(jh &p); jh operator +(jh &m); jh operator <(int y); jh operator >(jh &q); jh operator *(int u) ~jh(){}; Void showdeng();//show Void show(); void showcha(); void showshu() 实现 void jh::showcha() void jh::showshu() jh jh::operator *(int u) void jh::showdeng() jh jh::operator >(jh &q) jh::jh(int q) jh jh::operator <(int y) jh jh::operator -(jh &p) jh jh::operator +(jh &m) void jh::show() 2.主要算法描述; jh jh::operator >(jh &q) {

int j,k;

if(i!=q.i)//两个集合个数不相等 {

q.flag=0; }

if(i==q.i)//两个集合个数相等 {

for(j=0;j

for(k=0;k

if(a[j]!=q.a[k])//如果第一个集合的元素和第二个集合的元素不相等

{

q.flag=0; }

else if(a[j]==q.a[k])//如果第一个集合的元素和第二个集合的元素相等,就填出循环 {

q.flag=1; break; } }

if(q.flag==0)//如果第一个集合中的某元素和第二个集合中任意一个都不相等,那就跳出整个循环 {

break; } } }

return q; }

三 程序代码

#include using namespace std; class jh{ public: jh(int q); jh(){i=0;};

jh operator -(jh &p);//算出这两个集合的交集 jh operator +(jh &m);//算出这两个集合的并集 jh operator <(int y);//插入一个元素

jh operator >(jh &q);//判断两个集合是否相等

jh operator *(int u);//判断这个元素是否属于这个集合 ~jh(){};

void showdeng();//show出两个集合是否相等 void show();//输出集合的元素

void showcha();//show出插入元素是否属于这个集合或者show插入之后的新集合

void showshu();//show出这个元素是否属于这个集合 private:

int a[100],i,flag;//flag用于多出的判断 };

void jh::showcha() {

int j;

if(flag==0) {

cout<<\此集合已存在此元素\ }

if(flag==1) {

cout<<\新集合为S={\

i++;//通过i++来限制新加元素能否输出 for(j=0;j

cout<

cout<<\ } }

void jh::showshu() {

if(flag==1) {

cout<<\这个元素属于这个集合\ }

if(flag==0) {

cout<<\这个元素不属于这个集合\ } }

jh jh::operator *(int u) {

int j; jh b;

for(j=0;j

if(u==a[j]) {

b.flag=1;

break;//找到这个元素与集合的任何一个元素相等之后终止循环 }

else if(u!=a[j]) {

b.flag=0;//此元素不属于这个集合通过flag来表示 }

}

return b; }

void jh::showdeng() {

if(flag==0) {

cout<<\这两个集合不相等\ }

if(flag==1) {

cout<<\这两个集合相等\ } }

jh jh::operator >(jh &q) {

int j,k;

if(i!=q.i)//两个集合个数不相等 {

q.flag=0; }

if(i==q.i)//两个集合个数相等 {

for(j=0;j

for(k=0;k

if(a[j]!=q.a[k])//如果第一个集合的元素和第二个集合的元素不相等

{

q.flag=0; }

else if(a[j]==q.a[k])//如果第一个集合的元素和第二个集合的元素相等,就填出循环 {

q.flag=1; break; } }

if(q.flag==0)//如果第一个集合中的某元素和第二个集合中任意一个都不相等,那就跳出整个循环 {

break; }

} }

return q; }

jh::jh(int q)//集合的构造函数 {

int j; i=q;

for(j=0;j

cout<<\输入集合的元素a[\ cin>>a[j]; } }

jh jh::operator <(int y) {

int j; jh b; b.i=i;

b.a[b.i]=y;//把这个元素先给集合b for(j=0;j

b.a[j]=a[j];//把集合中的元素给b }

for(j=0;j

if(y==a[j])//判断插入的集合是否属于集合 {

b.flag=0; break; } else {

b.flag=1; } }

return b; }

jh jh::operator -(jh &p) {

int j,k; jh b;

for(j=0;j

for(k=0;k

if(a[j]==p.a[k])//找出两个集合中相等的元素 {

b.a[b.i]=a[j]; b.i++; } } }

return b; }

jh jh::operator +(jh &m) {

jh b;

int k,j,flag=2; for(j=0;j

for(k=0;k

if(a[j]==m.a[k])//先剔除两个集合中相同的元素 {

flag=1; break; } }

if(flag==2) {

b.a[b.i]=a[j];//把不相等的元素存入b集合中 b.i++; } }

for(k=0;k

b.a[b.i]=m.a[k]; (b.i)++; }

return b; }

void jh::show() {

int j;

cout<<\此集合为a[\ for(j=0;j

cout<

cout<<\}

int main() {

jh p(3),y(4); (p-y).show(); (p+y).show(); (p<3).showcha(); jh q(3),w(3);

(q>w).showdeng(); (q*8).showshu(); return 0;

} 四 程序

运行结果

五 实验总结

// 描述实验过程中遇到的困难及解决办法;描述程序存在的不足及可能的改进方案;

(1)灵活运用break语句;

(2)在定义集合类的构造函数时要有一个无参数的来实现返回值; (3)在写集合的交集并集时解决私有成员i++的问题;

(4)在插入一个元素和判断一个元素是否属于该集合时要注意简便的算法; (5)不能忘记写析构函数;

(6)对运算符重载的符号运用不灵活。

本文来源:https://www.bwwdw.com/article/0ytx.html

Top