想了一个晚上加两节课的时间。。
代码比较粗糙。。。其实可以优化的。
您的意思 是先去掉重复的,再去掉最大最小的是吧。#include <stdio.h>
int main ()
{
float a[7]={0},b[7]={0}, temp=0, count=0, max=0, min=0, sum=0, aver=0;
int i=0,j=0,p=0;
bool boolSame=false;
for (i=1; i!=6; i++)/*这个for循环用来把重复的数过滤掉*/
{ scanf("%f", &temp); /*输入5个数。 */
if (i==1) /*首次循环需要 确定max ,min 的大小 */
{ /*max,min的值不能随便给出,否则会出现错误 */
max =temp;
min = max +1;
}
boolSame=false;/*标志位,标志着输入的数是否有重复,默认false不重复*/
for (j=1; j<=i; j++)
{
if ( a[j] == temp) /*如果发现了重复的*/
{
boolSame=true; /*把标志位设置成true,然后跳出for循环*/
break;
}
else if (max < temp)
{
max = temp;
}
else if(min > temp)
{
min = temp;
}
}
if ( false == boolSame ) /*如果和前面中没有一个相同,same就是false */
{
++p; /*p代表数组a有几个元素,每当筛选出一个符合的*/
a[p]=temp; /*就放入数组,然后p加1 */
a[p+1]=temp;/*把a[p]后面的一个元素放人和a[p]一样的值*/
}
}
a[0]=p; /*a[0]没用,这回用上了。。让它保存P,因为一会P要*/
p = 0;/*,因为一会P要统计新的数组b[]的元素个数,同时指向数组最后一个值*/
for (i=1; i <=a[0]; i++)/*这个for把剩下的最大最小值过滤掉*/
{
if ( (a[i]-min==0)||(a[i]-max==0) )
{ //如果发现了最大值或者最小值,则不放入b[]数组
continue;//跳出进行下一步循环
}
else
{
p++;
b[p]=a[i];
sum=sum+b[p];
}
}
aver = sum/p;
printf("数组元素:");
for (i=1; i<=p; i++)
{
printf("%f ",b[i]);
}
printf("\n筛选后剩余:%d max:%f min:%f sum:%f aver:%f",p,max,min,sum,aver);
return 0;
}
|