目录
- 前言
- 1.编译与解释
- 2.编译器工作过程
- 2.1编译过程概述
- 2.2对语句的处理
- 2.3源程序数据类型目的
- 3.中间代码
- 4.正规式
- 5.错误管理
- 6.后缀表达式
- 7.传值与传址
- 7.1基础
- 7.2实际计算
- 8.多种程序语言特点
前言
本文专门用来记录本人在做软考中有关程序设计语言基础的错题,我始终认为教学相长是最快提高的方法,所以写下了这边文章,加深印象也为了帮助大家,最后希望大家都能软考上岸!!!
相关题目已按知识点分类,读者大大们可依目录观看:)
1.编译与解释
题目:编译器和解释器是程序语言翻译的两种基本形态,以下关于编译器工作方式及特点的叙述中,正确的是(D)
- A.边翻译边执行,用户程序运行效率低且可移植性差
- B.先翻译后执行,用户程序运行效率高且可移植性好
- C.边翻译边执行,用户程序运行效率低且可移植性好
- D.先翻译后执行,用户程序运行效率高且可移植性差
相关解析
编译与解释的不同点
编译型语言 | 解释型语言 |
---|---|
翻译程序为编译器 | 翻译程序为解释器 |
生成目标代码 | 不会生成目标代码 |
目标程序直接执行 | 边解释边执行 |
编译器不参与执行 | 解释器参与执行 |
执行效率高 | 执行效率低 |
灵活性差,可移植性差 | 灵活性好,可移植性强 |
2.编译器工作过程
2.1编译过程概述
题目:将编译器的工作过程划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成时,语法分析阶段的输入法是(A)。若程序中的括号不配对,则会再(B)阶段检查出该错误
问题一:
- A.记号流
- B.字符流
- C.源程序
- D.分析树
问题二:
- A.词法分析
- B.语法分析
- C.语义分析
- D.目标代码生成
相关解析
编译过程概述
编译过程 | 说明 |
---|---|
词法分析 | 读入源程序,对其进行一定的切分,输出记号流 |
语法分析 | 分析源程序是否存在语法上的错误,包括:语言结构错误、if…end if不匹配、缺少分号、括号不匹配、表达式缺少操作数等 |
语义分析 | 进行类型分析和检查,主要检查源程序是否存在静态语义错误(动态语义错误检查不出来) |
2.2对语句的处理
题目:编译过程中,对高级语言程序语名的翻译主要考虑声明语句和可执行语句。对声明语句,主要是将所需要的信息正确地填入合理组织的(A)中;对可执行语句,则是(C)
问题一:
- A.符号表
- B.栈
- C.队列
- D.树
问题二:
- A.翻译成机器代码并加以执行
- B.转换成语法树
- C.翻译成中间代码或目标代码
- D.转换成有限自动机
相关解析
对声明语句的处理
- 将所需要的信息正确的填入合理组织的符号表中
对可执行语句的处理
- 编译器会将其翻译成中间代码或目标代码
2.3源程序数据类型目的
题目:某程序设计语言规定再源程序中的数据都必须具有类型,然而,(B)并不是做出此规定的理由
- A.为数据合理分配存储单元
- B.可以定义和使用动态数据结构
- C.可以规定数据对象的取值范围及能够进行的运算
- D.对参与表达式求值的数据对象可以进行合法性检查
相关解析
要求源程序中的数据必须具有类型的目的有
- 方便数据合理分配存储单元
- 规定了数据类型,就知道了其占用的字节数,从而规定了数据对象的取值范围机能够进行的运算
- 对参数表达式求值的数据对象可以进行合法性检查
3.中间代码
题目:将高级语言源程序翻译成机器与语言程序的过程中,常引入中间代码。以下关于中间代码的叙述中,不正确的是(D)
- A.中间代码不依赖于具体的机器
- B.使用中间代码可提高编译程序的可移植性
- C.中间代码可以用树或图来表示
- D.中间代码可以用栈和队列表示
相关解析
中间代码说明:
- 是根据语义分析输出生成中间代码
- “中间代码”是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关
- 由于中间代码实际上也起着编译器前端和后端分水岭的作用,所以使用中间代码也有助于提高编译程序的可移植性
- 常用的中间代码有后缀式、三元式、四元式和树(图)形式
4.正规式
题目:以下关于原L={anbn|n>=1}的叙述中,正确的是(D)
- A.可用正规式“aabb”描述,但不能通过有限自动机识别
- B.可用正规式“ambn”描述,但可用有限自动机识别
- C.不能用正规式表达,但可用有限自动机识别
- D.即不可用正规式描述,也不能通过有限自动机识别
相关解析
与L语言最接近的正规式为:aabb
与L语言最接近的有限自动机为:
但无论如何无法造出完全等价的正规式,因为在L语言中,n的取值为多少,与a与b的数量都相等,而aabb无法保证这一点
5.错误管理
题目:若C程序的表达式中引用了为赋初值的变量,则(D)
- A.编译时一定会报告错误信息,该程序不能与运行
- B.可以通过编译并运行,但运行时一定会报告异常
- C.可以通过编译,但链接时一定会报告错误信息而不能运行
- D.可以通过编译并运行,但运行结果不一定是期望的结果
相关解析
在C语言中,若在某个表达式中引用了为赋初值的变量,那么程序是可以通过编译并运行的,因为程序中并没有语法方面的错误,只是运行结构可能与我们期望的结果不一致
6.后缀表达式
题目:算数表达式a+(b-c)*d的后缀式是(B)
- A.bc-d*a+
- B.abc-d*+
- C.ab+c-d*
- D.abcd-*+
相关解析
7.传值与传址
7.1基础
题目:当函数调用执行时,在栈顶创建且用来支持被调用函数执行的一段存储空间称为活动记录或栈帧,栈帧中不包括(B)
- A.形参变量
- B.全局变量
- C.返回地址
- D.局部变量
相关解析
战阵时虚拟机栈的一个单位,是运行时数据区。
包含局部变量、返回地址、形参变量、动态数据
全局变量存储在程序的静态数据区
7.2实际计算
题目:函数f、g的定义如下,执行表达式“y=f(2)”的运算时,函数调用g(la)分别采用引用调用方式和值调用方式,则该表达式结束后y的值分别为(20)、(6)
相关解析
引用调用计算步骤:
- 执行y=f(2),传参x=2至f(x)
- la=x+1=2+1=3
- g(la)采用引用调用,在g(la)中,x=x * x+1=3 * 3+1=10,由于是引用调用,会影响形参la的值,所以la=10
- 计算la * x=10 * 2=20
值调用计算步骤:
- 执行y=f(2),传参x=2至f(x)
- la=x+1=2+1=3
- g(la)采用值调用,在g(la)中,x=x * x+1=3 * 3+1=10,由于是值调用,不会影响形参la的值,所以la=3
- 计算la * x=3 * 2=6
8.多种程序语言特点
题目:以下关于脚本语言的叙述中,正确的是(C)
- A.脚本语言是通用的程序设计语言
- B.脚本语言更适合应用在系统级程序开发中
- C.脚本语言主要采用解释方式实现
- D.脚本语言中不能定义函数和调用函数
相关解析
程序语言 | 特点 |
---|---|
C语言 | 语法简洁,可移植性高,高效 |
C++语言 | 面向对象,高性能,支持扩展性 |
Java语言 | 面向对象,可跨平台 |
python语言 | 面向对象,解释型,代码简洁 |
C#语言 | 面向对象,.Net |
Ruby语言 | 面向对象,可移植性高 |
PHP语言 | 脚本语言,语法混合了C、Java、Perl的特点 |
Fortran语言 | 科学计算,执行高效 |
Lisp语言 | 函数式,常用于人工智能 |