C语言,程序设计题,去掉最高低分求平均ŀ
发布网友
发布时间:2024-10-22 07:33
我来回答
共1个回答
热心网友
时间:2024-11-05 01:12
int min,max;
min = a[0];
max = a[0];
这里min和max是int型,而a[0]是double型,赋值后会导致小数点后四舍五入,精度丢失,对之后的比较操作产生影响。所以min和max应该定义成double型。
for (i = 0, j = 0; a[i] != '\0'; i++, j++)
这句里【a[i] != '\0'】就是错误的,a是函数形参double a[],是double型的数组,并不是字符串,所以a[10]不一定是'\0'。字符串结尾才是'\0'。所以应该是for(i = 0; i < n; i++)
if (a[i] != min && a[i] != max)
这句也是错误的, 因为计算机中double型的两个数是不能做==或!=操作的。具体原因,你可以自己查一查,学习一下。
double *b;
b[j] = a[i];
这里对b的空间直接赋值也是错的,你只定义了指针b,但没有给b申请空间,所以b没有可使用的存储空间,这时,你给b[j]赋值会导致内存访问错误使程序崩溃。
for ( j = 0; b[i] != '\0'; j++)
这个循环b[i] != '\0'就不说了吧,跟前面的同理。
--------------------------------------------------------------
不知道你的正确答案是什么样,我觉得这样写最简便。
int i = 0;
double ave, min, max;
min = a[0];
max = a[0];
ave = a[0];
for (i = 1; i < n; i++)
{
if (min > a[i])
{
min = a[i];
}
if (max < a[i])
{
max = a[i];
}
ave += a[i];
}
ave = (ave - min - max) / (n - 2);
return ave;