一位大学生的疑惑,这好奇妙

这是正常的,输出结果为6 7 8 9 10
#include<stdio.h>
void f2(double a[],int n)
{
double pingjun;
int zonghe=0,i,k;
for(k=0; k<=10; k++)
{
zonghe+=a[k];
}
pingjun=(zonghe/10*0.1+zonghe%10);
for(i=0; i<=10; i++)
{
if(a[i]>=pingjun)
{
printf("%.f\n",a[i]);
}
}
}
int main()
{
double a[]= {1,2,3,4,5,6,7,8,9,10};
f2(a,10);

}

然后将%.f改成%d,输出就成了10 0 0 0 0
不理解,这是怎么回事,求指教・_・

c语言是一门比较古老的语言,在输入和输出的时候,printf函数和scanf函数并不能自动判断变量的类型,而需要你用参数告诉它输入输出的到底是个什么格式
%d对应的是int,而%f对应的是float
这两种类型在二进制存储上是天差地别的,具体可以去复习教科书
那么如果有4个字节里本来存的是个double型的6,你试试按int型它应该被翻译成什么数字
(提示:double型占8字节,int型只占4字节)

double类型是64位的,int只有32位,你把double变量赋值给int那就只会取低32位的数据给int变量。然后6、7、8、9这类的double变量,低32位都是0,所以才会打印出0