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

编写函数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日

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