附录 吴楚豫章之战

吴王阖闾七年(公元前508年)夏,桐国(今安徽省桐城县北)背叛了楚国。桐国的北面,原来有个小国舒鸠(今安徽舒城县),很早以前就被楚吞并了,因此舒鸠人十分怀恨楚国。

孙武、伍子胥利用桐国背叛楚国之机,派出间谍前往舒鸠,唆使他们说:“如果你们想办法诳骗楚军来攻打我国,我军便佯装惧怕楚军,假意代楚伐桐,“使楚国对 我不存戒心,这样就可以寻机消灭它。”舒鸠人为了报复楚国,便听从了吴国的误楚之计。他们编造了一套假情报,去欺蒙楚国。

楚国君臣利令智昏,果然听信了舒鸠人的谎言,在这年秋天派令尹子常率大军伐吴。孙武、伍子胥领兵迎敌。二人谋划一番后,采用明攻和暗袭相结合的战术:一方面,大张旗鼓地调集水兵战船前往豫章,以迎击楚师;另一方面又暗集军队于巢地(今安徽巢县东北)。

楚将子常得报吴军战船摆满桐国以南的江面,便误以为吴军胆怯,想用伐桐来讨好自己,于是把大军驻扎在豫章地区,静观事态的变化。这样,楚军从秋天一直驻扎 到冬天,时间一长,土气便日益低落,防备自然也开始松懈。孙武抓准时机,率吴军突然包围了楚军,打得楚军猝不及防,落荒而逃。随后,又出其不意地攻克了巢 邑,还俘虏了在巢邑驻守的楚公子繁。

这次对楚作战的胜利,又燃起了吴王阖闾进攻郢都的欲望,并故意激怒孙武和伍子胥说:“我想乘胜攻入郢都,灭掉楚国。如若不能,你们二位还有什么功劳可 言?”但孙武、伍子胥二人仍然认为现在攻郢灭楚的时机还不成熟,举行如此重大的军事行动,决不可轻忽,以免劳而无功,反为人所制。二人劝吴王隐忍待机,吴 王只好作罢,班师回国。

这一仗,孙武以其诱敌、骄敌的谋略大获全胜,帮助吴王打通了入楚的通道,为吴国日后破楚战略计划的顺利实施创造了条件。

