版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章计算机软件
佛山科学技术学院信息中心
2009年9月
主要内容
3.1计算机软件的基础知识
3.2程序设计语言基础
3.3程序设计语言的实现
3.4算法
3.5程序设计步骤和程序设计方法
3.6软件开发基础
3.1计算机软件的基础知识
3.L1计算机软件的概念
计算机软件:
■(ComputerSoftware)是指计算机系统中的
程序及其文档
■分为系统软件和应用软件两大类。
3.1.1计算机软件的概念
计算机软件的特征:
■软件是一种逻辑实体,具有抽象性。
■软件没有明显的制造过程。
■软件在使用过程中,没有磨损、老化的问题。
■软件对硬件和环境有着不同程度的依赖性。
■软件的开发至今尚未完全摆脱手工作坊式的开发方
式,生产效率低。
■软件是复杂的,而且以后会更加复杂。
■软件的成本相当昂贵。」
■软件还必须具备可维护性(Maintainability)、独
立性(Dependability)、效率性(Efficiency)和
可用性(Usability)四个属性。
计算机系统的层次结构
用户用户用户
应用软件
系统软件
操作系统
计算机硬件
3.1.2计算机软件的分类
系统软件
■操作系统
控制和管理计算机系统内各种软、硬件资源,合理有效
地组织计算机系统的工作
■语言处理程序
用来把汇编语言或高级语言编制的程序解释或翻译成计
算机能执行的目标程序。
主要有汇编程序、解释程序和编译程序
■数据库管理系统(DBMS)
数据库是存储在一起的相关数据的集合,这些数据是结
构化的,无有害的或不必要的冗余,数据库是可以共享
的、相互关联的、以一定结构组织起来的数据集合。
数据库管理系统是对数据库中的数据进行管理的软件。
3.L2计算机软件的分类
操作系统、数据库管理系统(DataBase
ManagementSystem,DBMS)和应用程序在硬
件系统的支持下形成了数据库系统。
应用程序对数据库的一切操作,包括定义、查询、
更新及各种控制,都是通过DBMS进行的。
根据数据模型的不同,DBMS可以分成层次型、
网状型、关系型、面向对象型等。
■当前流行的关系型DBMS有FoxPro、Access>SQL
Server、Oracle>Sybase等。
3.L2计算机软件的分类
■各种实用工具程序
能配合各类其他系统软件为用户的应用提供方便
和帮助。
磁盘碎片整理程序、磁盘清理等。.
应用软件*
■为用户解决某个实际问题而编制的程序和有关资料O
■分为通用软件(MicrosoftWord、Adobe
Photoshop)和专用软件。
■中间件是在应用软件与各种系统软件之间使用标准
的编程接口和协议。
3.L3计算机软件的发展
计算机软件的发展划分为四个阶段
阶段早期第二阶段第三阶段第四阶段
时间段1950-19651962~19741968~19891986-2003
主要特征面向批处理多用户分布式系统强大的桌面系
有限的分布实时嵌入“智能”统
自定义软件数据库低成本硬件面向对象技术
软件产品出面向大众,消费专家系统
现者人工神经网络
者的影响日益增并行计算
强网络计算机
软件生产阶程序设计时程序系统时软件工程时代软件工程时代
段代代(结构化方法)(面向对象方
法)
3.1.3计算机软件的发展
计算机软件生产的历史可划分为四个阶段:
■程序设计时代(1946年—1956年),使用机器语
言,汇编语言O
■程序系统时代(1956年—1968年),使用高级语
言,小集团合作生产,提出结构化方法。
■软件工程时代一结构化方法时代(1968年一1989
年)软件工程学科的基本学科体系得到建立并基
本趋向成熟。
■软件工程时代一面向对象方法时代(1989年至今)
3.2程序设计语言基础
3.2」什么是程序
认识简单的程序
■举例:做两个数相加(C语言实现)
main()
{
inta,b,sum;〃变量定义
printf(“请输入加数和被加数:\n)〃提示信息
scanf("%d,%d",&a,&b);〃输入加数和被加数
sum=a+b;〃求和
printf("和为:%d\n",sum);〃输出所求得和的任
)
3・2,1什么是程序
程序的执行
■概念
■源程序,
目标程序
-可执行程序
■程序的翻译过程
源程序—I翻译目标程序一I_连__接__R装入模块一*j_装___入_I-可执行程序
3.2.2程序设计语言的分类
机器语言
例如,计算A=15+10的机器语言程序如下:
1011000000001111:把15放入累加器A中
0010110000001010:10与累加器A的值相加,结
果仍放入A中
11110100:结束,停机
编程工作量大,难学、难记、难修改,只适合专业人员
使用;由于不同的计算机,其指令系统不同,机器语言
随机而异,通用性差,是面向机器的语言。
机器语言优点:程序代码不需要翻译,所占空间少,执
行速度快。现在已经没有人用机器语言直接编程了。
3.2.2程序设计语言的分类
■汇编语言
将机器指令的代码用英文助记符来表示,代替机器语言中的指令
和数据。例如用ADD表示加、SUB表示减、JMP表示程序跳转等
等,这种指令助记符的语言就是汇编语言。
例如,计算A=15+10的汇编语言程序:■
MOVA,15:把15放入累加器A中
ADDA,10:10与累加器A相加,结果存入A中
HLT:结束,停机
汇编语言克服了机器语言难读等缺点,保持了其编程质量高,占
存储空间少,执行速度快的优点。常用于过程控制等编程。汇编
语言面向机器,使用者需要专业知识。
汇编语言编写的程序,必须翻译成机器语言,才能被计算机执行。
3.2.2程序设计语言的分类
.高级语言
■是由表达各种意义的词和数学公式按照一定的语法
规则来编写程序的语言。高级语言使程序员可以完
全不用与计算机的硬件打交道,可以不必了解机器
的指令系统,是面向过程的语言。这样,程序员就
可以集中精力来解决问题本身而不必受机器制约,
编程效率高;由于与具体机器无关,因此程序的通
用性强。
■例如,计算A=15+10的C语言程序如下:
sum=15+10;〃15与10相加的结果放入
sum中printf("sum=%d”,sum);〃输出sum
面向过程的语言需要详细地描述“怎样做”
面向问题的语言仅需要说明“做什么”。
322程序设M它和与数据库的关系非常密切,能够对
高级语言的分类大型数据库进行高效处理。
■面向过程的语言
用这类语言编程时,程序不仅要说明做什么,还要详细地
告诉计算机如何做,程序需要详细描述解题的过程和细节,
如FORTRAN、BASIC、PASCAL、C等。
■面向问题的语言
又称非过程化的语言或称第四代语言(4GLS)o用面向问
题的语言解题时,不必关心问题的求解算法和求解的过程,
只需指出问题是要计算机做什么,数据的输入和输出形式,
就能得到所需结果。用SQL面向问题的
例3.1语言实现
■教师节到了,要对教龄满2只工发荣誉证书,要求从
存放教职工档案的“出,dat”文件中,显示出教龄满25
年的教职工的听在部门。
■SELECT海门,教龄FROMd:\zgda.dbfWHERE教龄
>=25
3.2.2程序设计语言的分类
■面向对象语言
在20世纪80年代推出面向对象语言。它与以往
各种语言的根本不同点在于:它设计的出发点就
是为了能更直接地描述客观世界中存在的事物
(即对象)以及它们之间的关系。
面向对象语言将客观事物看作具有属性和行为的
对象,通过抽象找出同一类对象的共同属性和行
为,形成类。通过类的继承与多态可以很方便地
实现代码重用,这大大提高了程序的复用能力和
程序开发效率。面向对象语言已是程序语言的主
要研究方向之一。面向对象的语言有C++、Java、
VisualBasic等。
3.2.2程序设计语言的分类
■其他语言
为了满足解决不同问题的需要,一些以工具形式出
现的语言,也在日益被广泛使用,如著名的科学计
算软件MATLAB,除此以外,还有函数型语言LISP,
人工智能语言PROLOG,超文本链接标记语言HTML
和XML等。
32.3程序设计语言的组成
高级程序设计语言的组成包括如下成分:
数据类型、表达式和赋值、控制结构、输
入/输出、函数和过程。
数据类型
■基本数据类型:整数类型、实数类型、字符类
型、逻辑类型、指针类型等。
■构造数据类型(由基本数据类型按某种方式组
合而成)一般有:数组类型、记录类型、枚举
类型、集合类型、字符类型、文件等
3.2.3程序设计语言的组成
表达式和赋值
-表达式由变量、常量、函数调用和运算符组成。
■例3-2,已知圆半径,求其面积用C语言描述的语句为:
s=3.14*r*r
其中:s、r为变量,3.14为常量,*为运算符;=为赋值号,
它的语义是将右端表达式计算出的结果赋给左端的变量。
-变量计算的数据对象和计算结果对象在程序中用变量表示。
变量在使用前必须声明其类型和名称,编译程序根据其数据
类型,在内存分配相应的存储空间,以存储该变量的值。
■运算符计算机不但能进行算术运算,还能进行逻辑运算。
虽然不同的程序设计语言提供的运算符种类不同,表示形式
也可能不同,但一般都有如下几类:
①算术运算力口、减、乘、除、乘方等。
②关系运算大于、大于等于、小于、小于等于、等于、不等
于等。
③逻辑运算与、或、非等。
3.2.3程序设计语言的组成
表达式和赋值
■赋值
赋值是改变变量值的基本手段,在程序设计语言中使用频率最
高。不同的程序设计语言有不同的赋值号,一般用等(=)来
表示。表达式和赋值号构成了程序设计的一条赋值语句。
控制结构
■结构化的程序设计包括三类控制结构
3.2.3程序设计语言的组成
选择结构
循环结,
3.2.3程序设计语言的组成
输入/输出
程序的输入/输出分为两大类:
■以文件形式数据传送
■人_机交互
■输入、输出在不同的程序设计语言中由不同的
语句或函数来实现。
■例如C语言的输入/输出函数有:scanf,
printso
3.2.3程序设计语言的组成
过程(函数)
■将重复处理程序段或分解的子功能编写成一个逻辑上
独立的过程,当程序需要该过程时,只需调用它。
■使用过程可降低程序的复杂度,简化程序编写,便于
调试。
■一般程序设计语言中有两种过程:
函数过程函数名有返回值
--子过程子过程名没有返回值
■各种语言系统还提供了已定义好的大量标准函数,如
数学函数、字符串函数、类型转换函数等,放在系统
的函数库中,供用户直接调用。
3.3程序设计语言的实现
3.3.1翻译过程
在所有的程序设计语言中,除了用机器语言编制
的程序能够被计算机直接理解和执行外,其他的
程序设计语言编写的程序都必须经过一个翻译过
程才能转换为计算机所能识别的机器语言程序,
实现这个翻译过程的工具是语言处理程序,即翻
译程序。
针对不同的程序设计语言编写出的程序,有各自
的翻译程序,且互相不通用。对于汇编语言编写
的程序需要用汇编程序进行汇编,而用高级语言
编写的程序,通过两种方式进行翻译,一种是解
释程序,一种是编译程序。
3.3.1翻译过程
汇编程序
■汇编程序是将汇编语言编制的程序(源程序)
翻译成机器语言程序(目标程序)的工具。
■汇编程序的具体翻译工作步骤:
①用机器操作码代替符号化的操作符。
②用数值地址代替符号名称。
③将常数翻译为机器的内部表示。
④分配指令和数据的存储单元。
3.3.1翻译过程
解释程序
■解释方式的翻译工作由解释程序来完成。解释
程序对源程序进行逐句分析,若没有错误,将
该语句翻译成一个或多个机器语言指令,然后
立即执行这些指令;翻译一句执行一句,若解
释时发现错误,会立即停止,报错并提醒用户
更正代码。解释方式不生成目标程序。
■BASIC、LISP等语言采用解释方式。
3.3.1翻译过程
编译程序
■编译程序对整个源程序经过编译处理,产生一个与
源程序等价的目标程序;目标程序还可能要调用一
些其他语言编写的程序和程序库中的标准子程序,
通过连接程序将目标程序和有关的程序库组合成一
个完整的可执行程序。执行速度快,修改源程序后
都必须重新编译。一般高级语言(C/C++、PASCAL
FORTRAN>COBOL等)都是采用编译方式。
编译程序数据
源程序——-一目标程序A可执行程序————►计算结果
编译程序的工作过程
3.3.1翻》译过程一编译程序
词法分析
语法分析’
中间代码生成
优化和目标代
码生成
编译程序的结构与工作过程
3.3.2连接和装入
连接:连接程序把若干个目标程序(先前的和分
别的翻译的结果)、操作系统实用例程和其他实
用软件连接起来产生一个完整的可执行的程序,
转而作为一个文件存放在计算机的大容量存储系
统中。这种程序有时称为装入模块(Load
module)。
装入:一旦装入模块已经生成,它在可以执行之
前必须由称为装入程序的程序放入到存储器中。
一个程序一旦完成翻译和连接步骤,那么它就可
以重复地装入和执行,不再需要回到源程序。
3.4算法
3.4.1算法概述
在计算机中,把解题过程的准确而完整的描述称
为解该题的算法。通俗地讲,程序就是用计算机
语言表述的算法;流程图就是图形化的算法。
算法可以分为两大类:
■数值计算算法
求数值解,其特点是少量的输入、输出,复杂的运算,如求高
次方程的根、求函数的定积分等。
■非数值计算算法
对数据的处理,其特点是大量的输入、输出,简单的运算,例
如,对数据的排序、查找等算法。
3.4.1算法概述
算法的两个特征
■基本的操作:算术运算、关系运算、逻辑
运算和数据传送等。
■算法的控制结构,即顺序、选择、循环这
三种基本结构。
3.4.1算法概述
算法的性质
-有穷性:一个算法必须保证执行有限步之后
结束;
■可行性:算法原则上能够精确地运行,而且
人们用笔和纸做有限次运算后即可完成。
■确定性:算法的每一步骤必须有确切的定义,
无二义性。
■输入:一个算法有。个或多个输入,以刻画
运算对象的初始情况。
■输出:一个算法有一个或多个输出,以反映
对输入数据加工后的结果。
3.4.2算法的表示
自然语言用人们使用的语言描述算法。
传统的流程图法用一些图框、线条以及
文字说明来形象地、直观地描述算法。
N6流程图法去掉了传统流程图中带箭
头的流向线,全部算法以一个大的矩形框
表示,框内还可以包含一些从属于它的小
矩形框,适于结构化程序设计。
3.4.2算法的表示
A
直到条件成立
(d)
N-S图的三种基本结构
3.4.2算法的表示
伪代码法是一种假的代码,不能被计算机所理解,
但接近于某种语言编写的程序,便于转换成编程
语言。根据编程语言的不同,有对应的类Pascal、
类C等类-小语言。在数据结构教材中,经常用类
-AXY语言来描述算法。
计算机语言计算机无法识别自然语言、流程图、
伪代码。这些方法仅为了帮助人们描述、理解算
法,要用计算机解题,就要将它们转换成计算机
语言程序。用计算机语言描述算法,只有用计算
机语言编写的程序才能被计算机执行。
343,常用算法
voidswap(x,y)
两个变量的值交换
intt;
t=x;
x=y;
y=t;
计数器,N为计数器变量
count
+im=sum+x累力口器,sum为累
sumnumI器变量
343,常用算法
例3.4某班有35名学生,输入每个学生《C语言程序设
计》课程的成绩,并求出该班该门课程的平均分以及
成绩为优秀的学生人数。
用伪代码描述算法如下:
voidcompute()
{
intscore,i=l,sum=0,count=0;
while(i<=35)
scanf(&score);
sum=sum+score;
if(score>=90)count=count+l;}
printf(sum/35);
printf(count);
343,常用算法
枚举法•
枚举法(穷举法或试凑法)根据条件确定答案
的范围,在此范围内对所有可能的情况逐一验
证。若某个情况符合条件,则为一个解;若全
部情况均不符合条件,则问题无解。
百鸡问题:公鸡每只5元,母鸡每只3
元,小鸡3只1元,用n元买n只鸡,求
公鸡、母鸡、小鸡的只数。
343,常用算法
■a+b+c=n
■5a+3b+c/3=n
■c%3=0
343,常用算法
intk=0;
for(a=0;a<=n;a++)
{
for(b=0;b<=n;b++)
{
for(c=0;c<=n;C++)
{
if((a+b+c==n)&&(5*a+3*b+c/3==n)&&(c%3==0))
{
g[k]=a;
m[k]=b;
s[k]=c;
K++;
)
)
)
时间复杂度
算法的输入规模和运行时间的阶
时间复杂度的计算
■顺序:加法
■循环:乘法
■递归:一般为指数形式
3.4.3,常用算法
改进之后的算法:
intk=0;
inti=n/5;
intj=n/3;
for(a=0;a<=i;a++)
{
for(b=0;b<=j;b++)
{
c=n-a-b;
if((5*a+3*b+c/3==n)&&(c%3==0))
{
g[k]=a;
m[k]=b;
s[k]=c;
K++;
)
)
)
343.常用算法
递推法(迭代法)
从初值出发,归纳出新值与旧值间直到最后值为
止存在的关系,每次重复main()
出新值,并由新值代替旧{intday,x1,x2;
day=9;
例3.4猴子吃桃子问题。x2=1;
while(day>0)
掉现有数的一半多一个,{x1=(x2+1)*2;x2=x1;
个了,问小猴原有桃子多day=day-1;
}
设第冰的桃子为它printf(”total=%d\n”,x1);
半少1个,则递推公式为:}
343,常用算法
求最值
而”砧♦入跖4旦一I-//、乐
main()
次同第2、3、(
大(小),马」intmax,score,n,i;
printf(“请输入人数:\n");
也就获得。scant(“%d”,&n);
printf(“请输入每个同学的成绩:\n");
例3.5对输,scant(“%d”,&score);
max=score;for(i=2;i<=n;i++)
{scant(“%d”,&score);if(score>max)
max=score;}
printf(“晟绩最高分为%d\n”,max);
)
3.5程序设计步骤和程序设计方法
3.5.1程序设计步骤
程序设计步骤
3.5.2程序设计方法
结构化程序的结构简单清晰,可读性强,模块化
强,描述方式符合人们解决复杂问题的普遍规律,
在软件重用性、软件维护等方面有所进步,可以
显著提高软件开发的效率。
程序设计模式:“数据结构+算法”
■在软件设计和实现过程中,采用自顶向下、逐步细化
的模块化程序设计原则。
■在代码编写时,采用顺序、选择、循环三种基本控制
结构,避免使用GOTO语句。
3.5.2程序设计方法
面向对象程序设计
将问题分解为对象,对象的数据——属性,
作用于数据的操作——方法,将属性和方法封
装成一个整体,供程序设计者使用。对象之间
的相互作用通过消息传递来实现。
程序设计模式:“对象+消息”
面向对象的程序设计语言有:C++、Java、
VisualBasic等
结构化程序设计与面向对象程序设计的区别:
■面向对象分解突出:做什么?大量的工作由相应的
对塞来完成,程序员在应用程序中只需说明要求对
象元成的任务。
■结构化程序设计的分解突出:如何做?强调代码的
功能是如何得以完成。
3.6软件开发基础
3.6.1软件工程概述
软件好坏的判断准则
■正确性
■可靠性
■简明性
■有效性
■可维护性
■适应性
软件的生命周期
■软件生存周期是指一个软件从提出开发要求开始直
到该软伴报废为止的整个时期。
■软件生命周期一种典型的阶段分为:问题定义、可
行性研究、需求分析、总体设计、详细设计、编码、
测试和维护等八个阶段。
3.6.1软件工程概述
软件开发过程
从工程学角度出发,软件开发过程包括计划、
分析、设计、编码、测试和维护绅几个阶段。
■计划:对所要解决的问题进行总体定义。
■分析:对用户的需求进行去粗取精、去伪存真、
正确理解,然后把它用软件工程开发语言(形式功
能规约,即需求规格说明书)表达出来的过程。
■设计:软件设计的主要任务就是将软件分解成模块,
然后进行模块设计。软件设计可以分为概要设计和
详细设计两个阶段
■编码:把软件设计转换成计算机可以接受的程序
■测试:软件测试的目的是以较小的代价发现尽可能
多的错误。
■维护:在已完成对软件的研制工作并交付使用以后,
对软件进行适当修改,以适应新的要求,以及纠正
运行中发现的错误。
3.6.1软件工程概述
软件开发原理
■抽象:将要处理的问题按一定的方式和步骤抽象成
计算机能处理的形式后再交给计算机去处理。
■目标分解:任何一个复杂的问题,都可以通过一些
较小的问题表示,这些较小的问题又可以通过更
小的问题表示。
■局部化与信息隐藏:一段程序的控制应尽量是局部
的,而不受其他段的影响,也不影响其他段;所处
理的数据也应该尽量是局部的。局部定义的数据外
部无法访问,达到了信息隐藏的目曲。
■一致性:一致性是指在整个软件中,所有表示方法
应该是一致的。
■可验证性:可验证性原理就是所开发的程序模块应
尽量具有相对的独立性,能相对独立地测试,相对
独立地维护和修改。
3・6・2,软件开发方法
结构化方法
■结构化软件开发方法采用结构化分析(SA,
StructuredAnalysis)技未对问题进行分析建模,它
将问题表述为“数据流图+实体联系图”的形式。
面向对象的方法
■分析建模:面向对象软件开发方法采用面向对象分
柝(OOA,Object—OrientedAnalysis)对问题进
行分析建模,它将问题表述为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度庞寒离婚协议书:情感纠葛与财产分配协议4篇
- 二零二五版户外用品销售代理及品牌合作合同2篇
- 2025年度幕墙施工劳务分包合同施工资料管理与归档范本4篇
- 临时场地租赁协议2024版3篇
- 二零二五年度农家乐餐饮承包合作协议3篇
- 二零二五年度年薪制员工聘用合同书:行业特定版
- 二零二五年度居民供水用水节能减排合同范本3篇
- 2025年度生物制药研发人员聘用劳动合同范本3篇
- 2025年度个人小户型房产买卖合同附带房产过户手续指导3篇
- 2025年食品生产HACCP体系审核与认证协议2篇
- 大疆80分钟在线测评题
- 2023年成都市青白江区村(社区)“两委”后备人才考试真题
- 2024中考复习必背初中英语单词词汇表(苏教译林版)
- 海员的营养-1315医学营养霍建颖等讲解
- 《现代根管治疗术》课件
- 肩袖损伤的护理查房课件
- 2023届北京市顺义区高三二模数学试卷
- 公司差旅费报销单
- 我国全科医生培训模式
- 2021年上海市杨浦区初三一模语文试卷及参考答案(精校word打印版)
- 八年级上册英语完形填空、阅读理解100题含参考答案
评论
0/150
提交评论