#include <stdio.h>
#include <stdlib.h>
// 函数声明
void sortArray(int *arr, int size);
int findMax(int *arr, int size);
int findMin(int *arr, int size);
// 函数指针数组类型定义
typedef void (*VoidFuncPtr)(int *, int);
typedef int (*IntFuncPtr)(int *, int);
int main() {
int size, choice;
int *arr;
// 获取数组大小
printf("请输入数组大小: ");
scanf("%d", &size);
// 动态分配数组内存
arr = (int *)malloc(size * sizeof(int));
if (arr == NULL) {
perror("内存分配失败");
return 1;
}
// 获取数组元素
printf("请输入 %d 个整数:\n", size);
for (int i = 0; i < size; i++) {
scanf("%d", &arr[i]);
}
// 函数指针数组
VoidFuncPtr voidFuncs[] = {sortArray};
IntFuncPtr intFuncs[] = {findMax, findMin};
// 打印操作选项
printf("请选择操作:\n");
printf("1. 排序数组\n");
printf("2. 查找最大值\n");
printf("3. 查找最小值\n");
scanf("%d", &choice);
switch (choice) {
case 1:
voidFuncs[0](arr, size);
printf("排序后的数组: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
break;
case 2:
printf("最大值是: %d\n", intFuncs[0](arr, size));
break;
case 3:
printf("最小值是: %d\n", intFuncs[1](arr, size));
break;
default:
printf("无效的选择\n");
}
// 释放内存
free(arr);
return 0;
}
// 排序函数实现
void sortArray(int *arr, int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 查找最大值函数实现
int findMax(int *arr, int size) {
int max = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
// 查找最小值函数实现
int findMin(int *arr, int size) {
int min = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}