问题:输出数组时,中间某一项输出一串奇怪的数字
程序功能:降序输出两组整数的并集(A∪B)。
(1)从键盘输入A和B两组整数,每组均为5个整数(假设同一组内的各个整数互不重复)。
(2)求两组整数的并集(A∪B),即合并两组整数,且两组都出现的整数在并集中只出现一次。
(3)将并集按从大到小顺序输出。
说明:先输入数据A组数据,后输入B组数据。
输入格式:
在一行中输入5个A组互不重复整数,在下一行中输入5个B组互不重复整数,以空格分隔。
输出格式:
在一行中以从大到小的顺序输出并集结果,以空格分隔。
输入样例1:
1 2 3 4 5
1 2 6 7 8
输出样例1:
8 7 6 5 4 3 2 1
输入样例2:
1 2 3 4 5
6 7 5 4 0
输出样例2:
7 6 5 4 3 2 1 0
代码如下:
#include
int main()
{
int a[5],b[5],c[10],count=5,i,j,t,flag=0;
for (i=0;i<5;i++) {
scanf("%d",&a[i]);
}
for (i=0;i<5;i++) {
scanf("%d",&b[i]);
}
for (i=0;i<5;i++) {
c[i]=a[i];
}
for (i=0;i<5;i++) {
flag=0;
for (j=0;j<5;j++) {
if (c[j]==b[i]) {
flag++;
}
}
if (flag==0) {
c[count]=b[i];
count++;
}
}
for (i=0;ifor (j=0;jif (c[j]t=c[j];
c[j]=c[j+1];
c[j+1]=t;
}
}
}
for (i=0;i"%d ",c[i]);
}
return 0;
}
运行结果:8 4202960 7 6 5 4 3 2
不知道为什么会输出这串4202960奇怪的数字
解题思路:将a组的数先放入到数组c中,将数组b中的数与之逐一比较,如果都不相同,则说明该数不在数组a中,可以加到数组c中。最后,对于数组c进行冒泡排序,从大到小。
冒泡排序算法那里出错了,你每次冒泡把最小的数放在数组最后面,但是你里面的循环次数是 0 到 count - i,这样在第一次冒泡排序时(i=0)实际的循环次数就是count次,这样就会访问到c数组后面未被赋值的值,就会出现奇怪的数字。
把 for (j=0;j<count-i;j++) {
改成 for (j=0;j<count-1-i;j++) { 就好
中间有个换行,你需要用getchar读进来,否则后续执行scanf的时候读到换行就出错了,数组B全都没有赋值
明白了 感谢大神