C-C++常用算法手册(第3版)(txt+pdf+epub+mobi电子书下载)


发布时间:2021-02-12 23:42:53

点击下载

作者:刘亚东 曲心慧编著

出版社:中国铁道出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C-C++常用算法手册(第3版)

C-C++常用算法手册(第3版)试读:

前言

PREFACE

计算机程序设计是信息化进程中最为重要的一个设计手段。一个应用程序往往由编程语言、数据结构和算法组成。其中,算法是整个程序设计的核心。算法代表求解具体问题的手段和方法,可以毫不夸张地说,算法是一切程序设计的灵魂和基础。选择合理的算法,可以起到事半功倍的效果。因此,对于程序员来说,学习和掌握算法是重中之重。

但是,数据结构和算法理论性很强,读者在学习的过程中会感到很枯燥和吃力,往往学习一段时间后便丧失了兴趣,这就使得学习的效率大大降低。如何才能提高读者的学习兴趣,使读者能够快速掌握数据结构和算法的知识呢?其实读者需要的不仅是理论知识,还需要了解这些知识点的代码实现以及应用示例。另外,对知识背景的介绍和理解往往能激发读者学习的兴趣。编者从这些基本点出发,为读者编写了一本可以轻松学习数据结构和算法的参考书。

C/C++是目前最为流行的编程语言之一。本书中所有的算法及示例都是采用C语言进行编写的,因为基本语法相同,所以同时也能在C++环境下运行。但是这些算法并不仅仅局限于C语言。如果读者采用其他编程语言,如C#、VB、Java等,根据其语法格式进行适当的修改也可使用。毕竟算法是核心,C/C++语言是众多语言发展的重要参考,很多语法特点也相同。

本书特色

为了保证读者掌握算法程序设计的核心技术,一开始我们就为本书规划了一些特色,以保证质量和延长生命力。与其他同类书籍相比,本书有如下特色:

● 本书由浅入深、循序渐进地带领读者学习数据结构和算法的知识。

● 本书不仅详细介绍了算法的基础知识和应用,还对常用的加密/解密和数据压缩等高级算法编程技术进行了详细地讲解。

● 本书在讲解每个知识点的同时,均给出了相应的算法原理和算法实现,同时还给出了完整的应用示例,每个示例都可以通过编译执行,使读者可以快速掌握相应的知识点在程序设计中的应用。

● 本书在介绍各个知识点的同时,尽量结合历史背景并给出问题的完整分析,使读者可以了解问题的来龙去脉,避免了代码类书籍的枯燥乏味,增强了图书的易读性。

● 本书对每一个示例的程序代码都进行了详细地注释和分析,并给出了运行结果,使读者在学习时更容易理解。

本书结构

本书以实用性、系统性、完整性和前沿性为特点,详细介绍了算法的基本思想和不同领域的应用示例。本书内容共分4篇17章。

第1篇是算法基础篇,共分为3章,详细介绍了算法和数据结构的相关知识。

第2篇为算法应用篇,共分为8章,详细讲解了算法在排序、查找、数值计算、数论、经典趣题和游戏中的应用。

第3篇为算法面试题篇,共分为4章,详细分析了近几年各大IT公司在逻辑推理测试、数学基础测试、算法及数据结构方面的常见面试题。

第4篇为算法高级应用篇,共分为2章,详细讲解了算法在密码学和数据压缩/解压缩中的应用;为提升图书性价比,本次改版把第4篇的内容放到下载包中供读者学习。

适合的读者

● 系统开发人员;

● C语言程序员;

● 计算机培训班学员;

● 大学、大专等相关专业的学生及老师。

本书结构紧凑,涉及的知识点也比较全面,内容翔实,示例丰富。由于本书内容较多,编写时间仓促,书中如有疏漏或不足之处,恳请广大读者提出宝贵意见,以便进一步改进。

即扫即看视频

