表是几乎所有数据结构课本都要讨论的非常有用的数据结构。表驱动方法出于特定的目的来使用表,下面将对此进行讨论。
程序员们经常谈到"表驱动"方 法,但是课本中却从未提到过什么是"表驱动"方法。表驱动方法是一种使你可以在表中查找信息,而不必用很多的逻辑语句(if或Case)来把它们找出来的 方法。事实上,任何信息都可以通过表来挑选。在简单的情况下,逻辑语句往往更简单而且更直接。但随着逻辑链的复杂,表就变得越来越富有吸引力了,通过下面 的这个例子大家就能知道什么是所谓的表驱动方法了。
程序员们经常谈到"表驱动"方 法,但是课本中却从未提到过什么是"表驱动"方法。表驱动方法是一种使你可以在表中查找信息,而不必用很多的逻辑语句(if或Case)来把它们找出来的 方法。事实上,任何信息都可以通过表来挑选。在简单的情况下,逻辑语句往往更简单而且更直接。但随着逻辑链的复杂,表就变得越来越富有吸引力了,通过下面 的这个例子大家就能知道什么是所谓的表驱动方法了。
假设你需要一个可以返回每个月中天数的函数(为简单起见不考虑闰年),一个比较笨的方法是一个大的if语句:
int iGetMonthDays(int iMonth)
{
int iDays;
if(1 == iMonth) {iDays = 31;}
else if(2 == iMonth) {iDays = 28;}
else if(3 == iMonth) {iDays = 31;}
else if(4 == iMonth) {iDays = 30;}
else if(5 == iMonth) {iDays = 31;}
else if(6 == iMonth) {iDays = 30;}
else if(7 == iMonth) {iDays = 31;}
else if(8 == iMonth) {iDays = 31;}
else if(9 == iMonth) {iDays = 30;}
else if(10 == iMonth) {iDays = 31;}
else if(11 == iMonth) {iDays = 30;}
else if(12 == iMonth) {iDays = 31;}
return iDays;
}
例
可以看出本来应该很简单的一件事情,代码却是这么冗余,解决这个的办法就可以用表驱动方法。
static int aiMonthDays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
/* 我们可以先定义一个静态数组,这个数组用来保存一年十二个月的天数 */
int iGetMonthDays(int iMonth)
{
return aiMonthDays[(iMonth - 1)];
}
int iGetMonthDays(int iMonth)
{
int iDays;
if(1 == iMonth) {iDays = 31;}
else if(2 == iMonth) {iDays = 28;}
else if(3 == iMonth) {iDays = 31;}
else if(4 == iMonth) {iDays = 30;}
else if(5 == iMonth) {iDays = 31;}
else if(6 == iMonth) {iDays = 30;}
else if(7 == iMonth) {iDays = 31;}
else if(8 == iMonth) {iDays = 31;}
else if(9 == iMonth) {iDays = 30;}
else if(10 == iMonth) {iDays = 31;}
else if(11 == iMonth) {iDays = 30;}
else if(12 == iMonth) {iDays = 31;}
return iDays;
}
例
可以看出本来应该很简单的一件事情,代码却是这么冗余,解决这个的办法就可以用表驱动方法。
static int aiMonthDays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
/* 我们可以先定义一个静态数组,这个数组用来保存一年十二个月的天数 */
int iGetMonthDays(int iMonth)
{
return aiMonthDays[(iMonth - 1)];
}
相关推荐
本篇将详细介绍表驱动的LL(1)语法分析程序的设计、实现及其关键概念。 1.1 目的与意义 设计一个表驱动的LL(1)语法分析程序旨在深化对预测分析法的理解,掌握如何构建和使用预测分析表。这一过程不仅锻炼了编程能力...
本文将详细介绍表驱动法的基本原理、实现方式及其在实际项目中的应用。 #### 二、数据驱动编程概述 数据驱动编程的核心思想是通过数据来控制程序的行为,而不是通过复杂的逻辑控制结构。这种方式能够极大地简化程序...
**L298N驱动板**是用于控制直流电机和步进电机的一种集成电路,由意法半导体(STMicroelectronics)制造。它具有高电流驱动能力,适用于多种电机控制应用,如机器人、自动化设备和模型制作等领域。在本篇文章中,...
极智魔法师G1950鼠标驱动是一款为极智魔法师G1950游戏鼠标准备的驱动程序。...极智魔法师G1950鼠标驱动官方介绍汇集世界顶级魔兽公会星辰的操控智慧,提供卓越的游戏体验!全部按键可,欢迎下载体验
本文将详细介绍JLink驱动和ST-LINK驱动,以及如何使用这些驱动工具进行有效的开发工作。 首先,JLink是由SEGGER公司推出的调试工具,它支持多种处理器架构,包括ARM、RISC-V、MIPS等。JLink驱动是运行JLink软件的...
本文将详细介绍LCD液晶显示屏常用的静态驱动法和动态驱动法。 首先,静态驱动法是针对笔段型LCD液晶显示器件的一种基础驱动方法。笔段型LCD由背电极和段电极组成,后者通常用于显示数字和字符,电极的结构特点是在...
本文将详细介绍ST-LINK官方驱动的下载及安装过程,并涉及相关知识点。 1. **ST-LINK驱动作用**: ST-LINK驱动程序是用于在Windows操作系统中识别并正确通信ST-LINK设备的关键软件。没有这个驱动,电脑无法识别ST-...
下面是这些驱动的详细介绍: 1. BC20USB驱动:BC20是移远通信推出的一款4G模块,通常用于实现无线通信功能。其USB驱动主要用于将BC20模块连接到电脑上,进行数据传输或固件升级。驱动安装后,开发者可以通过USB接口...
在电子专业C语言课程教学中,采用单片机项目驱动法是一种有效的教学方法。该方法通过实际的单片机项目来驱动学生学习C语言的基础知识和编程思想,从而提高学生的学习兴趣和创新能力。在介绍这种方法的应用时,文中...
**基于问题和任务驱动教学法** **一、教学法概述** 1. **基于问题学习(Problem-Based Learning,PBL)**是一种以问题为导向的教学方法,它鼓励学生通过探索实际问题来学习新知识和技能。这种方法强调学生在面对...
为了解决这些问题,任务驱动法作为一种新的教学模式被引入到高职院校建筑CAD课程中。 任务驱动法(Task-Driven Approach)是指在教学活动中,教师根据教学目标设计与实际情境相关联的任务,学生在完成任务的过程中...
STLINK驱动下载安装包主要针对的是STMicroelectronics(意法半导体)生产的ST-LINK调试器/编程器。ST-LINK是用于STM8和STM32微控制器开发的一种接口设备,它能够帮助开发者进行程序的上传、调试以及芯片的烧录工作。...
任务驱动法作为一种有效的教学方法,在中职CAD教学中尤为关键。 任务驱动法是一种教学方法,它以任务为核心,通过引导学生在一个个具体的任务中学习知识和技能。这种方法强调学生的主体地位,让学生在完成任务的...
总之,这份手册全面介绍了AQMD6020BLS直流有感无刷电机驱动器的功能、接口定义、使用方法以及控制方式等各方面知识,是使用者深入了解和应用这款驱动器的重要参考资料。用户可根据手册的指导,将驱动器与直流有感无...
【任务驱动法在程序设计教学中的应用】 任务驱动法是一种以任务为中心的教学方法,强调学生在实际操作中学习和理解知识。在程序设计教学中,这种方法尤其有效,因为它鼓励学生通过解决具体问题来掌握编程概念和技术...
细分数的设定需要用户根据驱动器外盒上的选择表进行拨码开关调整,以便实现不同细分下的步距角计算。电流大小设定则通过拨码开关4、5、6进行调节,对应不同的电流输出。 脱机功能(EN)允许电机转子处于自由状态,...
液晶显示器常用的驱动方法有静态驱动法和动态驱动法。在静态驱动法中,每个像素都由一个晶体管直接控制;而在动态驱动法中,多行或多个像素共用晶体管,通过扫描的方式进行显示控制。 接着,在STN液晶显示器驱动器...
"水流驱动超大叶轮发电法兼河道疏浚利用法"是一种结合了可再生能源与环境保护的创新技术,它巧妙地将河流的动力转化为电能,并通过疏浚过程优化河道管理,实现资源的高效利用。 首先,我们来了解水流驱动超大叶轮...
以下将对这些硬件及其驱动程序进行详细介绍。 1. **BC95模组**:BC95是一款基于Quectel公司开发的NB-IoT(窄带物联网)芯片的无线通信模块,广泛应用于低功耗广域网络(LPWA)通信。驱动程序主要负责处理BC95模组的初始...