程序设计语言分值一般为3-6分,题号一般分布在20-22,48-50题。
目录
1 编译程序和解释程序
1.1 真题
1.2012年下半年第48题
2.2013年上半年第20题
3.2014年上半年第48题
4.2016年上半年第20题
5.2018年上半年第21题
2 程序设计语言基本成分
程序设计语言的控制成分:
控制成分指明语言允许表述的控制结构,程序员使用控制成分来构造程序中的控制逻辑。理论上已经证明,可计算问题的程序都可以用顺序、选择和循环这3种控制结构来描述。
2.1 真题
1.2010年上半年第33题
2.2019年上半年第20题
3.2009年下半年第20题
数据类型的作用:
①便于为数据合理分配存储单元
②便于对参与表达式计算的数据对象进行检查
③便于规定数据对象的取值范围及能够进行的运算
4.2011年上半年第22题
5.2011年下半年第28题
6.2018年下半年第22题
7.2010年下半年第20题
常量在程序运行时会被直接使用,而不需要分配存储单元。在程序编译时,常量的值就已经确定了,编译器会直接将常量的值嵌入到程序中。因此,常量不会占用运行时的存储空间。
8.2015年上半年第20题
9.2012年上半年第20题
短路计算规则是指在逻辑运算中,从左往右边计算表达式,如果左侧逻辑值满足条件,则不再执行右侧表达式。
与:同真为真,一假则假;
或:同假才假,一真即真;
非:非真即假,非假即真。
异或:相同为假,相异为真
10.2016年下半年第20题
11.2012年下半年第48题
3 传值调用与传地址调用
返回值 函数(方法)名(形参类型1 形参1, 形参类型2 形参2)
函数名(实参1, 实参2)
引用调用的实参必须有地址(变量),不能是常量和表达式。
传值调用的实参可以是变量、常量和表达式。
3.1 真题
1.2009年上半年第20题
2.2011年上半年第50题
3.2012年上半年第50题
4.2013年上半年第21题
5.2013年下半年第20题
6.2014年上半年第21题
7.2016年下半年第21题
8.2011年下半年第49、50题
9.2015年下半年第50题
10.2016年上半年第50题
11.2017年上半年第49题
12.2017年下半年第50题
13.2018年下半年第50题
14.2019年上半年第50题
15.2020年下半年第48题
16.2021年上半年第50题
4 编译、解释程序翻译阶段
解释器:
翻译源程序时不生成独立的目标程序
解释程序和源程序要参与到程序的运行过程中
编译器:
翻译时将源程序翻译成独立保存的目标程序
机器上运行的是与源程序等价的目标程序,
源程序和编译程序都不再参与目标程序的运行过程
4.1 真题
1.2010年上半年第48题
2.2012年上半年第51题
3.2015年上半年第48题
4.2015年下半年第20、21题
5 符号表
5.1 真题
1.2013年上半年第49、50题
2.2014年上半年第22题
3.2019年上半年第22题
4.2021年下半年第21题
6 编译程序的工作过程
6.1 词法分析
词法分析
输入:源程序;输出:记号流
词法分析阶段的主要作用是:分析构成程序的字符;及由字符按照构造规则构成的符号是否符合程序语言的规定。
(09-21年只有一题答案是词法分析,一般作为干扰选项出现)
6.2 语法分析
语法分析
输入:记号流;输出:语法树(分析树)
语法分析阶段可以发现程序中所有的语法错误
语法分析阶段的主要作用是:对各条语句的结构进行合法性分析;分析程序中的句子结构是否正确。
6.3 语义分析
语义分析
输入:语法树(分析树)
语义分析阶段的主要作用是进行类型分析和检查
语法分析阶段可以发现程序中的所有语法错误
语义分析阶段不能发现程序中所有的语义错误
语义分析阶段可以发现静态语义错误,不能发现动态语义错误,动态语义错误运行时才能发现
6.4 目标代码生成
目标代码生成
目标代码生成阶段的工作与具体的机器密切相关
寄存器的分配工作处于目标代码生成阶段
(一般作为干扰选项出现)
6.5 真题
1.2009年下半年第48题
2.2010年上半年第22题
3.2010年下半年第21题
4.2011年上半年第48题
5.2014年下半年第48题
6.2017年上半年第22题
7.2017年下半年第48题
8.2018年下半年第48题
9.2019年上半年第21题
10.2019年上半年第48题
11.2019年下半年第20、21题
12.2021年上半年第21题
6.6 动态语义错误(补充)
动态语义错误是指源程序中的逻辑错误,它们发生在程序运行时,算法逻辑上的错误。如如死循环、变量为零时作除数、引用数组元素时下标出界等。
6.7 真题
1.2011年下半年第20题
2.2012年上半年第50题
3.2014年上半年第50题
4.2015年下半年第48题
5.2012年下半年第48题
6.8 中间代码生成
常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。
中间代码与具体的机器无关(不依赖具体的机器),可以将不同的高级程序语言翻译成同一种中间代码。中间代码可以跨平台。
因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。
6.9 真题
1.2009年下半年第22题
2.2012年下半年第49题
3.2013年下半年第48题
4.2014年下半年第22题
5.2016年上半年第22题
6.2017年下半年第22题
7 正规式(词法分析的工具)
7.1 真题
1.2009年上半年第49题
2.2010年上半年第50题
3.2012年下半年第21题
4.2016年下半年第48题
5.2017年上半年第21题
主要在于理解题目意思,所有字符串以b结尾的字符串合集,那么不看最后一个字符b,需要满足a在b前中后的所有可能性,如:b,ab,bb,aab,abb,bab,bbb,aaab,aabb,abab,abbb,baab,babb,bbab,……
8 有限自动机(词法分析的工具)
一个状态既可以是初态,也可以是终态(如下图
),并且可以存在多个终态。
8.1 真题
1.2013年下半年第49题
2.2009年上半年第48题
3.2010年下半年第22题
4.2011年上半年第49题
5.2012年上半年第48题
6.2014年下半年第49题
7.2015年上半年第49题
8.2015年下半年第49题
9.2016年上半年第49题
10.2017年上半年第48题
11.2017年下半年第49题
12.2018年下半年第49题
13.2019年上半年第49题
14.2020年下半年第50题
15.2021年下半年第22题
16.2010年下半年第48题
每一个状态的转移是否唯一,唯一则是确定的有限自动机,不唯一则是不确定的有限自动机。
17.2021年上半年第49题
18.2011年下半年第48题
该自动机识别的字符串必须以01结尾,而之前的0,1可以以任意方式组合。
19.2018年上半年第48题
20.2012年下半年第48题
9 上下文无关文法
大多数程序设计语言地语法规则用上下文无关文法描述。
9.1 真题
1.2009年上半年第50题
一个文法产生的句子是从文法开始符号出发推导出的所有终结符号串。
2.2009年下半年第50题
3.2014年上半年第49题
4.2014年下半年第50题
5.2016年下半年第49题
6.2013年下半年第21题
7.2018年上半年第49题
8.2020年下半年第49题
9.2012年下半年第48题
选项为中缀表达式的结果。
10 中缀、后缀表达式
中缀式:a + b
后缀式(逆波兰式):ab+
后缀式利用栈进行求值
语法树的后缀式为后序遍历(左右根)、中缀式为中序遍历(左根右)。
例(树的中序、后序遍历):
10.1 真题
1.2010年上半年第21题
优先级:(),>,
,
。
2.2011年上半年第21题
3.2012年上半年第22题
4.2012年下半年第22题
5.2013年下半年第22题
6.2014年下半年第21题
7.2015年下半年第22题
8.2019年下半年第22题
9.2021年上半年第20题
10.2015年上半年第21题
11.2017年上半年第50题
12.2018年上半年第22题
13.2018年下半年第21题
14.2020年下半年第20题
15.2021年下半年第20题
11 杂题选讲
1.2009年上半年第21题
2.2009年上半年第22题
脚本语言都是动态语言,动态语言都是解释型语言。
3.2009年下半年第21题
指针存的是变量的地址,变量地址大小是固定的,所以给指针变量分配的存储空间是固定的。
4.2009年下半年第49 题
5.2010年上半年第49题
ML(Marked Language)标记语言
前三个都是ML结尾。
6.2010年下半年第49题
7.2010年下半年第50题
8.2012年下半年第20题
9.2013年上半年第22题
10.2013年上半年第48题
不能用正规式表示,因为aa*bb*不能保证a与b个数相同,其他可能如:a(ab)*b ,ab(ab)*则不是所有a在b前,而题目要求aaabbb 这样。
11.2013年下半年第50题
12.2014年上半年第20题
13.2015年上半年第22题
14.2015年上半年第50题
递归下降分析方法和预测分析法是常用的自顶向下语法分析法。
算符优先分析法、LR分析法和移进-归约分析法属于自底向上语法分析法。
15.2016年上半年第21题
16.2016年上半年第48题
17.2017年上半年第20题
18.2017年下半年第20题
19.2017年下半年第21题
20.2018年上半年第20题
Lisp是函数式编程语言,Prolog是逻辑式程序语言,Python支持过程式编程也支持面向对象编程,Java/C++是面向对象的编程语言。
21.2018年上半年第50题
22.2019年下半年第48、49题
23.2020年下半年第21题
24.2021年上半年第22题
25.2021年下半年第48题
26.2021年下半年第49题
列表(List)列表是可变的,支持增删改查操作。元组(Tuple)元组是不可变的,一旦创建就不能修改其元素。集合(set)是去重复的。字符串(str)是不可变的。
27.2021年下半年第50题