资源下载链接为: https://pan.quark.cn/s/67c535f75d4c C语言作为一门基础且强大的编程语言,在底层系统编程和算法实现方面表现卓越,其效率与灵活性备受推崇。其中,“用指针实现的C语言排序算法”这一主题,融合了C语言的核心概念——指针,以及数据结构和算法的基础知识。指针是C语言的一大特色,它能够直接操作内存地址,从而为高效的数据操作提供了有力支持。在排序算法中,指针通常被用作迭代工具,用于遍历数组或链表,进而改变元素的顺序。 常见的排序算法,如冒泡排序、选择排序、插入排序、快速排序和归并排序等,都可以借助指针来实现。具体而言: 冒泡排序:通过交换相邻元素来实现排序。在C语言中,可以定义一个指向数组的指针,通过指针的递增或递减操作来遍历数组,比较相邻元素并在必要时进行交换。 选择排序:每次从剩余部分中找到最小(或最大)元素,然后将其与第一个未排序的元素进行交换。指针可用于标记已排序和未排序部分的边界。 插入排序:将元素插入到已排序的部分,以保持有序性。可以使用指针跟踪已排序部分的末尾,并在找到合适位置后进行插入操作。 快速排序:采用分治策略,选择一个“基准”元素,将数组分为两部分,一部分的所有元素都小于基准,另一部分的所有元素都大于基准。这一过程通常通过递归来实现,而基准元素的选择和划分过程往往涉及指针操作。 归并排序:将数组分为两半,分别对它们进行排序,然后再进行合并。在C语言中,这通常需要借助动态内存分配和指针操作来处理临时数组。 在实现这些排序算法时,理解指针的用法极为关键。指针不仅可以作为函数参数传递,从而使排序算法能够作用于任何可寻址的数据结构(如数组或链表),而且熟练掌握指针的解引用、算术运算和比较操作,对于编写高效的排序代码至关重要。然而,需要注意的是,尽管指针提供了直接操作内存的便利,但不当使用可能会引发错误,例如内存泄漏、空指针
资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 在电子设备设计中,多功能按键的实现是至关重要的技术,它能够为用户提供丰富多样的交互方式,比如单击、双击和长按等操作。本文将深入探讨如何设计一个多功能按键系统,涵盖按键识别逻辑、接口函数设计,以及如何避免使用定时器。 首先,我们需要理解多功能按键的基本原理。在硬件层面,按键通常是通过连接到微控制器(MCU)的一个输入引脚来实现的。当按键未被按下时,该引脚保持高电平;而当按键按下时,引脚会与地短路,变为低电平。因此,通过检测该引脚的状态,就可以判断按键是否被按下。 接下来,我们来探讨如何识别不同的按键操作。单击是最基本的操作,通常定义为按键快速按下并释放。双击则是在短时间内连续两次单击,而长按则是按键被按下并持续一段时间。为了实现这些功能,我们需要在软件中加入一些延时处理。例如,当我们检测到按键按下事件后,可以启动一个短暂的延时。如果在此期间再次检测到按键按下,则判断为双击;如果延时结束仍未检测到第二次按下,则认为是单击。对于长按操作,可以设定一个较长的延时,如果按键在这段时间内一直保持按下状态,则识别为长按。 接口函数设计是软件工程中的重要环节。对于多功能按键,我们可以设计以下核心接口: void Key_Init(void):初始化按键,设置中断或轮询模式,并设置初始状态。 uint8_t Key_Scan(void):扫描按键状态,返回当前按键的操作类型,例如,0表示无操作,1表示单击,2表示双击,3表示长按。 void Key_Callback(uint8_t key_event):这是一个注册的回调函数,根据Key_Scan()返回的事件类型执行相应的操作。 在实际应用中,为了避免频繁的中断请求和降低功耗,我们有时会选择使用延时而非定时器。延时函数可以通过循环计数实现,例如,使用
### 使用SheetJS生成和导出值班表的Excel文件 #### 导入必要的库 为了使用 SheetJS 库来生成和导出 Excel 文件,首先需要确保项目中已经安装了 `xlsx` 这一依赖项。可以通过以下命令完成安装: ```bash npm install xlsx --save ``` #### 数据准备 假设有一个值班表的数据结构如下所示: ```javascript const dutySchedule = [ { date: '2023-10-01', name: '张三', position: '经理' }, { date: '2023-10-02', name: '李四', position: '主管' }, { date: '2023-10-03', name: '王五', position: '员工' } ]; ``` #### 转换数据为工作簿对象 可以利用 SheetJS 提供的功能将 JSON 数据转换成 Excel 工作簿对象。以下是具体实现方式: ```javascript import * as XLSX from 'xlsx'; function exportToExcel(data, fileName) { const worksheet = XLSX.utils.json_to_sheet(data); // 将JSON数据转为工作表 const workbook = XLSX.utils.book_new(); // 创建一个新的工作簿 XLSX.utils.book_append_sheet(workbook, worksheet, "值班表"); // 添加工作表到工作簿并命名 // 设置自定义样式或其他操作可以在这一部分补充[^1] // 导出Excel文件 XLSX.writeFile(workbook, `${fileName}.xlsx`); } exportToExcel(dutySchedule, '值班表'); ``` 以上代码实现了从 JSON 数据创建一个名为 “值班表” 的 Excel 表格,并将其保存为本地文件。 #### 自定义表头与格式化 如果希望进一步定制表头或者对某些字段进行特殊处理(比如日期格式),则需手动修改列名或单元格内容后再调用 `json_to_sheet()` 方法。例如: ```javascript function formatDataForExport(rawData) { return rawData.map(item => ({ ...item, formattedDate: item.date ? new Date(item.date).toLocaleDateString() : '', // 格式化日期 upperName: (item.name || '').toUpperCase(), // 名字大写显示 })); } const formattedDutySchedule = formatDataForExport(dutySchedule); exportToExcel(formattedDutySchedule, '值班表_带格式'); ``` 这里展示了如何通过 JavaScript 对原始数据进行预处理,从而满足更复杂的需求[^2]。 #### 多个工作表支持 当需要在一个 Excel 文件里包含多个独立的工作表时,只需重复调用 `XLSX.utils.book_append_sheet()` 即可。例如要增加第二个工作表记录其他部门的信息: ```javascript const otherDepartmentData = [ { department: '技术部', leader: '赵六' }, { department: '市场部', leader: '钱七' } ]; const secondWorksheet = XLSX.utils.json_to_sheet(otherDepartmentData); // 向同一个workbook追加新的sheet XLSX.utils.book_append_sheet(workbook, secondWorksheet, "其他部门"); XLSX.writeFile(workbook, '综合报表.xlsx'); // 可选不同名称存储整个文档 ``` 这样就完成了多页签的支持[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值