用c语言编写程序,输入一个100以内的正整数n,输入小于n的正整数p,输入n个整数并保存到一维数组。移动一维数组中的内容,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后,把下标从p+1到n-1的数组元素移到数组的前部。
时间: 2025-01-01 21:35:03 浏览: 10
在C语言中,你可以使用两个临时数组或者直接对原数组进行操作来实现这个需求。下面是一个示例程序,它使用了一个临时数组来交换指定范围内的元素:
```c
#include <stdio.h>
#include <stdlib.h> // 引入内存管理库
void move_elements(int* arr, int n, int p) {
if (p >= n) {
printf("错误:p应小于n。\n");
return;
}
// 创建一个临时数组用于存储前p+1到n-1的元素
int temp[n - p - 1];
int j = 0;
// 将前p+1到n-1的元素复制到temp数组
for (int i = p + 1; i < n; ++i) {
temp[j++] = arr[i];
}
// 清空原数组的后半部分
for (int i = n - 1; i >= p; --i) {
arr[i] = 0; // 或者arr[i] = arr[p]; 如果你想保留原始值
}
// 把temp数组的元素放回原数组的后半部分
for (int i = 0; i < n - p - 1; ++i) {
arr[p + i] = temp[i];
}
}
int main() {
int n;
printf("请输入一个100以内的正整数n:");
scanf("%d", &n);
// 输入n个整数并保存到一维数组
int* arr = malloc(n * sizeof(int));
if (arr == NULL) {
printf("内存分配失败。\n");
return 1;
}
for (int i = 0; i < n; ++i) {
printf("请输入第%d个元素:", i + 1);
scanf("%d", &arr[i]);
}
// 获取需要移动的元素位置
int p;
printf("请输入一个小于n的正整数p:");
scanf("%d", &p);
move_elements(arr, n, p);
// 输出移动后的数组
for (int i = 0; i < n; ++i) {
printf("数组的新元素: %d ", arr[i]);
}
free(arr); // 释放动态分配的内存
return 0;
}
阅读全文