--练习1:求100以内的素数
declare
n int := 100;--100以内的素数
i number(3);--循环100个数
j number(3);--内循环
k number(3);--统计每个数的约数个数,为2则是素数,否则不是
begin
for i in 1..n loop
while j<=i loop
if ((i mod j)=0) then--注意:表达模用的是:mod 而不是 %(百分号)
k:=k+1;
end if;
j:=j+1;
end loop;
j:=0;
if k=2 then
dbms_output.put_line(i);--注意表示等于的是:= 而不是 ==
end if;
k:=0;--计算完一个数是否为素数后,把约数个数置为0
end loop;
end;
--练习2:最大公约数(如:25和40)
--40/25 = 1...15 第一步:1.用较大数除以较小数,40除25,判断余数是否为0,为0则25为最大公约数,不为0则到下一步
--25/15=1...10 第二步:2.被除数就是上一个式子的除数,除数等于上一个式子的余数
--15/10=1...5 ...
--10/5=0...0 直到余数为0,则除数是最大公约数
declare
i integer :=25;
j integer :=40;
gcd integer;
temp integer;
begin
if i<j then
temp := i;
i := j;
j := temp;
end if;
if mod(i,j)=0 then
gcd := j;
end if;
while mod(i,j)>0 loop
i := mod(i,j);
if i<j then
temp := i;
i := j;
j := temp;
end if;
if mod(i,j)=0 then
gcd := j;
end if;
end loop;
dbms_output.put_line('25和40的最大公约数是:'||gcd);
end;
-- 练习3:最小公倍数(如25和40)
-- 最小公倍数 = (数1 * 数2)/ 最大公约数
declare
i integer :=25;
j integer :=40;
gcd integer;
n integer;
temp integer;
begin
n:=i*j;
if i<j then
temp := i;
i := j;
j := temp;
end if;
if mod(i,j)=0 then
gcd := j;
end if;
while mod(i,j)>0 loop
i := mod(i,j);
if i<j then
temp := i;
i := j;
j := temp;
end if;
if mod(i,j)=0 then
gcd := j;
end if;
end loop;
dbms_output.put_line('25和40的最小公倍数是:'||n/gcd);
end;
写过程主要是要把逻辑理清楚,其次,要注意一些细节:
1.每句代码后一定要记得带分号。
2.凡是循环都要记得结束循环end loop。
3.基本机构要记清楚:if * then * end if之类的。
4.模用的是:mod(n1,n2)=>n1 mod n2。
5.等于符号是一个 = 而不是两个 ==