第六章 程序设计基础
计算机进行动作是按照人们设计好的程序
来完成的,程序是指计算机执行特定任务的指
令序列,它是用计算机语言编写的。用来设计
计算机程序的语言叫程序设计语言,它是计算
机程序员与计算机交流的工具。
主要内容:
1、程序设计语言
2、计算机 的解题过程
3、流程图设计
6.1 程序设计语言
一、分类及其特点
机器语言
汇编语言
高级语言
编译型高级语言
解释型高级语言
1、机器语言
(000AH) ?R2 0111 001 000001010
R2?R1 1100 000 000010010
(000BH)?R2 0111 001 000001011
R1+R2?R2 0001 000 000100001
R2?000CH 0110 001 000001100
R2?00FFH 1110 001 011111111
停机 1111 000 000000000
例,求解 3+5=8的程序
LDA 000AH
MOV R1,R2
LDA 000BH
ADD R2,R1
STA 000CH
OUT 00FFH
HALT
2、汇编语言
格式:
标号:操作码 地址码 (操作数)
优缺点:
汇编指令与机器指令一一对应,可
充分计算机硬件的功能。
可移植性差,不同的机器,代码不
同,编程人员必须熟悉该类型号的
计算机的硬件内部结构的知识。
Intel X86微处理器的汇编语言和 Alpha AXP
微处理器的汇编语言完全不同。以下 Alpha
AXP汇编代码演示了程序可以执行的操作
类型:
Ldr r16,(r15) ; 第一行
Ldr r17,4(r15) ; 第二行
Beq r16,r17,100; 第三行
Str r17,(r15); 第四行
100,; 第五行
if (x != y)
x = y;
第一条语句(第一行)将寄存器 15指定的地址中
的内容加载到寄存器 16中。第二条指令将紧接着
的内存中的内容加载到寄存器 17中。第三行比较
寄存器 16和寄存器 17,如果相等,分支到标号 100,
否则,继续执行第四行,将寄存器 17的内容存到
内存中。如果内存中的数据相同,就不必存储数
据。编写汇编级的程序需要技巧而且十分冗长,
容易出错。 Linux系统的核心很少的一部分是用汇
编语言编写,而这些部分之所以使用汇编语言只
是为了提高效率,并且和具体的微处理器相关。
汇编语
言程序
机器码的
目标程序
可执行
程序
编译 连接
MOV
ADD
…
JUMP
0101
1111
…
0010
0101
1111
0010
汇编程序的处理过程:
使用汇编语言编写大型程序十分困难,消耗时
间,容易出错而且生成的程序不能移植,只能
束缚在特定的处理器家族。更好的选择是使用
和机器无关的 高级语言,例如 C。 C允许你用逻
辑算法描述程序和要处理的数据。被称为编译
程序( compiler)的特殊程序读入 C程序,并将
它转换为汇编语言,进而产生机器相关的代码。
好的编译器生成的汇编指令可以和好的汇编程
序员编写的程序效率接近。
3、高级语言
main
{
int a=3,b=5;
s=a+b;
printf(“s=“,s);
}
Data 3,5
Read a,b
Let s=a+b
Print s
End
解释型高级语言
源程序 运行( RUN)解释
解释程序
可分为 解释型 与 编译型 两种类型。
编译型高级语言
源程序 目标程序编译 可执行 程序 运行连接编辑修改
编辑程序
(编辑器)
编译程序
(编译器)
连接程序
(连接器)
Linkers(连接程序)
连接程序将几个目标模块和库文件连接在一起成
为一个单独的完整程序。目标模块是汇编程序或
编译程序的机器码输出,它包括机器码、数据和
供连接程序使用的连接信息。比如:一个目标模
块可能包括程序的所有数据库功能,而另一个目
标模块则包括处理命令行参数的函数。连接程序
确定目标模块之间的引用关系,即确定一个模块
所引用的例程和数据在另一个模块中的实际位置
。
Linux核心是由多个目标模块连接而成的独立的大
程序。
二、程序设计语言的发展
1、第一代计算机语言 ——机器语言( 40-50年代初)
2、第二代计算机语言 ——汇编语言( 50年代中期)
3、第三代计算机语言 ——算法语言( 50年代中后期)
它接近自然语言与数学语言,容易掌握。
如:
( 1) FORTRAN语言, 1956年,用于科学与工程计算机。
( 2) COBOL语言, 1960年,面向事务处理。
( 3) BASIC语言, 1964年,解释型高级语言。后来发展有
True Basic,Quick Basic,Turbo Basic,Visual Basic等。
( 4) PASCAL语言, 1971年,体现结构程序设计思想。
用于教学,但现在逐渐被 C语言代替。
( 5) C语言, 1974年,介于低级语言与高级语言之间。
4、第四代计算机语言 ——非过程化语言
过程化高级语言:
必须指出每一步应如何进行的全过程,编程者指出
求解的每一个步骤,程序的执行流程受编程者的控制。
非过程化高级语言( 面向对象的语言 ),
编程者只要把问题描述成做什么,计算机接收后便可
自动求解。
面向对象的语言有:
BC,Borland C++
VC,Visual C++
VB,Visual Basic
Delphi,面向对象的 Pascal
PB,Power Builder
三、计算机语言的应用
1、机器语言,计算机可以直接执行。
2、汇编语言,占用存储空间少,执行速度快,
用于实时控制、编写函数库、操作系统,I/O
控制以及数据采集中。
3、过程化高级语言:
( 1) BASIC:初学者语言。
( 2) FORTRAN:用于复杂的科学计算。
( 3) COBOL:商业上的通用数据处理语言。
( 4) PASCAL:结构化程序设计的教学语言。
( 5) C:描述能力强,用于结构化教学,由于可
对硬件直接操作,常可用于系统软件的编写。
( 6) Prolog与 Lisp:人工智能,如专家系统中。
( 7) FoxBase,Foxpro:数据库管理软件,用于人事、
图书信息、财务管理中。
4、非过程化高级语言:
( 1) VC:
( 2) Delphi:
( 3) PB:
( 4) Oracle:
( 5) Java:
一、算法定义
定义 1:为了利用计算机解决某一类具体问题,
而人为设计的一系列过程和步骤,称为 算法,
简单说就是求解问题的方法。
求:
( 1) 1+ 2+ 3+ … + N=?
( 2) 1× 2× 3× …N=?
6.2 算法与流程图
二、算法应具有的特征:
( 1) 有穷性,算法所描述的过程必须在有限的时间、
有限的步骤内完成。不可出现“死循环”。
( 2) 确定性,算法确定的过程的每一步必须是精确
定义的、无二义的。
( 3) 切入点,算法所确定的过程中,要有一个初始
点,可以指定必要的初始值。
( 4) 后继唯一性,算法确定的每一步只能有一个
后继动作。
( 5) 能行性,算法的结果应该是有效的和可预期的。
算法的另一种定义,算法是
精确定义的一系列规则,这
些规则指定了一系列操作顺
序,以便在有限的步骤内产
生了所求问题的答案。
例,求 1+2+3+…+1000=?
S1:令 N=1,S=0;
S2,S=S+N;
S3,N=N+1;
S4:如果 N≤ 100,返回 S2;
S5:输出 S的值。算法终止。
begin
N=1
S=0
S=S+N
N=N+1
N≤100?
输出 S
end
yes
No
三、算法的表示 ——流程图
1、最早形式的流程图
2,N-S流程图
S1:令 N=1,S=0;
S2,S=S+N;
S3,N=N+1;
S4:如果 N≤ 100,返回 S2;
S5:输出 S的值。算法终止。
输出 S
开始
如果 N≤100
结束
N=N+1
S=S+N
N=1,S=0
课堂练习,写出求解一元二次方程:
的算法。并画出两种形式的流程图。
02 ??? cbxax
本章作业:
P106,1,2,6
计算机进行动作是按照人们设计好的程序
来完成的,程序是指计算机执行特定任务的指
令序列,它是用计算机语言编写的。用来设计
计算机程序的语言叫程序设计语言,它是计算
机程序员与计算机交流的工具。
主要内容:
1、程序设计语言
2、计算机 的解题过程
3、流程图设计
6.1 程序设计语言
一、分类及其特点
机器语言
汇编语言
高级语言
编译型高级语言
解释型高级语言
1、机器语言
(000AH) ?R2 0111 001 000001010
R2?R1 1100 000 000010010
(000BH)?R2 0111 001 000001011
R1+R2?R2 0001 000 000100001
R2?000CH 0110 001 000001100
R2?00FFH 1110 001 011111111
停机 1111 000 000000000
例,求解 3+5=8的程序
LDA 000AH
MOV R1,R2
LDA 000BH
ADD R2,R1
STA 000CH
OUT 00FFH
HALT
2、汇编语言
格式:
标号:操作码 地址码 (操作数)
优缺点:
汇编指令与机器指令一一对应,可
充分计算机硬件的功能。
可移植性差,不同的机器,代码不
同,编程人员必须熟悉该类型号的
计算机的硬件内部结构的知识。
Intel X86微处理器的汇编语言和 Alpha AXP
微处理器的汇编语言完全不同。以下 Alpha
AXP汇编代码演示了程序可以执行的操作
类型:
Ldr r16,(r15) ; 第一行
Ldr r17,4(r15) ; 第二行
Beq r16,r17,100; 第三行
Str r17,(r15); 第四行
100,; 第五行
if (x != y)
x = y;
第一条语句(第一行)将寄存器 15指定的地址中
的内容加载到寄存器 16中。第二条指令将紧接着
的内存中的内容加载到寄存器 17中。第三行比较
寄存器 16和寄存器 17,如果相等,分支到标号 100,
否则,继续执行第四行,将寄存器 17的内容存到
内存中。如果内存中的数据相同,就不必存储数
据。编写汇编级的程序需要技巧而且十分冗长,
容易出错。 Linux系统的核心很少的一部分是用汇
编语言编写,而这些部分之所以使用汇编语言只
是为了提高效率,并且和具体的微处理器相关。
汇编语
言程序
机器码的
目标程序
可执行
程序
编译 连接
MOV
ADD
…
JUMP
0101
1111
…
0010
0101
1111
0010
汇编程序的处理过程:
使用汇编语言编写大型程序十分困难,消耗时
间,容易出错而且生成的程序不能移植,只能
束缚在特定的处理器家族。更好的选择是使用
和机器无关的 高级语言,例如 C。 C允许你用逻
辑算法描述程序和要处理的数据。被称为编译
程序( compiler)的特殊程序读入 C程序,并将
它转换为汇编语言,进而产生机器相关的代码。
好的编译器生成的汇编指令可以和好的汇编程
序员编写的程序效率接近。
3、高级语言
main
{
int a=3,b=5;
s=a+b;
printf(“s=“,s);
}
Data 3,5
Read a,b
Let s=a+b
Print s
End
解释型高级语言
源程序 运行( RUN)解释
解释程序
可分为 解释型 与 编译型 两种类型。
编译型高级语言
源程序 目标程序编译 可执行 程序 运行连接编辑修改
编辑程序
(编辑器)
编译程序
(编译器)
连接程序
(连接器)
Linkers(连接程序)
连接程序将几个目标模块和库文件连接在一起成
为一个单独的完整程序。目标模块是汇编程序或
编译程序的机器码输出,它包括机器码、数据和
供连接程序使用的连接信息。比如:一个目标模
块可能包括程序的所有数据库功能,而另一个目
标模块则包括处理命令行参数的函数。连接程序
确定目标模块之间的引用关系,即确定一个模块
所引用的例程和数据在另一个模块中的实际位置
。
Linux核心是由多个目标模块连接而成的独立的大
程序。
二、程序设计语言的发展
1、第一代计算机语言 ——机器语言( 40-50年代初)
2、第二代计算机语言 ——汇编语言( 50年代中期)
3、第三代计算机语言 ——算法语言( 50年代中后期)
它接近自然语言与数学语言,容易掌握。
如:
( 1) FORTRAN语言, 1956年,用于科学与工程计算机。
( 2) COBOL语言, 1960年,面向事务处理。
( 3) BASIC语言, 1964年,解释型高级语言。后来发展有
True Basic,Quick Basic,Turbo Basic,Visual Basic等。
( 4) PASCAL语言, 1971年,体现结构程序设计思想。
用于教学,但现在逐渐被 C语言代替。
( 5) C语言, 1974年,介于低级语言与高级语言之间。
4、第四代计算机语言 ——非过程化语言
过程化高级语言:
必须指出每一步应如何进行的全过程,编程者指出
求解的每一个步骤,程序的执行流程受编程者的控制。
非过程化高级语言( 面向对象的语言 ),
编程者只要把问题描述成做什么,计算机接收后便可
自动求解。
面向对象的语言有:
BC,Borland C++
VC,Visual C++
VB,Visual Basic
Delphi,面向对象的 Pascal
PB,Power Builder
三、计算机语言的应用
1、机器语言,计算机可以直接执行。
2、汇编语言,占用存储空间少,执行速度快,
用于实时控制、编写函数库、操作系统,I/O
控制以及数据采集中。
3、过程化高级语言:
( 1) BASIC:初学者语言。
( 2) FORTRAN:用于复杂的科学计算。
( 3) COBOL:商业上的通用数据处理语言。
( 4) PASCAL:结构化程序设计的教学语言。
( 5) C:描述能力强,用于结构化教学,由于可
对硬件直接操作,常可用于系统软件的编写。
( 6) Prolog与 Lisp:人工智能,如专家系统中。
( 7) FoxBase,Foxpro:数据库管理软件,用于人事、
图书信息、财务管理中。
4、非过程化高级语言:
( 1) VC:
( 2) Delphi:
( 3) PB:
( 4) Oracle:
( 5) Java:
一、算法定义
定义 1:为了利用计算机解决某一类具体问题,
而人为设计的一系列过程和步骤,称为 算法,
简单说就是求解问题的方法。
求:
( 1) 1+ 2+ 3+ … + N=?
( 2) 1× 2× 3× …N=?
6.2 算法与流程图
二、算法应具有的特征:
( 1) 有穷性,算法所描述的过程必须在有限的时间、
有限的步骤内完成。不可出现“死循环”。
( 2) 确定性,算法确定的过程的每一步必须是精确
定义的、无二义的。
( 3) 切入点,算法所确定的过程中,要有一个初始
点,可以指定必要的初始值。
( 4) 后继唯一性,算法确定的每一步只能有一个
后继动作。
( 5) 能行性,算法的结果应该是有效的和可预期的。
算法的另一种定义,算法是
精确定义的一系列规则,这
些规则指定了一系列操作顺
序,以便在有限的步骤内产
生了所求问题的答案。
例,求 1+2+3+…+1000=?
S1:令 N=1,S=0;
S2,S=S+N;
S3,N=N+1;
S4:如果 N≤ 100,返回 S2;
S5:输出 S的值。算法终止。
begin
N=1
S=0
S=S+N
N=N+1
N≤100?
输出 S
end
yes
No
三、算法的表示 ——流程图
1、最早形式的流程图
2,N-S流程图
S1:令 N=1,S=0;
S2,S=S+N;
S3,N=N+1;
S4:如果 N≤ 100,返回 S2;
S5:输出 S的值。算法终止。
输出 S
开始
如果 N≤100
结束
N=N+1
S=S+N
N=1,S=0
课堂练习,写出求解一元二次方程:
的算法。并画出两种形式的流程图。
02 ??? cbxax
本章作业:
P106,1,2,6