本系列文章希望探讨以硬件为平台讲述C(C++)知识的一个新的途径,改变目前大多数C语言教程仅注重C语言本身的语法规则,而脱离其应用环境的现状。希望读者通过本教程的学习,能够立刻学以致用,真正将所学知识应用到项目实践中。
开发环境:Atmel Studio 7.0
硬件平台:Microchip AVR ATmega168PA
参考教材:C++程序设计(第3版) 谭浩强编著,清华大学出版社
备注:教程仅适合初学者,高手请绕过
本文将对教材P68页的例程3.9进行改进,使之能够运行于Atmel Studio。例程3.9的原题如下:
运输公司对用户计算运费,路程(s,单位公里)越远,每公里运费越低,标注如下:
s < 250 没有折扣
250 <= s < 500 2%
500 <= s < 1000 5%
1000 <= s < 2000 8%
2000 <= s < 3000 10%
3000 <= s 15%
解题思路:设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f为:
f = p * w * s * (1 - d)
如果应用switch语句,则必须找到最大公约数,我们从题中的分析可以看出最大公约数为250,这样就可将题目转化为1个单独的整型变量,以用于switch的表达式。
一、源程序(改进后)
/*
* 项目名称:运输公司计算运费
* 作者:snmplink
* 创建时间:2018-11-7
* 备注:
*/
#include <avr/io.h>
int main(void)
{
int c, s;
float p, w, d, f;
p = 100; //p为运费
w = 20; //w为重量
s = 300; //s为距离
while (1)
{
if (s >= 3000)
{
c = 12;
}
else
{
c = s / 250; //整型除以整型还是整型
}
switch (c)
{
case 1:
d = 2;
break;
case 2:
case 3:
d = 5;
break;
case 4:
case 5:
case 6:
case 7:
d = 8;
break;
case 8:
case 9:
case 10:
case 11:
d = 10;
break;
case 12:
d = 15;
break;
}
f = p * w * s * (1 - d / 100.0);
}
}
二、运行结果
三、流程图
四、注解
1、switch后面括号内的“表达式”,只能是数值类型数据。
2、当switch表达式的值与某一个case子句中的常量表达式的值相匹配时,就执行此case子句中的内嵌语句,若所有的case子句中的常量表达式的值都不能与switch表达式的值匹配,就执行default子句的内嵌语句。
3、每一个case表达式的值必须互不相同。
4、各个case和default的出现次序不影响执行结果。
5、执行完一个case子句后,流程控制转移到下一个case子句继续执行,不再进行判断。
6、如果希望跳出switch结构,可以使用break语句。
任何问题,只需在此文章的评论处留言即可,我将尽力解答,不要试图采用其它的联系方式,我一概不理会。
原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。