作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我得到'N个真实数据时,计算除最大数据和最小数据之外的剩余数据的平均值。'我写了下面的代码。我使用快速对齐创建了它,但它没有正确对齐,导致错误。哪里有问题? (在代码中,N被写成m,这是检查对齐是否良好的代码:
[for (i = 0; i < m; i++) { printf("%lf ", arr[i]); }]
这是我的完整程序:
#include <stdio.h>
#include <stdlib.h>
int bans(const void *a, const void *b) {
return (*(double *)a - *(double *)b);
}
int main()
{
int m, i;
double a = 0;
double* arr;
scanf("%d", &m);
arr = (double*) malloc(sizeof(int) * m);
for (i = 0; i < m; i++) {
scanf("%lf", &arr[i]);
}
qsort(arr, m, sizeof(arr[0]), bans);
for (i = 0; i < m; i++) {
printf("%lf ", arr[i]);
}
printf("\n");
for (i = 1; i < m - 1; i++) {
a += arr[i];
}
printf("%.4lf", a / (m - 2));
free(arr);
return 0;
}
最佳答案
OP 未使用 sizeof(int)
为 double* arr;
分配适当大小的内存。 @Weather Vane .
最好根据取消引用的值比类型的大小来确定大小。 @Jabberwock 。编码、审查和维护更加容易。
double* arr;
...
// arr = (double*) malloc(sizeof(int) * m);
arr = malloc(sizeof *arr * m);
此外,无需转换返回值。
<小时/>比较函数也可能溢出。为了避免这种情况:
int bans(const void *a, const void *b) {
// return (*(double *)a - *(double *)b);
return (*(double *)a > *(double *)b) - (*(double *)a < *(double *)b);
}
迂腐一点,FP 值可能包括 NaN 。进行此类排序时,建议始终将 NaN 放在排序列表的末尾。稍后的处理可以轻松地缩短列表,因为当 NaN
出现时,列表就是一个列表,它们就应该被丢弃。根据该选择案例的需要进行编码。
int bans(const void *a, const void *b) {
double *ad = *((const double *)a);
double *bd = *((const double *)a);
if (ad > bd) return 1;
if (ad < bd) return -1;
if (ad == bd) return 0;
at least 1 of ad,ab is a NaN
return 1; // adjust per coding goals
}
关于c - 对齐有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46505475/
我是一名优秀的程序员,十分优秀!