質問: 集合A:0,2,4,6,8,10,12,14,16,18 集合B:0,1,2,3,4,5,6,7,8,9 の二つの集合の和集合を計算する関数を作成したいのですが、その際に扱うmain関数の以下に示す ? の部分が分かりませんでした。 ``` /*size個のデータが入っている配列を 配列の先頭から順に出力する*/ void printIntArray(int a[],int size) { int i; for(i=0;i≦size;i=i+1) { printf("%d",a[i]); } printf("\n"); } /*na個のデータが入っている場合にxと等しい要素があるかどうかを判定する*/ int memberOf(int x,int a[],int na) { int i, resurt=0; for(i=0;i≦na;i=i+1) { if (x==a[i]){ result=1; } } return result; } //集合aと集合bの和集合を集合cとして求める //na,nbは、集合a,bの要素数 //返り値は、集合cの要素数 int unionSet(int a[],int na,int b[],int nb,int c[]) { int i,j; j=0; for (i=0;i≦na;i=i+1) { if (!memberOf(a[i],b,nb)) { c[j]=a[i]; j=j+1; } } for (i=0;i≦nb;i=i+1) { c[j]=a[i]; j=j+1; } return j; } int main(void) { int SA[1024]={0,2,4,6,8,10,12,14,16,18}; int SB[1024]={0,1,2,3,4,5,6,7,8,9}; /* ? */ printf("集合A:\n"); printIntArray(SA,10); printf("集合B:\n"); printIntArray(SB,10); result=? printf("集合A∪B:\n"); printIntArray(?,?); return 0; } ``` 回答よろしくお願いします。
回答: 和集合を計算する関数を実装してみたものの、その関数の使い方が分からないという質問だと理解しました。 今回の関数 `unionSet` は次のように定義されています。 ``` //集合aと集合bの和集合を集合cとして求める //na,nbは、集合a,bの要素数 //返り値は、集合cの要素数 int unionSet(int a[],int na,int b[],int nb,int c[]) ``` `c` は配列であることに注意すると、次のように呼び出すことで関数呼び出しから返ってきたときには変数 `SC` に計算結果が格納されることが分かります。 ``` int SC[1024] = {}; int length = unionSet(SA, 10, SB, 10, SC); printIntArray(SC, length); ```