循环后移:有n个整数,使前面各数顺序向后移m个位置,移出的数再从开头移人。编写一个函数实现以上功能,在主函数中输人n个整数并输出调整后的n个数。试编写相应程序。 c语言解决
时间: 2025-01-05 09:38:39 浏览: 18
在C语言中,我们可以创建一个数组来存储这n个整数,然后利用两个指针分别指向数组的头部和尾部,逐个完成移动操作。当数组长度小于移动量m时,还需要特殊处理。以下是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
void rotate(int arr[], int n, int m) {
// 首先判断m是否大于n,如果是,则相当于对数组进行原地反转
m = m % n; // 将m对n取余,使得m始终在0到n-1之间
// 长度不足的情况,直接反转整个数组
if (m == 0) {
printf("旋转后数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return;
}
// 主要的移动部分
int start = 0;
while (start != m) {
// 移动m个位置到头
for (int i = start; i < n - m; i++) {
int temp = arr[i];
arr[i] = arr[i + m];
arr[i + m] = temp;
}
start += n - m; // 确保下一个移动的起始点
}
}
int main() {
int n, m;
printf("请输入整数个数(n)和移动步数(m): ");
scanf("%d %d", &n, &m);
// 输入n个整数
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 调用rotate函数进行旋转
rotate(arr, n, m);
printf("调整后的数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个程序中,`rotate`函数实现了数组的后移操作,而`main`函数负责接收用户输入、调用`rotate`并打印结果。
阅读全文