我们从录制的讲解视频中精心挑选了39段,根据本书讲解内容的重点程度,将每段视频制作成了即扫即看的二维码,然后嵌入到相对应的章节中,读者在学习本书时,如果遇到理解困难,便可直接扫码观看详细地视频讲解。

附赠整体扫码下载包

在本次改版过程中,为了让图书达到更优性价比,在勘误书中错误的同时,我们增加一个扫码下载包,其中包含以下内容:

● 45讲、超过10小时的精彩讲解视频,精练地分析了C/C++算法的基本理论和在实践中的应用;

● 本书第4篇电子文档;

● 本书中所有程序示例的源代码。

致谢、勘误与支持

一本真正的好书,从策划到出版上市会凝聚很多人行之有效的想法及智慧,它不仅为读者打开一扇学习知识的门,更为读者在书本之外搭建起一条提升能力的阶梯。感谢嵌入式开发工程师陈黎娟女士为本书检查代码做出勘误修订。为了让本书更加完善,读者在学习本书的过程中如果发现有不明白的地方或者有更好的算法和其他建议,欢迎您发送邮件到1057762679@qq.com邮箱和我们交流。

编者2017年5月第1篇算法基础篇第1章算法概述

计算机技术,特别是计算机程序设计技术极大地改变了人们的工作方式。现代的设计任务大多通过程序代码编程交给计算机来完成,算法在其中起到了至关重要的作用。毫不夸张地说,算法是一切程序设计的灵魂和基础。本章主要介绍算法的一些基本概念、发展历史、表示方式和应用等。1.1什么是算法

什么是算法(Algorithm)呢?算法就是用于计算的方法,通过这种方法可以达到预期的计算结果。

除此定义外,在一般的教科书或者字典上也有关于算法的专业解释。例如:算法是解决实际问题的一种精确描述方法;算法是对特定问题求解步骤的一种精确描述方法等。目前,广泛认可的算法的专业定义是模型分析的一组可行的、确定的和有穷的规则。

通俗地讲,可以将算法理解为一个完整的解题步骤,由一些基本运算和规定的运算顺序构成。通过这样的解题步骤可以解决特定的问题。从计算机程序设计的角度来看,算法由一系列求解问题的指令构成,能够根据规范的输入在有限的时间内获得有效的输出结果。算法代表了用系统的方法来描述解决问题的一种策略机制。

下面举一个例子来看算法是如何在现实生活中发挥作用的。最典型的例子就是统筹安排,假设有3件事(事件A、事件B和事件C)要做。

做事件A需要耗费5分钟。

做事件B需要耗费5分钟但需要15分钟的时间才可以得到结果,例如烧水等待水开的过程。

做事件C需要耗费10分钟。

那么我们应该如何来合理安排这3件事呢?一种方法是依次做,如图1-1所示。做完事件A,再做事件B,最后做事件C。这样总的耗时是5+(5+15)+10=35分钟,这显然是一种浪费时间的方法。

在实际生活中比较可取的方法是,先做事件B,在等待事件B完成的过程中做事件A和事件C。这样,等待事件B完成的15分钟正好可以完成事件A和事件C。此时,总的耗时是5+15=20分钟,效率明显提高,如图1-2所示。

图1-1 方法一

图1-2 方法二

在上面的例子中,提到了两种方法,可以看作是两种算法。第一种算法效率低,第二种算法效率高,但都达到了做完事情的目的。从这个例子可以看出,算法是有好坏之分的,好的算法可以提高工作效率。算法的基本任务就是对一个具体的问题找到一个高效的处理方法,从而获得最佳的结果。

一个典型的算法一般都可以从其中概括出5个特征:有穷性、确切性、输入、输出和可行性。下面结合上面的例子来分析这5个特征。(1)有穷性

算法的指令或者步骤的执行次数必须是有限的,执行时间也是有限的。例如,在上面的例子中,通过短短的几步就可以完成任务,而且执行时间都是有限的。(2)确切性

