我有一道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");
}
展开
 我来答
琦绮梦0mp
2007-10-08 · TA获得超过2195个赞
知道大有可为答主
回答量:1361
采纳率:0%
帮助的人:1802万
展开全部
//主要有以下几处错误,改后运行正确

#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");
}
WXD110114dccd8
2007-10-08 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.6万
采纳率:43%
帮助的人:9105万
展开全部
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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式