第8章代码优化
- 格式:pptx
- 大小:1.51 MB
- 文档页数:40
Python程序设计题库——第⼋章关于Python对⽂件的处理,以下选项中描述错误的是( )A. 当⽂件以⽂本⽅式打开时,读写按照字节流⽅式B. Python能够以⽂本和⼆进制两种⽅式处理⽂件C. Python通过解释器内置的open()函数打开⼀个⽂件D. ⽂件使⽤结束后要⽤close()⽅法关闭,释放⽂件的使⽤授权答案:A以下选项中,不是Python对⽂件的读操作⽅法的是( )A. readB. readlineC. readtextD. readlines答案:C以下选项中,不是Python对⽂件的打开模式的是( )A. 'w'B. 'r'C. '+'D. 'c'答案:D关于数据组织的维度,以下选项中描述错误的是( )A. 数据组织存在维度,字典类型⽤于表⽰⼀维和⼆维数据B. ⾼维数据由键值对类型的数据构成,采⽤对象⽅式组织C. ⼀维数据采⽤线性⽅式组织,对应于数学中的数组和集合等概念D. ⼆维数据采⽤表格⽅式组织,对应于数学中的矩阵答案:A关于Python⽂件打开模式的描述,以下选项中错误的是( )A. 追加写模式aB. 只读模式rC. 覆盖写模式wD. 创建写模式n答案:D关于CSV⽂件的描述,以下选项中错误的是( )A. *CSV⽂件的每⼀⾏是⼀维数据,可以使⽤Python中的列表类型表⽰B. 整个CSV⽂件是⼀个⼆维数据C. *CSV⽂件格式是⼀种通⽤的、相对简单的⽂件格式,应⽤于程序之间转移表格数据D. *CSV⽂件通过多种编码表⽰字符答案:D关于Python⽂件的 '+' 打开模式,以下选项中描述正确的是( )A. 与r/w/a/x⼀同使⽤,在原功能基础上增加同时读写功能B. 读模式C. 追加写模式D. 覆盖写模式答案:A表格类型数据的组织维度是( )A. ⾼维数据B. ⼀维数据C. 多维数据D. ⼆维数据答案:D“键值对”类型数据的组织维度是( )A. ⾼维数据B. ⼆维数据C. 多维数据D. ⼀维数据答案:A给定列表ls = {1, 2, 3, "1", "2", "3"},其元素包含两种数据类型,则ls的数据组织维度是( )A. 多维数据B. ⼆维数据C. ⾼维数据D. ⼀维数据答案:D给定字典d = {1:"1", 2:"2", 3: "3"},其元素包含两种数据类型,则字典d的数据组织维度是( )A. ⼆维数据B. 多维数据C. ⾼维数据D. ⼀维数据答案:C以下选项中,不是Python中⽂件操作的相关函数是( )A. open()B. read()C. load()D. write()答案:C以下选项中,不是Python中⽂件操作的相关函数是( )A. write()B. open()C. readlines()D. writeline()答案:D以下选项中,不是Python⽂件处理.seek()⽅法的参数是( )A. 0B. 1C. 2D. -1答案:D以下选项中,不是Python⽂件打开的合法模式组合是( )A. "r"B. "a"C. "+"D. "w"答案:C以下选项中,不是Python⽂件打开的合法模式组合是( )A. "a+"B. "t+"C. "r+"D. "w+"答案:B以下选项中,不是Python⽂件打开的合法模式组合是( )A. "br+"B. "wr"C. ""D. "bw"答案:B以下选项中,不是Python⽂件⼆进制打开模式的合法组合是( )A. "b"B. "x+"C. "bx"D. "bw"答案:B关于⼀维数据存储格式问题,以下选项中描述错误的是( )A. ⼀维数据可以采⽤CSV格式存储B. ⼀维数据可以采⽤直接相连形成字符串⽅式存储C. ⼀维数据可以采⽤分号分隔⽅式存储D. ⼀维数据可以采⽤特殊符号@分隔⽅式存储答案:B关于⼆维数据CSV存储问题,以下选项中描述错误的是( )A. CSV⽂件的每⼀⾏表⽰⼀个具体的⼀维数据B. CSV⽂件的每⾏采⽤逗号分隔多个元素C. CSV⽂件不是存储⼆维数据的唯⼀⽅式D. CSV⽂件不能包含⼆维数据的表头信息答案:D以下选项中,对CSV格式的描述正确的是( )A. CSV⽂件以英⽂特殊符号分隔元素B. CSV⽂件以英⽂逗号分隔元素C. CSV⽂件以英⽂空格分隔元素D. CSV⽂件以英⽂分号分隔元素答案:B关于⽂件关闭的.close()⽅法,以下选项中描述正确的是( )A. ⽂件处理遵循严格的“打开—操作—关闭”模式B. ⽂件处理后可以不⽤.close()⽅法关闭⽂件,程序退出时会默认关闭C. ⽂件处理结束之后,⼀定要⽤.close()⽅法关闭⽂件D. 如果⽂件是只读⽅式打开,仅在这种情况下可以不⽤.close()⽅法关闭⽂件答案:B表达式",".join(ls)中ls是列表类型,以下选项中对其功能的描述正确的是( )A. 将逗号字符串增加到列表ls中B. 在列表ls每个元素后增加⼀个逗号C. 将列表所有元素连接成⼀个字符串,每个元素后增加⼀个逗号D. 将列表所有元素连接成⼀个字符串,元素之间增加⼀个逗号答案:D以下⽂件操作⽅法中,不能从CSV格式⽂件中读取数据的是( )A. readlinesB. readlineC. seekD. read答案:C以下⽂件操作⽅法中,不能向CSV格式⽂件写⼊数据的是( )A. seek和writeB. writelinesC. writeD. writeline答案:D两次调⽤⽂件的write⽅法,以下选项中描述正确的是( )A. 连续写⼊的数据之间默认采⽤逗号分隔B. 连续写⼊的数据之间⽆分隔符C. 连续写⼊的数据之间默认采⽤空格分隔D. 连续写⼊的数据之间默认采⽤换⾏分隔答案:B表达式writelines(lines)能够将⼀个元素是字符串的列表lines写⼊⽂件,以下选项中描述正确的是( )A. 列表lines中各元素之间⽆分隔符B. 列表lines中各元素之间默认采⽤逗号分隔C. 列表lines中各元素之间默认采⽤换⾏分隔D. 列表lines中各元素之间默认采⽤空格分隔答案:A关于open()函数的⽂件名,以下选项中描述错误的是( )A. ⽂件名不能是⼀个⽬录B. ⽂件名对应的⽂件可以不存在,打开时不会报错C. ⽂件名可以是相对路径D. ⽂件名可以是绝对路径答案:BPython语句:f = open(),以下选项中对f的描述错误的是( )A. 将f当作⽂件对象,f.read()可以读⼊⽂件全部信息B. 表达式print(f)执⾏将报错C. *f是⼀个Python内部变量类型D. *f是⽂件句柄,⽤来在程序中表达⽂件答案:B使⽤open()打开⼀个Windows操作系统D盘下的⽂件,以下选项中对路径的表⽰错误的是( )A. D:\PythonTest\a.txtB. D://PythonTest//a.txtC. D:\PythonTest\a.txtD. D:/PythonTest/a.txt答案:A当前程序路径在D:\PythonTest⽬录中,使⽤open()打开D盘根⽬录下⽂件,以下选项中对路径的表⽰错误的是( )A. D:\a.txtB. D:\a.txtC. ../a.txtD. ..答案:B以下选项对应的⽅法可以⽤于从CSV⽂件中解析⼀⼆维数据的是( )A. split()B. format()C. exists()D. join()答案:A以下选项对应的⽅法可以⽤于向CSV⽂件写⼊⼀⼆维数据的是( )A. split()B. strip()C. exists()D. join()答案:D以下选项对应的⽅法可以辅助⽤于从CSV⽂件中解析⼆维数据的是( )A. count()B. strip()C. format()D. center()答案:B关于CSV⽂件的扩展名,以下选项中描述正确的是( )A. 可以为任意扩展名B. 扩展名只能是.txtC. 扩展名只能是.csvD. 扩展名只能是.dat答案:A关于⽂件的打开⽅式,以下选项中描述正确的是( )A. ⽂件只能选择⼆进制或⽂本⽅式打开B. 所有⽂件都可能以⽂本⽅式打开C. ⽂本⽂件只能以⽂本⽅式打开D. 所有⽂件都可能以⼆进制⽅式打开答案:D对于特别⼤的数据⽂件,以下选项中描述正确的是( )A. 选择内存⼤的计算机,⼀次性读⼊再进⾏操作B. *Python可以处理特别⼤的⽂件,不⽤特别关⼼C. 使⽤for .. in..循环,分⾏读⼊,逐⾏处理D. Python⽆法处理特别⼤的数据⽂件答案:C关于⾼维数据,以下选项中描述错误的是( )A. ⾼维数据只能表达键值对数据B. “键值对”是⾼维数据的主要特征C. ⾼维数据可⽤于表达⼀⼆维数据D. ⾼维数据⽤来表达索引和数据之间的关系答案:A当打开⼀个不存在的⽂件时,以下选项中描述正确的是( )A. ⽂件不存在则创建⽂件B. ⼀定会报错C. 根据打开类型不同,可能不报错D. 不存在⽂件⽆法被打开答案:C关于数据维度,以下选项中描述错误的是( )A. ⼀维数据可能存在顺序,也可以没有顺序B. 数据维度包括⼀⼆维、多维和⾼维数据C. 所有数据都能⽤维度⽅式表⽰D. 图像由于存在长宽,所以图像数据是⼆维数据答案:D以下选项中不是⽂件操作函数或⽅法的是( )A. loadB. readC. writelinesD. readlines答案:A对于⽆序的⼀维数据,以下选项中描述错误的是( )A. ⽆序⼀维数据可以采⽤列表类型来表达B. ⽆序⼀维数据可以采⽤字典类型来表达C. ⽆序⼀维数据可以采⽤集合类型来表达D. ⽆序⼀维数据⽆法利⽤Python语⾔有效表达答案:D调⽤open函数可以打开指定⽂件,在open()函数中访问模式参数使⽤( )表⽰只读。
编译原理第三版课后习题答案编译原理是计算机科学中的一门重要课程,它研究的是如何将高级程序语言转换为机器语言的过程。
而《编译原理》第三版是目前被广泛采用的教材之一。
在学习过程中,课后习题是巩固知识、提高能力的重要环节。
本文将为读者提供《编译原理》第三版课后习题的答案,希望能够帮助读者更好地理解和掌握这门课程。
第一章:引论习题1.1:编译器和解释器有什么区别?答案:编译器将整个源程序转换为目标代码,然后一次性执行目标代码;而解释器则逐行解释源程序,并即时执行。
习题1.2:编译器的主要任务是什么?答案:编译器的主要任务是将高级程序语言转换为目标代码,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。
第二章:词法分析习题2.1:什么是词法分析?答案:词法分析是将源程序中的字符序列划分为有意义的词素(token)序列的过程。
习题2.2:请给出识别下列词素的正则表达式:(1)整数:[0-9]+(2)浮点数:[0-9]+\.[0-9]+(3)标识符:[a-zA-Z_][a-zA-Z_0-9]*第三章:语法分析习题3.1:什么是语法分析?答案:语法分析是将词法分析得到的词素序列转换为语法树的过程。
习题3.2:请给出下列文法的FIRST集和FOLLOW集:S -> aAbA -> cA | ε答案:FIRST(S) = {a}FIRST(A) = {c, ε}FOLLOW(S) = {$}FOLLOW(A) = {b}第四章:语义分析习题4.1:什么是语义分析?答案:语义分析是对源程序进行静态和动态语义检查的过程。
习题4.2:请给出下列文法的语义动作:S -> if E then S1 else S2答案:1. 计算E的值2. 如果E的值为真,则执行S1;否则执行S2。
第五章:中间代码生成习题5.1:什么是中间代码?答案:中间代码是一种介于源代码和目标代码之间的表示形式,它将源代码转换为一种更容易进行优化和转换的形式。
第8章多目标优化在前面的章节中,我们学习了单目标优化问题的解决方法。
然而,在现实生活中,我们往往面对的不仅仅是单一目标,而是多个目标。
例如,在生产过程中,我们既想要最大化产量,又要最小化成本;在投资决策中,我们既想要最大化回报率,又想要最小化风险。
多目标优化(Multi-objective Optimization)是指在多个目标之间寻找最优解的问题。
与单目标优化不同的是,多目标优化面临的挑战是在有限的资源和约束条件下,使各个目标之间达到一个平衡,不可能完全满足所有的目标。
常见的多目标优化方法有以下几种:1. 加权值法(Weighted Sum Approach):将多个目标函数线性加权组合为一个综合目标函数,通过指定权重来平衡不同目标的重要性。
然后,将这个新的综合目标函数转化为单目标优化问题,应用单目标优化算法求解。
然而,这种方法存在的问题是需要给出权重的具体数值,而且无法保证找到最优解。
2. Pareto优化法(Pareto Optimization):基于Pareto最优解的理论,即在多目标优化问题中存在一组解,使得任何一个解的改进都会导致其他解的恶化。
这些解构成了所谓的Pareto前沿,表示了在没有其他目标可以改进的情况下,各个目标之间的最优权衡。
通过产生尽可能多的解并对它们进行比较,可以找到这些最优解。
3. 基于遗传算法的多目标优化方法:遗传算法是一种基于自然选择和遗传机制的优化算法。
在多目标优化中,遗传算法被广泛应用。
它通过建立一种候选解的种群,并通过适应度函数来度量解的质量。
然后,使用选择运算、交叉运算和变异运算等操作,通过迭代进化种群中的解,逐步逼近Pareto前沿。
4. 约束法(Constraint-based Method):约束法是一种将多目标优化问题转化为单目标优化问题的方法。
它通过添加约束条件来限制可能的解集合,并将多目标优化问题转化为满足这些约束条件的单目标优化问题。
编译原理⼀些习题答案第2章形式语⾔基础2.2 设有⽂法G[N]: N -> D | NDD -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9(1)G[N]定义的语⾔是什么?(2)给出句⼦0123和268的最左推导和最右推导。
解答:(1)L(G[N])={(0|1|2|3|4|5|6|7|8|9)+} 或L(G[N])={α| α为可带前导0的正整数}(2)0123的最左推导:N ? ND ? NDD ? NDDD ? DDDD ? 0DDD ? 01DD ? 012D ? 0123 0123的最右推导:N ? ND ? N3 ? ND3 N23 ND23 N123 D123 0123268的最左推导:N ? ND ? NDD ? DDD ? 2DDD ? 26D ? 268268的最右推导:N ? ND ? N8 ? ND8 ? N68 ? D68 ? 2682.4 写⼀个⽂法,使其语⾔是奇数的集合,且每个奇数不以0开头。
解答:⾸先分析题意,本题是希望构造⼀个⽂法,由它产⽣的句⼦是奇数,并且不以0开头,也就是说它的每个句⼦都是以1、3、5、7、9中的某个数结尾。
如果数字只有⼀位,则1、3、5、7、9就满⾜要求,如果有多位,则要求第1位不能是0,⽽中间有多少位,每位是什么数字(必须是数字)则没什么要求,因此,我们可以把这个⽂法分3部分来完成。
分别⽤3个⾮终结符来产⽣句⼦的第1位、中间部分和最后⼀位。
引⼊⼏个⾮终结符,其中,⼀个⽤作产⽣句⼦的开头,可以是1-9之间的数,不包括0,⼀个⽤来产⽣句⼦的结尾,为奇数,另⼀个则⽤来产⽣以⾮0整数开头后⾯跟任意多个数字的数字串,进⾏分解之后,这个⽂法就很好写了。
N -> 1 | 3 | 5 | 7 | 9 | BNB -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | B02.7 下⾯⽂法⽣成的语⾔是什么?G1:S->ABA->aA| εB->bc|bBc G2:S->aA|a A->aS解答:B ? bcB ? bBc? bbccB ? bBc? bbBcc ? bbbccc……A ?εA ? aA ? aA ? aA ? aaA ? aa……∴S ? AB ? a m b n c n , 其中m≥0,n≥1即L(G1)={ a m b n c n | m≥0,n≥1} S ? a S ? aA ? aaS ? aaaS ? aA ? aaS ? aaaA ?aaaaS ? aaaaa ……∴S ? a2n+1 , 其中n≥0即L(G2)={ a2n+1 | n≥0}2.11 已知⽂法G[S]: S->(AS)|(b)A->(SaA)|(a)请找出符号串(a)和(A((SaA)(b)))的短语、简单短语和句柄。
《编译原理》教学大纲大纲说明课程代码: 3225003总学时: 64 学时(讲课 48 学时,实验16 学时)总学分: 4课程类别:学科基础课适用专业 : 计算机科学与技术(专业)预修要求: C 语言程序设计、 C++ 程序设计、数据结构课程的性质、任务及地位:《编译原理》是计算机科学与技术专业的一门重要基础课。
通过对该课程的学习,使学生掌握编译过程中的相关原理和编译技术,让学生能初步进行编译程序的开发和维护,同时促进提高学生开发软件的能力。
教学目的与基本要求:本课程的目的,通过向学生讲述编译系统的结构、工作流程及编译程序各部分的设计原理和实现技术,使学生既掌握编译技术理论的基础与基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。
本课程理论性较强。
因授课对象为工科学生,所以在强调编译系统的构造原理和实现方法的同时,为培养学生的实际工作能力,通过上机实践进一步加深学生对课堂教学内容的理解。
目的是要使学生牢固掌握相关的基本理论和基本方法,并能初步利用上述理论和方法解决简单实际问题。
教学方法和教学手段的建议:在教学方法上,贯彻理论联系实际、“精讲、多练”的原则,进行案例式、启发式的教学,对于一些实际性较强的问题要多采用课堂讨论等方式,以提高学生的思辨能力和学习的主动性;引导学生读书、理解、体悟、运用相结合;提高学生的学习兴趣与热情,培养与发挥学生的提出、分析及解决问题的能力。
教学手段:运用多媒体教学手段 +黑板 +上机实验的手段。
采取课堂讲授、课堂讨论、课后练习与自学等形式。
大纲的使用说明:大纲对课程性质、目的等作简单说明,同时列出各章节要学习的知识点、重点、难点,便于教学时教授重点的安排和学生自学安排。
大纲正文第一章引论学时: 4 学时(讲课 4 学时,实验 0 学时)了解编译的概念;理解编译程序的各组成部分及功能。
本章讲授要点:介绍程序设计语言与编译程序间的关系,主要内容包括:各级程序设计语言的定义、源程序的执行、编译程序的构造、编译程序的分类、形式语言理论与编译实现技术的联系。
编译原理教案说明:一、参考书:1、陈意云、张昱:《编译原理》,高等教育出版社,2003年。
2、陈意云、张昱:《编译原理习题精选》,中国科技大学出版社,2003年。
3、吕映芝、张素琴、蒋维杜:《编译原理》,清华大学出版社,1998年第二版。
4、王生原、吕映芝、张素琴:《编译原理课程辅导》,清华大学出版社,2007年。
5、伍春香:《编译原理习题与解析》,清华大学出版社,2001年。
6、Andrew W.Appel:《现代编译原理—C语言描述》,人民邮电出版社,2005年。
7、Noam Nison等:《计算机系统要素》,电子工业出版社,2007年。
8、Randall Hyde:《编程卓越之道(第二卷)》,电子工业出版社,2007年。
二、教学目的:通过学习形式语言与自动机理论、词法分析、语法分析、语义分析、代码优化和生成等内容使学生掌握构造编译程序的基本原理和基本方法,并通过上机实习使学生进一步掌握开发应用程序的基本方法,为深入理解计算机系统、程序设计语言与开发大型应用程序打下良好的基础。
三、教学时数:课堂教学51学时,上机实验30学时。
四、授课内容:第一章编译程序概述第二章 PL/0编译程序的实现第三章文法和语言第四章词法分析第五章自顶向下语法分析方法第六章自底向上优先分析方法第七章 LR分析方法第八章语法制导翻译和中间代码生成第九章符号表第一○章目标程序运行时的存储组织第一一章代码优化第一二章代码生成第一章概述一、说明:1、教学目的与要求:了解编译程序的概念、结构以及工作流程。
2、主要内容:什么是编译程序、编译过程概述、编译程序的结构、编译阶段的组合、编译技术和软件工具以及实例分析。
3、教学重点:编译程序的结构以及每一阶段的任务。
4、教学难点:理解编译程序各模块的判错功能、编译方式和解释方式执行速度上的不同。
二、教学内容第一节编译程序1、机器语言:直接用计算机能够识别的二进制代码指令来编写程序的语言。
第一章:编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。
解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。
编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。
解释程序和编译程序的根本区别:是否生成目标代码第三章:Chomsky对文法中的规则施加不同限制,将文法和语言分为四大类:0型文法(PSG)◊ 0型语言或短语结构语言文法G的每个产生式α→β中:若α∈V*VNV*, β∈(VN∪VT)* ,则G是0型文法,即短语结构文法。
1型文法(CSG)◊ 1型语言或上下文有关语言在0型文法的基础上:若产生式集合中所有|α|≤|β|,除S→ε(空串)外,则G是1型文法,即:上下文有关文法另一种定义:文法G的每一个产生式具有下列形式:αAδ→αβδ,其中α、δ∈V*,A∈VN,β∈V+;2型文法(CFG)◊ 2型语言或上下文无关语言文法G的每个产生式A→α,若A∈VN ,α∈(VN∪VT)*,则G是2型法,即:上下文无关文法。
3型文法(RG)◊ 3型语言或正则(正规)语言若A、B∈VN,a∈VT或ε,右线性文法:若产生式为A→aB或A→a左线性文法:若产生式为A→Ba或A→a都是3型文法(即:正规文法)最左(最右)推导在推导的任何一步α⇒β,其中α、β是句型,都是对α中的最左(右)非终结符进行替换规范推导:即最右推导。
规范句型:由规范推导所得的句型。
句子的二义性(这里的二义性是指语法结构上的。
)文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。
文法的二义性一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。