为什么没有得出正确结果
题目时去掉一个最高分,一个最低分,求平均值为什么我的程序运行后平均值是错的
fun 函数为自己写的,其他是题目给的
#include<stdio.h>
void NONO();
double fun(doublea[ ] , intn)
{
int i,c=0,b=0,j;
double max,min,sum=0.0,aver=0.0;
max=min=a;
for(i=1;i<n;i++)
{
if(a>max)
{
max=a;
c=i;
}
if(a<min)
{
min=a;
b=i;
}
}
for(j=0;j<n;j++)
{
if(j!=c||j!=b)
{
sum+=a;
}
}
return sum/(n-2);
}
void main()
{doubleb,r; inti;
printf("输入10个分数放入b数组中 :");
for (i=0; i<10; i++) scanf("%lf",&b);
printf("输入的10个分数是 :");
for (i=0; i<10; i++) printf("%4.1lf ",b); printf("\n");
r = fun(b, 10);
printf("去掉最高分和最低分后的平均分 :%f\n", r );
NONO();
}
void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i, j ;
double b, r ;
fp = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
for(j = 0 ; j < 10 ; j++) {
fscanf(fp, "%lf ", &b) ;
}
r = fun(b, 10) ;
fprintf(wf, "%f\n", r) ;
}
fclose(fp) ;
fclose(wf) ;
}
本帖最后由 jackz007 于 2022-5-22 20:58 编辑
double fun(doublea[] , intn)
{
int c , d , i ;
double sum ;
for(c = d = 0 , i = 1 ; i < n ; i ++) {
if(a < a) c = i ;
else if(a > a) d = i ;
}
for(i = sum = 0 ; i < n ; i ++) if(i != c && i != d) sum += a ;
return sum / (n - 2) ;
} 本帖最后由 傻眼貓咪 于 2022-5-22 16:17 编辑
我的思路:
其实不用太多 for 循环,一个 for 就够了,时间复杂度:O(n)。
循环同时,sum 加总数组里的全部元素,以及找出最大和最小元素(每次循环,都做比较大小),循环完成后,将 sum 减去 max 和 min 便可,最后 sum / (n - 2)
double average(int arr[], size_t n) {
if (n < 3) {
return 0;
}
int max = -2147483648, min = 2147483647, sum = 0;
for (int i = 0; i < n; ++i) {
sum += arr;
max = max > arr ? max : arr;
min = min < arr ? min : arr;
}
sum -= max; // 考虑到 max 有可能是负数
sum -= min; // 考虑到 min 有可能是负数
return (double)sum / (n - 2);
}
页:
[1]