程序设计与软件开发基础(一)
程序设计基础《程序设计基础》教学大纲-刘喜平3.1 教学大纲

《程序设计基础》课程教学大纲课程编号:03045制定单位:信息管理学院制定人(执笔人):刘喜平审核人:万常选制定(或修订)时间:2016年 02月 28 日江西财经大学教务处《计算机组成原理》课程教学大纲一、课程总述本课程大纲是以2014年计算机科学与技术专业本科专业人才培养方案为依据编制的。
二、教学时数分配三、单元教学目的、教学重难点和内容设置第一章程序设计与软件开发【教学目的】本章介绍程序设计的基本背景,如什么是程序,程序是如何设计的,算法、数据结构是什么,什么是软件,为什么提出了软件工程的概念等。
【重点难点】重点:程序设计语言的理解,算法和数据结构的理解难点:数据结构的概念【教学内容】1.1 程序设计的基本概念介绍什么是程序,什么是程序设计语言,以及什么是程序设计1.2 算法与数据结构介绍算法及其特征、算法的结构、算法的描述,以及数据结构的概念。
1.3 软件开发介绍什么是软件,软件与程序之间的区别,讲解软件工程的必要性。
第二章C语言概述【教学目的】本章将描述C语言的一个子集,这个子集中的内容是C语言中最基础、最常用的部分。
通过本章,读者对C语言和C程序将有一个较为全面的了解;学习完本章后,读者可以阅读和编写简单的程序,为学习其他章节打下基础;再次,对于有其他语言基础的读者而言,通过本章可以快速地进入到C语言的角色中来。
本章首先介绍C语言的发展历史,以及C语言的特点。
然后,将通过实例介绍C程序的构成。
之后,将介绍C语言中最基本的知识点:常见数据类型、表达式、输入和输出、语句和函数。
【重点难点】重点:C程序的构成、变量、常见数据类型、printf和scanf函数、if语句、for和while语句、函数难点:printf和scanf函数、for和while语句、函数【教学内容】2.1 C语言的发展与特点介绍C语言产生的背景和特点。
2.2 一个C程序实例通过一个实例介绍C程序的构成。
2.3 C语言的字符集与标识符介绍C语言字符集的组成和标识符的注意事项2.4 数据类型介绍集中最常见的数据类型:int、float、double和char2.5 常量和变量介绍常量和变量的概念,常见数据类型常量的表示方法,变量的声明与初始化2.6 运算符和表达式介绍算术运算符、赋值运算符、关系运算符等常见的运算符,以及这些运算符组成的表达式2.7 输入与输出介绍printf和scanf函数输入输出一般格式,并举例说明。
程序设计基础学习知识(学习知识重点)

程序设计基础学习知识(学习知识重点)程序设计基础学习知识(学习知识重点)随着计算机技术的飞速发展,程序设计成为了当今社会的重要技能之一。
无论是从事软件开发、数据分析还是人工智能等领域,掌握良好的程序设计基础知识是必不可少的。
本文将介绍程序设计基础学习的重点,帮助读者打下坚实的基础并掌握核心技能。
一、算法与数据结构学习程序设计的第一个重点是算法与数据结构。
算法是解决问题的方法和步骤,是计算机程序的核心。
掌握各种常用的算法,如排序算法(如冒泡排序、快速排序)、查找算法(如二分查找)等,能够提高程序的效率和性能。
数据结构是组织和存储数据的方式,它能够对数据进行高效的操作和管理。
常见的数据结构包括数组、链表、栈、队列、树、图等。
学习和理解各种数据结构的特点及其适用场景,对于设计高效的程序至关重要。
二、编程语言掌握一种或多种编程语言是程序设计的基本要求。
不同的编程语言有不同的特点和应用场景,常见的编程语言有C、C++、Java、Python 等。
初学者可以选择一门易于上手的编程语言,如Python,来进行学习和练习。
了解编程语言的基本语法、数据类型、控制结构、函数等内容。
通过编写简单的程序来巩固对语言的掌握,并逐渐扩展到实际应用中。
同时,学会利用编程语言提供的调试工具来调试程序,解决出现的问题。
三、软件开发工具和环境学习程序设计还需要了解并掌握一些常用的软件开发工具和环境。
例如,集成开发环境(IDE)是开发程序的利器,提供了代码编辑、编译、调试、运行等功能。
常见的IDE有Eclipse、Visual Studio、PyCharm等。
版本控制工具如Git可以帮助程序员管理代码的版本,并支持团队协作开发。
在学习过程中,了解和掌握这些工具的使用,能够提高开发效率和代码质量。
四、问题解决和调试能力在程序设计学习的过程中,经常会遇到各种问题和错误。
培养良好的问题解决和调试能力,是每个程序员必备的技能。
学会查找错误信息、定位问题所在,将错误的代码进行修复,并进行测试验证。
程序设计基础

