如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
输入格式:
输入在一行中给出1个正整数,单位是厘米。
输出格式:
在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。英寸的值应小于12。
输入样例:170
输出样例:5 6
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB
#include <stdio.h>
int main()
{
int cm, foot, inch;
scanf("%d", &cm); //输入厘米(整数)
double a; //a为英尺(实数)
a = cm/100.0/0.3048; //把厘米(整数)转换为米(实数),再转换为英尺(实数)
foot = (int)a; //把英尺向下取整(取不超过自变量的最大整数作为函数值),转成整型
inch = (int)((a-foot)*12); //计算剩余的英寸数,向下取整
printf("%d %d\n", foot,inch);
return 0;
}
涉及两个问题:
1. %
运算符只能作用于整型数据,而不能作用于实数。(c = a/100.0/0.3048%10)类似这样的代码就会报错
2. 强制类型转换(int)
(int)
是 C 语言中的强制类型转换操作符,可以将一个值强制转换为另一个类型。在这个例子中,由于最后计算出来的英尺数a是一个实数类型 double
,而我们需要的是一个整数类型,因此需要使用 (int)
强制将其转换为整数类型。
使用(int)
强制将浮点数转换为整型时,实际上是向零取整(即取最接近且不大于该数的整数)。
具体来说,对于正数而言,将浮点数强制转换为整型时,会将其向下取整为最接近且不超过该浮点数的整数;而对于负数,则会将其向上取整为最接近且不低于该浮点数的整数。
例如,对于以下代码:
double x = 3.8;
int result = (int)x; // 将 3.8 取为 3
double y = -2.5;
int result2 = (int)y; // 将 -2.5 取为 -2
因此在进行强制类型转换时,应该考虑转换后数据的有效范围,同时需要注意舍入误差问题。
例如,在这个例子中,将一个实数强制转换为整数时,会将其小数部分直接截断,这种截断可能会导致一些数据精度上的损失。因此,在进行强制类型转换时需要谨慎。