--1、获得数组中最大值
--知识点:定义数组、使用math.max取参数中最大值、使用table.unpack将集合拆分为参数列表。
arr={1,2,3,4,5,6,7,8,9,0}
max=math.max(table.unpack(arr))
print(max)
--2、实现 输入数字 num 与输入次方 n 进行计算结果,(中间的print为查看循环输出,输出结果顺序为终端列表的从下到上)
--知识点:16行循环执行函数
function my(x,n)
local sum
if n == 1 then
sum = x
print(000)
else
sum = my(x, n - 1) * x
print(n)
end
return sum
end
print('请输入数字')
num = io.read()
print('请输入该数的次方')
n = io.read()
print(num.."的"..n.."次方是:"..my(num,n))
--3、定义一个函数,传入两个参数并相加,相减,相乘,相除,取余,返回他们的运行结果
--知识点:利用..来进行字符串拼接
function my(x,y)
local xy1 = x + y
print(userNumberOne..'+'..userNumberTwo..'='..xy1)
local xy2 = x - y
print(userNumberOne..'-'..userNumberTwo..'='..xy2)
local xy3 = x * y
print(userNumberOne..'*'..userNumberTwo..'='..xy3)
local xy4 = x / y
print(userNumberOne..'/'..userNumberTwo..'='..xy4)
local xy5 = x % y
print(userNumberOne..'%'..userNumberTwo..'='..xy5)
end
print("请输入第一个数")
userNumberOne = io.read()
print("请输入第二个数")
userNumberTwo = io.read()
print(my(userNumberOne,userNumberTwo))
--4、定义一个函数利用循环让这个函数能够计算n的阶乘
--知识点:repeat...until 循环 ,先执行repeat 当 until后的 判断语句(n==0) 为ture时停止,否则重复执行repeat
function my(n)
local i=1
if n<1 then
return 1
end
repeat i=n*i
n=n-1
until n==0
print(i)
end
print(my(5))
--5、返回数组的最大值索引和最大值
--知识点:ipairs为迭代器,i为值在数组中的索引(下标、位置),val为值本身
local function maximum (a)
local mi = 1 -- 最大值索引
local m = a[mi] -- 最大值
for i,val in ipairs(a) do
if val > m then
mi = i
m = val
end
end
return m, mi
end
print(maximum({8,10,23,12,5}))
--6、斐波那契数列
function my(n)
if n == 0 or n == 1 then
return 0
elseif n == 2 then
return 1
elseif n == 3 then
return 2
else
return my(n - 1) + my(n - 2)
end
end
print(my(5))
--7、输出三角形的形状
--知识点:嵌套循环
a = 10
for i = 1, a, 1 do
for j = 1, a - i, 1 do
io.write(' ')
end
for k = 1, 2 * i - 1, 1 do
io.write('*')
end
print(a)
end
--8、99乘法表
--知识点:嵌套循环
for a = 1,9 do
local s = ""
for b=1,9 do
if b <= a then
s = s..a.."X"..b.."="..a*b
if a ~= b then
s = s.."\t"
end
end
end
print(s)
end
--9、要求用户输入一个年份,判断并输出该年份是闰年还是平年。
--知识点:%为取余 ~=为不等于
year = io.read()
if(year%4==0 and year%100~=0) then
print("闰年")
else
print("平年")
end
--10、要求用户输入一个年份和一个月份,判断(要求使用嵌套的if…else和switch分别判断一次)该年该月有多少天。
print("请输入年份")
year = io.read();
print("请输入月份")
month = io.read();
if(year%4 == 0 and year%100 ~= 0) then
print(year.."是闰年:366天")
local month = tonumber(month)
if(month == 2) then
print(month.."月是28天")
end
else
print(year.."是平年:365天")
local month = tonumber(month)
if(month == 2) then
print(month.."月是29天")
end
end
monthMax = {1,3,5,7,8,10,12}
months = {4,6,9,11}
for i,m in ipairs(monthMax)do
local lable = tonumber(month)
if m == lable then
print(lable.."月是31天")
end
end
for i,m in ipairs(months)do
local lable = tonumber(month)
if m == lable then
print(lable.."月是30天")
end
end
--11、使用while循环求1~100以内所有奇数的和。
i = 1;
J = 1;
while(i < 99)
do
local num = i + 2
i = num
J = J + i
end
print(J)
--12、将数组进行逐条显示
--知识点:1.table.sort() 为排序函数,自开始到结束将数组中的内容进行从小到大的排序显示;
--在 #am 其中 # 的作用是显示数组中数据长度,在此处为4
am = {"cc","nn","ll","dd"}
arr = function ()
for i =1,#am do
print(i..","..am[i])
end
end
table.sort(am)
arr()
--13、冒泡排序的另外一种写法
--知识点:利用比较将数组中数据前后更换位置;
function bubble_sort(array)
local tmp = 0
for i =1,#array-1 do
for j =1,#array-i do
if array[j]>array[j+1] then
tmp = array[j]
array[j]=array[j+1]
array[j+1] = tmp
end
end
end
end
function main(...)
local arr = {54,25,66,45,555,666,321,88,665,89}
bubble_sort(arr)
for i,v in pairs (arr) do
print("排序后的结果为:",i.."->"..v)
end
end
main()
--14、按降序进行排列
--知识点:table.sort(数组,)
tabl={"b", "a", "g", "c"}
function sortFunc(a,b)
return a>b
end
table.sort(tabl,sortFunc)
print(table.concat(tabl,","))
--15.获得table中最大值的例子
--知识点:使用pairs()遍历集合,t为集合
--pairs 和 ipairs(5、10笔记)异同
--同:
--都是能遍历集合(表、数组)
--异:
--ipairs 仅仅遍历值,按照索引升序遍历,索引中断停止遍历。即不能返回 nil,只能返回数字 0,如果遇到 nil 则退出。它只能遍历到集合中出现的第一个不是整数的 key。
--pairs 能遍历集合的所有元素。即 pairs 可以遍历集合中所有的 key,并且除了迭代器本身以及遍历表本身还可以返回 nil。
function maxTable(t)
local temp = nil
for k,v in pairs(t) do
if(temp==nil) then
temp = v
end
if temp<v then
temp = v
end
end
return temp
end
tab = {[1]=55,[2]=43,[3]=89,[4]=9,[5]=1}
print("该表中的最大值为:",maxTable(tab))
--16.创建自己的迭代器
--知识点:手写迭代器
array2 = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}
function elementIterator2(countTable)
local inde =0
local coun1 = #countTable --获得其长度
return function() --匿名函数
inde = inde+1
if inde<=coun1 then
return countTable[inde]
end
end
end
for element in elementIterator2(array2) do
print(element)
end
--17.一个简单的例子来实现迭代,实现数字n的平方
function square(iteratorMaxCount,currentNumber)
if currentNumber<iteratorMaxCount then
currentNumber = currentNumber+1
return currentNumber,currentNumber*currentNumber
end
end
for i ,n in square ,3,0 do
print(i,n)
end
--18.lua中我们可以将“函数作为参数”传递给“函数”>> 函数可以作为数据赋值,也可以作为参数进行传递;等同于C#中的委托(delegate)
--知识点:函数PrintMy作为add函数的第三个参数进行传递
PrintMy = function(parm)
print("打印函数-print",parm,"????")
end
function add(num1,num2,functionP)
re = num1+num2
functionP(re)
end
PrintMy(10)
add(5,10,PrintMy)
--19.求几个数的平均值
--知识点:
--average(...)其中...代表可变参数,此函数为可变函数;
--arg={...}其中...代表可变参数,将可变参数赋值给了这个变量
function average(...)
resule = 0
local arg={...}
for i,v in ipairs(arg) do
result = resule+v
end
print("总共传入"..#arg.."个数")
print("平均值为",result/#arg)
end
average(10,20,5,36,5,8)
--20.将阿拉佰数字改成汉字形式的数字
--tostring为将输入内容转换为字符串格式;#为取其长度
local function NumToCn(num)
local size = #tostring(num) --先转换为字符串,然后 求其长度
local Cn = ""
local StrCn = {"一","二","三","四","五","六","七","八","九"}
for i =1,size do
Cn = Cn..StrCn[tonumber(string.sub(tostring(num),i,i))]
end
return Cn
end
print(NumToCn(7788555789)) --竟然不能写很多函数,如果是很多的话,会报错