练习2-8 计算摄氏温度 (10 分)

本文介绍了一个简单的C语言程序,用于将华氏温度转换为摄氏温度。通过输入华氏温度,程序使用公式C=5*(F-32)/9计算并输出相应的摄氏温度。

练习2-8 计算摄氏温度 (10 分)

给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。

输入格式:
输入在一行中给出一个华氏温度。

输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。

输入样例:
150
输出样例:
Celsius = 65

#include<stdio.h>

int main()
{
    int F = 0 , C;
    scanf("%d",&F);
    C = 5*(F - 32)/9;
    printf("Celsius = %d\n",C);
    return 0 ;
}

在这里插入图片描述

<think>好的,我现在需要帮助用户在PTA平台上找到7-1输出华氏-摄氏温度转换表的编程练习的解决方案。首先,用户提供了多个C语言实现的引用,但用户之前的问题和我的回答都是关于Python的解决方案。因此,我需要确保既参考用户提供的C代码,又结合之前的Python回答来满足用户的需求。 首先,我需要确认题目要求。根据引用中的多个C代码示例,题目的大致要求是输入两个整数lower和upper,生成从lower到upper、步长为2华氏温度对应摄氏温度转换表。如果输入不合法(如lower > upper或超过100),则输出Invalid.。输出格式要求表头为fahr celsius,接着每行输出华氏温度(整型)和摄氏温度(占6字符宽度,右对齐,保留1位小数)。 接下来,我需要将这些要求转化为Python代码。首先处理输入验证,检查lower <= upper且upper <= 100。如果不符合,输出Invalid.。然后输出表头,使用循环从lower开始,每次增加2,直到upper。在循环中计算摄氏温度,并按格式输出。 需要注意的是,用户提供的引用中有不同的实现方式,例如引用[2]中的步长是1,但根据其他引用和用户之前的问题,正确的步长应该是2。因此,在Python中需要使用range函数,步长设为2。另外,输出格式中的摄氏温度需要占6字符宽度、右对齐、保留一位小数,这在Python中可以通过格式化字符串实现,如f"{c:6.1f}"。 此外,用户之前的问题中提到输入格式是一行两个整数,中间空格隔,这在Python中可以通过split()处理。还要处理可能的输入错误,比如非整数输入,但根据题目描述,可能PTA的测试用例只考虑合法整数输入,因此代码中可以不做额外处理,直接使用map(int, input().split())。 需要对比用户提供的C代码和之前的Python回答,确保逻辑一致。例如,C代码中的循环条件、步长和输出格式是否正确转换到Python中。同时,注意输出时fahr和celsius之间的空格,确保与题目要求的格式一致,例如在C代码中有的使用printf("%d%6.1f\n",i,celsius),即%d和%6.1f之间没有空格,但题目示例输出显示有空格,如“32 0.0”(fahr和celsius之间有一个空格)。因此,在Python中输出时,应该使用f"{f} {c:6.1f}",这样在f和c之间有一个空格,符合示例。 还要检查边界情况,比如当lower等于upper时,是否只输出一行。例如输入32 32,应该输出32对应摄氏温度。同时,当upper超过100时,需要输出Invalid.。 最后,确保代码在PTA平台上能够通过所有测试用例,包括合法的输入、非法输入、边界值等。例如引用中的输入样例1:32 35,输出应为两行,因为步长是2,所以32和34。而样例2输入40 30,输出Invalid.。 总结步骤: 1. 读取输入,检查是否为两个整数。 2. 验证lower <= upper且upper <= 100。 3. 输出表头。 4. 循环处理每个华氏温度计算摄氏温度并格式化输出。 5. 处理非法输入的情况。 在Python中需要注意类型转换和格式化输出的细节,确保与题目要求完全一致。例如,摄氏温度计算必须使用浮点数运算,避免整数除法的问题,因此母应为9.0而不是9。同时,输出时保留一位小数,右对齐,占6位宽度。 测试样例: 输入32 35,输出应为: fahr celsius 32 0.0 34 1.1 输入40 30,输出Invalid. 输入90 100,检查upper是否为100,是否合法,然后输出对应的行。 现在根据这些析,编写Python代码,并确保符合所有要求。</think>根据PTA 7-1题目要求,以下是完整的Python实现方案: ```python lower, upper = map(int, input().split()) if lower > upper or upper > 100: print("Invalid.") else: print("fahr celsius") for f in range(lower, upper + 1, 2): c = 5 * (f - 32) / 9 print(f"{f} {c:6.1f}") ``` ### 关键实现要点 1. **输入验证** - 必须满足 $lower \leq upper$ 且 $upper \leq 100$,否则输出 `Invalid.`[^3][^4] - 验证条件 `lower > upper` 包含所有非法范围输入(如输入40 30) 2. **温度转换公式** 使用精确浮点计算:$C = \frac{5(F-32)}{9}$,母必须写为 `9` 或 `9.0` 以保证结果为浮点数[^3][^4] 3. **格式化输出** - 表头固定为 `fahr celsius`[^1][^3] - 摄氏温度格式要求:`%6.1f`(占据6字符宽度、右对齐、保留1位小数)[^4] ### 输入输出示例 | 输入样例 | 输出结果 | |---------|---------| | 32 35 | fahr celsius<br>32 0.0<br>34 1.1 | | 40 30 | Invalid. | | 98 100 | fahr celsius<br>98 36.7<br>100 37.8 | ### 常见错误规避 1. **步长错误**:必须保证华氏温度**每次增加2**,若使用 `range(lower, upper)` 会漏掉最后一个值,正确写法是 `range(lower, upper+1, 2)`[^1][^3] 2. **格式对齐错误**:摄氏温度的 `6.1f` 必须严格右对齐,若误用 `%-6.1f` 会导致左对齐错误 3. **边界值处理**:当输入 `lower=100` 且 `upper=100` 时,需输出对应行[^4] ### 进阶优化方向 - **异常输入处理**:增加对非整数输入的检测(如字母、符号等) - **动态步长支持**:通过新增输入参数控制温度递增步长 - **温度单位扩展**:添加开尔文温度列输出 [相关问题] 1. 如何处理输入包含非数字字符的情况? 2. 如何修改代码使摄氏温度保留两位小数? 3. 若题目要求输出表格边框线,应如何调整格式? [^1]: 引用自C语言实现中的循环结构 [^3]: 引用自输入验证逻辑 [^4]: 引用自格式化输出要求
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值