如何用C语言设计和实现一个程序,让用户循环输入整数到数组A[1…n]中,然后计算并显示出这个数组中的最大值利用分治算法实现?
时间: 2024-11-27 10:16:46 浏览: 13
在C语言中,你可以通过以下步骤设计和实现这样一个程序:
1. 首先,定义一个动态大小的整型数组`int A[n]`,`n`作为用户需要输入元素的最大数量。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 可根据实际需求调整最大数组长度
int* createArray(int n) {
int* arr = (int*)malloc(n * sizeof(int));
return arr;
}
void inputArray(int* arr, int size) {
for (int i = 0; i < size; i++) {
printf("请输入第 %d 个整数:", i + 1);
scanf("%d", &arr[i]);
}
}
int findMax(int* arr, int low, int high) {
if (low == high) { // 如果只有一个元素,返回该元素就是最大值
return arr[low];
} else if (high > low) {
int mid = (low + high) / 2;
int leftMax = findMax(arr, low, mid); // 分治法左半部分的最大值
int rightMax = findMax(arr, mid + 1, high); // 分治法右半部分的最大值
return leftMax > rightMax ? leftMax : rightMax; // 返回左右两个部分中的较大值
}
return -1; // 如果数组为空,返回错误
}
```
2. 主函数中调用上述函数完成整个过程:
```c
int main() {
int n;
printf("请输入数组的长度(不超过%d):", MAX_SIZE);
scanf("%d", &n);
if (n <= 0 || n > MAX_SIZE) {
printf("输入无效!\n");
return 1;
}
int* arr = createArray(n);
inputArray(arr, n);
int maxElement = findMax(arr, 0, n - 1);
printf("数组中的最大值是:%d\n", maxElement);
free(arr); // 释放内存
return 0;
}
```
阅读全文