我用的是VS2010 编写的是圆周长和 圆的面积而已,但是输入数字大于3时,输出结果的百万分位会出数字WHY?

#include<stdio.h>voidmain(){floatp=3.14,r,z,s;for(;;){printf("请输入一个数\n");scanf("%f",&... #include<stdio.h>
void main()
{
float p=3.14,r,z,s;

for(;;)
{

printf("请输入一个数\n");
scanf("%f",&r);
z=2*r*p;
s=p*r*r;
printf("周长为:%f\n面积为:%f\n",z,s);
}

}
展开
 我来答
匿名用户
2011-05-19
展开全部
float为7位有效数字,scanf和printf保留小数点后6位数字,当数据长度超过7位时,可能存在计算误差。显示精度应该与程序需要一致。这里p=3.14为小数点后2位数字,如果输入r精度为小数点后2位数字,则输出精度不大于小数点后3位数字,即输出可改为
printf("周长为:%.3f\n面积为:%.3f\n",z,s);
ssilspro
2011-05-19 · TA获得超过2625个赞
知道大有可为答主
回答量:1148
采纳率:0%
帮助的人:1721万
展开全部
这大概是十进制和二进制之间转换的误差
而且printf输出float会保留6位有效数字,
float的精度估计也不够,你可以用double和%lf试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友87265ddc64
2011-05-19
知道答主
回答量:13
采纳率:0%
帮助的人:0
展开全部
#include<stdio.h>
void main()
{
double p=3.1415926,r,z,s;

for(;;)
{

printf("请输入一个数\n");
scanf("%f",&r);
z=2.0*r*p;
s=p*r*r;
printf("周长为:%f\n面积为:%f\n",z,s);
}

}
我试过了,能交了,你试一下
追问
也许程序不同 您编写的在VS2010上 是出现其他数据的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式