本程式有5個功能,前4個功能各位可以不用理睬,目前想各位幫忙解決的是第5個功能的實作。
#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 100
int b[32]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32};
unsigned huanerjinzhi(int a[], unsigned d)
{
int i = 0;
unsigned int count = 0;
while(d)
{
a[i] = d%2;
d = d/2;
i++;
count++;
}
return count;
}
/*轉換成二進制*/
unsigned power(unsigned i, unsigned n)
{
unsigned j, s=1;
for (j=0; j < n; j++)
s = s * i;
return s;
}
/*算2的N次方的函式*/
void jisuan(unsigned n)
{
unsigned i, j, t;
int a[32];
for(i = 1; i < power(2, n); i++)
{
printf("{");
t = huanerjinzhi(a, i);
for(j = 0; j < t; j++)
if(a[j] == 1&&i < power(2, n)-1 )
printf(" %d", b[j]);
printf("}\n");
}
}
/*判斷輸出*/
main(){
int a[N],b[N],c[N],d[N];
int aa[N],bb[N];
int i,j,k=1;
int x=1,y=1,z;
int m,n;
int flag;
int q;
printf("請選擇模式:\n1.A U B\n2.A ∩B\n3.A - B\n4.A 三角不讓打 B\n5.P (A) 的 集 合 值 與 基 數 值\n");
scanf("%d",&q);
//模式選擇
if(q!=5){ //判斷模式型別,將前四組歸為一類
printf("請 輸 入 A 集 合 的 元 素 個 數:\n");
scanf("%d",&m);
printf("請 輸 入 A 集 合 的 元 素:\n");
for(i=1;i<=m;i++){
scanf("%d",&a[i]);
}
//讀取A集合
printf("請 輸 入 B 集 合 的 元 素 個 數:\n");
scanf("%d",&n);
printf("請 輸 入 B 集 合 的 元 素:\n");
for(i=1;i<=n;i++){
scanf("%d",&b[i]);
}
//讀取陣列B
for(i=1;i<=m;i++){
flag=0;
for(j=1;j<=n;j++){
if(a[i]==b[j]){c[k]=a[i];k++;flag=1;continue;}
}
if(flag==0){
aa[x]=a[i];x++;}
} //求AB交集,并且求A-B的部分
for(i=1;i<=n;i++){
flag=0;
for(j=1;j<=m;j++){
if(a[j]==b[i]){flag=1;continue;}
}
if(flag==0){
bb[y]=b[i];y++;}
}
} //求B-A的部分
switch(q){ //switch判斷模式
unsigned int n;
int s;
case 1:
printf("A與B的并集的基數值:共%d個\n",x+y+k-3);
printf("{");
for(i=1;i<x;i++){printf("%d,",aa[i]);}
for(i=1;i<y;i++){printf("%d,",bb[i]);}
for(i=1;i<k-1;i++){printf("%d,",c[i]);}
printf("%d}",c[k-1]);
printf("\n"); //求A∪B
break;
case 2:
printf("A與B的交集的基數值:共%d個\n",k-1);
printf("{");
for(i=1;i<k-1;i++){printf("%d,",c[i]);}
printf("%d}",c[k-1]);
printf("\n"); //求A∩B
case 3:
printf("A-B與A的交集的基數值:共%d個\n",x-1);
printf("{");
for(i=1;i<x-1;i++){printf("%d,",aa[i]);}
printf("%d}",aa[x-1]);
printf("\n"); //求A-B與A的交集
break;
case 4:
printf("A與B的對稱差的基數值:共%d個\n",x+y-2);
printf("{");
for(i=1;i<x;i++){printf("%d,",aa[i]);}
for(i=1;i<y-1;i++){printf("%d,",bb[i]);}
printf("%d}",bb[y-1]);
printf("\n"); //求 A與B的對稱差
break;
case 5:
printf("請輸入P(A)的集合的元素個數:");
scanf("%d",&s);
s=pow(2,s);
printf("請輸入P(A)的集合值:");
scanf("%ud", &n);
while(n)
{
printf("{}\n");
jisuan(n);
scanf("%ud", &n);
printf("基數值為%d\n",s+1);
}
}
printf("繼續運行嗎Y /N:");
fflush(stdin);
scanf("%c",&k);
if (k=='n'||k=='N') return;
fflush(stdin);
main();
return 0;
}
運行結果截圖如下

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179340.html
標籤:C語言
