一个小程序,有点小错误,求指出
#include <stdio.h>
void print(int *a)
{
int i;
printf("shuru 10 ge shu\n");
for(i=0;i<9;i++)
scanf("%d",&a[i]);
}
void yidong(int a[20],int n,int m)
{
int temp,i,*p_beg;
int *p;
for(i=0;i<m;i++)
{
p_beg=a+i;
temp=a[n-m+i];
printf("temp=\n",temp);
for(p=p_beg+n-m;p>a;p--)
{
*p=*(p-1);
}
a[i]=temp;
printf("a[i]=%d\n",a[i]);
}
}
void main()
{
int a[20],i;
print(a);
yidong(a,9,3);
for(i=0;i<9;i++)
printf("%d ",a[i]);
}
题目是,把前面n个数向后移动m个单位,后面m个单位放到最前面
想法是:
内循环每循环一次,前6个数向后移一次,然后把覆盖掉的那个数放到最前面
想法大概是这样,可是运行的时候,后6个数字已经排好了,可是前面m个数有问题
结果如下
m=3:
输入 1 2 3 4 5 6 7 8 9
输出 7 7 9 1 2 3 4 5 6
m=4:
输入 1 2 3 4 5 6 7 8 9
输出 6 6 6 9 1 2 3 4 5
[解决办法]
如果按照你代码表述的做法的话,把你的代码按照这样改:
for(p=p_beg+n-m;p>a+i;p--)
{
*p=*(p-1);
}
至于为什么这样做,你在纸上画画就清楚了,i大于1的时候你就知道结果了。