程序设计基础程序设计是计算机科学领域中的重要基础知识,它涉及到计算机程序的设计、开发和实现。
程序设计的基础是算法和数据结构,它们是程序的核心组成部分。
在本文中,我们将探讨程序设计基础的重要概念和技巧。
一、算法算法是解决问题的步骤和规则的有限序列。
在程序设计中,算法用于描述解决问题的方法和过程。
一个好的算法应具备清晰的逻辑、正确的结果和高效的执行速度。
设计一个算法需要考虑以下几个方面:1. 输入和输出:算法需要清楚地定义输入和输出的形式,这有助于准确地描述解决问题的过程。
2. 步骤和顺序:算法应该以一系列具有逻辑关系的步骤展示。
这些步骤应按照正确的顺序执行。
3. 控制结构:算法可以使用不同的控制结构,如顺序结构、选择结构和循环结构。
这些结构可以控制程序的流程,使其按照预定的方式执行。
二、数据结构数据结构是组织和存储数据的方式。
程序设计中常用的数据结构包括数组、链表、栈、队列和树等。
选择合适的数据结构对于问题的解决至关重要。
以下是一些常见的数据结构及其特点:1. 数组:数组是一种存储相同类型数据元素的数据结构。
它具有随机访问的特点,可以通过下标快速访问元素。
但数组的长度固定,插入和删除元素不方便。
2. 链表:链表是一种动态的数据结构。
它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
链表的长度可以动态调整,但访问元素需要遍历链表。
3. 栈:栈是一种具有后进先出特性的数据结构。
它只能在栈顶进行插入和删除操作,具有很快的插入和删除速度。
栈常用于表达式求值、函数调用等场景。
4. 队列:队列是一种具有先进先出特性的数据结构。
它只能在队尾插入元素,在队头删除元素。
队列常用于任务调度、缓冲区管理等场景。
5. 树:树是一种非线性的数据结构,由一系列节点和边组成。
树的节点可以有多个子节点,但每个节点只能有一个父节点。
树常用于文件系统、图形界面等场景。
三、软件开发生命周期在程序设计过程中,开发人员需要遵循一定的开发生命周期。
02243计算机软件基础(一)

