求c++大神,程序为啥运行了会自动停止!程序如下!题目如图。
#include<iostream>usingnamespacestd;voidmain(){intN;cout<<"pleaseinputN:"<<endl<<"N="...
#include<iostream>
using namespace std;
void main()
{
int N;
cout<<"please input N:"<<endl<<"N=";
cin>>N;
cout<<endl<<"please input a[N]:"<<endl;
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
for(i=0; i<N; i++)
{
cout<<"a["<<i<<"]=";
cin>>p[i];
}
cout<<endl<<"please input k,m:"<<endl<<"k=";
cin>>k;
cout<<"m=";
cin>>m;
for(i=k;i<k+m;i++)
{
for(j=k+i;j<k+m;j++)
{
if(p[i]<p[j])
{
t=p[i];
p[i]=a[j];
p[j]=t;
}
}
}
cout<<endl;
for(i=0;i<N;i++)
{
cout<<p[i]<<' ';
}
free(p);
cout<<endl;
} 展开
using namespace std;
void main()
{
int N;
cout<<"please input N:"<<endl<<"N=";
cin>>N;
cout<<endl<<"please input a[N]:"<<endl;
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
for(i=0; i<N; i++)
{
cout<<"a["<<i<<"]=";
cin>>p[i];
}
cout<<endl<<"please input k,m:"<<endl<<"k=";
cin>>k;
cout<<"m=";
cin>>m;
for(i=k;i<k+m;i++)
{
for(j=k+i;j<k+m;j++)
{
if(p[i]<p[j])
{
t=p[i];
p[i]=a[j];
p[j]=t;
}
}
}
cout<<endl;
for(i=0;i<N;i++)
{
cout<<p[i]<<' ';
}
free(p);
cout<<endl;
} 展开
3个回答
展开全部
是因为你的初始化的问题。
a根本没有进行初始化,所以在你进行数组交换的导致地址不可访问,退出。
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
这几句初始化代码,声明*p和*a,然后p=a,但是之后你是对p进行初始化,将p指向一个新的已经初始化的地址,a还是没有变化,所以在后边你访问a[j]的时候会报错。
只需要将交换代码中的a[j]换成p[j]即可(上述a的声明可以省去),如下。
t=p[i];
p[i]=p[j];
p[j]=t;
a根本没有进行初始化,所以在你进行数组交换的导致地址不可访问,退出。
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
这几句初始化代码,声明*p和*a,然后p=a,但是之后你是对p进行初始化,将p指向一个新的已经初始化的地址,a还是没有变化,所以在后边你访问a[j]的时候会报错。
只需要将交换代码中的a[j]换成p[j]即可(上述a的声明可以省去),如下。
t=p[i];
p[i]=p[j];
p[j]=t;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-05-26
展开全部
你试试这个代码看行不
#include<iostream>
using namespace std;
void main()
{
int N;
cout<<"please input N:"<<endl<<"N=";
cin>>N;
cout<<endl<<"please input a[N]:"<<endl;
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
for(i=0; i<N; i++)
{
cout<<"a["<<i<<"]=";
cin>>p[i];
}
cout<<endl<<"please input k,m:"<<endl<<"k=";
cin>>k;
cout<<"m=";
cin>>m;
for(i=k;i<k+m;i++)
{
for(j=1+i;j<k+m;j++)
{
if(p[i]<p[j])
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
cout<<endl;
for(i=0;i<N;i++)
{
cout<<p[i]<<' ';
}
free(p);
cout<<endl;
}
#include<iostream>
using namespace std;
void main()
{
int N;
cout<<"please input N:"<<endl<<"N=";
cin>>N;
cout<<endl<<"please input a[N]:"<<endl;
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
for(i=0; i<N; i++)
{
cout<<"a["<<i<<"]=";
cin>>p[i];
}
cout<<endl<<"please input k,m:"<<endl<<"k=";
cin>>k;
cout<<"m=";
cin>>m;
for(i=k;i<k+m;i++)
{
for(j=1+i;j<k+m;j++)
{
if(p[i]<p[j])
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
cout<<endl;
for(i=0;i<N;i++)
{
cout<<p[i]<<' ';
}
free(p);
cout<<endl;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个排序也需要你自己排序吗?你这个代码没看懂思路
追问
对啊题目就是那个样子。。您随便改吧,成功就好
追答
#include
using namespace std;
int swap(int *a, int *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
int slow_sort(int *array, int N)
{
int i,j;
for (i=0; i array[j])
{
swap(&array[i], &array[j]);
}
}
}
}
int main()
{
int N;
cout>N;
int i,k,m,j,t,*p;
p=(int *)malloc(N*sizeof(int));
cout>p[i];
}
cout>k;
cout>m;
slow_sort(p,N);
for(m=k+m-1;k<m;)
{
swap(&p[k++], &p[m--]);
}
cout<<endl;
for(i=0;i<N;i++)
{
cout<<p[i]<<' ';
}
free(p);
cout<<endl;
system("pause");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询