练习1. 下列代码的输出是什么?为什么?
sunday = "monday"; monday = "sunday"
t = {sunday = "monday", [sunday] = monday}
print(t.sunday, t[sunday], t[t.sunday])
解:
--> monday sunday sunday
t.sunday 相当于调用表结构体中的 sunday; t[sunday] 形式 采用了方括号表达式,显示指定了 sunday 索引,由于 sunday 索引的元素是 monday变量, 指向了"sunday"
字符串 ”sunday“; t[t.sunday] 相当于 t["monday"] , 由于 [sunday] = monday 等同于 "monday" = monday,所以结果为sunday
练习2. 考虑如下代码:
a = {}; a.a = a
a.a.a.a 的值是什么?其中的每个a都一样嘛?
如果将如下代码追加到上述的代码中:
a.a.a.a = 3
现在的a.a.a.a的值变成了什么?
解:
a
a.a
a.a.a
a.a.a.a 都指向同一个表
执⾏a.a.a.a=3即指定该表关键字为字符串“a”的值为3,这时候再执⾏a.a.a.a会发⽣错误,因为a.a的值为3
练习3:假设要创建一个以转义序列为值、以转义序列对应字符串为键的表,请问应该如何编写构造器?
解:
={["\a"]="\007",["\t"]="\009",["\n"]="\010
练习4:在Lua语言中,我们可以使用由系数组成的列表{a0, a1, ...., an}来表达多项式
请编写一个函数,该函数以多项式(使用表表示)和值x为参数,返回结果为对应多项式的值。
解:
function polynomial(Coefficient, x)
--假设多项式是3x^5+4x^4-2x^3+8x^2-x^1+9
local tab = {3, 4, -2, -1, 9}
local sum=0
for i=1,#tab do
sum=sum+tab[i]*(x^(#tab-i))
end
return sum
end
print()
练习5:改写上述函数,使之最多使用n个加法和n个乘法(且没有指数)
解:
--[[
假设多项式是
3x^5+4x^4-2x^3+8x^2-x^1+9
]]
function polynomial(x)
tab={9,-1,8,-2,4,3}
local sum=0
local product=1
for i=1,#tab do
sum=sum+tab[i]*product
product=product*x
end
return sum
end
练习6:请编写一个函数,该函数用于测试指定的表是否为有效的序列。
解:
--因为相对于pairs(),ipairs()不会遍历键值对,并且遇到nil会停下,但是pairs()会输出nil且继续,并且会遍历键值对
function IsSequence(tab)
i=0
j=0
for index inpairs(tab)do
i=i+1
end
for index inipairs(tab)do
j=j+1
end
if i~=j then
return false
else
return true
end
end
练习7:请编写一个函数,该函数将指定列表的所有元素插入到另一个列表的指定位置。
解:
function TotalInsert(tab1,tab2,index)
for i=1,#tab1 do
table.insert(tab2,index,tab1[i])
index=index+1
end
end
练习8:表标准库中提供了函数 table.concat,该函数将指定表的字符串元素连接在一起:
解:
print(table.concat({"hello", " ", "world"}})) --> hellow world
实现该函数,并比较在大数据量(具有上百万个元素的表,可利用for循环生成)情况下与标准库之间的性能差异。
function Concatenate(tab,start,over)
str="\0"
for i=start,over do
str=str..tab[i]
end
return str
end
本文含有隐藏内容,请 开通VIP 后查看