题目要求是:输入3个值:梯形的上底、下底和高,计算并输出该梯形的面积。保留小数6位,第7位四舍五入;我的代码是:#include<stdio.h>int main(void){ float a,b,h,s; scanf("%f %f %f",&a,&b,&h); s=(a+b)*h/2; s=((int)(100000.0*s+0.5)/100000.0); printf("%.6f\n",s); return 0;}交上去了一直是wrong answer,保留6位小数第七行好像是乘1000000.0,但是在自己的编译器上只有乘100000.0第七位才四舍五入了,这个也不知道为什么。刚开始学,谢谢大家的指点
3 回答
已采纳
心有猛虎_细嗅蔷薇
TA贡献119条经验 获得超250个赞
(%f 在不指定位数时,默认保留6位小数.)
建议使用pow()函数求次数方,包含<math.h>头文件。
s= (float) ( (int) ( pow(10,n) *s + 0.5)) / pow(10,n); //n代表浮点数四舍五入到小数的第n位
完整代码如下:
#include<stdio.h> #include<math.h> int main() { float a,b,h,s; int n=6; //n也可以由scanf存入(这儿为了方便直接保留6位) printf("Please input a,b,h:"); scanf("%f %f %f",&a,&b,&h); s=(a+b)*h/2; s= (float) ( (int) ( pow(10,n) *s + 0.5)) / pow(10,n); printf("%.6f\n",s); return 0; }
希望能帮助到你^_^
藏天慕道
TA贡献3条经验 获得超16个赞
我可以帮你解读一下你的关键语句,s=(int)(100000.0*s+0.5)/100000.0;
假设s=2.345678
100000.0*s=234567.8
(100000.0*s+0.5)=234568.3
(int)(100000.0*s+0.5)=234568
(int)(100000.0*s+0.5)/100000.0=2.34568
注:加减乘除运算中有一个数是float或double型,系统将数据全部转化成double型在进行运算。
希望能帮到你。
- 3 回答
- 0 关注
- 1508 浏览
添加回答
举报
0/150
提交
取消