指针 改一下 看看错哪了 插入一个数

来源:百度知道 编辑:UC知道 时间:2024/06/03 04:05:55
插入一个数使这组数有序
#include <stdio.h>
void fun(int *p,int n,int s)
{int *a=p;
for(a=p+n-1;a>p;a--)
{if(*a>=s)*(a+1)=*a;
else {*a=s;break;}
if(a==p)*a=s;
}}

void main()
{int a[10]={1,2,3,4,5,7,8,9,10},s=6;
fun(a,10,s);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
}

修改两个地方:
1.for(a=p+n-1;a>p;a--)
改为
for(a=p+n-2;a>p;a--) //你的本意是让a初始指向10,

2.else {*a=s;break;}
改为
else {*(a+1)=s;break;} //不然你的输出将是用6替换到5,

最终正确的程序是这样:
#include "stdio.h"
void fun(int *p,int n,int s)
{
int *a=p;
for(a=p+n-2;a>p;a--)
{
if(*a>=s)
*(a+1)=*a;
else
{
*(a+1)=s;
break;
}
if(a==p)
*a=s;
}
}

int main()
{
int a[10]={1,2,3,4,5,7,8,9,10},s=6;
fun(a,10,s);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}

#include <stdio.h>
void fun(int *p,int n,int s)
{int *a; //你声明的是*a , p是地址。a=p; //这里改这样就ok 了。
for(a=p+n-1;a>p;a--)
{if(*a>=s)*(a+1)=*a;
else {*a=s;break;}
if(a==p)*a=s;
}}

int main()
{int a[10]={1,2,3,4,5,7,8,9,10},s=6;
fun(a,10,s);
for(int i