算法与数据结构剖析

2025-04-26 版权声明 我要投稿

算法与数据结构剖析(推荐7篇)

算法与数据结构剖析 篇1

070401301507计本(3)班张浩

本学期开设的《数据结构与算法》课程已经告一段落,现就其知识点及其掌握情况、学习体会以及对该门课程的教学建议等方面进行学习总结。

一、《数据结构与算法》知识点

在课本的第一章便交代了该学科的相关概念,如数据、数据元素、数据类型以及数据结构的定义。其中,数据结构包括逻辑结构、存储结构和运算集合。逻辑结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序存储、链接存储、索引存储和散列存储四类。紧接着介绍了一些常用的数据运算。最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能分析。

第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、求表长、排序、元素的查找、插入及删除等。元素查找方法有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。最后介绍了顺序串的概念,重点在于串的模式匹配。

链表中数据元素的存储不一定是连续的,还可以占用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除不需要移动元素,给算法的效率带来较大的提高。链表这一章中介绍了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结构、功能和基本算法。

堆栈与队列是两种运算受限制的线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先出”的规则,教材中列出了两种结构的相应算法,如入栈、出栈、入队、出队等。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。

第六章介绍了特殊矩阵和广义表的概念与应用。其中,特殊矩阵包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵,书中分别详细介绍了它们的存储结构。稀疏矩阵的应用包括转置和加法运算等。最后介绍了广义表的相关概念及存储结构,关于它的应用,课本中举了m元多项式的表示问题。

第七章二叉树的知识是重点内容。在介绍有关概念时,提到了二叉树的性质以及两种特殊的二叉树:完全二叉树和满二叉树。接着介绍二叉树的顺序存储和链接存储以及生成算法。重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递归算法)和线索二叉树。二叉树的应用:基本算法、哈弗曼树、二叉排序树和堆排序。

树与二叉树是不同的概念。教材介绍了树和森林的概念、遍历和存储结构,还有树、森林和二叉树的相互关系,树或森林怎样转化成二叉树,二叉树又如何转换为树和森林等算法。散列结构是一种查找效率很高的一种数据结构。本章的主要知识点有:散列结构的概念及其存储结构、散列函数、两种冲突处理方法、线性探测散列和链地址散列的基本算法以及散列结构的查找性能分析。

最后一章介绍了图的概念及其应用,是本书的难点。图的存储结构的知识点有:邻接矩阵、邻接表、逆邻接表、十字链表和邻接多重表。图的遍历包括图的深度优先搜索遍历和广度优先搜索遍历。其余知识点有:有向图、连通图、生成树和森林、最短路径问题和有向无环图及其应用。有向无环图重点理解AOV网和拓扑排序及其算法。

二、对各知识点的掌握情况

总体来看,对教材中的知识点理解较为完善,但各个章节均出现有个别知识点较为陌生的现象。现将各个章节出现的知识点理解情况列举如下。

第一章中我对数据和数据结构的概念理解较为透彻,熟悉数据结构的逻辑结构和存储结构。而对算法的时间、空间性能分析较为模糊,尤其是空间性能分析需要加强。

第二章,顺序表的概念、生成算法理解较为清晰,并且熟悉简单顺序查找和二分查找,对分块查找较为含糊;排序问题中,由于冒泡排序在大一C语言课上已经学习过,再来学习感觉很轻松。对插入排序和选择排序理解良好,但是,在实际运用中仍然出现明显不熟练的现象。由于在归并排序学习中感觉较吃力,现在对这种排序方法仍然非常模糊,所以需要花较多的时间来补习。此外串的模式匹配也是较难理解的一个地方。

链表这一章中,除对双向循环链表这一知识点理解困难之外,其他的知识点像单链表的建立和基本算法等都较为熟悉。

接下来的有关堆栈以及队列的知识点比较少,除有关算法较为特殊以外,其余算法都是先前学过的顺序表和链表的知识,加上思想上较为重视,因此这部分内容是我对全书掌握最好的一部分。不足之处仍然表现在算法的性能分析上。

在学习第六章时感觉较为吃力的部分在于矩阵的应用上,尤其对矩阵转置算法的C语言描述不太理解。稀疏矩阵相加算法中,用三元组表实现比较容易理解,对十字链表进行矩阵相加的方法较为陌生。

第七章是全书的重点,却也有一些内容没有完全理解。在第一节基本概念中,二叉树的性质容易懂却很难记忆。对二叉树的存储结构和遍历算法这部分内容掌握较好,能够熟练运用,而对于二叉树应用中的哈弗曼树却比较陌生。

第八章内容较少,牵涉到所学的队列的有关内容,总体来说理解上没有什么困难,问题依旧出现在算法的性能分析上。

散列结构这一章理解比较完善的知识点有:基本概念和存储结构。散列函数中直接定址法和除留余数法学得比较扎实,对数字分析法等方法则感觉较为陌生。对两种冲突处理的算法思想的理解良好,问题在于用C语言描述上。

最后一章,图及其应用中,图的定义、基本运算如图的生成等起初理解有困难,但随着学习深入,对它的概念也逐步明朗起来。邻接矩阵、邻接表和逆邻接表掌握较好,而对十字链表和邻接多重表则较为陌生。感觉理解较为吃力的内容还有图的遍历(包括深度和广度优先遍历),最小生成树问题也是比较陌生的知识点。最短路径和AOV网学习起来感觉比较轻松,而对于C语言描述却又不大明白。

三、学习体会

接触这门课程以前,我对该课程所学的内容有许多疑点,例如:这门课是否是在介绍一种新的计算机语言?如果不是,那么学习这门课程的用途是什么?为什么市面上各种介绍数据结构的资料采用了不同的计算机语言,如C、C++还有Java?我的C语言学得不好,对学习这门课是否有影响„„

在学习伊始,老师就明确提出它不是一种计算机语言,不会介绍新的关键词,而是通过学习可以设计出良好的算法,高效地组织数据。一个程序无论采用何种语言,其基本算法思想不会改变。联系到在大一和大二上学期学习的C和C++语言,我深刻认识到了这一点。“软件开发好比写作文,计算机语言提供了许多华丽的辞藻,而数据结构则考虑如何将这些辞藻组织成一篇优秀的文章来。”在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段——机器可识别的描述。

