C语言电费计算程序求助:月度时长与电量计算异常
C语言电费计算(仅三元运算符)问题排查与解决
核心需求回顾
月度电费计算规则:
- 前100000kWh:0.05元/kWh
- 超出100000kWh的部分:0.03元/kWh
- 仅允许使用三元运算符实现条件判断
常见错误分析(针对“月度电量乘30后结果异常”)
- 变量类型不匹配:用整型(
int)存储电量或电费结果,导致浮点运算被截断(比如带小数的电量计算后直接丢失小数部分) - 计算顺序错误:先按日电量计费再乘30,而非先将日电量转为月度电量再计算费用
- 三元运算符逻辑漏洞:超出部分的计算未正确拆分基础额度和超额部分
正确实现代码
#include <stdio.h> // 输入日用电量(kWh),返回月度电费(元) double calculate_monthly_bill(double daily_kwh) { double monthly_kwh = daily_kwh * 30; // 三元运算符实现条件判断,优先级清晰,避免歧义 return monthly_kwh <= 100000 ? monthly_kwh * 0.05 : 100000 * 0.05 + (monthly_kwh - 100000) * 0.03; } int main() { double daily_usage; printf("输入日用电量(kWh): "); scanf("%lf", &daily_usage); printf("月度电费: %.2f元\n", calculate_monthly_bill(daily_usage)); return 0; }
代码说明
- 用
double类型存储电量和电费,确保浮点运算精度不丢失 - 先将日电量乘以30得到月度总电量,再执行计费逻辑,完全贴合需求逻辑
- 三元运算符拆分两种场景:未超额时直接计算总费用;超额时拆分基础额度费用+超额部分费用,逻辑清晰无歧义
错误示例对比(供排查)
如果你的代码类似下面的写法,会导致结果异常:
// 错误示例1:用int存储导致浮点截断 int calculate_monthly_bill(int daily_kwh) { int monthly_kwh = daily_kwh * 30; return monthly_kwh <= 100000 ? monthly_kwh * 0.05 : 100000 * 0.05 + (monthly_kwh - 100000) * 0.03; } // 错误示例2:计算顺序逻辑冗余(虽结果等价,但易引发精度问题) double calculate_monthly_bill(double daily_kwh) { return daily_kwh <= 100000/30 ? daily_kwh * 0.05 *30 : 100000*0.05 + (daily_kwh*30 -100000)*0.03; }
内容的提问来源于stack exchange,提问作者Atreus
相关产品推荐
相关产品推荐

