ZZULIOJ 1009: 求平均分

#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也可以,如果我们给出的数据(例如本题中的成绩)已经是浮点数了,那么就不用再转换了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值