| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 401 人关注过本帖
标题:求错误……
只看楼主 加入收藏
淡若晨岚
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-10-6
结帖率:0
收藏
已结贴  问题点数:10 回复次数:3 
求错误……
集合交并差,然后的结果就是差这部分出现错误,可是怎么调呢……到底为什么呢……
#include"stdio.h"
#include"stdlib.h"
typedef struct{
        int * elem;
        int length;
    }Sqlist;
void main()
{
   
    int i,j,t,e;
    Sqlist la,lb,lc;
    la.elem=(int *)malloc(100*sizeof(int));
    lb.elem=(int *)malloc(100*sizeof(int));
    lc.elem=(int *)malloc(100*sizeof(int));
    printf("请输入集合A、集合B的元素个数\n");
    scanf("%d %d",&la.length,&lb.length);
    printf("请输入集合A的元素\n");
    for(i=0;i<la.length;i++)
        scanf("%d",&la.elem[i]);
    printf("请输入集合B的元素\n");
    for(i=0;i<lb.length;i++)
        scanf("%d",&lb.elem[i]);
    //求A与B的交集
    t=0;
    for(i=0;i<lb.length;i++)
    {
        e=lb.elem[i];
        j=0;
        while((j<la.length)&&(la.elem[j]!=e))
            j++;
        if(j!=la.length)
        {
            lc.elem[t]=e;
            t++;
        }
        
    }
    if(t==0)printf("这两个集合没有交集");
    else
    {
        printf("交集中的元素为:\n");
        for(i=0;i<t;i++)
        printf("%4d",lc.elem[i]);
    }
    printf("\n");
    void ListDelete_Sq (Sqlist &L, int i);
    for(i=0;i<la.length;i++)
    {
        e=la.elem[i];
        j=0;
        while((j<lb.length)&&(lb.elem[j]!=e))
            j++;
        if(j!=lb.length)
            ListDelete_Sq(la,i);
    }
    printf("A-B中的元素为:\n");
    for(i=0;i<la.length;i++)
        printf("%4d",la.elem[i]);
    printf("\n");
    //求A与B的并集
    for(i=0;i<lb.length;i++)
    {
        e=lb.elem[i];
        j=0;
        while((j<la.length)&&(la.elem[j]!=e))
            j++;
        if(j==la.length)
        {
            la.elem[la.length]=e;
            la.length++;
        }
    }
    printf("并集中的元素为:\n");
    for(i=0;i<la.length;i++)
        printf("%4d",la.elem[i]);
    printf("\n");
    //求A-B
    void ListDelete_Sq (Sqlist &L, int i);
    for(i=0;i<la.length;i++)
    {
        e=la.elem[i];
        j=0;
        while((j<lb.length)&&(lb.elem[j]!=e))
            j++;
        if(j!=lb.length)
            ListDelete_Sq(la,i+1);
    }
    printf("A-B中的元素为:\n");
    for(i=0;i<la.length;i++)
        printf("%4d",la.elem[i]);
    printf("\n");

}
void ListDelete_Sq (Sqlist &L, int i)
{
    L.elem=(int*)malloc(100*sizeof(int));
    int*p,*q;
    p = &(L.elem[i-1]);        // p为被删元素的位置
    q = L.elem + L.length-1;  // 表尾元素的位置
    for ( ++p; p<=q; ++p)  
       *(p-1) =*p ;    // 被删除元素之后的元素左移   
  L.length--;           
}
 
搜索更多相关主题的帖子: 元素 include 
2011-10-06 14:08
淡若晨岚
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-10-6
收藏
得分:0 
额,这应该是出问题的算差集的部分……
怎么总是提示这一行出错误呢 L.length--;  


#include"stdio.h"
#include"stdlib.h"
typedef struct{
        int * elem;
        int length;
    }Sqlist;
