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

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

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

程序功能:降序输出两组整数的并集(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 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,
  • ¥15 spaceclaim模型变灰色
  • ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
  • ¥15 字符串比较代码的漏洞
  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?