算法的每一个指令或者步骤都必须有明确的定义和描述。例如,在上面的例子中,为了完成3件事的任务,每一步做什么都有明确的规定。(3)输入

一个算法应该有相应的输入条件,用来刻画运算对象的初始情况。例如,在上面的例子中,有3个待完成的事件,事件A、事件B和事件C便是输入。(4)输出

一个算法应该有明确的输出结果。这是很容易理解的,没有结果的算法是毫无意义的。例如,在上面的例子中,输出结果便是3件事全部做完了。(5)可行性

算法的执行步骤必须是可行的,且可以在有限的时间内完成。例如,在上面的例子中,每一个步骤都切实可行。无法执行的步骤是毫无意义的,解决不了任何实际问题。

目前,算法的应用非常广泛,常用的算法包括递推算法、递归算法、穷举算法、贪婪算法、分治算法、动态规划算法和迭代算法等。本书将依次逐步向读者展示各种算法的原理和应用。1.2算法的发展历史

算法的起源,可以追溯到公元前1世纪中国古代的《周髀算经》,它是算经十书之一,原名《周髀》,主要阐述了古中国的盖天说和四分历法。在唐朝的时候,被定为国子监明算科的教材之一,并被改名为《周髀算经》。算法在古中国称为“演算法”。《周髀算经》中记载了勾股定理、开平方、等差级数等问题,其中用到了相当复杂的分数算法和开平方算法等。在随后的发展中,相继出现了割圆术、秦九韶算法和剩余定理等一些经典算法。

在国外,公元9世纪波斯数学家al-Khwarizmi提出了算法的概念。“算法”最初写为“algorism”,意思是采用阿拉伯数字的运算法则。到了18世纪,算法被正式命名为现在的“algorithm”。由于汉字在表述上不太直观,导致中国古代算法的发展比较缓慢,而采用阿拉伯数字的西方国家在算法领域则发展迅速。例如,著名的欧几里得算法(又称辗转相除法)就是典型的算法。

在历史上,大多数人都认可Ada Byron是第一个程序员。他在1842年编写了伯努利方程的求解算法程序,虽然未能执行,但奠定了计算机算法程序设计的基础。

后来,随着计算机的发展,在计算机上实现各种算法皆成为可能。算法在计算机程序设计领域再次得到发展。目前,无论采用何种编程语言,几乎所有的程序员都需要与算法打交道。1.3算法的分类

算法是一门古老而又庞大的学科,随着历史的发展,演化出多种多样的算法。按照不同的应用和特性,算法可以分为不同的类别。

1.按照应用来分类

按照算法的应用领域,也就是解决的问题,算法可以分为基本算法、数据结构相关的算法、几何算法、图论算法、规划算法、数值分析算法、加密/解密算法、排序算法、查找算法、并行算法和数论算法等。

2.按照确定性来分类

按照算法结果的确定性来分类,可以分为确定性算法和非确定性算法。

确定性算法:这类算法在有限的时间内完成计算,且得到的结果是唯一的,经常取决于输入值。

非确定性算法:这类算法在有限的时间内完成计算,但是得到的结果往往不是唯一的,也就是存在多值性。

3.按照算法的思路来分类

按照算法的思路来分类,算法可以分为递推算法、递归算法、穷举算法、贪婪算法、分治算法、动态规划算法和迭代算法等。1.4算法相关概念的区别

算法其实是一个很抽象的概念,往往需要依托于具体的实现方式才能体现其价值,例如在计算机编程中的算法、数值计算中的算法等。本书重点讲解的是算法在计算机编程中的应用,由于算法的抽象性,导致读者很容易产生混淆,这里有必要先澄清一些基本概念。

1.算法和公式的关系

前面谈到的算法很容易让我们联想到数学中的公式。公式是解决某类问题,有特定的输入和结果输出,能在有限的时间内完成,并且公式都是完全可以操作并计算的。公式是提供了一种算法,但算法绝不完全等同于公式。

公式是一种高度精简的计算方法,可以认为就是一种算法,它是人类智慧的结晶。而算法并不一定是公式,算法的形式可以比公式更复杂,解决的问题更广泛。

2.算法与程序的关系

如前面所述,算法是依托于具体的实现方式的。虽然一提到算法,我们就会联想到计算机的程序设计,但算法并非仅限于此。例如,在传统的笔算中,通过纸和笔按照一定的步骤完成的计算也是算法的应用,在速记中,人们通过特殊的方法来达到快速巩固记忆的目的,这也是一种算法的应用。

在计算机程序设计中,算法的体现更为广泛,几乎每个程序都需要用到算法,只不过有些算法比较简单,有些算法比较复杂而已。

算法和程序设计语言是不同的。目前比较流行的程序设计语言包括Visual Basic、C、C++、C#、Java、Pascal、Delphi、PB等。程序设计语言是实现算法的一种形式,也是一种工具。往往需要首先熟悉程序设计语言的语法格式,才能使用这种程序语言编写合适的算法,实现程序的运行。学习一门程序设计语言是比较容易的,难的是如何正确合理地运用算法来编写程序代码来解决实际问题。

3.算法与数据结构的关系

数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,例如数组、结构体、联合、指针和链表等。因为不同的数据结构所采用的处理方法不同,计算的复杂程度也不同,因此算法往往是依赖于某种数据结构的,也就是说,数据结构是算法实现的基础。

计算机科学家尼克劳斯·沃思(Nikiklaus Wirth)曾提出了一个著名的公式:数据结构+算法=程序。后来,他出版了著名的《数据结构+算法=程序》一书。从中可以看出算法和数据结构的关系。

经过前面的介绍,现在对程序、算法、数据结构、程序设计语言有了比较深刻的认识。如果给出一个公式,这三者的关系则可以表述成如下形式:

数据结构+算法+程序设计语言=程序

其中,数据结构表示的是处理的对象,算法是计算和处理的核心方法,程序设计语言是算法的实现方式,把它们综合起来便构成了一个实实在在的程序。

注意: 算法是解决问题的一个抽象方法和步骤,同一个算法在不同的语言中具有不同的实现形式,这依赖于数据结构的形式和程序设计语言的语法格式。1.5算法的表示

算法是用来解决实际问题的,问题简单,算法也简单;问题复杂,一般算法也相应地复杂。为了便于交流和进行算法处理,往往首先需要将算法进行描述,也就是算法的表示。一般来说,算法可以采用自然语言表示、流程图表示、N-S图表示和伪代码表示这几种方式。1.5.1 自然语言表示

所谓自然语言,就是自然地随着文化演化而来的语言,如汉语、英语等。通俗地讲,自然语言就是我们平时口头描述的语言。对于一些简单的算法,可以采用自然语言口头描述算法的执行过程,例如前面的事件A、B、C统筹安排的例子。

但是,随着需求的发展,很多算法都比较复杂,很难用自然语言来描述,同时自然语言的表述烦琐难懂,不利于交流和发展。因此,需要采用其他的方式进行表示。

其实,我国古代早期的算法也可以看作是自然语言表示。正是由于这种复杂、烦琐的自然语言表示大大阻碍了中国古代算法的发展。这也正是我国古代算法起源早,但后来却落后于西方国家的原因。1.5.2 流程图表示

流程图是一种图形表示算法流程的方法,由一些图框和流程线组成,如图1-3所示。其中,图框表示各种操作的类型,图框中的说明文字和符号表示该操作的内容,流程线表示操作的先后次序。

流程图最大的优点便是简单直观、便于理解,在计算机算法领域有着广泛的应用。例如,计算两个输入数据a和b的最大值,可以采用图1-4所示的流程图来表示。

图1-3 流程图的图元

图1-4 求最大值的流程图

在实际使用中,一般采用如下3种流程结构。

1.顺序结构

顺序结构是最简单的一种流程结构,一个接着一个进行处理,如图1-5所示。一般来说,顺序结构适合于简单的算法。