这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到

自己的程序中再加以必要的连接以完成程序的编写。针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。

四、对《数据结构与算法》课程教学的建议

1、建议在上课过程中加大随堂练习的分量,以便学生能当堂消化课堂上学习的知识,也便于及时了解学生对知识点的掌握情况,同时有助于学生保持良好的精神状态。

2、建议在课时允许的情况下,增加习题课的分量,通过课堂的习题讲解,加深对知识点的掌握,同时对各知识点的运用有一个更为直观和具体的认识。

算法与数据结构剖析 篇2

SDH数字微波在我国的应用, 大约始于上世纪80年代后, 邮电系统在全国大面积的将模拟微波改造为SDH数字微波 (全国的干线网) , 成为那个时代国内最先进、高速的大容量的地面通信系统。到目前, 由于光通信设备及光纤价格的下降, 光纤通信日益普及, 电信原有的数字微波传输系统差不多已全部关机。但是, 在光纤通信日益发展和完善的今天, 微波通信仍有着光纤及其它传输方式不可替代的优点, 微波通信具有良好的抗灾性能, 对水灾、风灾以及地震等自然灾害, 微波通信一般都不受影响。目前SDH数字微波在当前信息高速公路上正起着它应有的作用, 发挥着它的优势。在广电系统, 全国绝大部分地方仍在使用SDH数字微波网, 广东应用SDH数字微波已有五年, 在全省广播电视节目无线覆盖中发挥着重要的作用。为了更好地了解、掌握和应用好SDH数字微波系统, 本人通过剖析其网管结构, 讲述如何应用, 同时介绍网管系统几种常见问题的处理方法, 与广电同行切磋、交流。

1 SDH数字微波系统结构

SDH数字微波系统由SDH数字微波设备和分插复用 (ADM) 设备组成, 它其实就是一个用数字微波取代了光纤的小容量SDH传输网。由于受地理位置的影响, 其网络组成大多是线性的, 在一个大的网络里, 也可能会出现环, 但对很多站点来说, 是不具备成环条件的, 现就广东广电新建设的SDH数字微波系统来说, 其网络路由图如图1。

从路由上可知, 整个网络有两个环 (一个是珠三环, 一个是北环) 和三条线性的链路。

2 广东广电SDH数字微波网管原理和配置及其特点

由于SDH传输协议里定义了很多用于管理和性能指标监测等的开销字节, SDH数字微波的网管是带内网管, 其数据是通过传输通道 (SDH帧) 内的管理字节进行传输, 网元只是在主用信道或备用信道间提取和插入网管数据信息。在SDH数字微波网管系统中, 跟传统的SDH传输网一样, 也分再生段和复用段, 只是在SDH数字微波中对再生段的管理比在光传输网络中多和复杂。一般情况下, 再生段的网管信息, 只提供对网络中的再生设备, 在SDH数字微波中, 那就是数字微波设备;复用段的网管信息, 只负责对网络中的复用设备进行管理, 在SDH数字微波中, 就是复用设备 (分插复用设备) 。在广东广电的SDH数字微波系统中, 使用的是ALCATEL的微波和复用设备, 其再生段的网管信息通信如图2, 其复用段的网管信息通信如图3。

从图中可知, SDH数字微波的网管信息, 是通过SDH信号帧结构中的D1 D12字节进行信号的传输, 中心站点的网管服务器通过QB3接口与中心站点的网关网元进行全网网元 (设备) 的管理信息收集和向所管理的网元发送操作指令等;系统的小型维护终端则通过设备上的F接口, 实现对设备的管理和操作。其中, D1 D3字节用于对再生段设备 (网元) 的管理;D4 D12字节用于对复用段设备 (网元) 的管理。

从上节对广东广电SDH数字微波结构中可知, 目前, 除珠三环的网管信息有环的保护外, 另一个环 (北环) , 由于其还带有一个链路, 在配置该环上的网管信息通路时, 就没有按环来配置, 而是将环一分为二 (对网管信息通路) , 一部分分到北线, 一部分被分到西线, 分别由网管系统的两个域进行管理。整个SDH数字微波网络系统的网管配置如图4。

在图4中, 用不同颜色标识网管系统的不同域 (管理进程) , 系统共有4个进程对整个网络的所有网元进行管理, 其中有一个进程, 构成环路, 从而实现了网管信息的环路保护。从图中我们也不难发现, SDH数字微波的网管系统, 主要还是线状的。

3 SDH数字微波网管在广东广电实际应用中存在的问题和解决办法

1.线性网管存在的问题及解决办法

从SDH数字微波系统的结构中, 干线微波一般都配置成N:1系统, 在广东广电的SDH数字微波系统是3:1。系统中的CH1波导 (主用1波导) 和CH0波导 (备用波导) 都可用于传输网管信息, 正常情况 (波导均正常) 下, 对于再生段的网管信息在CH1上进行传输, 因为SDH数字微波设备只能从CH1和CH0通道进行网管信息的插入和提取。而对于复用段的网管信息, 则可以在与其相连接的通道上进行传输, 在SDH网络上, 一跳设备的两端配置成同一通道就可以了。在实际环境中, 这种线状的结构, 一旦传输链路中断, 因其没有环路保护, 除所传输的业务自中断点开始外, 中断点以下的站点信息, 都将一同消失, 因网管信息也中断了, 管理者不能知道中断点以下站点的情况。这种问题的解决办法就是, 租用其它网络运营商的电路传输网管信息, 从而实现本系统网管信息的环路, 避免此类现象的发生。广东广电SDH数字微波在建网之始, 也考虑到了这一问题, 但就是要租用的电路通道没能解决, 致使全省SDH数字微波网管系统不能实现环路管理。

