永发信息网

帮我改改这个C程序

答案:1  悬赏:40  手机版
解决时间 2021-04-28 02:05
  • 提问者网友:锁深秋
  • 2021-04-27 16:45
我是用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);
}
}
最佳答案
  • 五星知识达人网友:撞了怀
  • 2021-04-27 17:26

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

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