void main()
{
   
    int i,j,e;
    Sqlist la,lb,lc;
    la.elem=(int *)malloc(100*sizeof(int));
    lb.elem=(int *)malloc(100*sizeof(int));
    lc.elem=(int *)malloc(100*sizeof(int));
    printf("请输入集合A、集合B的元素个数\n");
    scanf("%d %d",&la.length,&lb.length);
    printf("请输入集合A的元素\n");
    for(i=0;i<la.length;i++)
        scanf("%d",&la.elem[i]);
    printf("请输入集合B的元素\n");
    for(i=0;i<lb.length;i++)
        scanf("%d",&lb.elem[i]);
//求A-B
    void ListDelete_Sq (Sqlist &L, int i);
    for(i=0;i<la.length;i++)
    {
        e=la.elem[i];
        j=0;
        while((j<lb.length)&&(lb.elem[j]!=e))
            j++;
        if(j!=lb.length)
            ListDelete_Sq(la,i+1);
    }
    printf("A-B中的元素为:\n");
    for(i=0;i<la.length;i++)
        printf("%4d",la.elem[i]);
    printf("\n");

}
//子函数
void ListDelete_Sq (Sqlist &L, int i)
{
    L.elem=(int*)malloc(100*sizeof(int));
    int*p,*q;
    p = &(L.elem[i-1]);        // p为被删元素的位置
    q = L.elem + L.length-1;  // 表尾元素的位置
    for ( ++p; p<=q; ++p)  
       *(p-1) =*p ;    // 被删除元素之后的元素左移   
  L.length--;           
}
2011-10-06 14:13
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:10 
你这指针乱用的离谱。。。。
2011-10-07 13:10
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:0 
#include"stdio.h"
#include"stdlib.h"
typedef struct{
        int * elem;
        int length;
    }Sqlist;
void main()
{
   
    int i,j,t,e;
    Sqlist la,lb,lc;
    la.elem=(int *)malloc(100*sizeof(int));
    lb.elem=(int *)malloc(100*sizeof(int));
    lc.elem=(int *)malloc(100*sizeof(int));
    printf("请输入集合A、集合B的元素个数\n");
    scanf("%d %d",&la.length,&lb.length);
    printf("请输入集合A的元素\n");
    for(i=0;i<la.length;i++)
       scanf("%d",&la.elem[i]);                     //elem是指针不用&符
    printf("请输入集合B的元素\n");
    for(i=0;i<lb.length;i++)
        scanf("%d",&lb.elem[i]);
    //求A与B的交集
    t=0;
    for(i=0;i<lb.length;i++)
    {
        e=lb.elem[i];                  //e是整数,elem是指针 e=*lb.elem[i]      
        j=0;
        while((j<la.length)&&(la.elem[j]!=e))
            j++;
        if(j!=la.length)
        {
            lc.elem[t]=e;            // 是*lc.elem[t]=e;            
            t++;
        }
        
    }
    if(t==0)printf("这两个集合没有交集");
    else
    {
        printf("交集中的元素为:\n");
        for(i=0;i<t;i++)
        printf("%4d",lc.elem[i]);
    }
    printf("\n");
    void ListDelete_Sq (Sqlist &L, int i);
    for(i=0;i<la.length;i++)
    {
        e=la.elem[i];
        j=0;
        while((j<lb.length)&&(lb.elem[j]!=e))
            j++;
        if(j!=lb.length)
            ListDelete_Sq(la,i);
    }
    printf("A-B中的元素为:\n");
    for(i=0;i<la.length;i++)
        printf("%4d",la.elem[i]);
    printf("\n");
    //求A与B的并集
    for(i=0;i<lb.length;i++)
    {
        e=lb.elem[i];
        j=0;
        while((j<la.length)&&(la.elem[j]!=e))
            j++;
        if(j==la.length)
        {
            la.elem[la.length]=e;
            la.length++;
        }
    }
    printf("并集中的元素为:\n");
    for(i=0;i<la.length;i++)
        printf("%4d",la.elem[i]);
    printf("\n");
    //求A-B
    void ListDelete_Sq (Sqlist &L, int i);
    for(i=0;i<la.length;i++)
    {
        e=la.elem[i];
        j=0;
        while((j<lb.length)&&(lb.elem[j]!=e))
            j++;
        if(j!=lb.length)
            ListDelete_Sq(la,i+1);
    }
    printf("A-B中的元素为:\n");
    for(i=0;i<la.length;i++)
        printf("%4d",la.elem[i]);
    printf("\n");

}
void ListDelete_Sq (Sqlist &L, int i)
{
    L.elem=(int*)malloc(100*sizeof(int));                    //删除你重新分配空间是怎么会事
    int*p,*q;
    p = &(L.elem[i-1]);        // p为被删元素的位置
    q = L.elem + L.length-1;  // 表尾元素的位置
    for ( ++p; p<=q; ++p)  
       *(p-1) =*p ;    // 被删除元素之后的元素左移   
 L.length--;           
}



大略看了一下也没怎么改,差不多都是指针和数的乱用,这些是数据结构书上的例题吧,你看看书,先把书上的算法学会吧
2011-10-07 13:28
快速回复:求错误……
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048877 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved