软件评测师之程序设计语言

一.程序设计语言概述

程序设计语言分为低级语言和高级语言,低级语言又分为机器语言和汇编语言。

考法1:低级语言的特点

与高级程序语言相比,用机器语言精心编写的程序的特点是___.
A.程序的执行效率低,编写效率低,可读性强
B.程序的执行效率低,编写效率高,可读性差
C.程序的执行效率高,编写效率低,可读性强
D.程序的执行效率高,编写效率低,可读性差
解析:选D。

二.高级语言的特点及应用

语言特点
Fortran语言科学计算,执行效率高
Pascal语言为教学而开发的,表达能力强,Delphi
C语言指针操作能力强,高效
Lisp语言函数式程序语言,符号处理,人工智能
C++语言面向对象,高效
Java语言面向对象,中间代码,跨平台
C#语言面向对象,中间代码,.Net
Smalltalk面向对象,程序设计语言、程序设计环境、应用开发环境
Prolog语言逻辑推理,简洁性,表达能力,数据库和专家系统
Python语言一种脚本语言

考法2:汇编语言及相关概念

以下关于汇编语言的叙述中,错误的是___.
A.汇编语言源程序中的指令语句将被翻译成机器代码
B.汇编语言的指令语句必须具有操作码字段,可以没有操作数字段
C.汇编程序以汇编语言源程序为输入,以机器语言表示的目标程序为输出
D.汇编程序先将源程序中的伪指令翻译成机器代码,然后再翻译指令语句
解析:选D。D选项中的伪指令错误。

考法3:高级语言的特点/应用

可用于编写独立程序和快速脚本的语言是___。
A.Python
B.Prolog
C.Java
D.C#
解析:选A.

考法4:静态/动态类型语言概述

下面关于程序语言的叙述,错误的是___.
A.脚本语言属于动态语言,其程序结构可以在运行中改变
B.脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序
C.PHP、JavaScript属于静态语言,其所有成分可在编译时确定
D.C语言属于静态语言,其所有成分可在编译时确定
解析:选C。PHP、JavaScript属于动态语言,所有成分在编译时不明确。

(1)编译与解释

如果判断是编译程序还是解释程序呢?如果生成目标程序的就是编译程序。

考法5:编译器与解释器的区别

___属于系统软件,它直接执行高级语言源程序或与源程序等价的某种中间代码.
A.编译程序
B.预处理程序
C.汇编程序
D.解释程序
解析:选D。

考法6:反编译

已知某高级语言源程序A经编译后得到机器C上的目标程序B,则___.
A.对B进行反编译,一般不能还原出源程序A
B.对B进行反汇编,不能得到与源程序A等价的汇编程序代码
C.对B进行反编译,得到的是源程序A的变量声明和算法流程
D.对A和B进行交叉编译,可以产生在机器C上运行的动态链接库
解析:选A。

(2)编译过程

编译器的工作阶段:
源程序→词法分析语法分析语义分析→中间代码生成→代码优化→目标代码生成→目标代码【加粗的四个是一定要具备的】

🐉词法分析:对源程序逐个字符的扫描,识别出一个个的单词;
🐉语法分析:在词法分析的基础上按照语法规则去看这些单词的各个成分是否符合要求;
🐉语义分析:在语法分析的基础上去检查程序的静态语义;
🐉目标代码生成:根据语义分析输出对应的中间代码。

语义分为静态语义和动态语义。在编译时可以确定程序语法结构的是静态语义;需要去运行程序才能明确的是动态语义。

考法7:编译器必须的阶段

编译器和解释器是两种基本的高级语言处理程序。编译器对高级语言源程序的处理过程可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化,目标代码生成等阶段,其中,___并不是每个编译器都必需的。
A.词法分析各语法分析
B.语义分析和中间代码生成
C.中间代码生成和代码优化
D.代码优化和目标代码生成
解析:选C.

考法8:符号表管理和出错处理的特点

在以阶段划分的编译器中,符号表管理和___贯穿于编译器工作始终。
A.语法分析
B.语义分析
C.代码生成
D.出错处理
解析:选D。

考法9:中间代码的特点

将高级语言程序翻译为机器语言程序的过程中常引入中间代码,好处是___。
A.有利于进行反编译处理
B.有利于进行与机器无关的优化处理
C.尽早发现语法错误
D.可以简化语法和语义分析
解析:选B。

考法10:静态/动态语义的内容

若程序在运行时陷入死循环,则该情况属于___。
A.语法错误
B.运行时异常
C.动态的语义错误
D.静态的语义错误
解析:选C。

三.文法

考法11:文法的推导

已知文法G:S—A0|B1,A-S1|1,B-*S0|0,其中S是开始符号,从S出发可以推导出___。
A.所有由0构成的字符串
B.所有由1构成的字符串
C.某些0和1个数相等的字符串
D.所有0和1个数不同的字符串
解析:选C。题中的S可以用A0或者B1代替,A可以用S1或者1代替,B可以用S0或者0代替。
S=A0,A=S1或1,这时S=S10或10,S=A010=S1010……
S=B1,B=S0或0,这时S=S01或01,S=B101=S0101……

