7-1 厘米换算英尺英寸
分数 15
作者 翁恺
单位 浙江大学
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
输入格式:
输入在一行中给出1个正整数,单位是厘米。
输出格式:
在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。
输入样例:
170
输出样例:
5 6
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
下方代码是正确答案。
但是本题在逻辑上有毛病,根据题目所说输入样例为170,输出样例为5和6。公式为对应的米是(foot+inch/12)×0.3048。好的,我们用计算器计算这道题目就会发现问题。1.7/0.3048≈5.577,foot取5,0.577*12≈6.924,但根据样例竟然取6。
#include <stdio.h>
int main()
{int cm=0;scanf("%d",&cm); int foot = cm/30.48; int inch= (cm/30.48 - foot) * 12;printf("%d %d",foot,inch);return 0;
}
这里注意用int强制转换类型的写法。
我们先写一个测试小示例,讲解一个问题。
#include <stdio.h>
int main()
{int a=4,b=3,c;float d;c=a/b;d=a/b;printf("%d %f",c,d);
}
理论上4/3≈1.333333.....但是输出结果确是如下结果:
这是因为整型除以整型时,计算机默认运算结果取整,导致结果为1,无论c是不是整型答案都会取整。这里注意等号左边是输出类型只管输出,不参与等号右边的计算。
右边运算结果为1是既定事实,等号左边如果变量是浮点型则输出小数部分,如果是整型则进一步取整。这里记住int型(整型)一旦出现是强制取整的,如:
#include <stdio.h>
int main()
{float a=3,b=4,c;int d;c=b/a;d=b/a;printf("%f %d",c,d);
}
这时等号右边的结果为两个浮点数4和3相除,结果为1.33333.....但是由于d为整型,所以强制取整结果为1。
如果是整型除以浮点型,结果是浮点型,但输出结果的类型还要看等号左边变量的类型。如:
#include <stdio.h>
int main()
{int a=4,c;float b=3,d;c=a/b;d=a/b;printf("%d %f",c,d);
}
结果为:
在这里虽然等号左边运算结果为1.3333.....但是由于等号左边为int型,结果强制将1.333....取整得到结果为1。
如果是浮点型除以整型呢
#include <stdio.h>
int main()
{int a=4,c;float b=3,d;c=b/a;d=b/a;printf("%d %f",c,d);
}
同上,运算结果为浮点型不取整,输出结果要看输出变量的类型。
这里还有一个问题,如果我们输入变量类型必须是整型,但计算时又想进行浮点型运算,怎么办呢?这里有一个小技巧,将整型变量*1.0,如下:
#include <stdio.h>
int main()
{int a=4,b=3;float c;c=a/b;printf("%f\n",c);c=a*1.0/b;printf("%f\n",c);c=a/b*1.0;printf("%f\n",c);c=a/(b*1.0);printf("%f",c);
}
这里我们又发现一个问题,为什么a/b*1.0的结果仍然时1.000000呢?
因为根据运算顺序,先算a/b,取整为1,然后再将1*1.0得到1.000000。所以一定不要忘记加括号,改变运算顺序。
好了,最后我们说一下四舍五入的问题。
#include <stdio.h>
int main()
{float a,b;int c,d;a=1.0/3;b=2.0/3;printf("%f %f\n",a,b);printf("%.2f %.2f\n",a,b);c=a+0.5;d=b+0.5;printf("%d %d",c,d);
}
1.0/3=0.33333.....,2.0/3=0.66666....;由于浮点型只表示小数点后六位,近似为0.333333和0.666667。
这里要注意浮点型是自动四舍五入的。如果想保留六位以内的小数,如保留两位小数,那么应该写%.2f。
如果要四舍五入保留整数,那么应该利用整型自动取整的特性,给每一个运算结果加0.5,再用整型输出即可得到效果。如0.33四舍五入为0,0.33+0.5=0.83,整型取整为0;0.66+0.5=1.16,取整为1。
这里一定要注意取整是指只要整数,如1.333,只要1。而四舍五入是要有取舍,1.666,四舍五入为1.7。注意这两个概念不要混淆。