在实际使用中, 因受强台风的影响, 曾经发生过天线偏移影响到信号传输和网管信息传输的事件, 当时发生在北环上的一跳。当时故障站点以下的网元脱管, 抢修人员赶到现场处理后, 才恢复正常。事后, 对其进行了分析和讨论, 为减少此类现象的发生影响到网管对网元设备的监控, 在外部条件不具备的情况下, 可充分利用自身的条件, 减少此类现象的发生受到的影响。我们采取的措施是:在环路上开通2M电路, 互为备份地传输不同域的网管信息, 当环上某一段发生中断时, 业务和网管信息则从环的另一边进行传输, 通过试验, 该方法能很好地避免类似的问题。

2.同一站点数字微波设备间网管信息相连问题

在实际工程中, 在同一个站点上的两台微波设备连接有一条50Ω的同轴电缆, 该条电缆的作用是用来传输网管信息。实际上, 数字微波设备间的网管信息的传输有两种路由, 一种是通过微波与ADM (分插复用器) 之间构成的连接通道进行D1�D3字节的传输;另一路由则是通过设备系统控制板上的QB3同轴接口进行网管信息的传输。在系统正常情况下, 采用哪一条路由传输网管信息, 我们不知道。但就这一条机架间的不足1m长的50Ω同轴电缆, 则给系统带来了不少问题, 主要是该条电缆很容易感应到雷电, 损坏设备的系统控制板, 影响网管对设备的管理。

解决的办法是, 既然是网管的另一通路, 那就可以去掉, 让网管信息走ADM的通路, 这样还可避免网管信息路由的切换导致网元脱管又恢复的现象。通过试验, 网管信息传输正常, 设备系统控制板因雷击造成故障的机率也随之大幅减少, 取得了非常理想的效果。

摘要:文中结合广东广电SDH数字微波传输网, 剖析其网管结构, 阐述其原理和具体配置及其在微波系统的应用, 并对其常出现的问题进行探讨和提出解决办法, 希望广电同行能借鉴。

算法与数据结构剖析 篇3

神七少了一对太阳帆板多装了一颗伴飞卫星

从外观上看,神舟飞船原来部有两对太阳帆板,一对在推进舱上,一对在轨道舱上。神七轨道舱不再留轨试验,因此去掉太阳帆板。

轨道舱的顶部,安装了一颗伴飞小

小卫星旁边,是数个圆球形的气瓶,气瓶中的高压气体用于航天员出舱活动时轨道舱的泄复压。轨道舱顶部的位置,在神舟八号时将安装一个交会对接机构,用于与空间站对接。

在神七的轨道舱壁上,还能看到像双杠一样的扶手,这是航天员太空行走时要用的。

三舱优于单舱或两舱

神舟飞船一直都是推进舱、返回舱、轨道舱的3舱结构。设计人员说,这并非随意之举,而是有科学道理。

美国第一艘人造飞船为单舱式,俄罗斯的第一艘飞船为两舱式。在载人航天的实践中,各国科学家发现,3舱结构效益最佳。

飞船返回时,与大气剧烈摩擦产生的高温和过载,使航天员面临生死考验。科学家不得不选择放弃那些不需要返回地面的仪器,从而降低技术难度,提高返回安全性。

3舱飞船既能满足动力、航天员生活场所、乘员返回地球这3大基本功能,又能在返回时尽量“轻装简从”。

另外,3舱结构也提高飞船飞行的可靠性,即便其中一舱出现故障,其他舱段还可以工作。

神五、神六的飞行实践证明,中国的3舱一段式飞船结构设计巧妙合理,投入少效益高。

飞船的形状为什么有些奇怪

在地面的各种交通工具中,还找不到外形与飞船相似的。设计人员介绍,飞船不是有意追求科幻效果,而是根据需要设计形状。

在太空的高真空环境下,飞船内外有一个大气压的压力差,这种压力大得足以把一辆小汽车或是一架飞机压瘪。

大量地面试验证明,圆形抗压能力最强,另外,圆形还能为乘员提供最大内部空间。因此飞船3舱呈圆柱或圆锥形。

数据结构与算法课程总结[模版] 篇4

11计本一班 许雪松 1104013018

数据结构与算法是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。总的来说感触还是比较深的,刚开始上的时候还蛮简单的,越到后面感觉越难,算法也更复杂了,有时候甚至听不懂,老师上课时讲的也蛮快的,所以只能靠课下下功夫了。下面是我对本学期学习这门课的总结。

一、数据结构与算法知识点

第一章的数据结构和算法的引入,介绍了数据和数据类型、数据结构、算法描述工具、算法和算法评价四个方面的知识。

第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、求表长、排序、元素的查找、插入及删除等。元素查找方法有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。最后介绍了顺序串的概念,重点在于串的模式匹配。

第三章主要介绍的是线性逻辑结构的数据在链接存储方法下数据结构链表的相关知识。主要是单链表、循环链表的数据类型结构、数据结构、基本运算及其实现以及链表的相关应用问题,在此基础上介绍了链串的相关知识。在应用方面有多项式的相加问题、归并问题、箱子排序问题和链表在字符处理方面的应用问题等。本章未完全掌握的是循环链表的算法问题和C的描述。

第四章介绍在两种不同的存储结构下设计的堆栈,即顺序栈和链栈的相关知识,了解堆栈的相关应用,掌握应用堆栈来解决实际问题的思想及方法。本章主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。本章堆栈算法思想较为简单,所以能较好掌握。

第五章主要介绍顺序存储和链接存储方法下的两种队列、顺序(循环)队列和链队列的数据结构、基本运算及其性能分析以及应用。顺序队列(重点是循环队列)和链队列的概念、数据类型描述、数据结构和基本运算算法及其性能分析等。本章同堆栈有点类似,算法思想较为简单,所以能较好掌握;但难点重在循环队列队空、队满的判断条件问题。

第六章“特殊矩阵、广义表及其应用”将学习数组、稀疏矩阵和广义表的基本概念,几种特殊矩阵的存储结构及其基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。本章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。

第七章二叉树及其应用。分为二叉树的基本概念、二叉树存储结构、二叉树的遍历算法、线索二叉树、二叉树的应用(哈夫曼树、二叉排序树、堆和堆排序、基本算法)。基本算法包括二叉树的建立、遍历、线索化等算法。在此基础上,介绍二叉树的一些应用问题,包括哈夫曼编码问题、(平衡)二叉排序树问题和堆排序问题等。

第八章说的是树和森林,首先我们要知道树与二叉树是不同的概念。课本介绍了树和森林的概念、遍历和存储结构,还有树、森林和二叉树的相互关系,树或森林怎样转化成二叉树,二叉树又如何转换为树和森林等算法。

第九章“散列结构及其应用”是逻辑结构“集合型”的数据元素在散列存储方法下的数据结构及其应用知识内容。主要介绍散列函数的概念、散列结构的概念、散列存储结构的概念---散列表、散列函数和散列表中解决冲突的处理方法---开放定址法、链地址法以及散列表的基本算法及其性能分析。本章概念较为多,所以掌握不太好。

第十章图及其应用。分为图的概念、图的存储结构及其基本算法、图的遍历及算法、有向图的连通性和最小生成树、图的最小生成树、非连通图的生成森林算法、最短路径、有向无环图及其应用。

二、对各知识点的掌握情况

我对各知识点的掌握情况总结如下:

对于第一章对数据结构的概念理解颇深,大概是每次都要谈论到吧。对算法的时间性能,空间性能基本了解。这些在后面的章节都会有运用。第二章本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。本章未掌握的为希尔排序、快速排序、归并排序的时间复杂度分析。第三章,对链表掌握还好,对其数据结构进行了分析,有循环链表,掌握的不是很好,对其中一些用法不熟练。第四章堆栈,本章堆栈算法思想较为简单,所以能较好掌握,但表达式计算问题未掌握好的。第五章的循环队列队空、队满的判断条件问题掌握的不是很好。第六章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。第七章对二叉树掌握较好,其概念,存储,遍历有很好的掌握。就是对二叉排序树有点生疏,它的生成算法不是很会。第八章树树与二叉树之间的转换,森林与二叉树的转换算法思想基本掌握。第九章散列的一些知识,没有深入学习,大概了解了散列存储结构散列表,散列函数,冲突的处理方法。第十章了解了图的逆邻接表的存储结构,关键路径求解算法未能掌握好,不能灵活运用图的不同数据结构和遍历算法解决复杂的应用问题。

三、学习体会

刚刚接触这门课时,看到课本中全是算法,当时就晕了,因为我的C语言学的不好,我担心会影响这门课的学习,后来上课时老师说学习这门课的基础是C语言,所以我当时就决定一定要好好补补,争取不被拖后腿,在学习这门课的期间,也遇到了不少问。但是通过学习数据结构与算法,让我对程序有了新的认识,也有了更深的理解。同时,也让我认识到,不管学习什么,概念是基础,所有的知识框架都是建立在基础概念之上的,所以,第一遍看课本要将概念熟记于心,然后构建知识框架。并且,对算法的学习是学习数据结构的关键。在第二遍看课本的过程中,要注重对算法的掌握。对于一个算法,读一遍可能能读懂,但不可能完全领会其中的思想。掌握一个算法,并不是说将算法背过,而是掌握算法的思想。我们需要的是耐心。每看一遍就会有这一遍的收获。读懂算法之后,自己再默写算法,写到不会的地方,看看课本想想自己为什么没有想到。对算法的应用上,学习算法的目的是利用算法解决实际问题。会写课本上已有的算法之后,可以借其思想进行扩展,逐步提高编程能力。

四、对课程教学的建议

1、课程课时较紧,课堂上的练习时间较少,讲解的东西越多,头脑有时就很混乱。

2、感觉上课时的气氛不是很好,虽然大部分人都在听,可是效果不是很好。所以希望老师能在授课中间能穿插一些活跃课堂氛围的话题,可以是大家都非常关心的一些内容,这样既让大家能在思考之余有一个放松,也能够提高学生的学习积极性和学习效率。

3、学习的积极性很重要,有时候我们花了很长时间去写实验报告,也很认真的去理解去掌握,可是最后实验报告可能就只得了一个C,抄的人反而得A,这样的话很容易打击学生的积极性,在后面的实验报告中没动力再去认真写。所以希望老师能在这方面有所调整。

算法与数据结构剖析 篇5

1004012033 陈孝婕 10计本3 “数据结构与算法”这门课程对于计算机科学与技术系的学生来说是非常重要的课程。这门课程主要包括十个章节。

一.每章主要知识点总结和个人掌握情况

第一章主要要求学生掌握数据、数据类型、数据结构、算法及算法分析等基本概念和基础知识。另外,第一章结合课程学习要求,复习和掌握算法描述工具--C语言中的指针类型与指针变量、结构类型与结构变量、函数与参数、递归定义和递归函数、动态存储分配、文件操作、程序测试和测试集、测试数据的设计和程序调试等问题。

从这一章中我不仅学到了数据结构的基本概念和基础知识,了解到什么是数据结构,我们为什么要学习数据结构这门课程。而且复习了大一下学期所学的C语言程序课程设计中的算基本法语句。有利于数据结构与算法后面课程的学习。

第二章主要学习顺序表(包括顺序串)数据类型、数据结构、基本算法及相关应用。知识点包括顺序表的概念、数据结构定义、数据类型描述、基本算法的实现及其性能的分析等知识;还有“查找”和“排序”的概念,“查找”包括3种查找方式:简单顺序查找、二分查找、分块查找;“排序”包括直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序和归并排序(重点为二路归并排序)6种排序方式;掌握应用顺序表来进行查找和排序的各类算法以及不同的查找和排序算法间的性能差异。在此基础上,理解顺序串的相关应用。

从这一章中我学习到各种不同的查找方法和排序方式,其中二分查找作为重点查找方法我进行了重点学习,熟悉并熟练地运用二分查找并且了解到各种排序方法适合于不同的顺序表。对于顺序串的学习,我主要掌握了字符串的基本运算,包括:求串长strlen(S)、连接stract(ST1,ST2)、求子串substr(S,i,j)、比较串的大小strcmp(S,T)、插入insert(S1,i,S2)、删除delete(S,i,j)、子串定位index(S1,S2)、置换(replace(S1,i,j,S2)、replace(S,T,V)两种)。

第三章主要学习链表(单聊表、循环链表)的概念、数据结构、数据类型描述、基本算法以及链表相关应用。需要掌握各种链表的概念、数据结构定义、基本算法实现以及算法的性能分析等知识,掌握链表的相关应用方法,在此基础上掌握链串的相关知识。

通过这一章我学习了另一种数据结构——链表,在逻辑结构上,链表与顺序表一样,也是线性逻辑结构;单链表借助“地址”的概念,使用了链式存储结构,产生了一种新的数据结构——链表,链表的基本操作是地址运算,在此基础上构成的链表基本算法的特点也就不同,从链表算法的功能看,链表的基本运算与顺序表基本相同,但实现方法和过程与顺序表是不同的,链表可分为静态链表和动态链表两种。这一章我学习到的实际应用是链表的创建、插入和删除等基本操作。循环链表的建立和查询方法。

第四章主要知识点是在两种不同的存储结构下设计的堆栈,即顺序栈和链栈。主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。通过对本章的学习,要求掌握顺序栈及链栈的数据类型描述、数据结构、基本算法及其性能分析等知识。在此基础上,了解堆栈的相关应用,掌握应用堆栈解决实际问题的思想及方法。

通过对这一章的学习,我了解了堆栈的概念,堆栈的原理、创建方法以及使用方式。“后进先出”是其基本原则。利用堆栈可以轻松方便的解决对称问题以及括号匹配等问题。堆栈与顺序表、链表不同的是,堆栈只能对一端的数据元素进行操作,即只在栈顶进行元素的插入和删除。掌握顺序栈和链表的存储结构是学习堆栈的要素之一。堆栈是一类常用的数据结构,被广泛应用于各种程序设计中。

第五章的重点知识是在顺序存储和链接存储下的两种队列——顺序(循环)队列和链队

列的数据结构、基本运算及其性能分析以及应用。通过本章的学习,要求掌握顺序队列(重点是循环队列)及链队列的概念、数据类型描述、数据结构、基本算法及其性能分析等知识。在此基础上,了解队列的相关应用,掌握应用队列来解决实际问题的思想及方法。

通过这一章的学习,我掌握了队列的定义,概念,创建以及“对头删除”,“队尾插入”的原则。重点了解了判断循环队列空和满的判断条件。同堆栈一样,队列也是一种具有线性逻辑结构、运算受限制的数据结构。与堆栈只在一端(栈顶)进行元素的插入和删除运算不同的是,队列是在对头进行插入,而在队尾完成数据元素的删除,所以队列的算法和适用的应用问题与堆栈有很大的区别。队列作为一类常用的数据结构,被广泛应用于各种程序设计中。

第六章主要学习数组、系数矩阵和广义表的基本概念、集中特殊矩阵的存储结构及基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。通过本章的学习,要求掌握特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解稀疏矩阵的计算和广义表的存储结构及其基本运算。了解矩阵与广义表的相关应用。

通过这章的学习和前几章的比较,我了解到前几章的线性结构中的数据元素都是非结构的原子类型,即每一个元素都是不可再分解的。本章讨论的数组和广义表等数据结构可以看成是在前几章线性结构基础上的一个扩展:组成该数据结构的数据元素本身也是一个数据结构。矩阵计算应该数值计算方面的问题,由于矩阵和数组的关系以及特殊矩阵存储结构的复杂性,进而使得特殊矩阵的存储结构和算法也表现出其特殊性,所以数据机构课程应该解决其计算问题。

第七章的学习重点是二叉树的概念、数据类型、数据结构定义和各种基本算法,在此基础上介绍二叉树的一些应用问题。通过本章的学习,我掌握了二叉树概念及其性质、二叉树的逻辑结构和存储结构等知识,掌握二叉树的建立、遍历、线索化等基本概念和算法及性能分析,能熟练应用二叉树这章结构来解决一些实际问题,如哈夫曼树及哈夫曼编码、查找与排序(二叉树排序)等问题。了解堆栈排序及其算法等知识。二叉树是非线性数据结构,是树形结构的一种特殊形式。在现实生活有许多数据关系可抽象为树或二叉树的形式。本章中的二叉树的概念及其性质、二叉排序树、存储结构、遍线索(化)、基本算法为重点内容,二叉排序树的应用为难点内容。

第八章的学习重点是树和森林的数据结构、基本算法及其性能分析,树和森林与二叉树间的转化算法等,在此基础上介绍树的应用——B-树。通过本章的学习,我掌握了树和森林的概念和性质、数据结构、树的基本算法及性能分析、树与二叉树间的转换及其算法,并能应用B-树来实现数据元素的动态查找。舒适一种非线性结构,它在二叉树的基础上做了更为一般化的扩展,而森林是树的集合。在树结构中,每一个元素最多只有一个前驱,但可能有多个后继。现实生活中的家族关系、单位的组成结构等,均可抽象为树的形式。

第九章学习重点是散列结构的相关知识,学习常用的散列函数和冲突处理方法,散列表的常用算法及其性能分析,通过本章的学习,我掌握了散列结构和散列函数的相关概念,掌握散列结构的存储(散列表)的相关概念,要求掌握散列冲突处理方法(散列法)的相关知识,并能灵活运用散列法解决应用问题。

散列结构是使用散列函数建立数据结点关键字与存储地址之间的对应关系并提供多种当数据节点存储地址发生“冲突”时的处理方法而建立的一种数据结构。散列结构的查找等运算效率是很高的,本章中的散列函数、散列结构、散列表、散列法的基本概念和基本算法是重点,线性探测散列算法、链地址法散列算法和散列法的应用是难点。

