永发信息网

帮我改改这个C程序

答案:1  悬赏:40  手机版
解决时间 2021-04-28 02:05
我是用C++6.0写的,没有错误也没有警告,运行到某一步以后就提示错误,然后就结束了
#include<stdio.h>
#include<stdlib.h>
void input(int *v,int *n)
{
int i;
printf("\n请输入元素到线性表中:");
for(i=0;i<*n;i++)
scanf("%d",v+i);
}

void output(int *v,int*n)
{
int i;
for(i=0;i<*n;i++)
printf("%d\t",*(v+i));
}

int *initsl(int m,int *n)
{
int *v;
v=(int *)malloc(m*sizeof(int));
*n=0;
return v;
}

int serch(v,n,x)
int n;
int v[],x;
{
int k;
k=0;
while((k<n)&&(*(v+k)!=x)) k=k+1;
if(k==n) k=-1;
return (k);
}

int beserch(v,n,x)
int v[],x;
int n;
{
int i,j,k;
i=1;j=n;
while(i<=j)
{ k=(i+j)/2;
if(v[k-1]==x)
return(k-1);
if(v[k-1]>x) j=k-1;
else i=k+1;
}
return(-1);
}

int split(p,m,n)
int m,n;
int p[];
{ int i,j,k,u;
int t;
i=m;j=n;k=(i+j)/2;
if((p[i]>=p[j])&&(p[j]>=p[k]))
u=j;
else if((p[i]>=p[k])&&(p[k]>=p[j])) u=k;
else u=i;
t=p[u]; p[u]=p[i];
while(i!=j)
{ while((i<j)&&(p[j]>=t)) j=j-1;
if(i<j)
{p[i]=p[j];i=i+1;}
while((i<j)&&(p[i]<=t)) i=i+1;
if(i<j)
{ p[j]=p[i]; j=j-1;}
}
p[i]=t;
return(i);
}

void bubsort(v,n)
int n;int v[];
{int m,k,j,i;
int t;
k=0;m=n-1;
while(k<m)
{j=m-1;m=0;
for(i=k;i<=j;i++)
if(v[i]>v[i+1])
{t=v[i];v[i]=v[i+1];v[i+1]=t;m=i;}
j=k+1;k=0;
for(i=m;i>=j;i--)
if(v[i-1]>v[i])
{t=v[i];v[i]=v[i+1];v[i+1]=t;k=i;}
}
return ;
}


void qksort(v,m,n)
int m,n;
int v[];
{int i;
if(n>m)
{i=split(v,m,n);
qksort(v,m,i-1);
qksort(v,i+1,n);}
return ;
}

void insort(v,n)
int n; int v[];
{
int j,k;
int t;
for (j=1;j<n;j++)
{ t=v[j]; k=j-1;
while ((k>=0)&&(v[k]>t))
{ v[k+1]=v[k];k=k-1; }
v[k+1]=t;
}
return;
}


void shlsort(v,n)
int n; int v[];
{
int h,j,i;int t; h=n/2;
while(h>0)
{
for(j=h;j<=n-1;j++)
{ t=v[j]; i=j-h;
while((i>=0)&&(v[i]>t))
{v[i+h]=v[i]; i=i-h;}
v[i+h]=t;
}
h=h/2;
}
return;
}

void selesort(v,n)
int n;
int v[];
{
int i,j,k;
int d;
for(i=0;i<=n-2;i=i+1)
{k=i;
for(j=i+1;j<=n-1;j=j+1)
if(v[j]<v[k])
k=j;
if(k!=i)
d=v[i];v[i]=v[k];v[k]=d;
}
return;}

void main()
{
int *v=NULL,*n=NULL,m,x,k;
char a;
n=(int *)malloc(sizeof(int));
printf("\n请输入线性表的大小(m):");
scanf("%d",&m);
v=initsl(m,n);
printf("\n请输入线性表的实际长度(n):");
scanf("%d",n);
input(v,n);
output(v,n);
printf("\n请问线性表中的元素是否有序(y/n)?");
getchar();
a=getchar();
getchar();
if(a=='y'||a=='Y')
{printf("\n线性表中元素有序,采用对分查找法查找");
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);}
else printf("\n线性表中元素无序,是否先进行排序再执行查找(y/n)?");

a=getchar();
getchar();
if(a=='y'||a=='Y')
{printf("\n请键入数字选择排序方法:");
printf("\n1.快速排序\n");
printf("\n2.冒泡排序\n");
printf("\n3.插入排序\n");
printf("\n4.希尔排序\n");
printf("\n5.简单选择排序\n");
printf("\n\n键入其他数字放弃排序直接采用顺序查找法查找");
scanf("%d",&k);
if(k==1)
{
qksort(v,m,n);
printf("\n排序后:");
output(v,n);
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
if(k==2)
{
bubsort(v,n);
printf("\n排序后:");
output(v,n);
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
if(k==3)
{insort(v,n);
printf("\n排序后:");
output(v,n);
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
if(k==4)
{
shlsort(v,n);
printf("\n排序后:");
output(v,n);
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}

if(k==5)
{selesort(v,n);
printf("\n排序后:");
output(v,n);
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}

if(k>5||k<1)
{
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=serch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
}
else
{printf("\n请输入要查找的元素");
scanf("%d",&x);
k=serch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
}
最佳答案

我想说的是你写的代码怎么用这么多的指针啊。。你用指针出错的地方很多。。你上面给出的代码应该是不能运行的。在参数上面就有很大的问题。。还有就是变量尽量取来看一眼就知道是做什么的。。我把你的程序改了下,能够运行。代码如下:

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我的仓库在哪
被外力击碎的感情该怎么维护?
问道雪山飞狐的来…我是混79的…
红郎地址在哪,我要去那里办事
极品外卖在哪采?速度的,急用。
有没有人知道哪里有去普吉岛拍婚纱照的,最近
nbalive2008怎样才能获得更多的球队资金?
冬天贴瓷砖要注意什么,卧室冬天铺瓷砖会不会
买华硕电脑要注意哪些问题
安钢集团舞阳矿业公司居民小区-1号院地址有知
现在中国最热门的网络游戏和单机游戏是哪几款
在CAD中斜着标注是怎么标的
家园卡09版彩铃如何取消
关于我的眼睛(眼皮)
有首英文歌 开头是咚咚咚咚的
推荐资讯
电脑维修问题在线咨询
死神226的后续剧情是哪集
括约肌的具**置
女生喜欢看的小说 推荐几个 谢谢
雅马哈巡航xv1900新车多少钱
西园菜场怎么去啊,有知道地址的么
请推荐一台3000元以下的笔记本电脑,谢谢?
高手进!帮我选个FLASH制作软件,谢谢~~
怎么获点劵
红色高邦帆布鞋配亮蓝长牛仔裤可以穿格子衬衫
请问一下,七宝有哪七个宝?
谁给我介绍个动化片
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?