c语言编程 有N个整数,使其前面各数顺序向后移动M个位置,最后M个数变成前面的M个数

要求用函数完成
例如有7个数:
1234567
后移动3位,把3位放最前面为:
5671234

各位高手帮小弟看下我编的程序问题在哪里?
#include<stdio.h>
void main()
{ void shift(int *x);
int a[10],*p,i,m;
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);//输入10个数
scanf("%d",&m);//输入移动的位数
p=a;
shift(p);
for(i=0;i<10;i++,p++)
printf("%d",*p);//输出这10位数
}
void shift(int *x)
{ int m,i,j,t;
for (i=0;i<m;i++)//一共移动m次
{t=*(x+9);
for (j=8;j>=0;j--)/*从1位到第9位
*(x+j+1)=*(x+j);每位向后移动一位*/
*x=t;//把第10位移动到第一位
}
}

错误一修改:

printf("%d",a[i]);

错误二修改:

void move(int a[],int n,int m)

{

int t[N];

int i,j=0;

for(i=n-m;i<n;i++) //把后面的取出放到t中

t[j++]=a[i]

for(i=0; i<n-m; i++) //前面的后移

a[i+m]=a[i];

for(i=0;i<m;i++) //把t中的放到前面

a[i]=t[i];

}

扩展资料:

注意事项

调用自定义后移函数move(int *a, int n, int m)来进行循环移位,对n(n<20)个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数,如下: n=10, m=3时:输入:1 2 3 4 5 6 7 8 9 10,输出:8 9 10 1 2 3 4 5 6 7

Input

输入多组测试数据,每组先输入n(n < 20)和m(m < n),再输入n个整数。

Output

输出循环移动m个数后的序列,数据间空格隔开。

Sample Input

10 4

1 2 3 4 5 6 7 8 9 10

7 2

1 2 3 4 5 6 7

Sample Output

7 8 9 10 1 2 3 4 5 6

6 7 1 2 3 4 5

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-15
#include<stdio.h>

void main()
{ void shift(int *x,int);
int a[10],*p,i,m;
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);//输入10个数
scanf("%d",&m);//输入移动的位数
p=a;
shift(p,m);
for(i=0;i<10;i++,p++)
printf("%3d,",*p);//输出这10位数
}
void shift(int *x,int m)//把m传来嘛。。。。。。。。。
{ int i,j,t;
for (i=0;i<m;i++)//一共移动m次
{t=*(x+9);
for (j=8;j>=0;j--)/*从1位到第9位 */
*(x+j+1)=*(x+j);//每位向后移动一位
*x=t;//把第10位移动到第一位
}
}本回答被提问者采纳
第2个回答  2018-12-12
奈何我才疏学浅,只是大一新生,也来奉献一波。
比较幼稚和复杂,希望可以有用
#include "stdio.h"
#define n 10000
int main()
{
int sum1[n],i,j,sum2[n],m,N;
scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%d",&sum1[i]);
scanf("%d",&m);
for(j=0;j<m;j++)
sum2[m-1-j]=sum1[N-j-1];
for(j=0;j<N-m;j++)
sum1[N-j-1]=sum1[N-m-1-j];
for(j=0;j<m;j++)
{
sum1[m-1-j]=sum2[m-1-j];
}
for(j=0;j<N;j++)
printf("%2.d",sum1[j]);
return 0;
}
第3个回答  2019-12-23
这个是在它的剧情变成变化里面说照片的。
第4个回答  2009-09-15
void shift(int *x);

这个怎么能在主函数里面声明呢?函数体内不允许再声明定义其他函数。 把m定义成全局变量,要不然缺数据。
相似回答