C语言求数组的最大值和最小值代码
时间: 2023-06-13 08:03:47 浏览: 132
以下是C语言代码实现求数组的最大值和最小值:
```c
#include <stdio.h>
int main() {
int arr[] = {3, 6, 2, 8, 5};
int size = sizeof(arr) / sizeof(arr[0]);
int max = arr[0], min = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
printf("最大值为:%d\n", max);
printf("最小值为:%d\n", min);
return 0;
}
```
代码中首先定义了一个整型数组`arr[]`,然后通过`sizeof()`函数和`/`运算符计算出数组的元素个数。接着定义了两个变量`max`和`min`,初始化为数组的第一个元素。然后使用`for`循环遍历整个数组,依次将数组中的元素与`max`和`min`比较,更新最大值和最小值。最后输出结果即可。
相关问题
C语言用数组求最大值 最小值
在C语言中,寻找数组中的最大值和最小值可以采用遍历数组的方式实现。以下是两种常见的方法:
1. **遍历法(线性时间复杂度)**:
```c
#include <stdio.h>
int findMinMax(int arr[], int n, int* min, int* max) {
*min = arr[0]; // 初始化最小值为第一个元素
*max = arr[0]; // 初始化最大值为第一个元素
for (int i = 1; i < n; i++) { // 遍历数组
if (arr[i] > *max) {
*max = arr[i]; // 如果当前元素大于已知的最大值,则更新最大值
} else if (arr[i] < *min) {
*min = arr[i]; // 如果当前元素小于已知的最小值,则更新最小值
}
}
return 0;
}
// 使用示例
int main() {
int arr[] = {5, 3, 9, 1, 7};
int n = sizeof(arr) / sizeof(arr[0]);
int min, max;
findMinMax(arr, n, &min, &max);
printf("Minimum value is: %d\n", min);
printf("Maximum value is: %d\n", max);
return 0;
}
```
2. **分治法(递归法,时间复杂度取决于数组大小)**:
这种方法通过将数组分为两半并分别找出左半部分和右半部分的最大值和最小值,然后比较两个部分的极值来找到整个数组的极值。这种方法适用于较大的数组,但对于小型数组效率较低。
```c
#include <stdio.h>
// 递归函数寻找左右两个子数组的最值
void findMinMaxRec(int arr[], int left, int right, int* min, int* max) {
if (left == right) { // 当只有一个元素时,直接返回
*min = arr[left];
*max = arr[left];
} else {
int mid = (left + right) / 2;
int leftMin = *min, leftMax = *max;
findMinMaxRec(arr, left, mid, &leftMin, &leftMax);
int rightMin = *min, rightMax = *max;
findMinMaxRec(arr, mid+1, right, &rightMin, &rightMax);
if (leftMax > rightMax) {
*max = leftMax;
} else {
*max = rightMax;
}
if (leftMin < rightMin) {
*min = leftMin;
} else {
*min = rightMin;
}
}
}
// 主函数
int main() {
// 略同上面
return 0;
}
```
用c语言求数组区段的最大最小值
以下是用C语言实现求解数组区段最大最小值的示例代码:
```c
#include <stdio.h>
void findMinMax(int arr[], int n, int start, int end, int *min, int *max) {
*min = arr[start];
*max = arr[start];
for (int i = start + 1; i <= end; i++) {
if (arr[i] < *min) {
*min = arr[i];
} else if (arr[i] > *max) {
*max = arr[i];
}
}
}
int main() {
int arr[] = {7, 3, 9, 5, 1, 8, 4};
int n = sizeof(arr) / sizeof(arr[0]);
int start = 1, end = 5;
int min, max;
findMinMax(arr, n, start, end, &min, &max);
printf("The minimum value in the array segment is %d\n", min);
printf("The maximum value in the array segment is %d\n", max);
return 0;
}
```
在上述代码中,我们使用 `findMinMax` 函数来查找数组 `arr` 中指定区段 `[start, end]` 的最小值和最大值。该函数使用指针来返回最小值和最大值,以避免返回多个值的问题。
在 `main` 函数中,我们定义了一个数组 `arr`,以及数组的长度 `n` 和要查找的区段 `[start, end]`。使用 `findMinMax` 函数来查找数组区段的最小值和最大值,并将其存储在 `min` 和 `max` 变量中。最后,我们将结果打印到控制台上。
阅读全文