// 7.4 electirc.c -- 计算电费
#include <stdio.h>
#define RATE1 0.13230 // 首次使用 360 kwh 的费率
#define RATE2 0.15040 // 接着再使用 108 kwh 的费率
#define RATE3 0.30025 // 接着再使用 252 kwh 的费率
#define RATE4 0.34025 // 使用超过 720 kwh 的费率
#define BREAK1 360.0 // 费率的第1个分界点
#define BREAK2 468.0 // 费率的第2个分界点
#define BREAK3 720.0 // 费率的第3个分界点
#define BASE1 (RATE1 * BREAK1) // 使用360kwh的费用
#define BASE2 (BASE1 + (RATE2 * (BREAK2 - BREAK1))) // 使用468kwh的费用
#define BASE3 (BASE1 + BASE2 + (RATE3 * ( BREAK3 - BREAK2))) // 使用720kwh的费用
int main(void)
{
double kwh; // 使用的千瓦时
double bill; // 电费
printf("Please enter the kwh used.\n");
scanf("%lf", &kwh); // %lf对应double类型
if (kwh <= BREAK1)
bill = RATE1 * kwh;
else if (kwh <= BREAK2) // 360 ~ 468 kwh
bill = BASE1 + (RATE2 * (kwh - BREAK1));
else if (kwh <= BREAK3) // 468 ~ 720 kwh
bill = BASE2 + (RATE3 * (kwh - BREAK2));
else // 超过720 kwh
bill = BASE3 + (RATE4 * (kwh - BREAK3));
printf("The change for %.1f kwh is $%1.2f.\n", kwh, bill);
return 0;
}

程序清单7.4用符号常量表示不同的费率和费率分界点,以便把常量统一放在一处。这样,电力公司在更改费率以及费率分界点时,更新数据非常方便。
BASE1和BASE2根据费率和费率分界点来表示。一旦费率或分界点发生了变化,它们也会自动更新。
预处理器是不进行计算的。
程序中出现BASE1的地方都会被替换成0.13230*360.0。不用担心,编译器会对该表达式求值得到一个数值(47.628),以便最终的程序代码使用的是47.628而不是一个计算式。
程序流简单明了。该程序根据kwh的值在3个公式之间选择一个。特别要注意的
是,如果kwh大于360,程序只会到底第1个else。因此,else if (kwh <= BREAK2)
这行相当于要求kwh在360~468之间,如程序注释所示。类似地,只有当kwh值超过
720时,才会执行最后的else.最后,注意BASE1、BASE2和BASE3分别代表360、468和
720千瓦时的总费用。因此,当电量超过这些值时,只需要加上额外的费用即可。

7.4 electirc.c -- 计算电费的更多相关文章

  1. C语言第三次作业

    #include<stdio.h>//1.三角形 int main() { printf("*\n"); printf("**\n"); print ...

  2. C语言第一次实验报告————PTA实验1.2.3内容

    一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度100°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...

  3. C语言程序设计第三次作业——选择结构(1)

    一.改错题 1.题目计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 源程序(有错误的程序): #include <stdio.h> int main ...

  4. 《C语言程序设计》编程总结汇总

    <C语言程序设计>编程总结汇总 院系: 专业年级: 班级名称: 学号: 姓名: 指导教师: 完成时间: 自我评价: 计算机科学与技术专业教研室 2018 年秋季学期 第四周编程总结 题目4 ...

  5. C语言I博客作业03

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8717 我在这个课程的目 ...

  6. C语言|博客作业03

    这个作业属于哪个课程 C程序语言设计 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/8654 我在这个课程的目标是 ...

  7. c语言l博客作业03

    问题 答案 这个作业属于哪个课程 c语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/8727 我在这 ...

  8. C语言I 博客作业03

    这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 作业要求 我在这个课程的目标是 掌握关系运算.if-else语句.格式化输入语句scanf(),以及常用的数学库函数 这个作业在那个具体方 ...

  9. C语言|博客作业3

    问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://i.cnblogs.com/EditPosts.aspx?postid=11661995&update ...

随机推荐

  1. USGS bulk批量下载工具

    最近美国EarthExplorer上批量下载遥感数据---官方给出了批量下载工具BULK 下载地址:https://earthexplorer.usgs.gov/bulk/ bulk 使用帮助文档 根 ...

  2. String为什么是final类型的

    String的源码如下: public final class String implements Serializable, Comparable<String>, CharSequen ...

  3. [err]Traceback (most recent call last): File "/usr/local/bin/pip", line 7, in <module> from pip._internal import main ImportError: No module named 'pip._internal'

    Q: Traceback (most recent call last):File "/usr/local/bin/pip", line 7, in <module>f ...

  4. i3wm菜单

    抛弃i3-dmenu-desktop吧,投入到 j4-demu-desktop 速度超快

  5. win10磁盘/cpu占用100%问题

    https://www.zhihu.com/question/27664545 https://www.zhihu.com/question/27664545 微软自己的解决办法 https://su ...

  6. 锋利的jQuery初学(5)

    层级选择器: 层级选择器 符号 解释 使用 空格 后代选择器 $("div p").css("","") + 紧邻选择器 $("d ...

  7. Nginx在CentOS7下的安装

    一,安装前的准备(Nginx安装之前,需要的工具以及依赖包:wget.gcc.pcre.openssl.zlib ) 1,wget安装 yum -y install wget 2,gcc安装 yum ...

  8. window下为kibana安装x-pack时候出现Plugin installation was unsuccessful due to error "No valid url specified."错误的解决方案

    在Windows环境下为kibana安装x-pack plugin的时候,按照官网提示的安装步骤执行命令: kibana-plugin install file:///E:/software/ELK/ ...

  9. postgresql 最大连接数相关

    PG中有一张表记录着当前有多少连接 表名:pg_stat_activity 查询当前连接数: select count(1) from pg_stat_activity; 查询最大连接数 show m ...

  10. admin-2

    Linux是一种服务器操作系统 操作系统:一堆软件的集合,可以让计算机硬件正常工作 • UNIX诞生,1970-1-1(Linux系统时间的起点) • Linux之父,Linus Torwalds 内 ...