今天这道题目,正如字面意思一样,是用C语言来实现厘米换算英尺英寸。
这道题目呢,是收录在基础编程题目集当中的编程题第一题,按理来说没啥难度,但为什么我要放上来呢,因为这道题的题目意思存在歧义。
题目要求,理顺逻辑话不多说,我们先来看看这道题目的要求:
1、如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)*0.3048。
2、现在要求输入的是厘米数,求对应英制长度的英尺foot和英寸inch的值。
3、1foot=12inch。
以上就是给定的要求,照理来说,知道这些要求好,我们可以根据数学公式,把foot和inch分别用cm的形式,即用表达式的形式表现出来。
但这就是问题所在了。
如图所示,根据题目要求,算出来的foot与cm的对应关系应该是这样的。
可是我在具体做这道编程题的时候,用这样的方式代入却是错误的。
所以我去网上查了查,1英尺到底等于多少cm。
最终得到1foot=30.48cm。
代码实现在清楚英尺与cm之间的关系后,我们也明白了这部分代码该怎么去写。
1、要求输入一个数,我们自然而然会想到用scanf函数。
2、1foot=30.48cm,然后输入的是cm数,所以得到的foot值应该为foot=cm/30.48。
3、因为1foot=12inch,所以可以得到inch=30.48*cm/12,但是这样做也是存在问题的,我们要根据这个公式来求得inch与cm之间的对应关系,所以这道题目就很有问题。
要求保留结果为整数,所以用int类型来代表inch和foot就行了。
#include<stdio.h>int main(){ int foot = 0; int inch = 0; int cm = 0; scanf("%d", &cm); foot = cm/100.0/0.3048; inch = (cm/100.0/0.3048-foot)*12; printf("%d %d", foot, inch);}结果测试
这道题目呢,到这边就已经完成了,不过我们可以来看看这道题目在进行检查的时候的要求。
分别有四个测试点。
1、sample、inch尾数不大于0.5,不是四舍五入而是截断,这是因为用到了int数据类型,直接把小数点后面的数字给去掉了。
2、0,也是作为一个测试点。
3、foot为0的时候,应该也是0。
4、inch为0的时候,应该也是0。
正好这个程序都能满足这些测试点。
总结这道题目呢,是因为题目存在歧义,当然也与我不知道英尺英寸与厘米之间的关系所导致的,还是得多留心关于这种常识方面的知识才行。