编写函数,将n个整数顺序向后移m个位置(m<n),移出去数再从开头移入。已给出有错误的源程序,请调试程序并改正。 要求:输入n和m,再输入n个整数,调用自定义函数完成数据移动(要求通过指针移#include "stdio.h" void mov(int *,int ,int); int main(void) { int m,n,i,a[80],*p; printf("Input n,m:"); scanf("%d%d",&n,&m);//n:数据长度;m:后移的位数 for(p=a,i=0;i<n;i++) scanf("%d",p++); mov(a,n,m); printf("After move:"); for(i=0;i<n;i++) printf("%5d",a[i]); return 0; } void mov(int *x,int n,int m) { int i,j; for(i=0;i<m;i++) { for(j=n-1;j>0;j--) *(x+j)=*(x+j-1); *x=*(x+n-1); }}
时间: 2023-12-07 10:05:37 浏览: 138
实验一、进程调度,设计一个有 N个进程共行的进程调度程序
5星 · 资源好评率100%
修改后的程序如下:
```c
#include "stdio.h"
void mov(int *,int ,int);
int main(void) {
int m,n,i,a[80],*p;
printf("Input n,m:");
scanf("%d%d",&n,&m); //n:数据长度;m:后移的位数
for(p=a,i=0;i<n;i++)
scanf("%d",p++);
mov(a,n,m);
printf("After move:");
for(i=0;i<n;i++)
printf("%5d",a[i]);
return 0;
}
void mov(int *x,int n,int m) {
int i,j,temp;
for(i=0;i<m;i++) {
temp = *(x+n-1);
for(j=n-1;j>0;j--)
*(x+j)=*(x+j-1);
*x=temp;
}
}
```
主要的修改如下:
1. 变量 `temp` 用于暂存将要移出去的数,以便后面将它移到数组开头;
2. 在函数 `mov` 中,外层循环控制移动次数,内层循环将每个数向后移动一位;
3. 在内层循环结束后,将 `temp` 的值移入数组开头。
这样,就可以实现将 n 个整数顺序向后移动 m 个位置,并且移出去的数再从开头移入。
阅读全文