请编写程序将一个大小为n的整数数组循环左移m位。 如:1,2,3,4,5,6,7,8 循环左移三位后结果是4,5,6,7,8,1,2,3 实验要求:输入说明:第1行输入N(1<=N<=100),M(M>=0)第2行输入N个整数 输出说明:输出循环左移M位后的整数序列 使用C语言
时间: 2024-09-25 20:03:36 浏览: 50
为了满足这个需求,你可以使用C语言中的数组操作和位运算。这里是一个简单的C语言程序,它实现了数组的循环左移:
```c
#include <stdio.h>
void rotate(int arr[], int n, int m) {
// 如果移动次数大于数组长度,对移动次数取模
m = (m % n + n) % n;
// 临时存储数组元素
int temp[n];
// 从原数组末尾开始复制到临时数组
for (int i = 0; i < n; ++i) {
temp[(i + m) % n] = arr[i];
}
// 将临时数组的内容复制回原数组
for (int i = 0; i < n; ++i) {
arr[i] = temp[i];
}
}
int main() {
int N, M;
scanf("%d%d", &N, &M); // 输入数组长度和移动次数
int arr[N]; // 创建数组
for (int i = 0; i < N; ++i) {
scanf("%d", &arr[i]); // 输入数组元素
}
printf("旋转后的数组: ");
for (int i = 0; i < N; ++i) {
printf("%d ", arr[i]);
}
printf("\n"); // 输出结果
rotate(arr, N, M); // 执行左移
printf("循环左移 %d 位后的数组: \n", M);
for (int i = 0; i < N; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个程序中,`rotate`函数负责实际的数组左移,通过计算新的索引 `(i + m) % n` 来达到循环的效果。`main`函数则处理输入、输出以及调用旋转函数。
阅读全文