小黄JY_H 2022-10-14 16:05 采纳率: 66.7%
浏览 70
已结题

输出数组时,中间某一项输出一串奇怪的数字

问题:输出数组时,中间某一项输出一串奇怪的数字

程序功能:降序输出两组整数的并集(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<stdio.h>
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;i<count-1;i++) {
        for (j=0;j<count-i;j++) {
            if (c[j]<c[j+1]) {
                t=c[j];
                c[j]=c[j+1];
                c[j+1]=t;
            }
        }
    }
    for (i=0;i<count;i++) {
        printf("%d ",c[i]);
    }
    return 0;
}

运行结果:8 4202960 7 6 5 4 3 2
不知道为什么会输出这串4202960奇怪的数字

解题思路:将a组的数先放入到数组c中,将数组b中的数与之逐一比较,如果都不相同,则说明该数不在数组a中,可以加到数组c中。最后,对于数组c进行冒泡排序,从大到小。

  • 写回答

3条回答 默认 最新

  • zzzfly 2022-10-14 16:35
    关注

    冒泡排序算法那里出错了,你每次冒泡把最小的数放在数组最后面,但是你里面的循环次数是 0 到 count - i,这样在第一次冒泡排序时(i=0)实际的循环次数就是count次,这样就会访问到c数组后面未被赋值的值,就会出现奇怪的数字。
    把 for (j=0;j<count-i;j++) {
    改成 for (j=0;j<count-1-i;j++) { 就好

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月22日
  • 已采纳回答 10月14日
  • 创建了问题 10月14日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分