2.分支结构

分支结构常用于根据某个条件来决定算法走向的场合,如图1-6所示。这里首先判断条件P,如果P成立,则执行B,否则执行A,然后再继续下面的算法。分支结构有时也称为条件结构。

图1-5 顺序结构

图1-6 分支结构

3.循环结构

循环结构常用于需要反复执行的算法操作,按照循环的方式的不同,可以将其分为当型循环结构和直到型循环结构,分别如图1-7和图1-8所示。

图1-7 当型循环结构

图1-8 直到型循环结构

当型循环结构和直到型循环结构的区别如下:

当型循环结构先对条件进行判断,然后再执行,一般采用while语句来实现。

直到型循环结构先执行,然后再对条件进行判断,一般采用until、do…while等语句来实现。

注意: 无论使用当型循环结构还是直到型循环结构,都需要进行合适的处理,以确保最终能够跳出循环,否则将构成死循环,而死循环是没有任何意义的。

一般来说,采用上述3种流程结构,可以完成所有的算法任务。通过合理地安排流程结构,可以构成结构化的程序,这样便于算法程序的开发和交流。1.5.3 N-S图表示

N-S图也被称为盒图或CHAPIN图,1973年由美国学者I.Nassi和B.Shneiderman提出。他们发现采用流程图可以清楚地表示算法或程序的运行过程,但其中的流程线并不是必需的,因此创立了N-S图。在N-S图中,把整个程序写在一个大框图内,这个大框图由若干个小的基本框图构成。采用N-S图也可以方便地表示流程图的内容。

采用N-S图表示的顺序结构如图1-9所示。采用N-S图表示的分支结构如图1-10所示。采用N-S图表示的当型循环结构如图1-11所示。采用N-S图表示的直到型循环结构如图1-12所示。

图1-9 顺序结构

图1-10 分支结构

图1-11 当型循环结构

图1-12 直到型循环结构1.5.4 伪代码表示

伪代码(Pseudocode)是另外一种算法描述的方式。伪代码并非真正的程序代码,其介于自然语言和编程语言之间。因此,伪代码并不能在计算机上运行。使用伪代码的目的是将算法描述成一种类似于编程语言的形式,例如C、C++、Java、Pascal等。这样,程序员便可以很容易理解算法的结构,再根据编程语言的语法特点,稍加修改,便可以实现一个真正的算法程序。

