循环: LOOP,FOR,WHILE

loop循环:
问题:2+3=?
1+2+3=?
1+2+3+...+10=?
1+2+3+...+100=?

第一个加数,
最后一个数,
两个数之间相差的数

loop循环的语法结构:
loop --循环开始
    if 循环结束的条件 then exit;    end if;--条件成立时,结束循环
end loop;--循环结束

set serveroutput on;
loop循环的执行思路:
1.进入循环
2.判断循环继续的条件,是否成立;如果成立,就直接跳出循环;
3.如果不成立,执行判断后面,循环里面的其他代码一次;
4.重新执行第2步,一直到条件成立,循环结束为止;
declare
    num1 number(8):=1;--加数
    sum1 number(8):=0;--用来存放加法运算的结果
begin
    loop
        if num1>100 then exit;end if;
        sum1:= sum1 + num1 ;
        num1:= num1 + 1;
    end loop;    
    dbms_output.put_line('求和结果:'||sum1);
end;

-------------------------------------------------------------------------------------------------

for循环
1+2+3+...+100=?
语法:
这里的变量1,不需要在declare里面定义,直接使用
for 新的变量1 in 循环的范围 loop

end loop;

实现:
declare
    sum1 number(8):=0;
begin
  for num1 in 1..100 loop
    sum1:= sum1 + num1;
  end loop;
  
  dbms_output.put_line(sum1);
end;

----------------------------------------------------------------------------------------------------------

while循环
语法:
while 循环继续的条件  loop

end loop;

执行思路:
1.进入循环
2.判断:判断条件是否成立;如果不成立,循环结束;
3.如果条件成立,进入循环体,执行循环体中的代码;
4.第3步执行完毕后,重新跳转到第2步继续判断,一直到条件不成立,循环结束为止;
1+2+3+...+100=?
declare
    num1 number(8):=1;
    sum1 number(8):=0;
begin
  while num1<=100 loop
    sum1:=sum1+num1;
    num1:=num1+1;
  end loop;
  dbms_output.put_line('while循环求和的结果:'||sum1);
end;
========================================================

1.分别求1-100内奇数/偶数的和,并打印出来
set serveroutput on; 
declare 
num1 number(8):=1;
sum1 number(8):=0;
sum2 number(8):=0;
begin
loop
sum1:=sum1+num1;
sum2:=sum2+num1+1;
num1:=num1+2;
if num1>100 then exit; 
end if;
end loop;
dbms_output.put_line('1-100内奇数的和:'||sum1);
dbms_output.put_line('1-100内偶数的和:'||sum2);
end;

--------------------------------------------------------------------------

2.求1-100内能被3整除,不能被5整除的数字
DECLARE
  n number(8):=1;
BEGIN
loop
n:=n+1;
 if  n>100 then exit; 
 elsif MOD(n,3)=0 and MOD(n,5)<>0 then dbms_output.put_line(N||', '); 
 end if;
end loop;
END; 

方法二:for循环
begin 
    for i in 1..100 loop
        if mod(i,3)=0 and mod(i,5)<>0 then dbms_output.put_line(i);
        elsif i>100 then exit;
    end if;
    end loop;
end;

--------------------------------------------------------------------------------------------------------------------

3..打印乘法表
    1*1=1    
    2*1=2    2*2=4    
    3*1=3    3*2=6    3*3=9    
    4*1=4    4*2=8    4*3=12    4*4=16    
    ...需要两层循环,外层循环控制第一个乘数,内层循环控制第二个乘数。


 declare
i int:=1;
j int:=1;
begin 
    loop 
            loop
                 dbms_Output.put(i||'*'||j||'='||i*j||' ');
                 j:=j+1;
            exit
            when j>i;
            end loop;
        dbms_output.put_line('');
        i:=i+1;
        j:=1;
    exit
    when i>9;
    end loop;
end;

方法二:for循环

declare 
begin
  for i in 1..9 loop
    for j in 1..i loop
        dbms_output.put(i||'*'||j||'='||i*j||'  ');
    end loop;
    dbms_output.new_line;
end loop;
end;
方法三:while 循环
declare
    i int:=0;
    j int:=0;
begin    
while i<=9 loop
        j:=1;
        while j<=i
            loop
                dbms_Output.put(i||'*'||j||'='||i*j||' ');
                dbms_output.put('');
                j:=j+1;
            end loop;
        dbms_output.new_line;
        i:=i+1;
    end loop;
end; 

-------------------------------------------------------------------------------------------------------------

4..求所有的水仙花数
水仙花数是一个三位数,每一位数字的3次幂的和正好等于这个数本身。
declare
v_num1 number;
v_num2 number;
v_num3 number;
v_num number:=100;
begin
 while v_num<1000 
   loop
    v_num1:=mod(v_num,10);--个位132,2
    v_num2:=mod(floor(v_num/10),10);--十位132,3
    v_num3:=floor(v_num/100); --百位132,1  
     if v_num=power(v_num1,3)+power(v_num2,3)+power(v_num3,3)  then
   dbms_output.put(v_num||' ');
     end if;
  v_num:=v_num+1;   
   end loop;
   dbms_output.put_line(' ');
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好好羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值