用指针或引用方法有n个整数,使前面各数顺序向后移m个位置,最后 m个数变成最前面m 个数,见图 6.21。写一函数实现以上功能,在主函数中输人n个整数,并输出调整后的n个数。
时间: 2023-12-10 20:40:57 浏览: 72
以下是实现该功能的函数代码:
```c++
void moveArray(int* arr, int n, int m) {
int* temp = new int[m]; // 用来存储前 m 个数
for (int i = 0; i < m; i++) {
temp[i] = arr[i];
}
for (int i = m; i < n; i++) {
arr[i - m] = arr[i];
}
for (int i = 0; i < m; i++) {
arr[n - m + i] = temp[i];
}
delete[] temp; // 释放临时数组的内存空间
}
```
该函数接收一个整型指针 `arr`,表示待调整的数组的首地址,一个整型变量 `n`,表示数组的大小,以及一个整型变量 `m`,表示要移动的位置数。
首先,我们创建一个大小为 `m` 的临时数组 `temp`,用来存储原数组的前 `m` 个数。然后,我们将原数组中第 `m` 个数开始的所有数向前移动 `m` 个位置,即将第 `m` 个数赋值给第 0 个数,将第 `m+1` 个数赋值给第 1 个数,以此类推。最后,我们将临时数组中的 `m` 个数赋值到原数组的末尾 `m` 个位置上。注意,最后需要释放临时数组的内存空间。
以下是调用该函数的示例代码:
```c++
#include <iostream>
using namespace std;
int main() {
int n, m;
cout << "请输入数组大小 n 和要移动的位置数 m:";
cin >> n >> m;
int* arr = new int[n]; // 动态创建大小为 n 的数组
cout << "请输入 " << n << " 个整数:";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
moveArray(arr, n, m);
cout << "调整后的数组为:";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr; // 释放数组的内存空间
return 0;
}
```
运行示例:
```
请输入数组大小 n 和要移动的位置数 m:10 3
请输入 10 个整数:1 2 3 4 5 6 7 8 9 10
调整后的数组为:4 5 6 7 8 9 10 1 2 3
```