以下是一个C语言实现的示例代码: ```c #include <stdio.h> void shift_list(int *lst, int n, int m) { m = m % n; if (m == 0) { return; } int new_lst[n + m]; // 将后面的m个数拷贝到新列表的前面 for (int i = 0; i < m; i++) { new_lst[i] = lst[n - m + i]; } // 将前面的n-m个数拷贝到新列表的后面 for (int i = 0; i < n - m; i++) { new_lst[m + i] = lst[i]; } // 将新列表拷贝回原列表 for (int i = 0; i < n; i++) { lst[i] = new_lst[i]; } } int main() { int n, m; printf("请输入n和m的值:"); scanf("%d%d", &n, &m); int lst[n]; printf("请输入%d个整数:", n); for (int i = 0; i < n; i++) { scanf("%d", &lst[i]); } shift_list(lst, n, m); printf("调整后的%d个数为:", n); for (int i = 0; i < n; i++) { printf("%d ", lst[i]); } printf("\n"); return 0; } ``` 在这个示例代码中,我们先使用scanf输入n和m的值,然后使用一个for循环输入n个整数,将它们存储在一个数组lst中。接着调用shift_list函数对lst进行调整,最后再用一个for循环输出调整后的n个数。用C语言实现
时间: 2024-01-19 20:02:10 浏览: 103
#include "stdio.h" /* 输入输出函数的头文件 */
一个数组左移n个位置的函数,可以参考以下代码:
```c
#include <stdio.h>
void shift_left(int arr[], int n, int k) {
k = k % n; // 计算实际需要移动的位数
if (k == 0) { // 如果k为0,直接返回
return;
}
int temp[k]; // 用于保存前k个元素
for (int i = 0; i < k; i++) {
temp[i] = arr[i];
}
for (int i = k; i < n; i++) {
arr[i - k] = arr[i];
}
for (int i = 0; i < k; i++) {
arr[n - k + i] = temp[i];
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = 5;
int k = 2;
printf("原数组为:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
shift_left(arr, n, k); // 将数组左移k个位置
printf("\n移动后的数组为:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在这个示例代码中,我们定义了一个shift_left函数,它接收一个整型数组arr、数组长度n和需要左移的位数k作为参数。在函数中,我们首先计算出实际需要移动的位数,然后将数组的前k个元素保存到一个temp数组中,接着将数组中从第k个元素开始的所有元素向左移动k个位置,最后再将temp数组中的元素复制到数组的末尾k个位置。最后,我们在main函数中调用shift_left函数进行数组左移,并输出移动后的数组。
阅读全文