今有四个水渠,分别记为a,b,c,d,可以向一个水渠中注水,下表为单开一个水渠注满水所用的时间:
单开一个水渠 |
注满水池的天数 |
单开一个水渠 |
注满水池的天数 |
a |
3 |
c |
4 |
b |
1 |
d |
5 |
问:
i. 如果a,b两个水渠共识注水需要多少时间?
ii. 如果a,b,c,d,同时注水,需要多少时间注满?
(原自九章算术)
分析:
由数学知识可以知道,两个水渠同时注水所需要的时间为: ,而四个水渠同时注满所需要的时间为:
因而很用以可以得到:
main()
{
int a=3,b=1,c=4,d=5;
float a2,b2,c2,d2,x,y;
a2=1/a;
b2=1/b;
c2=1/c;
d2=1/d;
x=1/(a2+b2);
y=1/(a2+b2+c2+d2);
printf(“a----b:%.2f day\n a----d:%.2f day\n”,x,y);
}
结果发现不正确,原因就是在于数据计算的时候,如果a=3取为整形,计算1/a是必须做类型转换,否则1/a就为0。因此程序应该为:
main()
{
int a=3,b=1,c=4,d=5;
float a2,b2,c2,d2,x,y;
a2=1/(float)a;
b2=1/(float)b;
c2=1/(float)c;
d2=1/(float)d;
x=1/(a2+b2);
y=1/(a2+b2+c2+d2);
printf(“a----b:%.2f day\n a----d:%.2f day\n”,x,y);
}
加粗部分,上课老师说了,又忘了,看不懂了。。。