编写一个函数,可以从数组x的10个元素中找出最大值元素和最小值元素,将其中最小值元素与数组的第一个元素交换,最大值元素与最后一个元素交换,然后输出交换后的10个元素。c语言
时间: 2023-11-02 08:10:30 浏览: 49
下面是一个实现该功能的C语言函数:
```c
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void swap_min_max(int x[], int n) {
int i, max_idx = 0, min_idx = 0;
for (i = 1; i < n; i++) {
if (x[i] > x[max_idx]) {
max_idx = i;
}
if (x[i] < x[min_idx]) {
min_idx = i;
}
}
swap(&x[0], &x[min_idx]);
swap(&x[n-1], &x[max_idx]);
}
int main() {
int x[10] = {3, 5, 2, 8, 1, 9, 4, 7, 6, 0};
swap_min_max(x, 10);
int i;
for (i = 0; i < 10; i++) {
printf("%d ", x[i]);
}
printf("\n");
return 0;
}
```
本函数使用了简单的选择排序思想来找到最大值和最小值的下标,并使用 `swap` 函数来实现元素交换。在主函数中,我们可以通过输出来验证函数的正确性。
相关问题
JAVA求一个数组元素中的最大值和最小值,和平均值(去掉最大最小值)
在Java中,可以使用以下步骤来找到数组中的最大值、最小值以及去除这两个极端值后的平均值:
1. **找出最大值和最小值**:
- 使用`Arrays`类提供的`stream()`方法将数组转换为流(Stream),然后使用`max()`和`min()`函数分别获取最大值和最小值。
```java
int[] array = {10, 20, 30, 40, 50};
int max = Arrays.stream(array).max().getAsInt();
int min = Arrays.stream(array).min().getAsInt();
```
2. **计算平均值(去掉最大最小值)**:
- 首先,计算数组长度减去1,因为要去掉最大值和最小值。
- 然后,对剩下的元素求和,并除以剩余元素的数量。
```java
double sum = 0;
for (int i = 0; i < array.length; i++) {
if (i != 0 && i != array.length - 1) { // 不考虑第一个和最后一个元素
sum += array[i];
}
}
double averageWithoutExtremes = sum / (array.length - 2);
```
完整的例子:
```java
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] array = {10, 20, 30, 40, 50};
int max = Arrays.stream(array).max().getAsInt();
int min = Arrays.stream(array).min().getAsInt();
System.out.println("Max value: " + max);
System.out.println("Min value: " + min);
double sum = 0;
for (int i = 0; i < array.length; i++) {
if (i != 0 && i != array.length - 1) {
sum += array[i];
}
}
double averageWithoutExtremes = sum / (array.length - 2);
System.out.println("Average without extremes: " + averageWithoutExtremes);
}
}
```
C语言中使用指针判断一个数组元素的最大值和最小值
在C语言中,使用指针可以方便地遍历数组并找到最大值和最小值。以下是一个简单的示例,假设我们有一个整型数组:
```c
#include <stdio.h>
#define SIZE 5 // 定义数组大小
// 函数声明,接收指向数组首元素的指针和数组长度
void findMinMax(int* arr, int size, int* min, int* max);
int main() {
int numbers[SIZE] = {4, 2, 9, 6, 1}; // 初始化数组
int min_num, max_num; // 存储最小值和最大值
findMinMax(numbers, SIZE, &min_num, &max_num); // 调用函数
printf("最小值: %d, 最大值: %d\n", min_num, max_num);
return 0;
}
// 函数实现
void findMinMax(int* arr, int size, int* min, int* max) {
*min = *arr; // 初始将第一个元素设为最小值
*max = *arr; // 同理,初始将第一个元素设为最大值
for (int i = 1; i < size; ++i) { // 遍历数组
if (*arr > *max) {
*max = *arr;
} else if (*arr < *min) {
*min = *arr;
}
arr++; // 指针向前移动到下一个元素
}
}
```
在这个例子中,`findMinMax`函数通过指针遍历数组,每次比较当前元素和已知的最小值、最大值,如果当前元素更大,则更新最大值;如果更小,则更新最小值。函数最后返回的是通过指针`min`和`max`传递的实际最小值和最大值。