C程序问题,读入三个双精度数求它们平均值并保留此平均值小数点后一位,对小数点后第二位小数四舍五入

#include"stdio.h"main(){doublea,b,c,d;printf("输入三个双精度数:");scanf("%lf%lf%lf",&a,&b,&c)... #include "stdio.h"
main()
{
double a,b,c,d;
printf("输入三个双精度数:");
scanf("%lf%lf%lf",&a,&b,&c);
d=(a+b+c)/3;
d*=10;
d+=0.5;
d/=10;
printf("%.1lf\n",d);
}
这个程序是正确的程序,就是看不懂。d*=10和d+=0.5和d/=10是什么意思?只看得懂d=(a+b+c)/3是求平均数。还有双精度数就是小数点后有两个小数的数么?初学菜鸟,来个大神给讲讲吧谢谢啦!!!
展开
 我来答
好求知
推荐于2018-09-28 · TA获得超过6515个赞
知道大有可为答主
回答量:966
采纳率:80%
帮助的人:1175万
展开全部
单精度实数在内存中占32bit 有效数字为6~7位,
双精度实数占内存单元为64bit 有效数字为15~16位。
所以双精度数不是小数点后有两个小数的数。

d*=10;
d+=0.5;
d/=10;
这三条语句是对小数点后第二位小数四舍五入。
例如d=1.26;
d*=10; // 12.6
d+=0.5; //13.1
d/=10; //1.31
printf("%.1lf\n",d); // 1.3

很明显,若小数点后第二位小数大于等于5,就会往前一位进位。就是四舍五入了。其实
d+=0.05;
就能实现了。
Mc_carine
2015-08-03 · 超过56用户采纳过TA的回答
知道答主
回答量:226
采纳率:0%
帮助的人:119万
展开全部
/*读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。*/

#include
#include
void main()
{
double a,b,c,d,e;
int g,h1,h2;
char f[20];
printf("请输入三个双精型\n");
scanf("%lf %lf %lf",&a,&b,&c);
d=(a+b+c)/3;
printf("原来未按要求执行返回的双精型\n");
printf("%lf\n",d);
e=d-(int)d; /*求小数部分*/
sprintf(f,"%f",e);/* 将小数转换成字符串*/
printf("转换成字符串之后的小数部分\n");
printf("%s\n",f);/*这一步是用来检测字符串是怎样的*/
g=strlen(f); /*计算字符串长度*/
printf("字符串长度:%d\n",g);
if(g>=3)
{
printf("处理好之后的平均值是\n");
h2=(int)f[3]; /* f[3]是字符型数据,强行取整之后,编程ASC值*/
if(h2>52) /*判断ASC码 4*/
{
h2=(int)f[2];
if(h2>56)
{
h2=48; /*进位直接写0的ASC码*/
h1=(int)d;
h1=h1+1;
}
else
{
h2=h2+1;
h1=(int)d;
}
/*转换成字符串之后一个个字符输出,好笨的办法,求大神精辟*/
printf("%d",h1);/*这里是取双精型的整,不用输出字符*/
printf("%c",f[1]);
printf("%c",h2); /*h2是取ASC码的值,所以要输出字符型数据*/
}
else{
printf("%d",h1=(int)d);
printf("%c",f[1]);
printf("%c",f[2]);}
printf("\n");

}
else{
printf("处理好之后的平均值是\n");
printf("%g\n",d);
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式