第十章的学习重点是图的定义及性质,图的四种存储结构,图的两种遍历算法以及图的典型应用,包括最小生成树、最短路径、拓扑排序和关键路径等。通过本章学习,我掌握了图的概念和基本性质,图的存储结构(邻接矩阵和邻接表)及其基本算法、图的遍历及算法、图的最小生成树普利姆算法或者克鲁斯卡尔算法、图的最短路径迪杰斯特拉算法和弗洛伊德算法、有向无环图拓扑排序算法。了解了图的逆邻接表、十字链表、邻接多重表存储结构及其基本算法、关键路径求解算法,并能灵活运用图的不同的数据结构和遍历算法解决复杂的应用问题。

二.课程学习体会

在学习开始的时候,老师就明确提出它不是一种计算机语言,不会介绍C语言的变成语言,而是通过学习可以设计出良好的算法,高效地组织数据。一个程序无论采用何种语言,其基本算法思想不会改变。联系到在大一和大二上学期学习的C和C++语言,我深刻认识到了这一点。“软件开发好比写作文,计算机语言提供了许多华丽的辞藻,而数据结构则考虑如何将这些辞藻组织成一篇优秀的文章来。”在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段——机器可识别的描述。

这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。

三.对《数据结构与算法》课程教学的建议

1、建议在上课过程中加大随堂练习的分量,以便学生能当堂消化课堂上学习的知识,也便于及时了解学生对知识点的掌握情况,同时有助于学生上课积极思考,不会开小差。

2、建议在课时允许的情况下,增加习题课的分量,通过课堂的习题讲解,加深对知识点的掌握,同时对各知识点的运用有一个更为直观和具体的认识。

IDEA对称密码算法剖析 篇6

IDEA (International Data Encryption Algorithm:国际数据加密算法) 是1990年由瑞士联邦技术学院的X.J.Lai和Massey提出的PES (Proposed Encryption Standard:建议标准算法) 的改进版本。于1992年命名为IDEA。IDEA对PES的抗差分分析的能力进行了强化处理, 其安全性非常高, 同一种算法既可以用于加密, 又可以用于解密, 其唯一的区别仅仅在于子密钥的生成方法不同。IDEA算法在诸如邮件加密系统PGP等多种商业产品中被广泛使用。

IDEA是一种分组长度为64位的分组密码算法, 密钥长度为128位。128位的密钥用于产生52个子密钥。在整个加密过程中, 总共需要进行8轮迭代运算, 整个迭代过程需要48个子密钥, 另外4个子密钥用于最终的64位密文的输出变换。

IEDA算法基于“相异代数群上的混合运算”的设计思想, 其迭代运算中采用了三种数学运算:16位整数的模216加法运算、16位分组的按位异或运算和16位整数的模216+1乘法运算。为了叙述简洁, 在后文中将直接称这三种运算为加法、乘法和异或运算。这三种运算中的任何一对运算都不满足分配律, 也不满足结合律, 这让它们的组合能对输入作出复杂的变换, 从而使得攻击者无法使用化简的方式来分析明文及密钥之间的关系, 因此, 对IDEA算法的密码分析要比对只使用异或运算的DES算法的分析要困难得多。

2 算法原理及框架

IDEA的加密过程包括两个部分:明文到密文加密的8轮迭代运算和子密钥的产生。

2.1 IDEA加密迭代运算

IDEA加密迭代运算过程如图1所示。输入的64位明文数据分组被分成4个16位的子分组, 分别记为X1、X2、X3和X4。这四个分组作为算法的第一轮的输入, 整个加密过程总共进行8轮迭代运算, 最终产生64位的密文输出。

在图1中, 每轮运算分为两部分。

第一部分是变换运算, 其方法是采用加法及乘法运算将4个16位的子明文分组与4个子密钥混合, 产生4个16位的输出。具体的变换方法是:

(1) X1和第一个子密钥进行乘法运算。

(2) X2和第二个子密钥加法运算。

(3) X3和第三个子密钥加法运算。

(4) X4和第四个子密钥乘法运算。

然后将这4个16位输出进行两两配对, 采用逻辑异或 (XOR) 运算将数据混合, 产生2个16位的输出, 即:将 (1) 和 (3) 的结果进行异或运算, 将 (2) 和 (4) 的结果进行异或运算。这两个16位的输出, 连同另外的两个子密钥成为第二部分的输入。

第二部分是用于产生扩散特性的乘加 (MA) 运算。MA运算生成2个16位输出。MA的输出再与变换运算的输出采用XOR运算产生4个16位的最后输出, 这4个16位的最后输出即成为下一轮运算的原始输入。在这4个最后结果中的第2、3个输出是经位置互换而得到的, 这样处理的目的是对抗差分分析攻击。

明文分组在经过8论加密后, 再经过最后的输出变换形成正式的密文。最后的输出变换与前面每一轮的变换运算大致相同, 惟一不同之处在于第2、3个输出是不需要经过位置互换的。这种特殊安排的目的在于可以使用与加密算法相同结构的解密算法进行解密, 从而简化了设计及使用IDEA算法的复杂性。

2.2 IDEA子密钥的产生

2.2.1 加密子密钥的产生

IDEA一次完整的加密运算需要52个子密钥, 它们都是由一个128位的加密密钥产生的。其产生方法如下:

首先将128位加密密钥分成8份:Z1、Z2……、Z8, 其中Z1对应加密密钥中的最高有效的16位, 而Z8则对应于加密密钥中的最低有效的16位。然后将加密密钥循环左移25位后, 用同样的方法得到另外的新的8个子密钥, 如此Z1到Z52陆续生成52个子密钥。

2.2.2 解密子密钥的产生

IDEA的解密过程与加密过程完全相同, 即将密文分组作为输入而逐步恢复明文, 所不同的是参与迭代运算的解密子密钥的生成方式。解密子密钥U1、U2、……、U52是从加密密钥Z1、Z2……、Z8导出的。解密过程中的第i轮循环的头4个子密钥是从加密循环的第 (10-i) 的头4个子密钥导出的, 其中变换阶段被记为循环9。解密密钥的第1个和第4个子密钥等于对应的第1个和第4个加密密钥的模216+1乘法逆元。从第2到第8个循环, 第2和第3个解密子密钥等于对应的第2个和第3个加密子密钥的模216加法逆元, 而第1和第9个循环的第2和第3个解密子密钥等于对应的第2个和第3个加密密钥的模216加法逆元。而对于头8个循环来说, 循环i的最后两个解密子密钥等于加密循环 (9-i) 的最后两个子密钥。

