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

请问一个c语言有关问题

2012-03-04 
请教一个c语言问题?题目:有n个整数,将各数先后移m个位置,将后m个数移到最前面。递归的算法我懂。可是如果这

请教一个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()函数。这个打印也要改。

热点排行