世界上第一台电子计算机ENIAC
诞生于1942年
18800个晶体 管
70000个电阻 器
18000个电容 器
重量30吨
耗电140千瓦 /h
5000次加法/s
第8页
Pentium IV(2000)
42,000,000个晶体管 时钟频率1.5GHz 运算速度为1700 MIPS (MIPS 代表‘百万指令
第 26 页
软件工程概念
软件工程是指导计算机软件开发和维护的工程学 科,采用工程的概念、原理、技术和方法来开发 与维护软件。
贯穿于这一学科的基本线索是软件生命期学说, 它告诉软件研制者和维护者“什么时候做什么以 及怎么做”。
软件生命期就象人的寿命一样,从出生算到死亡, 从产生开发要求算到软件报废为止。包括:软件 计划、需求分析、软件开发和软件维护四个时期。
汇编语言 为符号化的机器语言。它用助记 符和标识符代替机器指令的操作码和地址码。
高级语言 是一种与具体的计算机指令系统 无关,独立于计算机类型,而且表达方式接 近于自然语言或数学语言,容易被人们掌握 和书写的语言。如C,Pascal,java。
第 17 页
举例
任务:x+1→x 机器语言
00111110 00001001 00111111B 或 3E 09 3FH
3、硬件与软件的关系
软硬件独立原理和互动原理
独立原理:软件理论上能实现的功能本质上与 硬件是独立的(不管硬件是何种形式) 互动原理:软件实际能实现的功能受制于硬件, 硬件发展一个台阶,软件就能前进一大步
软硬件等效定律
简单的硬件+复杂的软件 简单的软件+复杂的硬件 最终都可以完成同一个任务,不同的只是时间!
计算机程序设计基础知识

计算机程序设计基础知识计算机程序设计是计算机科学的基础和核心领域之一,它涉及从软件开发到算法设计等多个方面的知识。
掌握计算机程序设计的基础知识对于计算机科学专业的学生和从事软件开发的人员来说至关重要。
本文将介绍计算机程序设计的基础知识,包括编程语言、算法和数据结构。
一、编程语言编程语言是计算机程序设计的重要工具,它是人与计算机之间进行交流和沟通的方式。
编程语言可以分为低级语言和高级语言两种。
1. 低级语言低级语言是直接面向计算机硬件的语言,它与机器语言相对应。
机器语言是计算机唯一能够理解和执行的语言,它由二进制代码表示,对于人来说非常晦涩难懂。
低级语言分为汇编语言和机器语言。
- 汇编语言是一种符号性语言,使用助记符号来代替二进制代码,使得程序员更容易理解和编写程序。
但是,汇编语言与特定的硬件架构紧密相关,可移植性较差。
- 机器语言是由二进制代码表示的指令集合,直接由计算机硬件执行。
机器语言具有最高的执行效率,但编写和理解机器语言程序非常困难。
2. 高级语言高级语言是相对于低级语言而言的,它以人类更易理解的方式来编写程序,并通过编译或解释器将程序转换成机器语言执行。
高级语言依据不同的语法和语义特点分为多种类型,例如C语言、Java、Python、C++等等。
高级语言相对于低级语言而言具备以下优点:- 可移植性更好:高级语言的代码相对独立于底层硬件,只需要对应的编译器或解释器即可在不同的平台上执行。
- 易于学习和编写:高级语言使用自然语言的表达方式,使得程序员更容易理解和编写程序。
- 提高开发效率:高级语言提供丰富的库和工具,可以快速地构建复杂的应用程序。
二、算法算法是解决问题的一系列步骤和操作的有序集合。
在计算机程序设计中,算法是实现程序功能的核心。
编写高效的算法可以提高程序的执行效率和响应速度。
算法的两个重要性质是正确性和效率。
1. 正确性算法的正确性意味着算法能够按照预期解决特定的问题。
为了保证算法的正确性,可以通过数学证明、逻辑推理和测试等方法进行验证。
一、程序设计基本知识

1.1 程序与程序语言1.2.1 程序与程序语言1.计算机语言什么是计算机语言?为什么要使用计算机语言?过去,一提到语言这个词,人们自然想到的是像英语、汉语等这样的自然语言,因为它是人和人相互交流信息不可缺少的工具。
而今天,计算机遍布了我们生活的每一个角落,除了人和人之间的相互交流之外,我们必须和计算机交流。
用什么样的方式和计算机做最直接的交流呢?人们自然想到的是最古老也最方便的方式--语言。
人和人交流用的是双方都能听懂和读懂的自然语言,同样,人和计算机交流也要用人和计算机都容易接受和理解的语言,这就是计算机语言。
人们用自然语言讲述和书写,目的是给另外的人传播信息。
同样,我们使用计算机语言把我们的意图表达给计算机,目的是使用计算机。
计算机语言是根据计算机的特点而编制的,它没有自然语言那么丰富多样,而只是有限规则的集合,所以它简单易学。
但是,也正因为它是根据机器的特点编制的,所以交流中无法意会和言传,而更多地表现了说一不二,表现了"规则"的严谨。
例如该是";"的地方不能写成".",该写"a"的地方不能写成"A",这使得人和计算机的交流在一开始会有些不习惯。
不过,只要认识到计算机语言的特点,注意学习方法,把必须的严谨和恰当的灵活相结合,一切都会得心应手。
2.程序我们知道,计算机是一种具有内部存储能力的自动、高效的电子设备,它最本质的使命就是执行指令所规定的操作。
如果我们需要计算机完成什么工作,只要将其步骤用诸条指令的形式描述出来,并把这些指令存放在计算机的内部存储器中,需要结果时就向计算机发出一个简单的命令,计算机就会自动逐条顺序执行操作,全部指令执行完就得到了预期的结果。
这种可以被连续执行的一条条指令的集合称为计算机的程序。
也就是说,程序是计算机指令的序列,编制程序的工作就是为计算机安排指令序列。
但是,我们知道,指令是二进制编码,用它编制程序既难记忆,又难掌握,所以,计算机工作者就研制出了各种计算机能够懂得、人们又方便使用的计算机语言,程序就是用计算机语言来编写的。
软件开发与程序设计

软件开发与程序设计软件开发与程序设计是信息技术领域中的核心组成部分,它们是构建现代软件系统的基础。
软件开发是一个复杂的过程,涉及多个阶段,包括需求分析、设计、编码、测试和维护。
程序设计则是开发过程中的一个关键环节,它涉及到编写代码以实现特定的功能。
软件开发流程1. 需求分析:这是软件开发的第一步,开发者需要与客户沟通,明确软件需要解决的问题和满足的需求。
需求分析的目的是确定软件的功能、性能和用户界面。
2. 系统设计:在这一阶段,开发者根据需求分析的结果,设计软件的架构和组件。
设计阶段包括概念设计、逻辑设计和物理设计。
3. 编码:编码是将设计转化为实际代码的过程。
开发者使用特定的编程语言来编写代码,实现软件的功能。
4. 测试:测试是确保软件质量的关键步骤。
它包括单元测试、集成测试、系统测试和验收测试,目的是发现并修复软件中的错误。
5. 部署:一旦软件通过测试,就可以部署到生产环境中供用户使用。
6. 维护:软件发布后,开发者需要持续对其进行维护,包括修复错误、更新功能和改进性能。
程序设计原则程序设计不仅仅是编写代码,它还涉及到遵循一些基本原则,以确保代码的质量和可维护性:1. 模块化:将程序分解为独立的模块,每个模块负责一个特定的功能,有助于提高代码的可读性和可维护性。
2. 抽象:抽象是简化复杂问题的一种方法,通过隐藏不必要的细节,只展示关键信息。
3. 封装:封装是将数据和操作这些数据的方法组合在一起,限制对数据的直接访问。
4. 继承:继承允许新创建的类(子类)继承现有类(父类)的属性和方法,从而减少代码重复。
5. 多态:多态允许同一个接口以不同的方式在子类中实现,增加了程序的灵活性。
编程语言的选择选择合适的编程语言对于软件开发至关重要。
不同的语言有不同的特点和适用场景:- C/C++:适用于系统编程、游戏开发和性能密集型应用。
- Java:以其跨平台特性和广泛的企业级应用而闻名。
- Python:以其简洁性和易读性而受到欢迎,常用于数据分析、机器学习和Web开发。
程序设计与开发基础知识

程序设计与开发基础知识程序设计与开发是现代科技发展中至关重要的领域之一。
无论是移动应用、网站设计还是人工智能领域,都离不开程序设计与开发基础知识的支持。
本文将探讨程序设计与开发的基础知识,并介绍相关的编程语言、开发工具以及常见的开发流程。
一、基础知识概述程序设计与开发是指使用计算机语言编写代码来实现特定功能的过程。
它需要掌握一些基础知识,例如:1. 编程语言:常见的编程语言包括C、C++、Java、Python等。
不同编程语言拥有不同的特点和应用场景,开发者需要根据具体需求选择适合的编程语言。
2. 数据结构与算法:数据结构与算法是程序设计与开发的核心。
开发者需要了解不同的数据结构(如数组、链表、栈、队列等)以及相应的操作、算法(如查找、排序、递归等)来实现高效的程序设计。
二、编程语言编程语言是进行程序设计与开发的工具之一。
下面介绍几种常见的编程语言:1. C语言:C语言是一种通用的高级编程语言,被广泛应用于系统软件开发和嵌入式系统编程等领域。
它具有简洁、高效的特点,对底层硬件的操作比较灵活。
2. C++语言:C++语言是在C语言基础上发展起来的一种面向对象的编程语言。
它除了具备C语言的特性外,还支持面向对象的编程思想,能够更好地完成大型软件项目的开发。
3. Java语言:Java语言是一种跨平台的面向对象编程语言,具有可移植性和安全性等特点。
Java语言广泛应用于网络应用、企业级应用和移动应用等领域。
4. Python语言:Python语言是一种简单易学、高效灵活的脚本语言,适用于快速开发、网站搭建和科学计算等领域。
它具有丰富的第三方库和良好的可扩展性。
三、开发工具开发工具是进行程序设计与开发的必备工具。
下面介绍几种常见的开发工具:1. 集成开发环境(IDE):IDE是一种集成了代码编辑器、编译器和调试器等功能的开发工具。
常见的IDE有Visual Studio、Eclipse、IntelliJ IDEA等,它们提供了丰富的功能和辅助工具,能够提高开发效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第27讲程序设计与软件开发基础(一)教学目标及基本要求掌握逐步求精的结构化程序设计方法,初步掌握良好的程序设计风格的内涵,掌握算法的基本概念,理解面向对象程序设计的基本概念。
教学重点逐步求精的结构化程序设计方法,算法的基本概念。
教学难点面向对象程序设计的基本概念,算法的复杂度。
教学内容程序设计的风格结构化程序设计面向对象程序设计算法的基本概念算法的复杂度教学时间1学时7.1 程序设计概述7.1.1程序设计的风格1.程序设计风格程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。
程序设计的风格总体而言应该强调简单和清晰,程序必须是可以理解的。
主导的程序设计风格:“清晰第一,效率第二” 。
2.良好程序设计风格(1)源程序文档化①符号名的命名见名知意名字不宜太长不要使用相似的名字不要使用关键字做标识符同一个名字不要有多种含义②程序注释序言性注释:通常位于每个程序的开头部分,它给出程序的整体说明。
主要描述内容包括:程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期、修改日期等。
功能性注释:一般嵌在源程序体之中,主要描述其后的语句或程序做什么。
③视觉组织在程序中利用空格、空行、缩进等技巧使程序层次清晰。
(2)数据说明的方法①数据说明的次序规范化:数据说明次序固定,便程序理解、阅读和维护,可以使数据的属性容易查找,也有利于测试、排错和维护。
②说明语句中变量安排有序化:当一个说明语句说明多个变量时,变量按照字母顺序排序为好。
③使用注释来说明复杂数据的结构。
④显式地说明一切变量。
(3)语句的结构①在一行内只写一条语句。
②程序编写应优先考虑清晰性,除非对效率有特殊要求,即清晰第一,效率第二。
③首先要保证程序正确,然后才要求提高速度。
④避免使用临时变量而使程序的可读性下降。
⑤避免采用复杂的条件语句和不必要的转移,尽量使用库函数。
⑥数据结构要有利于程序的简化,程序要模块化,且要尽量使模块功能单一化,利用信息隐蔽,确保每一个模块的独立性。
⑦尽量只采用3种基本控制结构来编写程序。
(4)输入和输出①对所有的输入数据都要检验数据的合法性以及检查输入项的各种重要组合的合理性。
②输入格式要简单,以使输入的步骤和操作尽可能简单。
③输入数据时,应允许使用自由格式和缺省值。
④输入一批数据时,最好使用输入结束标志。
⑤以交互式方式输入、输出数据时,要在屏幕上有明确的提示符,数据输入结束时,应在屏幕上给出状态信息。
⑥当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性;给所有的输出加注释,并设计良好的输出报表格式。
7.1.2 结构化程序设计1.结构化程序设计的原则自顶向下、逐步求精、模块化、限制使用GOTO语句。
(1)自顶向下先总体,后细节;先全局目标,后局部目标。
(2)逐步求精设计一些子目标作为过渡,逐步细化。
(3)模块化把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。
(4)限制使用GOTO语句使用GOTO语句有时会使程序执行效率较高,但也容易造成程序混乱,程序不易理解、不易排错、不易维护,因而要尽量限制使用GOTO语句。
2.结构化程序的基本结构与特点结构化程序的基本结构只有3种:顺序、选择和循环(1)顺序结构如图7-1所示,顺序结构是顺序执行结构。
所谓顺序执行,就是按照程序语句行的自然图7-1 顺序结构(2)选择结构选择结构又称为分支结构,它包括简单选择和多分支选择结构,这种结构可以根据设定的条件,判断应该选择哪一条分支来执行相应的语句序列。
图7-2列出了包含2个分支的简单选择结构。
(3)循环结构循环结构又称为重复结构,它根据给定的条件,判断是否需要重复执行某一相同的或类似的程序段。
分为两类:当型循环结构:先判断后执行循环体(图7-3)直到型循环结构:先执行循环体后判断(图7-4)3.结构化程序设计原则和方法的运用 (1)使用顺序、选择、循环三种结构表示程序的控制逻辑。
(2)选用的控制结构只准许有一个入口和一个出口。
(3)复杂结构应用嵌套的基本控制结构进行组合嵌套来实现,语言中所没有的控制结构,应该采用前后一致的方法来模拟。
(4)严格控制GOTO 语句的使用。
7.1.3 面向对象程序设计1.面向对象程序设计方法的产生系统的需求总是处于不断变化之中,因此,需要设计对变化有弹性的系统 。
利用传统的结构化程序设计方法设计的系统不易扩充。
条件 T F A B图7-2 选择结构判断条件 循环体循环体判断条件图7-3 当型循环结构图7-4 直到型循环结构传统的结构化程序设计方法主要是面向过程的,也就是在分析设计时更多地从过程处理的角度进行,系统框架结构,系统模块的划分、设计都是基于系统所实现的功能,而功能是系统中最易变的部分,这样,如果系统需求发生一些变化(如系统某些功能的改进或扩充新功能),系统的结构就会受到破坏。
在实际系统中,最稳定的部分是系统对象,它直接描述问题域。
面向对象的系统能够有效提高系统结构的稳定性。
较复杂的系统将为每个对象类定义一些更复杂的功能(如“飞机”对象类中增加自动跟踪功能)或者增加一些新的对象类(如“雷达”),但是系统的核心部分(问题域中的对象)即使在系统功能范围发生变化的情况下,仍保持不变。
传统的结构化分析和设计方法中存在迥然不同的表示方法。
在分析阶段采用DFD表示,而在设计阶段采用结构图的表示方法。
在面向对象方法中,从分析(OOA)、设计(OOD)到编程实现(OOP)采用的都是同样的表示方法。
2.面向对象程序设计方法学的优点可重用性继承是面向对象方法的一个重要机制,用面向对象方法设计的系统的基本对象类可以被其他新系统重用,通常这是通过一个包含类和子类层次结构的类库来实现的,面向对象方法通过从一个项目向另一个项目提供一些重用类而能显著提高生产率。
可维护性表示方法的一致性3.面向对象程序设计方法学的基本概念(1)对象概念:在现实世界中,对象指的是任何一个实体。
它可能是一个人、一部车。
对象的组成:对象名:用来标识对象对象的属性:是实体所具有的性质(外形与状态)。
对象的方法:是实体所拥有的行为。
(2)消息概念:对象之间进行通信的一种构成叫做消息。
消息传递:当一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息。
接收到信息的对象经过解释,然后予以响应。
这种通信机制叫做消息传递。
发送消息的对象不需要知道接收消息的对象如何响应该请求。
(3)类概念:类是对象的抽象。
(4)继承概念:继承是父类和子类之间共享数据和方法的机制。
可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
继承的分类单重继承:子类只从一个父类得到继承多重继承:子类从多个父类得到继承(5)多态性概念:同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。
多态性的作用:多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著地提高了软件的可重用性和可扩充性。
7.2.1 算法的基本概念1.算法的基本概念算法是指解题方案的准确而完整的描述,并且具有下列特性:(1)有穷性:一个算法必须在执行有穷步骤之后结束,且每一步都可在有穷时间内完成。
(2)确定性:算法的每一步必须是确切定义的,不能有歧义。
(3)可行性:算法应该是可行的。
(4)输入:一个算法有零个或多个输入。
(5)输出:一个算法有一个或多个输出。
2.算法的基本要素对数据对象的运算和操作 : 算术运算、逻辑运算、关系运算、数据传输算法的控制结构: 算法中各操作之间的执行顺序3.算法设计的要求正确性可读性健壮性效率评价一个算法优劣的主要标准是算法的执行效率和存储需求。
算法的执行效率指的是时间复杂度(Time Complexity),存储需求指的是空间复杂度(Space Complexity)。
7.2.2 算法的复杂度1.算法的时间复杂度概念算法的时间复杂度是指执行算法所需要的计算工作量。
因为基本运算反映了算法运算的主要特征,因而可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。
算法的工作量计算公式算法的工作量=f(n) 其中n是问题的规模两个n阶矩阵相乘所需的基本运算(即两个实数的乘法)次数为n3,即计算工作量为n3,也就是时间复杂度为n3。
注意事项在同一个问题规模下,如果算法执行所需的基本运算次数取决于某一特定输入时,可以用平均性态和最坏情况复杂性方法来分析算法的工作量。
平均性态平均性态分析是指用各种特定输入下的基本运算次数的加权平均值来度量算法的工作量。
在长度为n的一维数组中查找值为x的元素,若采用顺序搜索法,在平均情况下需要检查数组中一半的元素。
最坏情况分析最坏情况分析是指在规模为n时,算法所执行的基本运算的最大次数。
在长度为n的一维数组中查找值为x的元素,若采用顺序搜索法,在最坏情况下最坏情况需查找n次。
2.算法的空间复杂度一个算法的空间复杂度一般是指执行这个算法所需要的内存空间。
包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。
其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间。
例题【例7.1】讨论用选择法对数组中n个整数按由小到大排序的时间复杂度。
1.选择法:先将n个数中最小的数与a[0]对换,再将a[1]到a[n-1]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个,共比较n-1轮。
2.算法:(1)从键盘输入n个数,并将其存储在一个有n个元素的整型数组a中。
(2)进行选择排序:①int i=0;//每一轮比较起始元素的下标int k=0;//每一轮比较得到的最小元素的下标②通过循环求出a[i]~a[n]中最小数的下标k③如果i不等于k,将a[i]与a[k]对换④i=i+1,转到②(3)输出排序的结果。
3.C++程序代码void select_sort(int array[], int n) //第1行{ int i,j,k,t; //第2行for(i=0;i<n-1;i++) //第3行{ k=i; //第4行for(j=i+1;j<n;j++) //第5行if(array[j]<array[k]) //第6行k=j; //第7行if(k!=i) //第8行{//第9行t=array[k];array[k]=array[i];array[i]=t; //第10行} //第11行} //第12行} //第13行4.时间复杂度算法中第3行的for循环的循环体要执行n-1次,而第5行的for循环的循环体每次分别执行n-1,n-2,n-3,…,2,1次,该算法的时间复杂度为:n-1+n-2+…+2+1=n(n-1)/2。