pl/sql过程(一)

--练习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.等于符号是一个 = 而不是两个 ==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值