#include <stdio.h> #include <windows.h> int input(int d[],int n) //numa=input(A,0); numb=input(B,0); { int i; //n=0; do { scanf("%d",d+n); n+=1; }while(d[n-1]>=0); //限制集合中的数为正整数 d[n-1]='\0'; return n-1; } void sort(int d[],int *n) // sort(C,&n); 并集 { int i,j,t,k; for(i=0;i<*n-1;i++) { for(j=*n-1;j>i;j--) { if(d[j]==d[j-1]) //并集时两个数相等时,将重复的数覆盖 { *n-=1; for(k=j;k<*n;k++) d[k]=d[k+1]; } if(d[j]<d[j-1]) { t=d[j]; d[j]=d[j-1]; d[j-1]=t; } } } } int fn(int d1[],int num1,int d2[],int num2) { // fn(A,numa,B,numb); int i,j,m; for(i=0;i<num1;i++) { m=0; //假设m等于0的时候就成立 for(j=0;j<num2;j++) { if(d1[i]==d2[j]) { m=1; break; } } if(m==0) printf("%d,",d1[i]); } } int main() { SetConsoleTitle("集合的并交差运算"); system("mode con cols=60 lines=20"); printf("\n************离散数学,实验报告《一》************\n\n"); printf("姓名: 123 ******************** 学号: 20201312087\n\n"); printf("温馨提示:以下在输入集合时,当遇到负数时就自动跳出循环,\n进入下一步输入.\n\n"); int A[100],B[100],C[200]; int numa,numb,n; int i,j; int chioce; //输入 printf("请输入集合A: "); numa=input(A,0); sort(A,&numa); printf("请输入集合B: "); numb=input(B,0); sort(B,&numb); printf("*********************\n"); printf("输入‘1’表示交集\n"); printf("输入‘2’表示并集\n"); printf("输入‘3’表示差集\n"); printf("*********************\n"); printf("请选择:"); while(1){ scanf("%d",&chioce); switch (chioce){ case 1: //交集 printf("\n\n集合交集A ∩ B={"); for(i=0;i<numa;i++) //外层循环行 { for(j=0;j<numb;j++) //内层控制列 { if(A[i]==B[j]) { printf("%d,",A[i]); } } } printf("\b}\n\n"); break; case 2: //并集 n=numa+numb; printf("集合并集A∪B={"); for(i=0;i<numa;i++) { C[i]=A[i]; } for(i=numa;i<n;i++) { C[i]=B[i-numa]; } sort(C,&n); for(i=0;i<n;i++) printf("%d,",C[i]); printf("\b}\n\n"); break; case 3: //集合差 printf("集合的差集A-B={"); fn(A,numa,B,numb); printf("\b}\n\n"); break; default: printf("只能输入1~3之间的整数\n"); } } }
离散数学(实验一),集合的交,并,差运算
猜你喜欢
转载自blog.csdn.net/qq_37796444/article/details/80181469
今日推荐
周排行