伪代码在C语言中得到广泛的应用,其他语言(C++、Java、C#等)大都借鉴了C语言的语法特点。这些编程语言在很大程度上都和C语言类似,例如,都采用if语言表示条件分支和判断,采用for语句、while语句表示循环等。因此,可以利用这些共性来描述算法,忽略编程语言之间的差异。

在使用伪代码表示算法时,程序员可以使用自然语言来进行表述,也可以采用简化的编程语句来表示,相当随意。不过,为了编程代码的交流和重利用,程序员还是应该尽可能表述得清楚明了。

下面举一个简单的使用伪代码表示的程序代码的例子。

其中,演示的是求两个数据最大值的伪代码。首先将输入的数据分别赋值给变量a和变量b,然后通过if语句进行判断,将最大者赋值给变量max,最后输出变量max。从这个例子中可以看出,伪代码表示很随意,但又高度接近编程语言。程序员可以根据这段伪代码和某种编程语言的语法特点进行修改,从而得到真正可执行的程序代码。

在使用伪代码时,必须结构清晰、代码简单、可读性强,这样才能更有利于算法的表示。否则将适得其反,让人很难懂,这样就失去了伪代码表示的意义。1.6伪代码与算法程序的对应

使用伪代码来描述算法的最大优势就是简洁易懂、书写方便,也容易向C、C++语言过渡。传统的流程图和N-S图虽然也具有直观易懂的特点,但是画起来比较费事。在设计一个算法时,可能要反复修改,而修改流程图或者N-S图是比较麻烦的。相比较而言,伪代码是最简单和便于在算法设计之初反复修改的。

虽然伪代码并无固定的、严格的语法规则,但是为了便于书写和阅读,仍然建议按照一定的规则来编写。这样便于清晰地实现从伪代码到C、C++算法的转换。下面将介绍一些基本的伪代码书写规范及其与C、C++算法的对应关系。1.6.1 基本对应规则

伪代码与C、C++代码之间具有一些基本的对应规则,主要体现在如下几点:(1)在伪代码中,每一条指令占一行,指令后不跟任何符号。而对应的C、C++代码则同样是每一条指令占一行,不过语句要以分号结尾。(2)在伪代码中,可以使用△来表示注释。而对应的C、C++代码则需要使用“//”或者“/*……*/”来表示注释。(3)在伪代码中,为了简单方便,变量名和保留字可以不区分大小写。而对应的C、C++代码则是区分大小写的。(4)在伪代码中,变量不需要声明就可以直接使用。而对应的C、C++代码则必须在合适的位置将变量进行声明和初始化之后才可以使用。(5)赋值语句用符号“←”表示,x←exp表示将exp的值赋给x,其中x是一个变量,exp是一个与x同类型的变量或表达式,多重赋值i←j←e是将表达式e的值赋给变量i和j,这种表示与j←e和i←e等价。例如:

而对应的C、C++代码则需要使用“=”来表示,例如伪代码语句转换为C、C++代码为:(6)在伪代码中,通常用连续的数字或字母来表示同一级模块中的连续语句,有时也可省略标号。例如:

而对应的C、C++代码则无须用数字或字母来表示。1.6.2 分支结构

为了描述if-then-else的分支结构,伪代码需要在书写上采用“缩进”来表示。“缩进”的基本原则如下:

同一模块的语句有相同的缩进量。

次一级模块的语句相对与其父级模块的语句缩进。

典型的分支结构伪代码示例如下:

而相对应的C、C++代码用花括号“{”和“}”的嵌套来表示分支结构,上述伪代码对应的C、C++代码可以写为如下形式:1.6.3 循环结构

使用伪代码描述循环语句时,同样一般使用“缩进”来表示。例如:

而相对应的C、C++代码则使用花括号“{”和“}”的嵌套来表示。例如,上述伪代码转换为C、C++代码如下:1.6.4 数组及函数

在伪代码中,数组元素的存取采用数组名后跟“[下标]”表示。例如A[j]指示数组A的第j个元素。符号“…”用来指示数组中值的范围。例如,A[1…j]表示含元素A[1]、A[2]、…、A[j]的子数组。

函数值利用“return(函数返回值)”语句返回,调用方法与Pascal类似;过程用“call过程名”语句来调用。例如:

而对应的C、C++代码中,函数也是使用return来表示返回值,过程则不需要用call来表示。1.7算法的性能评价

算法其实就是解决问题的一种方法,一个问题的解决往往可以采用多种方法,但每种方法所用的时间和得到的效果往往是不一样的。好的算法执行效率高,所耗费的时间短,差的算法则往往因为需要耗费更多的时间,导致效率低下。

算法的一个重要任务便是找到合适的、效率高的解决问题的方法,也就是最合适的算法。从理上来讲,这就需要对算法的性能有一个合理的评价。一个算法的优劣往往通过算法复杂度来衡量,法复杂度包括时间复杂度和空间复杂度两个方面。

1.时间复杂度

时间复杂度也就是所说的算法执行所需要耗费的时间,时间越短,算法越好。一个算法执行的时间往往无法精确估计,通常需要在实际的计算机中运行才能知道。但可以对算法代码进行估计,从而得到算法的时间复杂度。

第一,算法代码执行的时间往往和算法代码中语句执行的数量有关。由于每条语句的执行都需要时间,所以语句执行的次数越多,整个程序所耗费的时间就越长。因此,简短的算法程序往往执行速度更快。

第二,算法的时间复杂度还与问题的规模有关。这方面在专门的算法分析中有详细的介绍,这里限于篇幅不再赘述。有兴趣的读者可以参阅算法分析相关的书籍。

2.空间复杂度

空间复杂度指的是算法程序在计算机中执行所需要消耗的存储空间。空间复杂度可以分为如下两个方面:

程序保存所需要的存储空间,也就是程序的大小。

程序在执行过程中所需要消耗的存储空间资源,例如,程序在执行过程中的中间变量等。

一般来说,程序的规模越小,执行过程中消耗的资源越少,这个程序也就越好。在算法分析中,空间复杂度有更为详细的度量,这里限于篇幅不再赘述,有兴趣的读者可以阅读相关的书籍。1.8算法实例

通过前面的介绍,我们对算法有了更为清晰的认识。算法是一个抽象的解决问题的方法,需要依托于具体的实现手段才能体现其价值。由于本书重点讨论的是计算机程序设计中的算法,因此这里的实现手段可以狭隘地认为是编程语言,例如C、C++、C#、BASIC、Java、Pascal等。

本书以流行的C语言为例来介绍各种算法的原理和应用。对于其他编程语言,只要熟悉算法的原理和编程语言的语法特点,对代码稍加修改,即可方便地进行移植。

即扫即看本节精彩讲解视频

明确了编程语言之后,还需要确定编程工具。目前流行的C语言集成开发环境包括Visual C++、Dev-C++、Turbo C、Code::Blocks等,本书选用了应用最为广泛的Visual C++集成开发环境进行算法的介绍。其实本书中的所有程序不加修改或者稍加修改便可以在其他C语言集成开发环境中运行。

在正式进入算法讲解之前,先通过一个实例带领读者在Visual C++集成开发环境中完成一个简单的算法程序的编写、调试和应用的全部步骤。为了便于突出重点,在后面的章节中,将会直接给出算法的源代码和运行结果,而不再赘述操作步骤。1.8.1 查找数字

在一个数组中查找数据是经常用到的操作,例如,在一个班级的学生档案中查找某个学生的记录等。这里将这个问题进行简化,程序随机生成一个拥有20个整数数据的数组,然后输入要查找的数据。接着可以采用最简单的逐个对比的方法进行查找,也就是顺序查找的方法,这种方法的伪代码示例如下:

这里的伪代码仅表示了算法的一个基本流程,并不是真正的算法程序代码。但从这里可以看出这个程序的基本结构,首先输入待查找的数据,并生成一个随机的数据数组,然后从头到尾对数据逐个进行比较,当数据值相等时找到数据,并输出该数据的位置。【程序示例1-1】在拥有20个整数数据的数组中查找某个数据

程序的示例代码如下:

在该程序中,main()函数生成20个随机数,然后使用for语句和if语句进行顺序查找。当查找到该数据时,便退出查找,输出该数据的位置,否则输出没找到的数据。1.8.2 创建项目

明确算法程序后,便可以在Visual C++集成开发环境中执行该程序。首先,需要创建一个C项目,并添加一个空的源程序文件以供代码编写。主要的操作步骤如下所示。(1)启动Microsoft Visual C++6.0集成开发环境。(2)选择File|New命令,打开New对话框,如图1-13所示。(3)在Projects选项卡中选择Win32 Console Application选项,并在Project name文本框中输入项目的名称,Location文本框用于设置保存路径。(4)单击OK按钮,在弹出的对话框中选择An empty project单选按钮,如图1-14所示。

图1-13 New对话框

图1-14 选择An empty project单选按钮(5)单击Finish按钮,此时弹出New Project Information对话框,如图1-15所示。该对话框中列出了一些所创建项目的主要信息。(6)单击OK按钮,完成项目的建立。此时只是一个空项目,项目中没有任何文件,如图1-16所示。

图1-15 New Project Information对话框

图1-16 空项目(7)需要在该项目中添加源代码文件。选择File|New命令,打开New对话框,如图1-17所示。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载