用动态分配内存空间,输入若干个成绩,C++去掉两个最高的,两个最低分,求平均成绩
时间: 2023-05-21 15:05:09 浏览: 61
好的,这个问题可以使用动态分配内存空间和排序算法来解决。我的建议是首先使用 malloc 函数动态分配一个长度为 n 的数组,然后使用 scanf 函数输入 n 个成绩。接下来,使用快速排序算法对成绩数组进行排序,然后去掉头两个和尾两个成绩,最后计算剩余成绩的平均值。下面是代码实现:
```
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int main() {
int n;
printf("请输入成绩数量:");
scanf("%d", &n);
int *grades = (int *)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
printf("请输入第%d个成绩:", i + 1);
scanf("%d", &grades[i]);
}
qsort(grades, n, sizeof(int), cmp);
double sum = 0;
for (int i = 2; i < n - 2; i++) {
sum += grades[i];
}
printf("平均成绩为:%.2f\n", sum / (n - 4));
free(grades);
return 0;
}
```
注意:在头文件 stdlib.h 中定义了 malloc 和 free 函数,在头文件 stdio.h 中定义了 scanf 和 printf 函数。