
我有一道C语言题得不正确答案,高手们帮帮忙,把错误点明并帮我改正一下,谢谢
程序的功能是求一个4元数组和5元数组的交集和并集#include<stdio.h>main(){inta[4],b[5],j1[4],b1[9],c=0,i,j,p=0,...
程序的功能是求一个4元数组和5元数组的交集和并集
#include<stdio.h>
main()
{ int a[4],b[5],j1[4],b1[9],
c=0,i,j,p=0,q=0,p1,q1;/*a存放4位数,b存放5位数,j1存放交集,b1存放并集,p、q是j1和b1中不确定的位数,p1和q1是交集和并集中确定下来的最后数的个数*/
printf("输入a:");
for(i=0;i<4;i++)
scanf("%d",a[i]);
printf("输入b:");
for(j=0;j<5;j++)
scanf("%d",b[j]);
/***************求交集*******************/
for(i=0;i<4;i++)
for(j=0;j<5;j++)
if(a[i]==b[j])j1[p++]=a[i];
p1=--p;
/***************并集*******************/
for(i=0;i<4;i++)
b1[q++]=a[i];
for(j=0;j<5;j++)
{for(i=0;i<4;i++)
if(b[j]==b1[i]) ++c;
if(c==0) b1[q++]=b[j];}
q1=--q;
/**************输出操作****************/
printf("j1为;");
for(p=0;p<p1;p++)
printf("%d",j1[p]);
printf("\n");
printf("b1为:");
for(q=0;q<q1;q++)
printf("%d",b1[q]);
printf("\n");
} 展开
#include<stdio.h>
main()
{ int a[4],b[5],j1[4],b1[9],
c=0,i,j,p=0,q=0,p1,q1;/*a存放4位数,b存放5位数,j1存放交集,b1存放并集,p、q是j1和b1中不确定的位数,p1和q1是交集和并集中确定下来的最后数的个数*/
printf("输入a:");
for(i=0;i<4;i++)
scanf("%d",a[i]);
printf("输入b:");
for(j=0;j<5;j++)
scanf("%d",b[j]);
/***************求交集*******************/
for(i=0;i<4;i++)
for(j=0;j<5;j++)
if(a[i]==b[j])j1[p++]=a[i];
p1=--p;
/***************并集*******************/
for(i=0;i<4;i++)
b1[q++]=a[i];
for(j=0;j<5;j++)
{for(i=0;i<4;i++)
if(b[j]==b1[i]) ++c;
if(c==0) b1[q++]=b[j];}
q1=--q;
/**************输出操作****************/
printf("j1为;");
for(p=0;p<p1;p++)
printf("%d",j1[p]);
printf("\n");
printf("b1为:");
for(q=0;q<q1;q++)
printf("%d",b1[q]);
printf("\n");
} 展开
2个回答
展开全部
//主要有以下几处错误,改后运行正确
#include<stdio.h>
main()
{ int a[4],b[5],j1[4],b1[9],
c=0,i,j,p=0,q=0,p1,q1;/*a存放4位数,b存放5位数,j1存放交集,b1存放并集,p、q是j1和b1中不确定的位数,p1和q1是交集和并集中确定下来的最后数的个数*/
printf("输入a:");
for(i=0;i<4;i++)
scanf("%d",&a[i]);//致命错,遗漏了地址符&
printf("输入b:");
for(j=0;j<5;j++)
scanf("%d",&b[j]);//同上错
/***************求交集*******************/
for(i=0;i<4;i++)
for(j=0;j<5;j++)
if(a[i]==b[j])j1[p++]=a[i];
p1=p;//不用--,减掉的话后面输出的循环条件就是<=而不是<
/***************并集*******************/
for(i=0;i<4;i++)
b1[q++]=a[i];
for(j=0;j<5;j++)
{for(i=0,c=0;i<4;i++)//每次进入子循环时得把c清0,否则一旦有一个数是重复的,后面的即使不重复,c也不是0,就加不到b1里了
if(b[j]==b1[i]) ++c;
if(c==0) b1[q++]=b[j];}
q1=q;//同样不要--
/**************输出操作****************/
printf("j1为;");
for(p=0;p<p1;p++)
printf("%d ",j1[p]);//加个空格看的清楚
printf("\n");
printf("b1为:");
for(q=0;q<q1;q++)
printf("%d ",b1[q]);//加个空格
printf("\n");
}
#include<stdio.h>
main()
{ int a[4],b[5],j1[4],b1[9],
c=0,i,j,p=0,q=0,p1,q1;/*a存放4位数,b存放5位数,j1存放交集,b1存放并集,p、q是j1和b1中不确定的位数,p1和q1是交集和并集中确定下来的最后数的个数*/
printf("输入a:");
for(i=0;i<4;i++)
scanf("%d",&a[i]);//致命错,遗漏了地址符&
printf("输入b:");
for(j=0;j<5;j++)
scanf("%d",&b[j]);//同上错
/***************求交集*******************/
for(i=0;i<4;i++)
for(j=0;j<5;j++)
if(a[i]==b[j])j1[p++]=a[i];
p1=p;//不用--,减掉的话后面输出的循环条件就是<=而不是<
/***************并集*******************/
for(i=0;i<4;i++)
b1[q++]=a[i];
for(j=0;j<5;j++)
{for(i=0,c=0;i<4;i++)//每次进入子循环时得把c清0,否则一旦有一个数是重复的,后面的即使不重复,c也不是0,就加不到b1里了
if(b[j]==b1[i]) ++c;
if(c==0) b1[q++]=b[j];}
q1=q;//同样不要--
/**************输出操作****************/
printf("j1为;");
for(p=0;p<p1;p++)
printf("%d ",j1[p]);//加个空格看的清楚
printf("\n");
printf("b1为:");
for(q=0;q<q1;q++)
printf("%d ",b1[q]);//加个空格
printf("\n");
}
展开全部
scanf("%d",a[i]);
改为
scanf("%d",&a[i]);
scanf("%d",b[j]);
改为
scanf("%d",&b[j]);
并集程序段改为:
for(i=0;i<4;i++)
b1[q++]=a[i];
for(j=0;j<5;j++)
{c=0; //c应该在每次内循环开始之前归0
for(i=0;i<q;i++)
if(b[j]==b1[i]) ++c;
if(c==0) b1[q++]=b[j];}
q1=--q;
输出程序段改为:
printf("j1为;");
for(p=0;p<=p1;p++) //循环的执行条件应该是p<=p1
printf("%d ",j1[p]);
printf("\n");
printf("b1为:");
for(q=0;q<=q1;q++)
printf("%d ",b1[q]);
printf("\n");
}
改为
scanf("%d",&a[i]);
scanf("%d",b[j]);
改为
scanf("%d",&b[j]);
并集程序段改为:
for(i=0;i<4;i++)
b1[q++]=a[i];
for(j=0;j<5;j++)
{c=0; //c应该在每次内循环开始之前归0
for(i=0;i<q;i++)
if(b[j]==b1[i]) ++c;
if(c==0) b1[q++]=b[j];}
q1=--q;
输出程序段改为:
printf("j1为;");
for(p=0;p<=p1;p++) //循环的执行条件应该是p<=p1
printf("%d ",j1[p]);
printf("\n");
printf("b1为:");
for(q=0;q<=q1;q++)
printf("%d ",b1[q]);
printf("\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询