用指针实现:有 n 个整数,使前面各数顺序后移 m 个位置,最后 m 个数变成最前面 m 个数, 写一函数完成以上功能,在主函数中输入 n 个整数和输出调整后的 n 个数
时间: 2024-03-13 22:44:31 浏览: 116
好的,以下是一个使用指针实现该功能的 C 语言函数:
```c
void shift_array(int* arr, int n, int m) {
int* p1 = arr + n - 1; // 指向原数组最后一个元素
int* p2 = p1 - m; // 指向原数组倒数第 m 个元素
int* p3 = arr + n + m - 1; // 指向新数组最后一个元素
// 将后面 m 个元素拷贝到新数组前面
for (int i = 0; i < m; i++) {
*(p3 - i) = *(p1 - i);
}
// 将前面 n-m 个元素后移 m 个位置
for (int i = n - m - 1; i >= 0; i--) {
*(arr + i + m) = *(arr + i);
}
// 将新数组中的元素拷贝回原数组前面 m 个位置
for (int i = 0; i < m; i++) {
*(arr + i) = *(p2 + 1 + i);
}
}
```
该函数接受一个整数数组 `arr`、数组长度 `n` 和移动位置数 `m` 作为参数,使用指针实现了将前面各数顺序后移 m 个位置,最后 m 个数变成最前面 m 个数的功能。使用方法如下:
```c
#include <stdio.h>
void shift_array(int* arr, int n, int m);
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
int n = sizeof(arr) / sizeof(int);
int m = 2;
printf("原数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
shift_array(arr, n, m);
printf("调整后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
该程序首先定义了一个整数数组 `arr`,并将其长度 `n` 和移动位置数 `m` 设置为 6 和 2。然后调用 `shift_array` 函数将数组按要求调整,最后输出调整后的数组。输出结果如下:
```
原数组:
1 2 3 4 5 6
调整后的数组:
5 6 1 2 3 4
```
希望这个函数能够帮到你!
阅读全文