为什么去掉最大最小值后取平均值不正确

能不能帮我看一下

#include<stdio.h>
#include<math.h>
int main()
{
	int i;
	float a;
	float max, min, sum, G;
	sum = 0;
	i = 0;
	while (i<10)
	{
		scanf("%f", &a);
		sum = sum + a;
		max = a;
		min = a;
		a > max ? max = a : max = max;
		a < min ? min = a : min = min;
		i++;
	}
	G = (sum - max - min);
	G = G / 8;
	printf("%.4f", G);
	return 0;
}

 

我帮你改了一下,你试试看

#include<stdio.h>
int main()
{
	int i;
	float a;
	float max, min, sum, G;
	sum = 0;
	i = 0;
	while (i<10)
	{
		scanf("%f", &a);
		sum = sum + a;
		if(i==0)
		{
		max = a;
		min = a;
		}
		else
		{
		max=a > max ? a : max;
		min=a < min ? a : min;
		}
		i++;
	}
	G = (sum - max - min);
	G = G / 8;
	printf("%.4f", G);
	return 0;
}

 

你的最大值和最小值都是每次输入的值,不会进行改变。比如1,2,3,4,5,6,7,8,9,10

输入1后,你的最大值和最小值都是1,经过三目运算符,最大最小值不改变,因为一直都是和自己作比较

输入2后,你的最大值和最小值都是2,经过三目运算符,最大最小值仍然没有变化

到了输入10的时候,sum的值已经是55了,减去最大值和最小值10,就是35/8=4.3750

#include<stdio.h>
#include<math.h>
int main()
{
    int i;
    float a;
    float max, min, sum, G;
    scanf("%f", &a);//首先把第一个数值输入作为初始
    max = min = a;
    sum = a;//记得把第一个值加进去
    i = 1;//因为已经输入一个数了
    while (i<10)
    {
        scanf("%f", &a);
        sum = sum + a;
        a > max ? max = a : max = max;
        a < min ? min = a : min = min;
        i++;
    }
    G = (sum - max - min);
    G = G / 8;
    printf("%.4f", G);
    return 0;
}

算出来老是比手算的小一点,错在哪里了

举个具体点的例子

你的16 17行的比较语句应该是想把输入的数与MAX 和 MIN 比较,但你前面14 15行把 a 赋值给了MAX 和 MIN,这样下面的比较就没有意义了吧?

可以检验一下:程序结果是不是总和减去了两倍的最后一个输入,然后除了8.