首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个小程序,有点小异常,求指出

2014-01-01 
一个小程序,有点小错误,求指出#include stdio.hvoid print(int *a){int iprintf(shuru 10 ge shu\n)

一个小程序,有点小错误,求指出
#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的时候你就知道结果了。

热点排行