我是入门菜勾 2023-03-19 20:36 采纳率: 85.7%
浏览 29
已结题

编写函数spilit(seqlist a1实现将顺序表a1分裂成两个顺序表a2与a3,a2由表a1中的所有奇数组成,a3由表a1中的所有偶数组成,a1保持不变


#include <stdio.h>
#include <stdlib.h>
#define N 10000
typedef struct link seqlist;
struct link {
    int size;
    int data[N];
};
void spilit(seqlist a1,seqlist *a2,seqlist *a3);
int main() {
    int i;
    seqlist a1,*a2,*a3;
    spilit(a1,a2,a3);
    for(int j=0; j<a2->size; j++) {
        printf("%d",a2->data[j]);
        printf("\n");
    }
    for(int k=0; k<a3->size; k++) {
        printf("%d",a2->data[k]);
        printf("\n");
    }
    return 0;
}
void spilit(seqlist a1,seqlist *a2,seqlist *a3) {
    int i,j=0,k=0;
    printf("请输入a1数据\n");
    for(i=0; i<5; i++) {
        scanf("%d",&a1.data[i]);
    }
    for(i=0; i<5; i++) {
        if((a1.data[i])%2!=0) {
            a2->data[j]=a1.data[i];
            j++;
        } else if((a1.data[i])%2==0) {
            a3->data[k]=a1.data[i];
            k++;
        } else
            break;
    }
    a2->size=j;
    a3->size=k;
}

为什么没法运行啊

  • 写回答

4条回答 默认 最新

  • lshen01 2023-03-19 20:58
    关注

    参考GPT和自己的思路:

    您好!根据您提供的代码,可以发现问题出在没有为顺序表a2和a3分配内存,所以在对它们进行操作时,会发生未知错误。您需要在spilit函数中添加以下语句以分配内存:

    a2 = (seqlist*)malloc(sizeof(seqlist));
    a3 = (seqlist*)malloc(sizeof(seqlist));
    

    同时,为防止内存泄漏,需要在最后释放内存:

    free(a2);
    free(a3);
    

    另外,您在测试函数中声明了a2、a3为指针类型,但没有初始化,所以需要在main函数中添加以下语句以初始化:

    a2 = (seqlist*)malloc(sizeof(seqlist));
    a3 = (seqlist*)malloc(sizeof(seqlist));
    a2->size = 0;
    a3->size = 0;
    

    最后,您在print语句中输出a2和a3时,发现输出结果都是a2的内容,这是因为您的代码中print语句中输出a3时,写错了变量名,应该为a3->data[k]。

    下面是经过调整后的代码,希望可以帮到您:

    
    #include <stdio.h>
    #include <stdlib.h>
    #define N 10000
    typedef struct link seqlist;
    struct link {
        int size;
        int data[N];
    };
    void spilit(seqlist a1, seqlist* a2, seqlist* a3);
    
    int main() {
        int i;
        seqlist a1, *a2, *a3;
    
        a2 = (seqlist*)malloc(sizeof(seqlist));
        a3 = (seqlist*)malloc(sizeof(seqlist));
        a2->size = 0;
        a3->size = 0;
    
        spilit(a1, a2, a3);
    
        printf("奇数部分:\n");
        for (int j = 0; j < a2->size; j++) {
            printf("%d\n", a2->data[j]);
        }
    
        printf("偶数部分:\n");
        for (int k = 0; k < a3->size; k++) {
            printf("%d\n", a3->data[k]);
        }
    
        free(a2);
        free(a3);
        return 0;
    }
    
    void spilit(seqlist a1, seqlist* a2, seqlist* a3) {
        int i, j = 0, k = 0;
    
        printf("请输入a1数据\n");
        for (i = 0; i < 5; i++) {
            scanf_s("%d", &a1.data[i], sizeof(int));
        }
    
        for (i = 0; i < 5; i++) {
            if ((a1.data[i]) % 2 != 0) {
                a2->data[j] = a1.data[i];
                j++;
            }
            else if ((a1.data[i]) % 2 == 0) {
                a3->data[k] = a1.data[i];
                k++;
            }
            else break;
        }
    
        a2->size = j;
        a3->size = k;
    }
    

    希望可以帮到您,如有疑问欢迎再次向我提问。

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

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 修改了问题 3月19日
  • 创建了问题 3月19日

悬赏问题

  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA