程序设计语言
程序设计语言
机器语言:采用二进制编写的程序,直接面向机器的编程语言,机器可以直接运行
汇编语言:用人们熟知的单词或字母代替对应的指令,便于程序员阅读和应用
高级语言:分清每个高级语言的特点
Fortran语言 | 科学计算,执行效率高 |
Pascal语言 | 为教学而开发,表达能力强 |
C语言 | 指针操作能力强,高效 |
Lisp语言 | 函数式程序语言,符号处理,人工智能 |
C++语言 | 面向对象,高效 |
Java语言 | 面向对象,中间代码,跨平台 |
C#语言 | 面型对象,中间代码,.net |
Smalltalk语言 | 面向对象,程序设计语言,程序设计环境,应用开发环境 |
Prolog语言 | 逻辑推理,简洁性,表达能力,数据库和专家系统 |
Python语言 | 一种脚本语言 |
解释程序 | 也称解释器 源程序或者中间代码 |
编译程序 | 也称编译器 目标语言程序 |
根本区别 | 是否生产独立的目标程序 |
静态类型语言 | java、C/C++、C#、DELPHI、VB等 |
动态类型语言 | asp、php、cgi、lisp、Perl、python、Smalltalk、Ruby、vbscript\javascript 等 |
(看定义变量时,是否要明确数据类型)
编译器的工作阶段
词法分析:试别出单词->
语法分析:写的代码是否符合相关的语法规则->
语义分析:只检查静态语义,只检查数据类型是否匹配,不会实际运行程序->
目标代码生成:生成目标代码
词法分析:非法字符,关键字或标识符拼写错误
语法分析:语法结构出错,if...end if 不匹配,缺分号
语义错误:死循环,零除数,其他逻辑错误
正规表达式和正规集
正规式 | 正规集 |
ab | 字符串ab构成的集合 |
a|b | 字符串a或者b构成的集合 |
a* | 由0个或多个a构成的字符串集合 |
(a|b)* | 0到多个a或者b构成的字符串的集合 |
a(a|b)* | 以a为首字符+a或者b的任意字符串的集合 |
(a|b)*abb | 以abb结尾的ab任意组合的字符串的集合 |
对于字母表∑,其上的正规式及其表示的正规集定义如下:
(1) ε是一个正规式,它表示集合L( ε)={ ε}
(2)若a是∑上的字符,则a是一个正规式,它表示的正规集为{a}
(3)若正规式r和s分别表示正规集L(r)和L(s),则
r|s是正规式,表示集合L(r) ∪L(s)
r*s是正规式,表示集合L(r)L(s)
r*是正规式,表示集合(L(r)*)
(r)是正规式,表四集合L(r)
确定的有限自动机(S、∑、f、S0、Z)
S是一个有限集,其每个元素称为一个状态
∑是一个有穷字母表,其每个元素称为一个输入字符
F是S*∑->S 上的单值部分映射
f(A,a)=Q表示当前状态A,输入为a时,转换到下一个状态Q,称Q为A的一个后继状态
s0∈S,是唯一的一个开始状态
Z是非空的终止状态集合,Z ⊆S
非确定的有限自动机与确定的区别
F是S*∑->2^S上的映射
对于S中的一个给定状态及输入符号,返回一个状态的集合,即当前状态的后记状态不一定是唯一的
有向弧上的标记可以是空
程序的控制结构程序编译
程序控制结构
程序语言的数据成分
数据名称:由用户通过标识符命名
数据类型:说明数据占用内存的大小和形式
存储类别:说明数据在内存中的位置和生存期
作用域:说明可以使用数据的代码范围
生存期:说明数据占用内存的时间范围
基本类型 | 整形、字符型、实行、布尔类型 |
特殊类型 | 空类型(void) |
用户定义类型 | 枚举类型 |
指针类型 | type* |
抽象类型 | 类类型 |
表达式
前缀表达式(+ab)
中缀表达式(a+b)
后缀表达式(ab+)逆波兰式
考点:中缀表达式与后缀表达式之间的转换
例:表达式(a-b)*(c+5)的后缀式:ab-c5+*
传值与传址
形参:形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。
实参:实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
传值调用:实际上重新复制了一个副本给形参,不改变调用函数实参变量的内容
传址调用:将实参的地址给形参,将改变调用函数实参变量的内容
例题:
例题: