请问为什么我的输出结果不可以四舍五入啊 要求的输出结果是4.9 而我只能输出4.8

输入一个长度为8的整型数组,输出该数组的平均值(保留1位小数),输出数组中大于等于平均值的数组元素。


#include
  main()
{
  int a[8];
  int i,sum=a[0];
  double aver;
  for(i=0;i<=7;i++)
  {
    scanf("%d",&a[i]);
  }
  for(i=1;i<=7;i++)
  {
    sum=sum+a[i];
  }
  aver=sum/8.0;
  aver=(int)(aver*10+0.5)*0.1;
  printf("平均值是%.1f\n",aver);
  printf("大于等于平均值的元素是");
  for(i=0;i<=7;i++)
  if(a[i]>=aver)
    printf("%-5d",a[i]);
}

sum=a[0]; 是错误的,改为sum = 0;

aver=(int)(aver*10+0.5)*0.1; //这行可以删掉,不需要
printf("平均值是%.1f\n",aver);
直接写printf("平均值是%.1f\n",aver); 就可以了,输出会自动四舍五入的

double类型如果使用了%f格式可能会导致输出错误

printf("平均值是%.1f\n",aver);
改成
printf("平均值是%.1lf\n",aver);

sum=a[0]要写在scanf之后呀,a还没赋值你给sum赋值,它能有值吗
你这样搞完全是多此一举,直接sum=0
后面循环从0开始,不就得了,为什么单独把a[0]赋值给sum
aver=(int)(aver*10+0.5)*0.1;这又是要闹哪样,没事闲的吗,直接输出aver不就得了

这个很简单,c语言是不支持四舍五入的
如果想要达到四舍五入的效果
可以在输出的时候加上0.05
比如说,你的结果是4.8345,然后加上0.05,其实还是4.8845,保留一位小数,那就是4.8(四舍)
如果结果是4.8631,然后加上0.05,那就是4.9131,
,保留一位小数,那就是4.9(五入)

把int i,sum=a[0];改为int i, sum=0;因为此时数组还未赋值,a[0]的值是未知的,后面求和部分也相应地改一下从a[0] 开始求和