2301_78126417 2024-03-09 00:55 采纳率: 100%
浏览 5
已结题

数据结构c语言|求数据结构的顺序表集合差值(求改错)

求数据结构的顺序表集合差值,求各位大大的神指出错误(没报错,但没有输入输出)

img

img

img

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2024-03-09 08:38
    关注

    2301_78126417 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    在提供的C语言代码中,存在一些问题。以下是修正后的代码以及针对问题的详细说明:

    #include <stdio.h>
    
    #define MAXSIZE 100
    typedef int ElemType;
    typedef struct {
        ElemType elem[MAXSIZE];
        int last;
    } SeqList;
    
    void difference(SeqList *laa, SeqList *lbb, SeqList *lcc) {
        lcc->last = -1; // 初始化结果列表lcc的last为-1
        for(int ai = 0; ai <= laa->last; ai++) {
            int judge = 0;
            ElemType altem = laa->elem[ai];
            
            for(int bi = 0; bi <= lbb->last; bi++) { // 修改:将bi<=lbb->last改为bi<lbb->last,避免数组越界
                ElemType bltem = lbb->elem[bi];
                
                if (altem == bltem) {
                    judge = 1;
                    break; // 在找到匹配项时跳出内层循环
                }
            }
    
            if (judge == 0) {
                lcc->elem[++lcc->last] = altem; // 将没有在第二个表中出现的元素添加到结果列表
            }
        }
    }
    
    int main() {
        SeqList la, lb, lc; // 需要实例化三个顺序表结构体
        
        la.last = -1;
        lb.last = -1;
        
        int a, b;
        while(1) {
            scanf("%d", &a);
            if (!a) { // 修改:条件判断从a更改为!a,当输入非正数时跳出循环
                break;
            }
            la.elem[++la.last] = a;
        }
    
        while(1) {
            scanf("%d", &b);
            if (!b) { // 修改:条件判断从!b更改为!b,当输入非正数时跳出循环
                break;
            }
            lb.elem[++lb.last] = b;
        }
    
        difference(&la, &lb, &lc); // 传入顺序表的地址
    
        // 输出结果列表中的元素
        for(int i = 0; i <= lc.last; i++) { // 修改:for循环条件应为i<=lc.last
            printf("%d ", lc.elem[i]); // 添加空格以美化输出
        }
    
        return 0;
    }
    

    问题与解决方案列表:

    1. 内层循环条件 bi <= lbb->last 应修改为 bi < lbb->last 以避免数组越界。
    2. 当输入非正数时,应当跳出读取循环,在 scanf 后面的条件语句中将 if (a)if (!b) 更改为 if (!a)if (!b)
    3. 在主函数中需要初始化三个顺序表结构体实例(la, lb, lc),而不是仅声明指针。
    4. 在调用 difference 函数时,应传递顺序表实例的地址,即 difference(&la, &lb, &lc);
    5. 输出结果集合时,for循环条件应为 i <= lc.last,以便包含所有已添加到结果列表的元素。
    6. 在输出每个元素后添加空格,使得输出格式更加清晰。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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