软件设计师刷题与知识点总结2021年12月--程序设计语言基础

本文介绍了有限自动机在词法分析中的应用,以及编译原理中的相关概念,如语法分析、语义分析和代码生成。文章通过具体例子解释了如何使用有限自动机识别特定的字符串模式,并探讨了在不同编译阶段的任务,如词法分析器使用有限自动机进行符号串的识别,语法分析器负责程序语句的结构正确性检查。此外,文章还涉及了分治策略在算法设计中的应用以及脚本语言的特点和解释执行方式。
摘要由CSDN通过智能技术生成

2021年9月10日  今天的天气很不错~

题目:下图所示为一个有限自动机(其中,A是初态、C是终态),该自动机所识别的字符串的特点是()。

  选项:A.必须以11结尾的0、1串  B.必须以00结尾的0、1串

            C.必须以01结尾的0、1串  D.必须以10结尾的0、1串

  解析:被有限自动机所识别是指从初态开始到终态结束,所输入的字符串能够按顺序地执行下去,若到某个状态不能往下走得到下一个字符,则认为不能识别。

  在本题中,从初态A出发,不管经过多少个1和0之后,只能处在A、B、C三种状态中地一种,所以在(0|1)*后,只能事处在A、B、C三种状态中地一种,不管是在哪个状态,输入0后,都会处在状态B,然后输入1,都会转换到状态C,因此与本题有限自动机等价的正规式是(0|1)*01,即该自动机所识别的字符串的特点是必须以01结尾的0、1串。

  题目:在以阶段划分的编译过程中,判断程序语句的形式是是否正确属于()阶段的工作。

  选项:A.词法分析  B.语法分析  C.语义分析  D.代码生成

  解析:检查单个词是否正确,属于词法阶段的工作。而识别判断程序语句形式是否正确属于语法分析的工作。

2021年9月12日

  题目:对高级语言源程序进行编译的过程中,有穷自动机(NFA或DFA)是进行()的适当工具。

  选项:A.词法分析  B.语法分析  C.语义分析  D.出错处理

  解析:编译程序的功能是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(汇编语言或机器语言)的翻译过程。工作过程分为6个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。

  各个逻辑上可以分为前端和后端。前端主要负责解析输入的源代码,由语法分析器和语义分析器协同工作。语法分析器负责把源代码中的’单词‘找出来,语义分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式、语句、函数等等。前端还负责语义的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树,这样后端可以在此基础上进一步优化处理。

  后端编译器主要负责分析,优化中间代码以及生成机器代码。

  有限自动机是进行词法分析的工具

  题目:在有n个无序无重复元素值的数组中查找第i小的数的算法描述如下:任意取一个元素r,用划分操作确定其在数组中的位置,假设元素r为第k小的数。若i等于k,则返回该元素值;若i小于k,则在划分的前半部分递归进行划分操作找第i小的数;否则在划分的后半部分递归进行划分操作找第k-i小的数。该算法是一种基于()策略的算法。

  选项:A.分治  B.动态规划  C.贪心  D.回溯

  解析:分治法:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决;否则将其分解为k个规模较小的问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。本题的算法思想是分治法的思想。

  动态规划法:这种算法也用到了分治思想,它的做法是将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题。

  贪心算法:它是一种不追求最优解,只希望得到较为满意解的方法。贪心算法一般可以快速得到满意的解,因为它省却了为找到最优解而穷尽所有可能所必须耗费的大量时间。贪心算法常以当前情况为基础做最优选择,而不考虑各种可能的整体情况,所以贪心算法不要回溯。

  回溯算法(试探法):它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。其实现一般要用到递归和堆栈。

2021年9月16日

  题目:已知某文法G[S]:S→0S0 S→1,从S推导出的符号串可用() (n≥0)描述。

  选项:A.(010)n  B.0n10n  C.1n  D.01n0

  解析:语言语法的一种表示法称为文法,常用的文法是上下文无关文法。一个上下文无关文法包含以下4个部分:

  ①一个记号集合,称为终结符集。

  ②一个非终结符号集合。

  ③一个产生式集合。每个产生式具有一个左部和右部,左部和右部由肩头连接,左部是一个非终结符,右部是记号和(或)非终结符序列。

  ④一个开始符号。开始符号是一个指定的非终结符。

  利用产生式产生句子的过程,是将产生式A→γ的右部代替文法符号序列α Aβ中的A得到α γβ的过程,称为α Aβ直接推导出αγ B,记作:αA β=>α γ β

  从S出发进行推导的过程可表示如下: S=>0S0=> 00S00=>000S000=>...=> 0n 10n

2021年9月22日 今天心情很一般啊~

  题目:若一个问题既可以用迭代方式也可以用递归方式求解,则()方法具有更高的时空效率。

  选项:A.迭代  B.递归  C.先递归后迭代  D.先迭代后递归

  解析:递归是设计和描述算法的一种有力的工具。

  能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成一些规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模稍大问题的解。特别地,当规模N=1时,能直接得到解。

  由于递归函数执行过程中引起一系列的函调用和返回,因此需要较多的时间开销(控制转移和存储空间管理操作所需的时间)及空间开销(每一次调用时为函数中的形式参数和自动局部变量分配存储空间等),因此与实现相同功能的非递归函数相比,运行效率较低。

  题目:以下关于脚本语言的叙述中,正确的是()。

  选项:A.脚本语言是通用的程序设计语言  B.脚本语言更适合应用在系统级程序开发中

            C.脚本语言主要采用解释方式实现  D.脚本语言中不能定义函数和调用函数

  解析:脚本语言(Script Languages,scripting propramming languages,scripting languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。

2021年10月8日--明天就要开始实习啦

  题目:下列关于程序语言的叙述,错误的是()。

  选项:A.脚本语言属于动态语言,其程序结构可以在运行中改变

  B.脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序

  C.php、JavaScript属于静态语言,其所有成分可在编译时确定

  D.C语言属于静态语言,其所有成分可在编译时确定

  解析:动态语言是指程序在运行时可以改变其结构,例如新的函数可以被引进、已有的函数可以被删除等在结构上的变化等。动态语言的类型检查是在运行时进行的,其优点是方便阅读,不需要写非常多的与类型相关的代码;缺点是不方便调试,命名不规范会读不懂、不利于理解等。

  脚本语言代表一套与系统程序设计语言不同的协定。他们牺牲执行速度和与系统程序设计语言相关的类型长度而提供更高的编程创作能力和软件重用。脚本语言更适合在联系复杂的应用程序中进行胶着。为了简化连接组件的工作,脚本语言被设计为无类型的,脚本语言一般是面向字符的,因为字符为许多不同的事物提供了一致的描述。

  事实上,脚本语言都是动态语言,而动态语言都是解释型语言,不管它们是否是面向对象的语言。

2021年10月19日

  题目:设某语言的语法规则用上下文无关文法G=(N,T,P,S)表示,其中N是非终结符号的集合,T是终结符号的集合,P是产生式集合,S是开始符号,令V=N\cupT,那么符合该语言的句子是()。

  选项:A.从S出发推导的、仅包含T中符号的符号串 

  B.从N中符号出发推导的、仅包含T中符号的符号串  

  C.从S出发推导的、包含V中符号的符号串

  D.从N中符号出发推导的、包含V中符号的符号串

  解析:一个文法的语言是该文法能产生的句子的集合。一个文法产生的句子是从文法开始符号出发推导出的所有终结符号串。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值