求平均值遇到的一些问题

int main()
{
int shuzu[10] = { 0 };
int i = 0;
for ( = 0; i < 10; ++)
{
scanf("%d", &shuzu[i]);
}

float zongshu = shuzu[0];       在这里如果用int得出的结果就不会有小数,为什么
for ( = 1; < 10; ++)
{
    zongshu = zongshu + shuzu[i];
}

float pingjunshu = 0;
pingjunshu = zongshu / 10;
printf("pingjunshu=%f\n", pingjunshu);
return 0;

}
如果是int的话,数去5,5,5,5,5,5,5,5,5,0得出的结果是4;
而float得出的结果是4.5
我理解的求平均数变量的应该用浮点型数据,为什么在计算总和的时候也要用浮点型数据呢
int计算结果
5 5 5 5 5 5 5 5 5 0
pingjunshu=4.000000
float计算结果
5 5 5 5 5 5 5 5 5 0
pingjunshu=4.500000

float zongshu,后面计算的时候可以直接除
pingjunshu = zongshu / 10;
如果是int zongshu,后面计算要转换一下才能得到正确的值。
pingjunshu = zongshu / 10.0f;

int跟int的+-*/等运算,结果都是int

整数和整数的运算结果是整数 zongshu / 10;这是运算
把整数赋给浮点数还是整数 pingjunshu = zongshu / 10; 这是运算后赋值
浮点数和整数的运算结果才是浮点数

#include
#include
using namespace std;
int main()
{
double sum;
for (int i=1; i <= 10; i++)
{
double x;
cin>>x;
sum+=x;
}
printf("pingjunshu=%lf",sum/10.0);
return 0;
}

知识点:
1.计算机当中的除法运算
不同于数学当中的算术运算,C语言中的算术运算的结果与参与运算的操作数类型有关。在除法运算中,两个整数相除后的商仍为整数。比如说1/2与1.0/2的结果是不一样的,前者为整数除法,小数部分被省略了,结果为0;后者为浮点数除法,结果为0.5.
2.自动类型转换
C编译器在对操作数进行运算之前将所有操作数都转换成取值范围较大的操作范围类型,也就是数据提升
char,short-->int-->unsigned int -->long-->unsigned long-->double-->long double
float-->double
解析:
在求平均值时,当你的总和为int类型,并且除以一个整数的时候,等式右边得到的是一个省略掉小数点的数,然后再转换成float类型。
解决方法:
第一种:将总和改为float型,即 float zonghe,shuzu[10];pingjunshu=zonghe/10;
第二种:总和为int类型,平均数为float类型 pingjunshu=zonghe/10.0
第二种运用了自动转换的知识,zonghe由int型转换为float在除以10.