任务描述 本关任务:输入某人的身高(cm),请你计算 Ta 要保持标准身材体重的上限和下限(单位:kg),分别存入变量 up 和 low 中。 相关知识 为了计算的精确,有时候光保存计算结果的整数部分是不够的,这时候就需要使用浮点数了。 C 中有 3 种浮点类型:float 、double 和 long double,均为有符号浮点数。 浮点数类型 类型名 名称 存储长度 可表示的最小非 0 的绝对值 可表示的最大的绝对值 float 浮点型 4 字节 1.175494351E – 38 3.402823466E + 38 double 双精度型 8 字节 2.2250738585072014E – 308 1.7976931348623158E + 308 long double 长双精度型 8 字节 2.2250738585072014E – 308 1.7976931348623158E + 308 浮点数运算 浮点类型数据可以参与算术运算、关系运算、逻辑运算等。计算机有两套算术运算的单元:整型的和浮点类型的。如果两个操作数都是整型数据,则系统采用整型运算,运算结果也是整数。如果有一个操作数是浮点数,系统就会使用浮点运算,浮点运算的结果也是浮点数。 表达式中操作数的类型不同时,系统会自动进行隐式类型转换,使表达式中的数据类型一致。分为以下两种情景: 在算术表达式中隐式类型转换规则为:把不同类型的数据转换成精度最高、占用内存最多的那个数据的类型。 在赋值表达式中,会自动将赋值运算符右边表达式的值的类型转换成左边变量的类型,这种转换可能会丢失数据的精度。 如果两个操作数一个是整型数,一个是浮点数,系统会先对整型数进行类型转换,转换为等值的浮点数,然后再计算。 例如: float x = 2 + 3.4; // 隐式类型转换,系统会先把整数 2 转换成浮点数 2.0,然后再做加法运算 当然,对应的肯定有强制类型转换,也叫显式类型转换,它把表达式值的类型强制转换成指定的类型。 例如: (double)3/2 先将3转换成 double 类型的3.0,然后计算3.0/2,由于2是整型,计算之前需要进行隐式类型转换,所以2也将转换成 double 类型的2.0。 编程要求 在右侧编辑器中的Begin-End之间补充代码,根据输入的身高(数据由平台提供,你需要获取后才能使用)来计算标准身材对应体重的上限和下限(单位:kg),分别存入变量 up 和 low 中,计算规则如下: 据说一个成年人的标准体重是其身高(单位:cm)减去100,然后再乘以 0.9所得到的公斤数。而一个人身材是否标准则是指 Ta 的真实体重是否在标准体重的加减10%之内。 提示:计算得到的标准身材体重的上下限的单位是 kg ,分别存入变量 up 和 low 中。 测试说明 平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试: 测试输入:176 预期输出:体重范围为:61.56 -- 75.24 测试输入:160 预期输出:体重范围为:48.60 -- 59.40 开始你的任务吧,祝你成功!
时间: 2025-07-25 14:37:41 浏览: 14
<think>我们根据用户需求编写C语言程序:
1. 用户输入身高(单位:厘米,但公式中按减100计算,所以单位一致即可,通常用厘米)
2. 计算标准体重: (height - 100) * 0.9
3. 计算标准体重的下限(90%)和上限(110%)
4. 注意浮点数运算,避免整数除法问题
由于公式中0.9已经是浮点数,所以计算会自动提升为浮点数。但为了确保,我们使用浮点数变量。
步骤:
1. 声明变量:height(身高),standard_weight(标准体重),lower_bound(下限),upper_bound(上限)
2. 输入身高(使用%f,说明用户输入可以是浮点数,比如170.5)
3. 计算标准体重: (height - 100) * 0.9
4. 计算下限:standard_weight * 0.9
5. 计算上限:standard_weight * 1.1
6. 输出结果,保留一定小数位数(比如2位小数)
注意:由于公式中要求是(height-100)*0.9,所以身高单位应该是厘米(如170厘米,而不是1.70米)。如果用户输入的是米,需要转换,但题目没有明确,按照通常习惯,我们使用厘米。
但是,用户可能输入米?题目没有明确,我们可以按照常见情况(厘米)处理。如果用户输入的是米,那么公式就不对了。所以我们在输入提示中明确单位。
因此,我们在输入提示中注明单位(厘米)。
代码示例:
```c
#include <stdio.h>
int main() {
float height, standard_weight, lower_bound, upper_bound;
printf("请输入您的身高(单位:厘米):");
scanf("%f", &height);
// 计算标准体重
standard_weight = (height - 100) * 0.9;
// 计算范围
lower_bound = standard_weight * 0.9;
upper_bound = standard_weight * 1.1;
// 输出结果,保留两位小数
printf("标准体重: %.2f 千克\n", standard_weight);
printf("体重范围: %.2f ~ %.2f 千克\n", lower_bound, upper_bound);
return 0;
}
```
注意:浮点数运算可能会有精度问题,但在这种精度要求不高的场景下,通常可以接受。
关于类型转换:在这个程序中,我们没有显式使用类型转换,因为所有数值都是浮点数(0.9, 0.9, 1.1都是浮点数),所以运算都是浮点数运算。
但是,如果用户输入整数,scanf也会将其转换为浮点数存储,所以没有问题。
如果用户输入的是米为单位,那么公式就不适用了。因此我们在提示中明确要求单位是厘米。
如果用户希望用米输入,那么公式需要调整:标准体重 = (height * 100 - 100) * 0.9?这样也不对,因为身高米制输入的话,比如1.7米,那么1.7米等于170厘米,所以公式应该是(身高*100 - 100)*0.9。但这样计算出来的标准体重单位是千克。
为了灵活性,我们可以让用户选择单位?但题目没有要求,我们按照厘米处理即可。
相关问题:
§§相关问题§§
1. 如果用户输入的身高单位是米,程序应该如何修改?
2. C语言中浮点数运算的精度问题如何避免?
3. 如何确保用户输入的是有效的正浮点数?</think>以下是根据您的要求编写的C语言程序,用于计算标准体重范围(包含浮点数运算和类型转换处理):
```c
#include <stdio.h>
int main() {
float height; // 声明浮点型变量存储身高
float standard; // 声明浮点型变量存储标准体重
float lower_bound; // 声明浮点型变量存储下限
float upper_bound; // 声明浮点型变量存储上限
// 获取用户输入(浮点数)
printf("请输入身高(cm):");
scanf("%f", &height);
// 计算标准体重:(身高-100)×0.9
standard = (height - 100.0f) * 0.9f; // 使用浮点常量确保浮点运算
// 计算体重范围(±10%)
lower_bound = standard * 0.9f; // 下限 = 标准体重×90%
upper_bound = standard * 1.1f; // 上限 = 标准体重×110%
// 输出结果(保留2位小数)
printf("\n身高: %.2f cm\n", height);
printf("标准体重: %.2f kg\n", standard);
printf("体重范围: %.2f kg ~ %.2f kg\n", lower_bound, upper_bound);
return 0;
}
```
### 关键点说明:
1. **浮点数处理**:
- 所有变量声明为`float`类型
- 在数字字面量后添加`f`后缀(如`100.0f`, `0.9f`),显式指定为浮点数
- 避免整数除法问题(如`9/10`会得到0),确保使用浮点运算
2. **类型转换**:
- 当整数与浮点数混合运算时,C语言自动进行隐式类型转换(提升为浮点数)
- 示例:`(height - 100.0f)`中整数`100`自动转换为浮点数参与运算
3. **计算公式**:
- 标准体重:$ \text{standard} = (height - 100) \times 0.9 $
- 下限:$ \text{lower\_bound} = \text{standard} \times 0.9 $
- 上限:$ \text{upper\_bound} = \text{standard} \times 1.1 $
4. **输入输出**:
- `scanf("%f", &height)`读取浮点数
- `printf`使用`%.2f`格式保留两位小数
### 示例运行:
```
请输入身高(cm):175
身高: 175.00 cm
标准体重: 67.50 kg
体重范围: 60.75 kg ~ 74.25 kg
```
阅读全文
相关推荐




















