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

账单计算C程序未输出预期结果的原因排查及修复方案

问题分析与修复方案

错误原因分析

  • 高价商品判断逻辑错误:代码在循环结束后仅判断最后一个商品的单价是否超过7 JOD,而非检查是否存在任意一件单价超7 JOD的商品,导致符合规则4的情况无法触发折扣。
  • 折扣叠加逻辑错误:当前代码中,规则4的1%折扣会被后续的if-else分支直接覆盖,无法实现折扣叠加。例如当同时满足规则1和规则4时,1%的折扣会被7%的折扣覆盖,导致总折扣计算错误。
  • 最大折扣检查不全面:仅在n>2且total>=20的分支中检查折扣是否超过50%,其他场景下未做限制,违反规则5。
  • 冗余变量:定义了count变量但未使用,属于无效代码。

修复后的代码

#include <stdio.h>

int main() {
    int n, i;
    float price, total = 0, discount = 0;
    // 标记是否存在单价超过7 JOD的商品
    int has_expensive_item = 0;

    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%f", &price);
        total += price;
        // 循环内检查每个商品单价,只要有一个超过7就标记为1
        if (price > 7) {
            has_expensive_item = 1;
        }
    }

    // 按规则计算基础折扣
    if (n > 2) {
        if (total < 20) {
            discount += total * 0.07; // 规则1
        } else {
            discount += total * 0.15; // 规则2+规则3
        }
    } else {
        if (total >= 20) {
            discount += total * 0.1; // 规则2
        }
        // total<20且n<=2时无基础折扣,无需处理
    }

    // 叠加规则4的额外折扣
    if (has_expensive_item) {
        discount += total * 0.01;
    }

    // 统一检查最大折扣不超过50%
    if (discount > total * 0.5) {
        discount = total * 0.5;
    }

    printf("%.2f\n", total - discount);
    return 0;
}

修复说明

  1. 修正高价商品判断:新增has_expensive_item变量,在循环内逐个检查商品单价,确保只要存在符合条件的商品就能触发规则4的折扣。
  2. 调整折扣逻辑为叠加模式:将所有折扣计算改为累加方式,避免后续分支覆盖之前的折扣值,确保符合多个规则时折扣可以叠加。
  3. 全局检查最大折扣:在所有折扣计算完成后统一判断是否超过50%,确保所有场景都符合规则5。
  4. 移除冗余变量:删除未使用的count变量,精简代码。

内容的提问来源于stack exchange,提问作者Afnan Mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:22:48