Lua練習題總結
阿新 • • 發佈:2018-11-12
1.獲得陣列中最大值的例子
local arr = {1,2,3,4,5,5,5,5,8,9,1} -- 定義陣列 local max = math.max(unpack(arr)) -- math.max取得引數中最大值; -- unpack接收一個數組(table)引數,預設從下標1開始返回陣列所有元素 print(max)
2.一個簡單的例子來實現數字n的幾次方
function my(x,n)
local sum
if n == 1 then
sum = x
else
sum = my(x, n - 1) * x
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的階乘
--~ 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.斐波那契數列
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))
6.輸出三角形的形狀
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()
end
7.9*9乘法表
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
8.要求使用者輸入一個年份,判斷並輸出該年份是閏年還是平年。
--~ year = io.read()
--~ if(year%4==0 and year%100~=0) then
--~ print("閏年")
--~ else
--~ print("平年")
--~ end
9.要求使用者輸入兩個整數,判斷第一個整數是否是第二個整數的倍數。
--~ num1 = io.read()
--~ num2 = io.read()
--~ if(num2%num1 == 0) then
--~ print("Ok")
--~ else
--~ print("No")
--~ 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.要求使用者輸入一個學生的分數(1~100),使用switch結構判斷該分數屬於什麼等級(A、B、C、D、F)。
userScore = io.read()
numberScore = tonumber(userScore)
if (numberScore <= 20 and numberScore > 0) then
print("A")
end
if (numberScore <= 40 and numberScore > 20) then
print("B")
end
if (numberScore <= 60 and numberScore > 40) then
print("C")
end
if (numberScore <= 80 and numberScore > 60) then
print("D")
end
if (numberScore <= 100 and numberScore > 80) then
print("F")
end
if (numberScore <= 0) then
print("會好好輸嗎?")
end
12.使用while迴圈求1~100以內所有奇數的和。
i = 1;
J = 1;
while(i < 99)
do
local num = i + 2
i = num
J = J + i
end
print(J)
--]]
13.使用while迴圈求式子2+22+222+2222+22222的和。p=p*10+2;
i = 0
j = 0
while(i < 22222)
do
i = i * 10 + 2
j = j + i
end
print(j)
14.請程式設計驗證一下“角谷猜想”:對任意的自然數,若是奇數,就對它乘以3加1;若是偶數就對它除以2;這樣得到一個新數,再按上述奇數、偶數的計算規則進行計算,一直進行下去,最終將得到1。
userScore = io.read()
numberScore = tonumber(userScore)
while(numberScore ~= 1) do
if(numberScore % 2 == 1) then
numberScore = numberScore * 3 + 1
else
numberScore = numberScore / 2
end
print(numberScore)
end