凊(◦˙▽˙◦) 2022-10-03 14:45 采纳率: 91.7%
浏览 27
已结题

程序有错误,在删除数组那里

写这个程序 在删除重复数组的时候 ,当他自己执行模块的时候是正确的,但当把所有都输出的时候,删除数组哪里就有一个数字没有了

#include<stdio.h>
#define COUNT 6
int a[COUNT], count = COUNT, k, m, b[COUNT],t,c[COUNT];
void oarray(){  //输出原数组
    printf("原数组:");
    for (k = 0; k < COUNT; k++)
        printf("%5d", b[k]);
    printf("\n");
}

void sort(){  //排序算法
    for(k=0;k<COUNT-1;k++)  //排序数组
            for(m=k+1;m<COUNT;m++)
                if (c[k] > c[m]) {
                    t = c[k];
                    c[k] = c[m];
                    c[m] = t;
                }
        for (k = 0; k < COUNT; k++)
            a[k] = c[k];
        printf("排序后数组为:");
        for (k = 0; k < COUNT; k++)
        printf("%5d", c[k]);
    printf("\n");
}

void darray(){  //删除重复数组

        for(k=0;k<COUNT-1;k++)  //排序数组
            for(m=k+1;m<COUNT;m++)
                if (c[k] > c[m]) {
                    t = c[k];
                    c[k] = c[m];
                    c[m] = t;
                }
        for (k = 0; k < COUNT; k++)
            a[k] = c[k];
    
    for (k = COUNT - 1; k > 0; k--) //删除重复数组
        if (a[k] == a[k - 1]) {
            for (m = k - 1; m < COUNT - 1; m++)
                a[m] = a[m + 1];
            count--;
        }
            printf("删除重复后的数组:");
    for (k = 0; k < count; k++)
        printf("%5d", a[k]);
    printf("\n");


}
 
void choose(){  //选项
    printf("选择选项:\n\n");
    printf("1.输出原数组\n\n");
    printf("2.输出排序后数组\n\n");
    printf("3.输出删除重复后的数组\n\n");
    printf("4.输出所有\n\n");
    printf("5.退出\n\n");
    printf("请输入数据1,2,3,4,5\n\n");
    int x;
    printf("\n\n");
    do{
  
        scanf("%d",&x);
        switch(x){
        case 1: oarray(); printf("退出按5\n\n");    break;  
        case 2: sort(); printf("退出按5\n\n");    break; 
        case 3: darray(); printf("退出按5\n\n");    break; 
        case 4: oarray();sort();darray();     printf("退出按5\n\n");    break; 
        case 5: break;
        default:break;
        }
    }while(x!=5);
}


void main(){
    

    printf("Input %d data in order:\n", COUNT);
for (k = 0; k < COUNT; k++) {  
        printf("a[%d]=", k);
        scanf("%d", &a[k]);
        b[k] = a[k], c[k] = a[k];
    }
    
    oarray();
    choose();


    //system("pause");


}

img

  • 写回答

2条回答 默认 最新

  • 叶落花枯 2022-10-03 15:08
    关注

    你的 count 变量在每次调用 darray() 函数的时候都对原来的数组进行排序删除重复,然后 count-- 改变了原来的值,随着调用次数增加,你这个 count 变量一直在减,逻辑出问题了。
    要么你在 darray() 函数开始的地方加上 count = COUNT; 重新赋值,应该就可以了。

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 关于超局变量获取查询的问题
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集
  • ¥15 在启动roslaunch时出现如下问题
  • ¥15 汇编语言实现加减法计算器的功能
  • ¥20 关于多单片机模块化的一些问题
  • ¥30 seata使用出现报错,其他服务找不到seata
  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?