练习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程序设计 第一章习题答案的更多相关文章

  1. javascript高级程序设计第一章有感

    第一章JavaScript简介 Javascript的诞生最早是为了处理表单数据验证的问题,以前主要是使用perl这个强大的服务端脚本语言处理的.在未诞生javascript之前, 人们每次提交表单就 ...

  2. 读书笔记 - javascript 高级程序设计 - 第一章 简介

      第一章 简介   诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262  一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...

  3. 谭浩强 c++程序设计第一章课后习题 第10题

    #include <iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个整数类型的数 ...

  4. 谭浩强 c++程序设计第一章课后习题 第7题

    #include <iostream> using namespace std; int main() { int a,b,c; int f(int x,int y,int z);//这是 ...

  5. C++面向对象程序设计第三章习题答案解析

    整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...

  6. 04373 C++程序设计 2019版 第一章习题五、程序设计题

    题目: 1.编写一个程序,将从键盘输入的n个字符串保存在一个一维数组A中.在输入字符串之前,先输入n的值.要求,数组A需要动态申请空间,程序运行结束前再释放掉. #include <iostre ...

  7. Java语言程序设计基础篇第10版第5章习题答案

    5.1 1 public class Demo { public static void main(String[] args) { // 创建一个输入对象 java.util.Scanner inp ...

  8. Python《学习手册:第一章-习题》

    人们选择Python的六大主要原因是什么? 软件质量:Python注重可读性.一致性和软件质量. Python代码的设计致力于可读性,因此具备了比传统脚本语言更优秀的可重用性和可维护性. Python ...

  9. 算法竞赛入门经典第二版第一章习题-(练习Java和C++语法)

    习题1-1 平均数(average) 输入三个整数,输出他们的平均值,保留三位小数 Java: package suanfa; import java.util.Scanner; public cla ...

随机推荐

  1. sqlserver2014安装Windows版教程

    下载好安装包,直接运行 根据自己的情况选择,我是首次安装,选择第一项即可. 之后一路下一步,然后等待安装. 安装完成

  2. jQuery.map(arr|obj,callback)

    jQuery.map(arr|obj,callback) 概述 将一个数组中的元素转换到另一个数组中.广州大理石机械构件 作为参数的转换函数会为每个数组元素调用,而且会给这个转换函数传递一个表示被转换 ...

  3. kernel namespace

    reference: https://lwn.net/Articles/531114/

  4. 路由器配置——PAP与CHAP认证

    一.实验目的:掌握PAP与CHAP认证配置 二.拓扑图: 三.具体步骤配置: (1)R1路由器配置: Router>enable  --进入特权模式 Router#configure termi ...

  5. kubernets安装rabbitmq集群.

    RabbitMQ集群的两种模式 1)普通模式:默认的集群模式,队列消息只存在单个节点上 2)镜像模式:队列为镜像队列,队列消息存在每个节点上 配置同步: 配置同步: 1.Ha mode 同步模式,以下 ...

  6. ImportError: No module named rospy

    Traceback (most recent call last): File "manage.py", line 4, in <module> import rosp ...

  7. Flask 生成下载文件

    1 后台程序直接生成文件内容 from flask import make_response @app.route('/testdownload', methods=['GET']) def test ...

  8. centos7中oracle数据库安装和卸载

    参考: 完全命令行安装(验证可行):https://jingyan.baidu.com/article/90895e0f29c92164ec6b0bd1.html 存在疑问:是否需要jdk的配置(因为 ...

  9. selenium 隐式等待报错 value must be a non-negative integer

    笔者运行代码使用selenium的隐式等待时出现报错: from selenium import webdriver # 从selenium导入webdriver import time driver ...

  10. Swift 基本语法

    如果创建的是 OS X playground 需要引入 Cocoa : import Cocoa /* 我的第一个 Swift 程序 */ var myString = "Hello, Wo ...