![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
C语言问题题目如图
我感觉我逻辑没问题啊下面是具体代码:#include<stdio.h>voidNONO();doublefun(doublea[],intn){intn1,n2,i;do...
我感觉我逻辑没问题啊下面是具体代码:#include <stdio.h>void NONO();double fun(double a[ ] , int n){ int n1,n2,i;double t=a[0],avr=0.0; for(i=1;i<n;i++) if(t<a[i]){ t=a[i];n1=i;} for(i=1,t=a[0];i<n;i++) if(t>a[i]){ t=a[i];n2=i;} for(i=0;i<n;i++) {if(i!=n1&&i!=n2) avr+=a[i]/(n-2);} return avr;}main(){ double b[10], r; int i; printf("输入10个分数放入b数组中 : "); for (i=0; i<10; i++) scanf("%lf",&b[i]); printf("输入的10个分数是 : "); for (i=0; i<10; i++) printf("%4.1lf ",b[i]); printf("\n"); r = fun(b, 10); printf("去掉最高分和最低分后的平均分 : %f\n", r ); NONO();}void NONO(){/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, j ; double b[10], 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[j]) ; } r = fun(b, 10) ; fprintf(wf, "%f\n", r) ; } fclose(fp) ; fclose(wf) ;}
展开
展开全部
相关函数作了修改:
double fun(double a[ ] , int n)
{ int n1,n2,i;
double t=a[0],avr=0.0;
for(i=n1=0;i<n;i++)
if(t<a[i])
{ t=a[i];n1=i;}
for(i=n2=0,t=a[0];i<n;i++)
if(t>a[i]){ t=a[i];n2=i;}
for(i=0;i<n;i++)
{if(i!=n1&&i!=n2) avr+=a[i]/(n-2);
}
return avr;
}
追问
大神为什么n2n1需要给初值?
追答
如果a[0]本身是最大最小值时,岂不是n1n2就未经赋值了吗?
展开全部
double fun(double a[ ] , int n)
{
int i;
double min=a[0],max=a[0],t=0.0,avr=0.0; //t是总分,min是最低分,max是最高分
for(i=1;i<n;i++) //一个循环就可以了
{
t+=a[i];
if(max<a[i])
{
max=a[i];
}
if(min>a[i])
{
min=a[i];
}
}
t=t-max-min;//总分减去最高最低
avr=t/(n-2);
return avr;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询