7.4 electirc.c -- 计算电费
// 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 -- 计算电费的更多相关文章
- C语言第三次作业
#include<stdio.h>//1.三角形 int main() { printf("*\n"); printf("**\n"); print ...
- C语言第一次实验报告————PTA实验1.2.3内容
一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度100°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...
- C语言程序设计第三次作业——选择结构(1)
一.改错题 1.题目计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 源程序(有错误的程序): #include <stdio.h> int main ...
- 《C语言程序设计》编程总结汇总
<C语言程序设计>编程总结汇总 院系: 专业年级: 班级名称: 学号: 姓名: 指导教师: 完成时间: 自我评价: 计算机科学与技术专业教研室 2018 年秋季学期 第四周编程总结 题目4 ...
- C语言I博客作业03
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8717 我在这个课程的目 ...
- C语言|博客作业03
这个作业属于哪个课程 C程序语言设计 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/8654 我在这个课程的目标是 ...
- c语言l博客作业03
问题 答案 这个作业属于哪个课程 c语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/8727 我在这 ...
- C语言I 博客作业03
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 作业要求 我在这个课程的目标是 掌握关系运算.if-else语句.格式化输入语句scanf(),以及常用的数学库函数 这个作业在那个具体方 ...
- C语言|博客作业3
问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://i.cnblogs.com/EditPosts.aspx?postid=11661995&update ...
随机推荐
- java编码与解码(一)
转:https://blog.csdn.net/heyanxi0101/article/details/80356870 java编码与解码(一) 编码表概述和常见的编码表 概述:有字符及其对应的数值 ...
- (a ==1 && a== 2 && a==3) 有可能是 true 吗?
工作之余逛知乎的时候看到一个有意思的讨论,(a ==1 && a== 2 && a==3) 有可能是 true 吗?啊?一个变量同时满足三个条件?扯呢? 当然是我太天真 ...
- cocoapod podpackage 自动根据podfile生成framework实现二进制化,原创脚本,转载请注明出处
#!/bin/bash # created by lichanghong ; mail: lichanghong@soyoung.com # XXX.sh AFNetworking 3.0.0 se ...
- iOS Masonry控件等比例布局
一.先解释相关API 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /** * distribute with fixed spacing * * ...
- ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)
ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台 参考:http://www.tuicool.com/articles/R77fieA 我在做ELK日志平台开始之初选择为 ...
- I/O 模型与 Java
本文主要记录 Java 中 I/O 模型及相关知识点 .另,由于自身知识水平有限,如有不正之处,望各位能够谅解,欢迎批评指正! 一.I/O 基础 由于 Java 中 I/O 相关的 API ,无论是 ...
- Altium Designer 10 快捷键笔记
一.放置.走线类: 1.交互式走线(Track):P T 2.铺铜(Fill):P F 3.大面积铺铜(Polygon):P G 4.自动扇出:元件封装上右键,C F 二.编辑类 1.调整铺铜(Pol ...
- Spring Boot 框架的依赖管理
Spring Boot为完成不同需求的Spring应用构建,提供了多种不同的依赖管理模板,每种模板均为一系列已完成的依赖的管理.例如在我们的入门程序中,需要构建web项目,我们只需添加spring-b ...
- shiro验证(转)
http://blog.csdn.net/tch918/article/details/13765799
- ztree模糊筛选展开选中节点
树呢是一个最简单的树,并没有做一异步加载,也就是一个筛选,然后跳到第一个符合删选的数据下,并且所有符合的都会被展开和选中.其中ztreeAry是一个模拟的本地数组json.在test.json中,如果 ...