正规表达式和正规集

在这里插入图片描述
考法12:理解正规表达式的含义

表示“以字符a开头且仅由字符a,b构成的所有字符串”的正规式为___.
A.a * b *
B.(a|b)*a
C.a(a|b) *
D.(ab) *
解析:选C。

有限自动机

考法13:有限自动机可识别字符序列

某个不确定有限自动机(S0为初态,S3为终态)如下图所示,___是该自动机可识别的字符串(即从初态到终态的路径中,所有边上标记的字符构成的序列)
在这里插入图片描述
A.baabb
B.bbaab
C.aabab
D.ababa
解析:选A。

四.程序基本的控制结构

程序基本的控制结构有三种:顺序结构、循环结构、选择结构

考法14:基本的控制结构有哪三种

不属于程序的基本控制结构
A.顺序结构
B.分支结构
C.循环结构
D.递归结构
解析:选D。

考法15:各种控制结构的特点

在C程序中,对于如下的两个for语句,其运行后a和b的值分别为___。
for (int a=0;a==0;a++);
for (int b=0;b=0;++b);
A.0,0
B.0,1
C.1,0
D.1,1
解析:选C。a == 0为条件语句,判定如果a等于0,则执行,a++;
b=0为赋值,而非条件语句,无法执行++b.

五.表达式

表达式分为三种:
①前缀表达式(+ab)
②中缀表达式(a+b)
③后缀表达式(ab-),逆波兰式

考法16:后缀表达式的应用

表达式(a-b) * (c+5)的后缀式是___.
A.abc5+-
B.ab-c+5

C.abc-5+
D.ab-c5+

解析:选D.

考法17:表达式实现的方法

表达式采用逆波兰式表示时,利用___进行求值。
A.栈
B.队列
C.符号表
D.散列表
解析:选A。

考法18:中缀表达式转后缀表达式

算术表达式a+b-cd的后缀式是___(-、+、表示算术的减,加,乘运算,运算符的优先级和结合性遵循惯例)。
A.ab+cd
-
B.abc±d

C.abcd+_*
D.ab+c-d*
解析:选A.按照运算符的优先级,先算乘再算加减,即a+b-cd = (a+b)-(cd)=ab+cd-.*

数据类型

🌙数据名称:由用户通过标识符命名
🌙数据类型:说明数据占用内存的大小和存放形式
🌙存储类别:说明数据在内存中的位置和生存期
🌙作用域:说明可以使用数据的代码范围
🌙生存期:说明数据占用内存的时间范围

数据类型的转换规则:
char,short→int→unsigned→long,float→double

考法19:表达式运算时数据类型转换

在C程序中,若表达式中的算术运算对象的类型不同,则需要先统一为相同类型后再进行计算。例如,表达式“a-b”中,若a是双精度浮点型变量,b是整型变量,为了尽可能保证运算精度,通常进行的处理是___.
A.读取b的值并转换为双精度浮点型数据,然后进行两个浮点数的相减运算,变量a的值不变
B.读取a的值并转换为整型数据,然后进行两个整数的相减运算,变量b的值不变
C.将b重新定义为双精度浮点型变量(其值自动转换成双精度型数据),再进行两个浮点数的相减运算
D.将a重新定义为整型变量(其值自动转换为整型数据),再进行两个整数的相减运算
解析:选A。没必要重新定义,因为有转换规则。

常量/变量

考法20:常量/变量特性

程序中常采用变量表示数据,变量具有名、地址、值、作用域、生存期等属性。关于变量的叙述,___是错误的。
A.根据作用域规则,在函数中定义的变量只能在函数中引用
B.在函数中定义的变量,其生存期为整个程序执行期间
C.在函数中定义的变量不能与其所在函数的形参同名
D.在函数中定义的变量,其存储单元在内存的栈区
解析:选B。

标识符

考法21:标识符的作用

标识符在高级语言源程序中的作用不包括___.
A.为变量命名
B.为注释标记位置
C.为函数命名
D.为数据类型命名
解析:选B。

六.传址与传值

形参:定义函数时声明的参数
实参:调用函数会用实际的参数来替代形参

考法22:传值与传址调用的特点

函数调用时,基本的函数传递方式有传值与传址两种,___。
A.在传值的方式下,形参将值传给实参
B.在传值的方式下,实参不能是数组元素
C.在传地址方式下,形参和实参间可以实现数据的双向传递
D.在传地址方式下,实参可以是任意的变量和表达式
解析:选C。

考法23:传值与传址调用的计算

函数main(),f()的定义如下所示,调用函数f()时,第一个参数采用传值(call by value)方式,第二个参数采用传引用(call by reference)方式,main()执行后输出的值为___。
main(){int x=2;f(1,x);print(x);}
f(int x,int &a){x = 2*a+1;a=x+3;return;}
A.2
B.4
C.5
D.8
解析:选D。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值