You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:10:24