第1次作业答案
- 格式:doc
- 大小:263.50 KB
- 文档页数:19
数据结构第一次作业数据结构第一次作业一.单项选择题(20分)( )1.已知一算术表达式的后缀形式为ABC *+DE-/,则其中缀形式为 _________。
a、(A+B *C)/(D-E)b、A+B*C /D-Ec、(A+B*C)/D-Ed、A+B*C/(D-E)( )2.若某链表中最常用的操作是在最后一个结点之后插入一个结点和删除第一个结点,则采用________存储方式最节省运算时间(假设链表仅设有一个first指针)。
a. 单链表b. 带头结点的双循环链表c. 单循环链表d. 双链表( )3.设一个栈的输入序列为A,B,C,D,则所得到的输出序列不可能是_______。
a. A,B,C,Db. D,C,B,Ac. A,C,D,Bd. D,A,B,C( )4.若线性表最常用的操作是存取第i个元素及其直接前驱的值,则采用_____存储方式节省时间。
a.顺序表 b.双链表 c.单循环链表 d.单链表( )5.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为_______。
(1≤i≤n+1)a、O(0)b、O(1)c、O(n)d、O(n2)( )6.若指针L指向一带头结点的循环单链表的头结点,该表为空表的条件是_______为真值;a. !( L -> link );b. L == (L -> link) -> link;c. L -> link;d. L == L -> link;( )7.用数组A[0..N-1]存放一个循环队列,一元素出队时,其队头指针front的修改方法是________:a. front = (front + 1) mod N;b. front = (front - 2)mod N;c. front = front + 1;d. front = front – 2;( )8.若用Head()和Tail()分别表示取广义表的表头和表尾,广义表A=(1,2,(3,4),(5,(6,7))),则Head(Tail(Head(Tail(Tail(A))))) 。
1.第一台电子计算机是1946年在美国研制成功的,该机的英文缩写名是______;A.ENIACB.EDVACC.EDSACD.MARK2.二进制数相对应的十进制数应是______;A.123B.167C.179D.1773.具有多媒体功能的微型计算机系统,通常都配有CD-ROM,这是一种______;A.只读内存储器B.只读大容量软盘C.只读硬盘存储器D.只读光盘存储器4.计算机内部用于处理数据和指令的编码是______;A.十进制码B.二进制码C.ASCII码D.汉字编码5.计算机的硬件系统由五大部分组成,下列各项中不属于这五大部分的是______;A.运算器B.软件C.I/O设备D.控制器6.计算机软件分为系统软件和应用软件两大类,下列各项中不属于系统软件的是______;A.操作系统B.办公软件C.数据库管理系统D.系统支持和服务程序7.计算机断电后,会使存储的数据丢失的存储器是______;A.RAMB.硬盘C.ROMD.软盘8.保持微型计算机正常运行必不可少的输入/输出设备是______;A.键盘和鼠标B.显示器和打印机C.键盘和显示器D.鼠标和扫描仪9.在微型计算机中,微处理器芯片上集成的是______;A.控制器和运算器B.控制器和存储器C.CPU和控制器D.运算器和I/O接口10.自计算机问世至今已经经历了四个时代,划分时代的主要依据是计算机的______;A.规模B.功能C.性能D.构成元件11.计算机系统包括硬件系统和软件系统;关于二者之间的关系正确的说法是______;A.两个系统必须互相适合﹑配套B.硬件是首要的,软件是次要的C.软件是首要的,硬件是次要的D.只要有了硬件,软件可有可无12.下列选项中,不属于计算机多媒体功能的是______;A.编辑﹑播放视频B.播放VCDC.自动扫描D.编辑﹑播放音乐13.以下应用领域中,属于典型的多媒体应用的是______;A.科学计算B.网上购物C.音视频会议系统D.网络远端控制14.把一台普通的计算机变成多媒体计算机,要解决的关键技术不包括______;A.多媒体数据压缩编码技术B.多媒体数据压缩解码技术C.网络包分发技术D.视频音频数据的输出技术15.多媒体技术的典型应用包括______;A.计算机辅助教学CAIB.娱乐和游戏C.视频会议系统D.以上都是16.下列选项中,对多媒体技术正确的描述是______;A.能够同时获取、处理、编辑、存储和展示两个以上不同类型信息媒体的技术B.只能够展示两个以上不同类型信息媒体的技术C.能够获取、处理、编辑、存储和展示一种类型信息媒体的技术D.只能够分别处理、编辑一种类型信息媒体的技术17.要提高计算机的运行速度,应在360安全卫士中运行_____;A.木马查杀B.清理插件C.修复漏洞D.系统修复18.计算机染上病毒后不可能出现的现象是______;A.系统出现异常启动或经常“死机”B.程序或数据突然丢失C.磁盘空间变小D.电源风扇的声音突然变大19.关于360安全卫士,说法错误的是______;A.360安全卫士可以使系统的配置优化B.360安全卫士可以提高系统的运行速度C.360安全卫士可以检查和去除系统中的木马D.360安全卫士可以进行简单的图像处理20.操作系统是______;A.用户与软件的接口B.系统软件与应用软件的接口C.主机与外设的接口D.用户与计算机的接口21.下列4种说法中正确的是______;A.安装了Windows的微型计算机,其内存容量不能超过4MBB.Windows中的文件名不能用大写字母C.安装了Windows操作系统之后才能安装应用软件D.安装了Windows的计算机,硬盘常安装在主机箱内,因此是一种内存储器22.下列有关快捷方式的叙述,错误的是______;A.快捷方式改变了程序或文档在磁盘上的存放位置B.快捷方式提供了对常用程序或文档的访问捷径C.快捷方式图标的左下角有一个小箭头D.删除快捷方式不会对源程序或文档产生影响23.要移动窗口,可以将鼠标指针移到窗口的______;A.菜单栏位置上拖曳B.标题栏位置上拖曳C.状态栏位置上拖曳D.编辑栏位置上拖曳24.在Windows操作环境下,将整个屏幕画面全部复制到剪贴板中使用的键是______;A.Print ScreenB.Page UpC.Alt+F4D.Ctrl+Space25.以下四项不属于Windows操作系统特点的是______;A.图形界面B.多任务C.即插即用D.不会受到黑客攻击26.不可能在任务栏上的内容为______;A.对话框窗口的图标B.正在执行的应用程序窗口图标C.已打开文档窗口的图标D.语言栏对应图标27.在Windows中,想同时改变窗口的高度和宽度的操作是拖放______;A.窗口角B.窗口边框C.滚动条D.菜单栏28.当一个应用程序窗口被最小化后,该应用程序将______;A.被删除B.缩小为图标,成为任务栏中的一个按钮C.被取消D.被破坏29.操作系统中对文件的确切定义应该是______;A.用户手写的程序和数据B.打印在纸上的程序和数据C.显示在屏幕上的程序和数据的集合D.记录在存储介质上的程序和数据的集合30.在Windows资源管理器中选定了文件或文件夹后,若要将它们移动到不同驱动器的文件夹中,操作为______;A.按下Ctrl键拖动鼠标B.按下Shift键拖动鼠标C.直接拖动鼠标D.按下Alt键拖动鼠标31.在Windows中,排列桌面项目图标的第一步操作是______;A.鼠标右键单击任务栏空白区B.鼠标右键单击桌面空白区C.鼠标左键单击桌面空白区D.鼠标左键单击任务栏空白区32.在Windows中,对桌面上的图标______;A.可以用鼠标的拖动或打开一个快捷菜单对它们的位置加以调整B.只能用鼠标对它们拖动来调整位置C.只能通过快捷菜单来调整位置D.只需用鼠标在桌面上从屏幕左上角向右下角拖动一次,它们就会重新排列33.下列关于Windows的叙述中,错误的是______;A.删除应用程序快捷图标时,会连同其所对应的程序文件一同删除B.设置文件夹属性时,可以将属性应用于其包含的所有文件和子文件夹C.删除目录时,可将此目录下的所有文件及子目录一同删除D.双击某类扩展名的文件,操作系统可启动相关的应用程序34.文件存放在F盘的T文件夹中的G子文件夹下,它的完整文件标识符是______;A.F:\T\G\ABCB.T:\C.F:\T\G\D.E.F:\T:\35.关于Windows窗口的概念,以下叙述正确的是______;A.屏幕上只能出现一个窗口,这就是活动窗口B.屏幕上可以出现多个窗口,但只有一个是活动窗口C.屏幕上可以出现多个窗口,但不止一个活动窗口D.当屏幕上出现多个窗口时,就没有了活动窗口36.当Windows的任务栏在桌面屏幕的底部时,其右端的“通知区域”显示的是______;A.“开始”按钮B.用于多个应用程序之间切换的图标C.快速启动工具栏D.网络连接状态图标﹑时钟等37.在Word中,当前输入的文字显示在____;A.文档的开头B.文档的末尾C.插入点的位置D.当前行的行首38.Word 2010文档的默认扩展名为____;A.TXTB.EXEC.DOCXD.JPG39.在Word中,要新建文档,其第一步操作应选择____;A.“文件”选项卡B.“审阅”选项卡C.“视图”选项卡D.“插入”选项卡40.在Word中,按Del键,可删除____;A.插入点前面的一个字符B.插入点前面所有的字符C.插入点后面的一个字符D.插入点后面所有的字符41.Word具有拆分窗口的功能,要实现这一功能,应选择的选项卡是____;A.“文件”B.“开始”C.“引用”D.“视图”42.在Word中,创建表格不应该使用的方法是____;A.使用“自选绘图”工具画一个B.使用表格拖曳方式C.使用“插入表格”命令D.使用“快速表格”命令43.在Word编辑状态下,若光标位于表格外右侧的行尾处,按Enter回车键,结果为____;A.光标移到下一列B.光标移到下一行,表格行数不变C.插入一行,表格行数改变D.在本单元格内换行,表格行数不变44.如果要打开“剪贴画”窗格,则首先应执行的操作是打开____;A.“文件”选项卡B.“开始”选项卡C.“插入”选项卡D.“视图”选项卡45.Word文档中,每个段落都有自己的段落标记,段落标记的位置在____;A.段落的首部B.段落的结尾处C.段落的中间位置D.段落中,但用户找不到的位置46.Word的替换命令所在的选项卡是____;A.“文件”B.“开始”C.“插入”D.“邮件”47.在Word编辑状态下,不可以进行的操作是____;A.对选定的段落进行页眉﹑页脚设置B.在选定的段落内进行查找﹑替换C.对选定的段落进行拼写和语法检查D.对选定的段落进行字数统计48.在Word编辑状态下,改变段落的缩进方式﹑调整左右边界等操作,最直观﹑快速的方法是利用____;A.菜单栏B.工具栏C.格式栏D.标尺49.启动Word 2010以后,连续打开、、三个文档,则下面说法正确的是______;A.三个文档位于同一个文档窗口中B.三个文档位于三个不同的文档窗口中C.三个文档都处于前台D.文档位于前台50.在Word的编辑状态,为文档设置页码,首先应该使用____;A.“开始”选项卡B.“视图”选项卡C.“文件”选项卡D.“插入”选项卡。
第二章财务管理的基础知识一、计算题1.某企业年初投资100万元生产一种新产品,预计每年年末可得净收益10万元,投资年限为10年,年利率为5%。
【要求】(1)计算该投资项目年收益的现值和终值。
(2)计算年初投资额的终值。
解:(1)年收益现值P= 10×(P/A,5%,10)= 10×= (万元)年收益终值F= 10×(F/A,5%,10)=10×=(万元)(2)年初投资额终值F=100×(F/P,5%,10)=100×=(万元)2.某人准备5年后支付一笔10 000元的款项,年利率为5%。
【要求】计算此人现在应存入银行多少钱,5年的复利利息为多少元。
解:复利现值P=10000×(P/F,5%,5)=10000×=7835(元)复利利息I=F-P=10000-7835=2165(元)3.某企业2003年年初投资一个项目,预计从2006年起至2010年每年年末可获得净收益20万元,年利率为5%。
【要求】计算该投资项目年净收益的终值和现值。
解:年净收益的终值F=20×(F/A,5%,5)=20×=(万元)年收益的现值P=20×[(P/A,i,m+n)﹣(P/A,i,m) =20×[(P/A,5%,8)﹣(P/A,5%,3)=20×(﹣)=(万元)4.某企业投资一个项目,每年年初投入10万元,连续投资3年,年利率为5%。
【要求】(1)计算该项目3年后的投资总额(2)若3年的投资额于年初一次性投入,投资总额是多少?解:(1)预付年金终值F=10×(F/A,5%,3)×(1+5%)=10××=(万元)(2)预付年金现值P=10×(P/A,5%,3)×(1+5%) =10××=(万元)投资项目的年利率为8%,每季度复利一次。
第一次作业:第一章一.名词解释:1.饱和空气2.未饱和空气3.制冷4.露点温度5.含湿量6.绝对湿度7. 相对湿度二.简答题:1.空气调节的定义与客车空调装置的任务2.说明制冷与空调的区别和联系3.空气的干球温度、湿球温度和露点温度有什么区别?三者之间的关系如何?4.确定空调装置外气计算参数的方法是什么?5.空气的相对湿度与含湿量有何区别?空气的枯燥程度与吸湿能力大小由那个参数反映?6.白天空气的温度为30℃,相对湿度为50%,夜间温度下降至20℃,夜间会出现结露吗?夜间的相对湿度是多少?7.冷却、冷藏、冷冻都有什么区别?8.焓湿图由哪几种线群组成?9.列车空调系统主要由哪几个根本局部组成?各局部的用作是什么?第一次作业参考答案一.名词解释:1.饱和空气:干空气和饱和水蒸汽的混合物称为饱和空气。
2.未饱和空气:干空气和过热水蒸汽的混合物称为过饱和空气。
3.制冷:用一定的方法使某物体或空间的温度低于周围环境介质的温度,并且使其维持在某一范围内,这个过程称为制冷。
4.露点温度:指某一状态的空气,在含湿量不变时,降温至饱和状态时的温度。
5.含湿量:随一公斤干空气同时存在的水蒸汽质量,称为湿空气的含湿量〔g〕。
6.绝对湿度:每立方米湿空气中所含水蒸汽的质量,称为空气的绝对湿度。
7.相对湿度:一立方米湿空气中所含水蒸汽的质量,与同一温度下饱和空气中所含水蒸汽质量的比值称为相对湿度。
二.简答题:1. 空气调节的定义与客车空调装置的任务答:空气调节:把经过一定处理后的空气,以一定的方式送入室内,使室内空气的温度、相对湿度、气流速度和干净度等控制在适当范围内的专门技术。
客车空调装置的任务是将一定量的车外新鲜空气和车内再循环空气混合后,经过过滤、冷却或加热、减湿或加湿等处理,以一定的流速送入车内,并将车内一定量的污浊空气排出车外。
答:制冷:用人工的方法在一定时间和空间内将某物体或流体冷却,使其温度低于周围环境介质的温度,并保持这个低温的过程。
形式逻辑第1次作业(总7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--(注意:若有主观题目,请按照题目,离线完成,完成后纸质上交学习中心,记录成绩。
在线只需提交客观题答案。
)本次作业是本门课程本学期的第1次作业,注释如下:一、单项选择题(只有一个选项正确,共5道小题)1. 下列几组概念中具有矛盾关系的是()(A) 支持赞同(B) 收入家庭收入(C) 交通费住宿费(D) 普遍特殊正确答案:D解答参考:2. 下列几组概念中具有交叉关系的是()(A) 正数负数(B) 电脑台式电脑(C) 非国产手机名牌手机(D) 朋友同学正确答案:B解答参考:3. 下列几组概念中具有真包含关系的是()(A) 有情无情(B) 森林树(C) 中国台湾(D) 情感伤感正确答案:B解答参考:4. “任何困难都是不是不能克服的”这个判断的()(A) 主谓项都周延(B) 主谓项都不周延(C) 主项周延,谓项不周延(D) 主项不周延,谓项周延正确答案:A解答参考:5. 下列各组判断中,具有反对关系的是()(A) “所有的S都是P”与“S都不是P”(B) “所有的S都是P”与“这个S是P”(C) “所有的S都不是P”与“S都不是P”(D) “有的S是P”与“S不都是P”正确答案:A解答参考:二、判断题(判断正误,共4道小题)6.明天可能不下雨。
所以,每天不必然下雨。
正确答案:说法正确解答参考:正确。
根据矛盾对当模态推理的规律,可能不p真,而必然p假;“必然不p”等值于“不必然p”。
7.今天不必然出交通事故。
所以,今天可能出交通事故。
正确答案:说法正确解答参考:正确。
根据矛盾对当模态推理的规律,必然不p假,而可能p真;“不必然不p”等值于“可能p”。
8.明天可能下雨。
所以,明天必然下雨。
正确答案:说法错误解答参考:错误。
根据从属对当模态推理的规律,下位真上位不定,“可能p”(下位真)推不出“必然p”(上位真)。
第一次作业答案一、不定项选择题1、甲忘带家门钥匙,邻居乙建议甲从自家阳台攀爬到甲家,并提供绳索以备不测,丙、丁在场协助固定绳索。
甲在攀越时绳索断裂,从三楼坠地致重伤。
各方当事人就赔偿事宜未达成一致,甲诉至法院。
下列哪种说法是正确的?(2006年司法考试试卷三第11题)A.法院可以酌情让乙承担部分赔偿责任B.损害后果应由甲自行承担C.应由乙承担主要责任,丙、丁承担补充责任D.应由乙、丙、丁承担连带赔偿责任【答案及解析】A。
本题的考点主要是一般侵权行为、过错责任。
丙、丁二人在主观上对于绳索断裂导致甲坠地受伤并无故意或过失,故选项C、D可排除。
而乙因建议甲攀越自家阳台并提供绳索,应认为对于损害的发生有一定过失,因此应承担一定责任,但主要过错在甲本人,故A选项说法正确。
2、李某与黄某未婚同居生子,取名黄小某。
后李某和黄某分手,分别建立了家庭。
黄小某长大后,进入演艺界,成为一名当红歌星。
星星报社专职记者吴某(工作关系在报社)探知这一消息后,撰写文章将黄小某系私生子的事实公开报道,给黄小某造成极大痛苦。
下列哪些选项是正确的?A.该报道侵害了黄小某的隐私权B.该报道侵害了黄小某的荣誉权C.吴某应对黄小某承担侵权责任D.星星报社应对黄小某承担侵权责任【答案及解析】AD。
侵害名誉权、荣誉权与侵害隐私权的最大区别是,前者需要捏造事实进行侮辱诽谤,后者只需要未经权利人同意公开披露就行了。
通俗地说,侵害隐私不但不需要捏造事实,恰恰要求披露的是真实的事实。
本题中,吴某(工作关系在报社)将黄小某的私人信息公开报道,属于事实,没有进行捏造,所以不构成侵犯名誉权、荣誊权,但确实侵害了黄小某的隐私权,故A项正确。
《人身损害赔偿解释》第8条第1款规定:法人或者其他组织的法定代表人、负责人以及工作人员,在执行职务中致人损害的,依照《民法通则》第121条的规定,由该法人或者其他组织承担民事责任。
上述人员实施与职务无关的行为致人损害的,应当由行为人承担赔偿责任。
第一章《软件工程概述》作业答案一、名词解释1.软件软件是计算机程序以及开发、使用和维护程序所需要的所有文档。
软件是包括程序、数据及其相关文档的完整集合。
2.软件危机软件生产的进度、数量、质量、成本满足不了社会对软件的需求量和希望的现象,称为“软件危机”。
软件工程IEEE[IEE93]:软件工程是将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程及上述方法的研究。
4.软件生存周期软件生存周期是指一个软件从提出开发要求开始直到不再使用(报废)为止的整个时期。
5.软件过程模型软件过程指为获得高质量软件所需要完成的一系列任务以及完成这些任务的工作步骤。
过程还规定了运用的方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施、任务完成的标志等。
软件过程模型也叫软件生存期模型、软件工程范型,是软件过程的一种抽象表示。
二、填空题1、在信息处理和计算机领域内,一般认为软件是程序、数据和文档的集合。
2、软件生产的发展经历了程序设计时代、程序系统时代和软件工程时代,各时代的生产方式分别是个体、作方式和工程化。
3、软件生存周期的8个阶段分别是问题定义、可行性研究、需求分析、概要设计、详细设计、编码与模块测试、综合测试、维护。
4、软件工程是利用工程化的原理和方法来进行开发、维护和管理软件的一门学科。
5、描述软件开发过程中各种活动如何执行的模型称为软件过程模型。
6、瀑布模型不适应需求可变的软件开发,只有到最后才能见到整个软件系统。
7、软件产品的生产主要是研制,软件产品的成本主要体现在人力成本上。
8、软件工程面临的问题有软件费用、可靠性、可维护性、生产率。
三、单项选择题1、软件文档是( C )。
A.程序B.工具C.文书和资料D.数据2、软件是一种( B )性工业产品A.理论B.知识(或逻辑)C.消耗D.体力3、与计算机科学的理论研究不同,软件工程是一门( B )的学科。
A.理论性 B.工程性 C.原理性 D.心理性4、软件工程与计算机科学的性质不同,软件工程着重于( B )A.理论研究 B.建造软件系统 C.原理探讨 D.原理的理论5、软件工程学科出现的直接原因是( C )。
习题3.推广本章第一节给出的产生线段的整数Bresenham算法,去掉0<=m<=1和x1<x2的限制,使能完成对任意线段的扫描转换。
解答:Bresenham画线算法使用实际直线上点与可选像素点之间的距离差作为判别式。
假设要绘制的空间任一直线段的两个端点为(x1, y1)和(x2, y2),如果保证x1≤x2,则Bresenham画线算法的处理分为图3.1中所示的四种情况。
第(1)种情况,直线的斜率m处于0和1之间,当x增量为1像素时,y增量在0与1之间,此时下一个可选像素点为P1(x p+1, y p)或P2(x p+1,y p+1)。
此时在x = x p +1处直线上点的y值是y = m(x p + 1) + b,该点到P1(x p+1, y p)和P2(x p+1,y p+1)的距离分别为d1和d2:d1 = y – y p = m(x p + 1) + b - y pd2 = (y p + 1) – y = (y p + 1) – m(x p + 1) – b这两个距离的差为:d = d1– d2 = 2m(x p + 1) – 2y p + 2b – 1若d>0,则下一个像素点取P2(x p+1,y p+1);若d<0,则下一个像素点取P1(x p+1, y p);若d=0,则下一个像素点可取这两个像素点中任意一个。
为了简便d的符号的计算,可引入一个新的判别量p p:p p = Δxd = Δx(d1– d2) = 2Δy·x p– 2Δx·y p + c其中,Δx = x2– x1,Δy = y2– y1,c = 2·Δy +Δx(2b – 1)。
因为这里Δx>0,故p p与d 同号,可以作为判别量。
下面看如何从p p计算p p+1。
将上式中的p换成p+1,有:p p+1 = 2Δy·x p+1– 2Δx·y p+1 + c因为x p+1 = x p + 1,可知:p p+1– p p = 2Δy – 2Δx (y p+1– y p)当p<0时,取P1(x p+1, y p),此时y p+1 = y p,所以p p+1 = p p + 2Δy;否则,取P2(x p+1,y p+1),此时y p+1 = y p + 1,所以p p+1 = p p + 2(Δy –Δx)。
此时还需要看判别量p1的初始值,因为线段上第一个像素点可以取起点(x1, y1),所以有:p1 = 2Δy·x1 - 2Δx·y1 + 2·Δy +Δx(2b – 1)因为y1 = (Δy /Δx)x1 + b,可计算出:p1 = 2Δy –Δx其它三种情况都可以用此方法来完成处理。
第(2)种情况,直线的斜率m大于1,当y增量为1像素时,x增量在0与1之间,此时下一个可选像素点为P1(x p, y p+1)或P2(x p+1,y p+1)。
在y = y p +1处直线上点的x值是x = (y p + 1 – b)/m,该点到P1(x p+1, y p)和P2(x p+1,y p+1)的距离分别为d1和d2:d1 = x – x p = (y p + 1 – b)/m - x pd2 = (x p + 1) – x = (x p + 1) – (y p + 1 – b)/m则这两个距离的差为:d = d1– d2 = 2(y p + 1 – b)/m – 2x p– 1因为Δy>0,为简便运算引入新的判别量p p:p p = Δyd = Δy(d1– d2) = 2Δx·y p– 2Δy·x p + c其中,Δx = x2– x1,Δy = y2– y1,c = 2·Δx(1 – b) –Δy。
下面看如何从p p计算p p+1。
将上式中的p换成p+1,则:p p+1 = 2Δx·y p+1– 2Δy·x p+1 + c因为y p+1 = y p + 1,可知:p p+1– p p = 2Δx – 2Δy (x p+1– x p)当p<0时,取P1(x p, y p+1),此时x p+1 = x p,所以p p+1 = p p + 2Δx;否则,取P2(x p+1,y p+1),此时x p+1 = x p + 1,所以p p+1 = p p + 2(Δx –Δy)。
计算判别量p1的初始值时,因为线段上第一个像素点可以取起点(x1, y1),所以有:p1 = 2Δx·y1 - 2Δy·x1 + 2·Δx(1 – b) –Δy因为y1 = (Δy /Δx)x1 + b,可计算出:p1 = 2Δx –Δy第(3)种情况,直线的斜率m处于0和-1之间,当x增量为1像素时,y减量在0与1之间,此时下一个可选像素点为P1(x p+1, y p)或P2(x p+1,y p–1)。
在x = x p+1处直线上点的y 值是y = m(x p + 1) + b,该点到P1(x p+1, y p)和P2(x p+1,y p–1)的距离分别为d1和d2:d1 = y p– y = y p– m(x p + 1) – bd2 = y – (y p - 1) = m(x p + 1) + b – (y p - 1)则这两个距离的差为:d = d1– d2 = 2y p– 2m(x p + 1) – 2b + 1因为Δx>0,为简便运算引入新的判别量p p:p p = Δxd = Δx(d1– d2) = 2Δx·y p– 2Δy·x p + c其中,Δx = x2– x1,Δy = y2– y1,c =Δx(1 – 2b) – 2·Δy。
下面看如何从p p计算p p+1。
将上式中的p换成p+1,有:p p+1 = 2Δx·y p+1– 2Δy·x p+1 + c因为x p+1 = x p + 1,可知:p p+1– p p = 2Δx (y p+1– y p) – 2Δy当p<0时,取P1(x p+1, y p),此时y p+1 = y p,所以p p+1 = p p– 2Δy;否则,取P2(x p+1,y p–1),此时y p+1 = y p– 1,所以p p+1 = p p– 2(Δx + Δy)。
计算判别量p1的初始值时,因为线段上第一个像素点可以取起点(x1, y1),所以有:p1 = 2Δx·y1 - 2Δy·x1 + Δx(1 – 2b) – 2·Δy因为y1 = (Δy /Δx)x1 + b,可计算出:p1 = Δx – 2Δy第(4)种情况,直线的斜率m小于-1,当y减量为1像素时,x增量在0与1之间,此时下一个可选像素点为P1(x p, y p–1)或P2(x p+1,y p–1)。
在y = y p– 1处直线上点的x值是x = (y p–1 – b)/m,该点到P1(x p, y p–1)和P2(x p+1,y p–1)的距离分别为d1和d2:d1 = x – x p = (y p– 1 – b)/m - x pd2 = (x p + 1) – x = (x p + 1) – (y p– 1 – b)/m则这两个距离的差为:d = d1– d2 = 2(y p– 1 – b)/m – 2x p– 1因为这里-Δy>0,为简便运算引入新的判别量p p:p p = -Δyd = -Δy(d1– d2) = 2Δy·x p– 2Δx·y p + c其中,Δx = x2– x1,Δy = y2– y1,c = 2·Δx(1 + b) + Δy。
下面看如何从p p计算p p+1。
将上式中的p换成p+1,有:p p+1 = 2Δy·x p+1– 2Δx·y p+1 + c因为y p+1 = y p– 1,可知:p p+1– p p = 2Δx + 2Δy (x p+1– x p)当p<0时,取P1(x p, y p–1),此时x p+1 = x p,所以p p+1 = p p + 2Δx;否则,取P2(x p+1,y p–1),此时x p+1 = x p + 1,所以p p+1 = p p + 2(Δx + Δy)。
计算判别量p1的初始值时,因为线段上第一个像素点可以取起点(x1, y1),所以有:p1 = 2Δy·x1 - 2Δx·y1 + 2·Δx(1 + b) + Δy因为y1 = (Δy /Δx)x1 + b,可计算出:p1 = 2Δx + Δy现在我们可以写出Bresenham画线算法的实现函数,在CDraw类中添加如下的成员函数:public://Bresenham画线算法void BresenhamLine(CDC* pDC, int x1, int y1, int x2, int y2, COLORREF color);参数x1、y1、x2、y2为直线段的两个端点的坐标;参数pDC是设备环境对象指针;参数color为绘制直线段的颜色。
实现代码如下://Bresenham画线算法void CDraw::BresenhamLine(CDC *pDC, int x1, int y1, int x2, int y2, COLORREF color) {int x,y,dx,dy,p;//传入端点坐标x值相等if (x1 == x2){if (y1 < y2){for (int i=y1;i<=y2;i++)pDC->SetPixel(x1,i,color);}else{for (int i=y2;i<=y1;i++)pDC->SetPixel(x1,i,color);}return;//斜率判断,斜率绝对值大于1,则m为false,否则为true BOOL m = (fabs(y2-y1)<=fabs(x2-x1));//如果x1大于x2,交换坐标值if (x1 > x2){p=x1;x1=x2;x2=p;p=y1;y1=y2;y2=p;}x = x1;y = y1;dx = x2 - x1;dy = y2 - y1;//斜率绝对值小于等于1if (m){//第一种情况,y递增if (y1 <= y2){p = (dy<<1) - dx;while (x <= x2){pDC->SetPixel(x,y,color);if (p < 0){x++;p=p+ (dy<<1);}else{x++;y++;p=p+((dy-dx)<<1);}}}//第三种情况,y递减else{p = dx – (dy<<1);while (x <= x2){pDC->SetPixel(x,y,color);if (p < 0){x++;p=p-(dy<<1);}else{x++;y--;p=p-((dy+dx)<<1);}}}}//斜率绝对值大于1{//第二种情况,y递增if (y1 <= y2){p = (dx<<1) - dy;while (y <= y2){pDC->SetPixel(x,y,color);if (p < 0){y++;p=p+(dx<<1);}else{x++;y++;p=p+((dx-dy)<<1);}}}//第四种情况,y递减else{p = (dx<<1) + dy;while (y >= y2){pDC->SetPixel(x,y,color);if (p < 0){y--;p=p+(dx<<1);}else{x++;y--;p=p+((dx+dy)<<1);}}}}}此算法也需要注意四种情况的循环条件。