3 源代码解析

3.1 实例使用的简单说明

3.1.1 实例运行说明

本实例的开发平台为Windows和VC++8.0。程序运行是需要提供两个输入:一是需要加/解密的文件的文件名, 另一个是用户自己提供的128位会话密钥。需要加密的明文数据需要用文本文件 (.txt) 存放, 程序运行的第一步首先就是按用户输入的文件名将需要加/解密的文件打开, 若文件打开失败 (文件不存在或文件名或扩展名错) 则程序自动退出。加密后生成的加密文件的文件名与明文文件名相同, 但扩展名为.enc, 如果是解密, 则解密生成的明文文件名为tempfile.txt。

3.1.2 主要函数及流程说明

本实例代码是对IDEA加密算法的独立实现, 不涉及到与其他系统和应用的交互。

本实例代码实现主要包括两部分:

(1) 头文件部分:idea.h。该部分包含了本实例所需要的系统函数以及与IDEA相关的数据结构和函数的声明。

(2) 算法核心代码部分:idea.cpp。该部分是IDEA算法的加/解密和子密钥生成的实现部分。主要包括如下几个函数 (按函数出现的顺序进行介绍, 函数中的疑难语句将在源代码中以注释的方式给出) :

1) static uint16 inv (uint16 x)

该静态函数的功能是提供由加密密钥得到解密密钥的模运算:加密密钥与解密密钥的模216+1乘运算:1 MOD (216+1) 。前文已经提到, 由加密子密钥通过计算模加和模乘运算的逆元即可得到解密子密钥。函数的返回值为16位的无符号整数, 参数x也为16位的无符号整数。

2) static void en_key_idea (word16*userkey, word16*Z)

该静态函数的功能是将用户提供的128位会话密钥产生生成迭代运算所需要的52个子密钥。该函数没有返回值, 生成的52个子密钥存放在一个16位的数组Z中, Z为该函数的参数之一, 另一个参数是指向16位的字类型的指针 (16*8=128位) 。

3) static void de_key_idea (IDEAkey Z, IDEAkey DK)

该静态函数的功能是生成解密子密钥, 并将其存放到数组Z中。

4) uint16 mul (uint16 a, uint16 b)

该函数的功能是实现模乘运算。 (见图1图例说明部分。)

5) static void cipher_idea (word16 in[4], word16 out[4], register CONST IDEAkey Z)

该静态函数是本算法的核心代码部分, 其功能就是在获得64位明文的4个16位子分组和52个子密钥的基础上实现图1所示的加/解密迭代运算过程。

6) void cipher_file (FILE*in, FILE*out, word16*key)

该函数的功能就是调用5) 中的加密函数实现对给定明文文件 (.txt文件) 和给定的128位会话密钥的IDEA加密。

7) void decipher_file (FILE*in, FILE*out, word16*key)

该函数的功能是实现解密。由于IDEA加密算法的加解密过程完全一样, 所不同的仅仅是解密过程中用到的是由52个加密子密钥导出的52个解密子密钥。

8) void swap_files_and_clean_up (char*file)

该函数的功能是将加/解密的结果以文件形式存放到磁盘。

9) void getuserkeyfromargv (word16*key, char*arg)

该函数的功能是对密钥进行格式化处理。

10) void GetChoice (int&choice, char szFileName[100], char szKey[50])

该函数是本实例的运行界面及操作说明显示。

11) int main ()

Main () 函数对以上各函数进行调用实现算法功能。

3.2 头文件部分

3.3 cpp文件部分

4 结语

IDEA加密算法不受差分分析的影响, 其密钥长度为128位, 具有非常大的密钥空间。该算法代码量少, 运行速度快, 并且具有非常高的安全性, 目前, 尚未出现任何一篇公开发表的试图对IDEA进行密码分析的文章。本文在深入剖析IDEA对称密钥分组加密算法原理和实现过程的基础上, 对基于VC++的实例实现进行了详尽的解析说明。

参考文献

[1]Bruce Schneier.Applied Cryptography:Protocols, Algorithms, and Source Code in C.北京:机械工业出版社, 2000.

[2]胡建伟.网络安全与保密.北京:西安电子科技大学出版社, 2003.

[3]石志国.计算机网络安全教程.北京:清华大学出版社, 北京交通大学出版社, 2004.

[4]Susan Yong Dave Aitel.The Hacker’s Handbook The Strategy behind Breaking into and Defending Networks.北京:机械工业出版社, 2006.

算法中的易错点剖析 篇7

一、 关于判断条件

1. 循环结构中的判断条件

一般地,当整个算法程序中遇到某段子程序需要重复进行时,便会出现循环结构.循环结构对应循环语句.循环结构的核心就是循环体,它是循环结构中反复进行的操作部分.

在循环背景下,如何判定给定的条件p是否成立呢?为了帮助同学们突破这个问题,我们先看一个熟悉的案例.

引例 等差数列{an}中,a=22,公差d=-2,试问数列{an}中从第几项开始后面每一项都小于0?

解析 估计很多同学都会这样求解:数列{an}的通项公式为an=24-2n,令an<0,即24-2n<0,得n>12,故数列{an}从第13项开始后面每一项都小于0.

应该说这个结论是正确的.那么是否也可以说从第14(或15等)项开始每一项都小于0呢?这就涉及到对问题的准确理解和定位了.

不难看出数列{an}是递减数列,本问题的实质是需要确定从哪一项,且只能是从这一项开始后面每一项都小于0,因此应考虑建立不等式组an≥0,an+1<0来确定.由24-2n≥0,24-2(n+1)<0,得n≤12,n>11,故n=12,n+1=13,故数列{an}从第13项开始后面每一项都小于0.

再来看下面一个问题.

例1 按流程图(图1)进行运算.规定:程序运行到“判断结果是否大于244”为1次运算.

