有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前m个数 (如下图所示)。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个整数。 用c语言写
时间: 2023-12-20 21:10:22 浏览: 68
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.
好的,以下是实现功能的 C 语言代码:
```c
#include <stdio.h>
void move(int *arr, int n, int m) {
int tmp[m];
for (int i = n - m; i < n; i++) {
tmp[i - (n - m)] = arr[i];
}
for (int i = n - m - 1; i >= 0; i--) {
arr[i + m] = arr[i];
}
for (int i = 0; i < m; i++) {
arr[i] = tmp[i];
}
}
int main() {
int n, m;
printf("请输入 n 和 m:");
scanf("%d %d", &n, &m);
int arr[n];
printf("请输入 %d 个整数:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
move(arr, n, m);
printf("调整后的 %d 个整数为:", n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个代码中,我们定义了一个函数 `move`,它接受三个参数:一个整数数组 `arr`,数组长度 `n`,移动的位数 `m`。函数的实现如下:
1. 首先定义一个长度为 `m` 的临时数组 `tmp`,将原数组 `arr` 中最后 `m` 个数存储到 `tmp` 中。
2. 然后将原数组 `arr` 中前面的 `n-m` 个数往后移动 `m` 个位置,这里使用了倒序循环,从后往前移动,避免数据被覆盖。
3. 最后将 `tmp` 中的 `m` 个数复制到原数组 `arr` 的前面 `m` 个位置。
在 `main` 函数中,我们首先输入 `n` 和 `m`,然后输入 `n` 个整数,将它们存储到数组 `arr` 中,接着调用 `move` 函数,对数组进行移动,最后输出调整后的数组。
注意,这个代码假设输入的 `n` 大于等于 `m`,如果 `n` 小于 `m`,循环移动的位数应该是 `m % n`。
阅读全文