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

猜你喜欢

转载自blog.csdn.net/qq_42047805/article/details/81777084