程序本身没有检查出错误。但是运行时,到MergeList(La,Lb,Lc)时,突然跳出对话框提示调试或终止程序,why
答案:1 悬赏:70 手机版
解决时间 2021-03-31 18:59
- 提问者网友:不爱我么
- 2021-03-31 13:40
程序本身没有检查出错误。但是运行时,到MergeList(La,Lb,Lc)时,突然跳出对话框提示调试或终止程序,why
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-03-31 14:21
多了,逻辑错误就自己慢慢改吧。
#include
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW -2
#define OK 1
typedef struct{
int *elem;
int length;
int listsize;
}List;
void main()
{void MergeList();
List La,Lb,Lc;
int i;
for(i=0;i<9;i++)
scanf("%d",&La.elem[i]);
for(i=0;i<10;i++)
scanf("%d",&Lb.elem[i]);
MergeList(La,Lb,&Lc);
}
void MergeList(List La,List Lb,List *Lc) //////////
{int InitList();
int ListLength();
void GetElem();
int ListInsert();
int i,j,k,La_len,Lb_len,ai,bj;
InitList(&Lc);
i=j=1;k=0;
La_len=ListLength(&La); //既然要获得长度,函数应有返回值
Lb_len=ListLength(&Lb);
while((i<=La_len)&&(j<=Lb_len))
{GetElem(La,i,ai); GetElem(Lb,j,bj);
if(ai<=bj)
{ListInsert(Lc,++k,ai);
++i;}
else
{ListInsert(Lc,++k,bj);
++j;}
}
while(i<=La_len)
{GetElem(La,i++,ai);
ListInsert(&Lc,++k,ai);
}
while(i<=Lb_len)
{GetElem(Lb,j++,bj);
ListInsert(&Lc,++k,bj);
}
}
int ListLength(List *L) ////////////////
{int i;
i=0;
while(L->elem[i]!=NULL)
i++;
return i; //返回长度
}
int InitList(List *L) { ////////////////
L->listsize=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!(L->listsize))
exit(OVERFLOW);
L->length=LIST_INIT_SIZE;
return OK;
}
void GetElem(List L,int i,int *e) { ////////////////
if(i<1||i>L.length)
{
printf("输入非法");
system("pause");
exit(1);
}
*e=L.elem[i-1];
}
int ListInsert(List *L,int i,int e) ///////////////////
{
int *newbase,*q,*p;
if((i<1)||(i>ListLength(&L)+1))
return 0;
if(L->length>=L->listsize) {
newbase=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(-2);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--q)
*(p+1)=*p;
*q=e;
++(L->length);
return OK;
} 9869希望对你有用!
另外,站长团上有产品团购,便宜有保证
#include
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW -2
#define OK 1
typedef struct{
int *elem;
int length;
int listsize;
}List;
void main()
{void MergeList();
List La,Lb,Lc;
int i;
for(i=0;i<9;i++)
scanf("%d",&La.elem[i]);
for(i=0;i<10;i++)
scanf("%d",&Lb.elem[i]);
MergeList(La,Lb,&Lc);
}
void MergeList(List La,List Lb,List *Lc) //////////
{int InitList();
int ListLength();
void GetElem();
int ListInsert();
int i,j,k,La_len,Lb_len,ai,bj;
InitList(&Lc);
i=j=1;k=0;
La_len=ListLength(&La); //既然要获得长度,函数应有返回值
Lb_len=ListLength(&Lb);
while((i<=La_len)&&(j<=Lb_len))
{GetElem(La,i,ai); GetElem(Lb,j,bj);
if(ai<=bj)
{ListInsert(Lc,++k,ai);
++i;}
else
{ListInsert(Lc,++k,bj);
++j;}
}
while(i<=La_len)
{GetElem(La,i++,ai);
ListInsert(&Lc,++k,ai);
}
while(i<=Lb_len)
{GetElem(Lb,j++,bj);
ListInsert(&Lc,++k,bj);
}
}
int ListLength(List *L) ////////////////
{int i;
i=0;
while(L->elem[i]!=NULL)
i++;
return i; //返回长度
}
int InitList(List *L) { ////////////////
L->listsize=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!(L->listsize))
exit(OVERFLOW);
L->length=LIST_INIT_SIZE;
return OK;
}
void GetElem(List L,int i,int *e) { ////////////////
if(i<1||i>L.length)
{
printf("输入非法");
system("pause");
exit(1);
}
*e=L.elem[i-1];
}
int ListInsert(List *L,int i,int e) ///////////////////
{
int *newbase,*q,*p;
if((i<1)||(i>ListLength(&L)+1))
return 0;
if(L->length>=L->listsize) {
newbase=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(-2);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--q)
*(p+1)=*p;
*q=e;
++(L->length);
return OK;
} 9869希望对你有用!
另外,站长团上有产品团购,便宜有保证
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