实验1 集合的交并差
要求:
(1)实验目的
通过该实验,让学生复习巩固C语言中的循环结构、循环控制条件、分支结构和数组/链表、函数的调用等有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。
(2)实验内容
通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。
(3)实验要求
从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能,每个集合中不允许有重复的元素。集合可以用数组也可以用链表存储。
实现交、并、差运算时,分别把代码写成函数的形式,即实现交运算的函数,实现并运算的函数,实现差运算的函数,在主函数中分别调用三个函数。
使用菜单形式对应各个操作,应允许用户反复查看结果,想结束程序时,输入负数结束,使其编成一个完整的小软件。菜单参考示例如下:
1—输入集合A和B
2—求集合A交B
3—求集合A并B
4—求集合A-B
退出,输入一个负数!
(4)验收/测试用例
输入: A={1,2,3,4,5} B={3,4,5,6,7}
要注意输入的过程中,每输入一个元素都要检查输入的这个元素是否和前面的元素重复,如果重复,要求用户重新输入当前元素。
验收测试时要测试这种重复的情况。
输出 A交B={3, 4, 5}
A并B={1,2,3,4,5,6,7}
A-B={1, 2}
一丶使用静态数组全局声明,给定数组足够的初始长度,默认里面的元素为0.
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
//先定义两个长度足够的默认数组.
int a[100]={
0};
int b[100]={
0};
//记录集合的长度
int a_len=0;
int b_len=0;
void input_a();//输入集合A
void input_b();//输入集合B
void inter_(); //交集
void union_(); //并集
void diff_(); //A-B
int main(){
int flag=1;
int infer;
while(flag){
cout<<"********************************"<<endl;
cout<<"********1:输入集合A和B**********"<<endl;
cout<<"********2:A与B的交集.***********"<<endl;
cout<<"********3:A与B的并集.***********"<<endl;
cout<<"********4.A与B的差集.***********"<<endl;
cout<<"********************************"<<endl;
cout<<"输入随机一个负数来结束本程序."<<endl;
cout<<"输入相应的数字,来执行相应的操作:"<<endl;
cin>>infer;
switch(infer){
case 1:
int k;
k=1;
system("cls");
input_a();
for(int i=0;i<a_len-1;i++){
//每个元素依次和他后面的元素比较
for(int j=i+1;j<a_len;j++){
if(a[i]==a[j]){
cout<<"请不要输入重复整数,重新输入."<<endl;
k=0;
}
}
}
if(k==0) break;
input_b();
for(int i=0;i<b_len-1;i++){
for(int j=i+1;j<b_len;j++)