#include<stdio.h>
int main()
{
int ch, ma ,en;
scanf("%d%d%d", &ch, &ma, &en);//输入三个学科的成绩
double average = (ch + ma + en) / 3.0;//求平均
printf("%.2f\n", average);
return 0;
}
#include<stdio.h>
int main()
{
int ch, ma ,en;
scanf("%d%d%d", &ch, &ma, &en);//输入三个学科的成绩
double average = (ch + ma + en) / 3;//求平均
printf("%.2f\n", average);
return 0;
}
以上两串代码有何区别?你会发现,在求平均过程中,分母分别为3.0和3。
3=3.0,我们可能会觉得两个式子是没有区别的,但在编译器里进行计算后,我们发现两代码计算出的值并不相同,这是为什么呢?
因为本题的原因,我们求平均值的三个数据(成绩)都为整数型,而分母(学科数目)也为整数型,以此计算,就算我们算出的数是一个小数,也是会先表示成整数类型,再在求平均过程中升级为浮点类型。
以程序2为例,假如求平均赋值过程中右侧的结果为67.3333....,因为分子分母均为整数类型,结果会变为整数类型67,在赋值给左侧average转化为双精度浮点型,最后输出为67.00,与原结果并不相等。
因此在程序1中,我们将分母变为3.0,相当于默认=右侧数据为浮点数,因此小数点后的数据得以保留,与原结果相等。
当然,令数据转为浮点型的方式不只有一种,在式子前或后*1.0也可以,如果我们给出的数据(例如本题中的成绩)已经是浮点数了,那么就不用再转换了。