练习:使用条件运算符实现多级别折扣计算

练习:使用条件运算符实现多级别折扣计算

原代码解析

#include <stdio.h>

int main(void)
{
  const double unit_price = 3.50; /* 单价 */
  const double discount1 = 0.05;  /* 超过10个的折扣 5% */
  const double discount2 = 0.10;  /* 超过20个的折扣 10% */
  const double discount3 = 0.15;  /* 超过50个的折扣 15% */
  double total_price = 0.0;
  int quantity = 0;

  printf("输入您要购买的数量:");
  scanf("%d", &quantity);

  total_price = quantity * unit_price * (1.0 -
                   (quantity > 50 ? discount3 : (
                    quantity > 20 ? discount2 : (
                    quantity > 10 ? discount1 : 0.0))));

  printf("购买 %d件的价格是$%.2f\n", quantity, total_price);
  return 0;
}Code language: PHP (php)

嵌套条件运算符执行逻辑(从外到内):

输入 quantity条件判断选中折扣最终单价乘数计算结果(示例)
6565 > 50 真discount3 (0.15)1.0 - 0.15 = 0.8565 × 3.5 × 0.85 = 193.38
3535 > 50 假 → 35 > 20 真discount2 (0.10)1.0 - 0.10 = 0.9035 × 3.5 × 0.90 = 110.25
1515 > 50 假 → 15 > 20 假 → 15 > 10 真discount1 (0.05)1.0 - 0.05 = 0.9515 × 3.5 × 0.95 = 49.88
5全部为假0.01.0 - 0.0 = 1.05 × 3.5 × 1.0 = 17.50

代码要点:

  • 条件运算符从最外层开始匹配,满足 quantity > 50 直接取 discount3,否则进入内层继续判断
  • 每个分支只计算一个值,未选中的分支不会执行
  • 1.0 - 折扣率 得到实际付费比例

补充:%s 格式说明符输出字符串

printf("%s", "男性");Code language: JavaScript (javascript)
格式符用途示例
%s输出字符串(字符数组/字符串字面量)printf("%s", "Hello World");
%c输出单个字符printf("%c", 'A');

字符串与字符的区别:

  • 'A' → 单引号,单个字符,本质是 int
  • "A" → 双引号,字符串,本质是 char[](含结尾 \0)

等价的 if-else if-else 写法

if (quantity > 50)
    total_price = quantity * unit_price * (1.0 - discount3);
else if (quantity > 20)
    total_price = quantity * unit_price * (1.0 - discount2);
else if (quantity > 10)
    total_price = quantity * unit_price * (1.0 - discount1);
else
    total_price = quantity * unit_price;Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注