(1) 若x=5,则运算进行______次才停止;

(2) 若运算进行k(k∈N*)次才停止,则x的取值范围是_____.

解析 (1) 当x=5时,由于5×3-2=13<244,13×3-2=37<244,37×3-2=109<244,109×3-2=325>244,故运算进行4次即停止.

(2) 由于运算进行k(k∈N*)次停止,因此当k=1时,则3x-2>244,即x>82;当k≥2时,第k-1次时仍然不满足条件,故有3k-1x-2(3k-2+3k-3+…+3+1)≤244,3kx-2(3k-1+3k-2+…+3+1)>244,解得1+35-k

小结 由此我们可以看出,循环结构中为什么循环、对谁循环并不难理解,其关键是对判断条件的把握.判断条件把握准确了,那么输出的结果以及运行的次数也就迎刃而解了.

例2 设计一个计算1×3×5×7×9×11×13的算法.图2中给出了程序的一部分,则在横线(1)上不可以填入下面的哪些数?________.

①13;②13.5;③14;④14.5.

解析 由伪代码语句可知S,I的值是这样变化的:I=3,S=1×3,I=5,S=1×3×5,I=7,S=1×3×5×7,I=9,S=1×3×5×7×9,I=11,S=1×3×5×7×9×11,I=13,S=1×3×5×7×9×11×13.据此可知横线(1)上不可以填②、③、④.

2. 选择结构中的判断条件

判断条件不仅仅局限于循环结构(或循环语句),在条件结构中也是很重要的一环.只有条件是否满足确定了,才能确定进行哪一种操作.

例3 (2010年苏、锡、常、镇四市高三教学情况调查(一))已知{an}是等差数列,设Tn=|a1|+|a2|+…+|an|(n∈N*).某学生设计了一个求Tn的部分算法流程图(如图3),图中空白处理框中的操作是用n的表达式对Tn赋值,则空白处理框中应填入:Tn←______.

解析 就题设第一句而言,Tn是等差数列前n项的绝对值的和.而从所给流程图来看,当n≤5时,Tn=

-n2+9n.故可得|a1|=8,|a2|=6,|a3|=4,|a4|=2,|a5|=0,因此a1=8,公差d=-2,或者a1=-8,公差d=2.而这两种情况下的Tn是一样的.

因此当n≥6时,Tn=|a1|+|a2|+…+|an|=a1+a2+…+a5-(a6+a7+…+an)=2(a1+a2+…+a5)-(a1+a2+…+an)=2×20-8n+×(-2)=n2-9n+40,故应填写n2-9n+40.

二、 关于输出结果

任意一个问题的算法都必须有结束的时候(有限性),任意一个算法都必须有输出结果.循环结构中变量从初始值经过一系列反复运算后,我们最关心的是输出的结果是什么,这就需要关注循环的次数,以及是循环结束后输出,还是每循环一次就输出一次.同样,对循环结束的条件的把握也是非常重要的.

例4 (2010年福建理科卷改编)阅读流程图4,若运行相应的程序,则输出的i的值等于_____.

解析 由流程图可知其功能是输出使和S=1•21+2•22+3•33+…+i•2i>11的i的最小值加1后的值,因为1•21+2•22=10<11,1•21+2•22+3•33>11,所以使S>11的最小的i=3,故输出的i是4.

小结 注意这里循环结束是用当i=3时的和S来判断的,即用俗称的“上一次(循环)的结果”来判断的,并不是用当次循环的结果来判断的,因此当循环结束时,输出的i的值应该是4.这是极易出错的地方.

你能看出下面一题与例4的区别吗?

(2010年全国高考宁夏卷改编)如果执行图5的框图,输入N=5,则输出的数等于______.

答案为.解答过程略.

例5 如图6,该程序运行后输出的结果是______.

解析 有相当多的同学认为结果是1+1×2+1×2×3+1×2×3×4+1×2×3×4×5+1×2×3×4×5×6=873.

实际上这个结果是错误的.为什么会出现这种情况呢?

分析一下这个语句的结构.这里有嵌套的两个循环语句,并且在两个循环语句之间又插入了另外两个语句:“S←0”和“a←0”.这就意味着当变量K从2至I循环结束后得到的S的值在变量I取下一个值之后立刻被清空为0了.就外层循环而言,上一次循环的结果不再带入下一次循环.因此,就本题而言,实际上只需要考虑变量I取6时的情况就可以了.

事实上,当I=6时,变量K从2至6,循环后,a=1×2×…×6=720,S=0+a=720,因此该程序运行后输出的结果是720.

例6 如图7,该程序中,最后输出的k和i的值分别是_____和_____.

解析 实际上,教材中介绍“For语句”的时候(包括书中所配的例题),只是强调了在循环的次数已经确定的情况下可以利用“For语句”来实现,却没有讲清楚什么时候(或什么条件下)退出循环.

就本题而言,许多同学认为:变量i的值在从1到20之间,其初值是1,步长是3,因此循环的次数是7,变量i最多取到19,故最后输出的k和i的值分别是7和19.

事实上,正确的答案应该是7和22.因为“For语句”的意思是变量从初值开始,逐次加上步长,当它在初值与终值之间(可以等于初值或终值)时,就执行循环;当它不在初值与终值之间时,才退出循环.因此图7中的“For语句”可以改为图8中的“While语句”.实际上,把图7中的20改为19或21,本题的结果都不变.

1. (2010年天津理科卷改编)阅读程序框图9,若输出的S的值为-7,则判断框内不可填写_____.

①i<3;②i<4;③i<5;④i<6.

2. 阅读图10所示的程序框图,若输入的m=5,n=3,则输出的i=______.

3. 要使For循环“For kFrom m To 88 Step 5”执行8次,则整数m的最大值为______.

4. 图11是一个算法的流程图,最后输出的n=______.

参考答案

1. ①②③. 提示:由程序框图知S=2-1-3-5-…,要使输出的S的值为-7,即S=2-1-3-5,只需i≤5.

上一篇:2024年重庆省普法考试试题下一篇:初中英语第一册Lesson 97教学设计