1. 程式人生 > >Lua練習題總結

Lua練習題總結

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