一道C语言题目
1、 实现算法: 集合的交 并 差。
2、 集合A表示上课的学生,B为男生集合,C为女生集合,D为考试合格的同学。编程实现:
输入集合A B C D (用两位学号表示) 。
求出:没来上课的男生
考试不及格的女生。
没来上课且考试不及格的男生
求问我做的哪里有错误?
#include<stdio.h>
int FindUnion(int A[],int B[],int C[],int a,int b)
{
int i,flag=1,t=0,j;
for(i=0;i<b;i++)
{
C[i]=B[i];
}
for(i=0;i<a;i++)
{
flag=1;
for(j=0;j<b;j++)
{
if(A[i]==B[j])
{
flag=0;
break;
}
if(flag!=0)
{
C[b]=A[i];
b++;
}
}
}return b;
}
int FindDeference(int A[],int B[],int a,int b)
{
int i,j,t=1,m;
for(i=0;i<b;i++)
{
for(j=0;j<a;j++)
{
if(A[j]==B[i])
{
for(m=0;m<a-t;m++)
{
A[m]=A[m+1];
t++;
}
break;
}
}
}return a-t+1;
}
int FindIntersection(int A[],int B[],int C[],int a,int b)
{
int i,j,k=0,q;
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
if(A[i]==B[j])
{
C[k]=A[i];
k++;
break;
}
}
}return k;
}
int main()
{
int A[100],B[100],C[100],D[100],E[100]={0},F[100]={0},G[100]={0},H[100]={0};
int a=0,b=0,c=0,d=0,e,k,f,x,g,l,h;
printf("输入集合A的元素,输入负数表示输入结束:\n");
while(A[a]>0)
{
scanf("%d",&A[a]);
a++;
}
printf("输入集合B的元素:\n");
while(B[b]>0)
{
scanf("%d",&B[b]);
b++;
}
printf("输入集合C的元素:\n");
while(C[c]>0)
{
scanf("%d",&C[c]);
c++;
}
printf("输入集合D的元素:\n");
while(D[d]>0)
{
scanf("%d",&D[d]);
d++;
}
printf("没来上课的男生:\n");
e=FindDeference(B,A,E,b,a);
for(k=0;k<e;k++)
{
printf("%d ",E[k]);
}
printf("\n");
printf("考试不及格的女生:\n");
f=FindDeference(C,D,F,c,d);
for(x=0;x<f;x++)
{
printf("%d ",F[x]);
}
printf("\n");
printf("没来上课且考试不及格的男生:\n");
g=FindDeference(B,D,G,b,d);
h=FindIntersection(G,E,H,g,e);
for(l=0;l<h;l++)
{
printf("%d ",H[l]);
}
printf("\n");
return 0;
} 展开
#include<stdio.h>
int main(){
int A[100]={0},B[100]={0},C[100]={0},D[100]={0};
int a,b,c,d,i,j,k,p,q;
printf("上课的学生\n");
for (a=0;;a++){
scanf("%d",&A[a]);
if (A[a]<0)
break;
}
printf("男生集合\n");
for (b=0;;b++){
scanf("%d",&B[b]);
if (B[b]<0)
break;
}
printf("女生集合\n");
for (c=0;;c++){
scanf("%d",&C[c]);
if (C[c]<0)
break;
}
printf("及格的同学\n");
for (d=0;;d++){
scanf("%d",&D[d]);
if (D[d]<0)
break;
}
printf("\n没来上课的男生:\n");
for (i=0;i<b;i++){
for (k=j=0;j<a;j++){
if (B[i]==D[j]) k=1;
}
if (k==0)
printf("%d ",B[i]);
}
printf("\n女生不及格的 :\n");
for (i=0;i<c;i++){
for (k=j=0;j<d;j++){
if (C[i]==D[j]) k=1;
}
if (k==0)
printf("%d ",B[i]);
}
printf("\n没来上课且不及格的男生 :\n");
for (i=0;i<b;i++){
for (k=j=0;j<a;j++){
if (B[i]==D[j]) k=1;
}
if (k==0){
for (p=q=0;p<d;p++){
if (B[i]==D[p]) q=1;
}
if (q==0)
printf("%d ",B[i]);
}
}
}
自己写的,参考