请教一个c语言问题?
题目:有n个整数,将各数先后移m个位置,将后m个数移到最前面。
递归的算法我懂。
可是如果这么做,不明白为什么运行不正确,请高手告知
#include <stdio.h>
void main()
{
void change(int a[],int n,int m);
int i,n,m,a[10];
int *pa=a;
printf( "input n,m: ");
scanf( "%d,%d ",&n,&m);
printf( "input %d numbers: ",n);
for(pa=a;pa <a+n;pa++)
scanf( "%d ",pa);
change(a,n,m);
printf( "now print numbers: ");
for(pa=a-m;pa <a+n-m;pa++)
printf( "%d ",*pa);
printf( "\n ");
}
void change(int a[],int n,int m)
{int *pa;
for(pa=a+n-m;pa <a+n;pa++)
*(pa-n)=*pa;
}
程序确实不规范,但是觉得应该可以按要求输出啊,可是运行得到的结果是
input n,m:8,4
input 8 numbers:1 2 3 4 5 6 7 8
now print numbers:-10 227 227 8 1 2 3 4
很奇怪的结果,不知为何?
[解决办法]
for(pa=a-m;pa <a+n-m;pa++)
printf( "%d ",*pa);
printf( "\n ");
这里打印是从数组a的前面开始的。
而数组a的前面内存是未初始化的。所以是随即值。
改change()函数。这个打印也要改。