3.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①输入10个数;②进行处理;③输出10个数。 4.有n个整数,使前面各数顺序向后移m个位置,最后m n-m 个数变成最前面m个数,见图8.43。写一函数实现以上功能, 在主函数中输入n个整数和输出调整后的n个数。
时间: 2025-06-25 14:02:29 浏览: 11
### 实现数组操作的函数
以下是基于C语言编写的解决方案,其中包括三个主要功能:输入10个整数、调整最小值和最大值的位置以及输出处理后的数组。
#### 函数设计
1. **`input_array`**: 负责接收用户输入并存储到数组中。
2. **`swap_min_max`**: 找到数组中的最小值和最大值,并将其分别与第一个元素和最后一个元素对换。
3. **`output_array`**: 输出经过处理后的数组内容。
4. **额外功能 `rotate_array`**: 将n个整数向后移动m个位置,并将最后m个数移到最前面。
---
```c
#include <stdio.h>
// 输入数组
void input_array(int *arr, int size) {
for (int i = 0; i < size; i++) {
scanf("%d", arr + i);
}
}
// 处理数组:交换最小值与第一个数,最大值与最后一个数
void swap_min_max(int *arr, int size) {
int *min_ptr = arr;
int *max_ptr = arr;
// 寻找最小值和最大值对应的地址
for (int *p = arr; p < arr + size; p++) {
if (*p < *min_ptr) min_ptr = p;
if (*p > *max_ptr) max_ptr = p;
}
// 交换最小值与第一个数
int temp = *min_ptr;
*min_ptr = arr[0];
arr[0] = temp;
// 交换最大值与最后一个数
temp = *max_ptr;
*max_ptr = arr[size - 1];
arr[size - 1] = temp;
}
// 输出数组
void output_array(const int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 额外功能:旋转数组 n 向右移 m 位
void rotate_array(int *arr, int size, int shift) {
if (shift >= size || size == 0) return;
// 创建临时缓冲区保存最后 shift 个元素
int buffer[shift];
for (int i = 0; i < shift; i++) {
buffer[i] = arr[size - shift + i];
}
// 移动剩余部分
for (int i = size - 1; i >= shift; i--) {
arr[i] = arr[i - shift];
}
// 插入缓冲区数据到前部
for (int i = 0; i < shift; i++) {
arr[i] = buffer[i];
}
}
int main() {
const int SIZE = 10;
int array[SIZE];
puts("请输入长度为10的整数数组:");
input_array(array, SIZE);
puts("原始数组:");
output_array(array, SIZE);
swap_min_max(array, SIZE);
puts("交换最小值与第一个数、最大值与最后一个数之后的结果:");
output_array(array, SIZE);
int shift;
printf("请输入要右移的位数(小于%d): ", SIZE);
scanf("%d", &shift);
rotate_array(array, SIZE, shift % SIZE); // 右移 shift 位
puts("右移指定位数后的结果:");
output_array(array, SIZE);
return 0;
}
```
---
### 功能解释
1. **输入数组 (`input_array`)**
使用指针遍历数组,逐项读取用户的输入[^1]。
2. **处理数组 (`swap_min_max`)**
利用双指针技术找到最小值和最大值所在位置,并通过中间变量完成两次交换[^1][^2]。
3. **输出数组 (`output_array`)**
遍历整个数组并打印其内容[^1]。
4. **旋转数组 (`rotate_array`)**
这是一个附加功能,用于实现数组的循环右移。它分为三步:
- 提取最后 `m` 个元素存入缓存;
- 将其余部分整体向前平移;
- 把缓存的数据放置到数组前端[^3]。
---
###
阅读全文
相关推荐


















