lua程序设计 第一章习题答案
练习1.1:运行阶乘的示例并观察,如果输入负数,程序会出现什么问题?试着修改代码来解决问题。
答:当输入负数时,循环无法终止,因为原本程序中的终止条件为n==0,而在输入为负数情况下,无法达成此终止条件。
程序在输入为负数时会失效,在输入为0和整数以外的其他数时都会失效,因为每次迭代将值减少1;在其他情况下,无法出现恰好==0的终止条件,从而导致堆栈溢出。
解决办法有两个思路:1.在调用方进行约束;2.在被调用方进行约束。
为函数本身简单起见,函数中终止条件修改为<=0,调用方负责传入的数值为非负整数。最后得到的代码如下:
--定义一个计算阶乘的函数
function fact(n)
if n<=0 then
return 1;
else
return n*fact(n-1);
end
end print("enter a number:");
a= io.input():read("n");--读取一个数字
print(fact(math.max(0,math.floor(a))));
练习1.2:分别使用-l参数和dofile运行twice示例,并感受你喜欢哪种方式。
--方式1: -l
--重要提示:必须在lua解释器之外运行,例如cmd环境中,否则会报错,无法执行。
lua -llib1
--或者
lua -l lib1
--重要:千万不要输入.lua后缀,否则会报错,无法执行。
--这样载入库之后就可以在lua 交互环境中使用twice了 --方式2: dofile
--重要提示:指令必须由lua解释器来执行,在cmd环境中执行。
dofile "lib1.lua"--引号不可省略,.lua不可省略
--【【
两者的区别:
1.前者载入的库,后者读取的是文件。后缀不同,对象有形式上的区别。
2.使用环境不同:前者在解释器之外;后者在解释器环境之内。
由于调试中通常处于解释器环境,可能后者用得更多。如书中所言,一边在解释器中dofile,一边在编辑器中编辑,这样操作,比较爽利。
--】】
练习1.3:你是否能够举出其他使用“--”作为注释的语言?
答:不知道。
练习1.4:以下字符串中哪些是有效的标识符?
___, _end,End,end,until?,nil,NULL,one-step
答:one-step中有非法字符"-",NULL,nil,end都是关键字;until?中有非法字符”?“,前面三个都是有效的标识符。
练习1.5:表达式type(nil)==nil的值是什么?你可以直接在Lua中运行来得到答案,但是你能够解释原因吗?
答:值为false,因为type的返回值为字符串,与nil的类型不同,所以不可能相等,所以值为false.
练习1.6:除了使用函数type外,如何检查一个值是否为Boolean类型?
答:假设检查形式为是Boolean类型就返回true,否则返回false.
function isBoolean( value )
-- body
return (value==true or value==false);
end
练习1.7:考虑如下的表达式:
(x and y and (not z)) or ((not y) and x)
其中的括号是否是必须的?你是否推荐在这个表达式中使用括号?
答:not的优先级最高,因此,not的括号首先不是必须的;and优先度高于or;由此可见,从语义角度,括号没有必要;但为了清晰起见,在这个表达式中应当使用括号。
练习1.8:请编写一个可以打印出脚本自身名称的程序(事先不知道脚本自身的名称)。
lua程序设计 第一章习题答案的更多相关文章
- javascript高级程序设计第一章有感
第一章JavaScript简介 Javascript的诞生最早是为了处理表单数据验证的问题,以前主要是使用perl这个强大的服务端脚本语言处理的.在未诞生javascript之前, 人们每次提交表单就 ...
- 读书笔记 - javascript 高级程序设计 - 第一章 简介
第一章 简介 诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262 一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...
- 谭浩强 c++程序设计第一章课后习题 第10题
#include <iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个整数类型的数 ...
- 谭浩强 c++程序设计第一章课后习题 第7题
#include <iostream> using namespace std; int main() { int a,b,c; int f(int x,int y,int z);//这是 ...
- C++面向对象程序设计第三章习题答案解析
整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...
- 04373 C++程序设计 2019版 第一章习题五、程序设计题
题目: 1.编写一个程序,将从键盘输入的n个字符串保存在一个一维数组A中.在输入字符串之前,先输入n的值.要求,数组A需要动态申请空间,程序运行结束前再释放掉. #include <iostre ...
- Java语言程序设计基础篇第10版第5章习题答案
5.1 1 public class Demo { public static void main(String[] args) { // 创建一个输入对象 java.util.Scanner inp ...
- Python《学习手册:第一章-习题》
人们选择Python的六大主要原因是什么? 软件质量:Python注重可读性.一致性和软件质量. Python代码的设计致力于可读性,因此具备了比传统脚本语言更优秀的可重用性和可维护性. Python ...
- 算法竞赛入门经典第二版第一章习题-(练习Java和C++语法)
习题1-1 平均数(average) 输入三个整数,输出他们的平均值,保留三位小数 Java: package suanfa; import java.util.Scanner; public cla ...
随机推荐
- 6、获取Class中的方法
6.获取Class中的方法 6.1 getMethods() 获取的都是共有的方法(包括父类) 返回包含一个数组 方法对象反射由此表示的类或接口的所有公共方法 类对象,包括那些由类或接口和那些从超类和 ...
- python 实践--新闻聚合
采集新闻,体会到面向问题和面向对象的区别. 如果希望新闻来源多出,比如NNTP,Web.可以实现:Source,Destination,NewItem,NewAgent. Scoure处理来源, De ...
- Proxy详解
一.Proxy基础 1. 什么是Proxy? Proxy是一个构造函数,可以通过它生成一个Proxy实例. const proxy = new Proxy(target, handler); // t ...
- ES6-12.Symbol
Symbol是ES6新增的原始类型数据,引入的初衷是为了对象可以有永不重复的属性名. 所以属性名可以是字符串外,还可以是Symbol值: const a = Symbol("a") ...
- js特殊字符的验证
// 特殊字符的验证 // 包含特殊字符返回true,不包含特殊字符返回false function checkEspcial(s) { var str=trim(s); //var reg=/< ...
- 基本react-native模板
import React, { Component } from 'react'; import { Text } from 'react-native'; export default class ...
- web软件测试基础系统测试简化理论
系统测试点主要如下 1.系统测试基础-2.测试对象与测试级别-3.系统测试类型-4.系统测试方法-5.系统测试之软件测试质量. 1.系统测试:是尽可能彻底地检查出程序中的错误,提高软件系统的可靠性. ...
- MySQL数据分析-(8)SQL基础操作之库操作
前面我们讲了学习SQL的两个逻辑框架,jacky说了这样一个逻辑:库是为了存储表的,所以一定是先有库才有表:同样的道理,有表才有表中的数据,是吧,肯定是这个逻辑:那么,今天jacky就捋着这个逻辑从库 ...
- TCP_IP Sockets编程C语言实现第2版 源码下载
原书网址:http://cs.ecs.baylor.edu/~donahoo/practical/CSockets2/textcode.html 源码下载: 链接:https://pan.baidu. ...
- 全网最新Kali Linux系统如何安装N卡驱动
转载请注明来源:全网最新Kali Linux系统如何安装N卡驱动[亲测-暗影精灵3-1050TI有效] - 大家好,我系渣渣辉 https://www.zzhsec.com/255.html 1.更换 ...