请帮忙看一下 这道C语言题

题目是:输出格式:在一行中按照格式“Sum=和;Average=平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。C语言不是可以隐形转换吗,为什么Average=... 题目是:
输出格式:
在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。

C语言不是可以隐形转换吗,为什么Average=(a+b+c+d)/4.0;这里必须写4.0
#include <stdio.h>

int main () {
int a,b,c,d;
float Average;
scanf("%d%d%d%d\n",&a,&b,&c,&d);
Average=(a+b+c+d)/4.0;
printf("Sum = %d; Average = %.1f",a+b+c+d,Average);
return 0;
}
展开
 我来答
microroom
科技发烧友

2019-10-11 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1625万
展开全部
隐式转换指将(a+b+c+d)/4的结果(算出来的结果)转换为float类型,而不是先将(a+b+c+d)和4转换为float类型后再计算,是先计算后转换。而(a+b+c+d)和4都是整型值,所以/运算进行的是整除,最后将除出来的结果隐式转换为float类型。所以必须是4.0,迫使/进行浮点除。
追问
为什么必须进行浮点除,直接除以四再放进float变量里不可以吗😂
追答
那结果会舍弃小数部分。比如:1/3.0=0.333333,而1/3=0,7/3.0=2.333333,而7/3=2。再比如3/2.0=1.5,而3/2=1。整除时,结果会丢掉小数部分,只保留整数部分。
White_MouseYBZ
2019-10-11 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6655万
展开全部

不知你问什么问题!

  1. 把scanf("%d%d%d%d\n",&a,&b,&c,&d);改成scanf("%d%d%d%d",&a,&b,&c,&d);。

  2. 把Average=(a+b+c+d)/4.0;改成Average=(a+b+c+d)/4.0f;。——不改会有警告!

追问
直接除以4,然后放进变量不行吗,不是可以进行隐性转换
追答
a、b、c、d是int型,自然a+b+c+d的和也是int型,4默认也是int型;两个int型的值被/后就只取整数部分,赋给Average后倒是把商“隐性”成了float型,但这商却丢了小数部分,结果就不对了。“隐性”不会把丢掉的小数找回来!核心是/在两边都是int型时是“取整除”,有一边为浮点型时是“浮点除”,所以二者结果不同,这与“隐性”转换无关。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式