diff --git "a/53 \345\221\250\345\216\232\350\276\260/20231010 \347\254\254\345\215\201\345\205\253\346\254\241\344\275\234\344\270\232 \345\276\252\347\216\257 repeat \357\274\214while\357\274\214loop/while\357\274\214loop\357\274\214repeat.md" "b/53 \345\221\250\345\216\232\350\276\260/20231010 \347\254\254\345\215\201\345\205\253\346\254\241\344\275\234\344\270\232 \345\276\252\347\216\257 repeat \357\274\214while\357\274\214loop/while\357\274\214loop\357\274\214repeat.md" new file mode 100644 index 0000000000000000000000000000000000000000..0895b2acc806f28f854392aa32aff1ddca972b1f --- /dev/null +++ "b/53 \345\221\250\345\216\232\350\276\260/20231010 \347\254\254\345\215\201\345\205\253\346\254\241\344\275\234\344\270\232 \345\276\252\347\216\257 repeat \357\274\214while\357\274\214loop/while\357\274\214loop\357\274\214repeat.md" @@ -0,0 +1,243 @@ +2023年10月10日 + +# while,loop和repeat的循环应用 + +## 知识点 + +### loop + +Loop循环语句用来重复执行某些语句。LOOP内的语句一直重复执行直到循环被退出**(使用LEAVE子 句),跳出循环过程**。 + +```sql +#语法: +[标识符:]loop +循环执行的语句 +End loop [标识符:] +``` + +### while + +while语句创建一个带条件判断的循环过程。WHILE在执行语句执行时,先对指定的表达式进行判断,如果为真,就执行循环内的语句,否则退出循环。 + +```sql +#语法 +[标识符:]while +循环条件 +Do +循环执行的语句 +End while [标识符:] +``` + +### repeat + +REPEAT语句创建一个带条件判断的循环过程。与WHILE循环不同的是,**REPEAT 循环首先会执行一次循环**,然后在 UNTIL 中进行表达式的判断,如果满足条件就退出,即 END REPEAT;如果条件不满足,则会就继续执行循环,直到满足退出条件为止。 + +```sql +#语法 +[标识符:]repeat +循环执行的语句 +Until 结束循环的条件表达式 +End repeat [标识符:] +``` + +--- + +## 课上练习 + +### 题目 + +-- 写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +-- 否则先判断这个数和是不是大于5,如果大于5就从1循环到这个数,并找出所有的偶数。小于等于5就提示数太小了,并退出。 + +-- 要求,循环部分,要用三种语法分别做一遍 + +### 答案 + +```sql + +# loop循环 +drop procedure if exists p1; +delimiter // +create procedure p1 (in num int) +a:begin + declare i int default 1; + if num<=0 then select "非法输入,已退出"; + leave a; + elseif num <=5 then select "数字太小了,已退出"; + leave a; + end if; + b:loop + if i>num then + leave b; + elseif num >5 then + select i; + set i = i+1; + if i%2=0 then select concat("偶数",i); + end if; + end if; + end loop b; +end // +delimiter; + +call p (8); + +# while循环 +drop procedure if exists p2; +delimiter // +create procedure p2 (in num int) +a:begin + declare i int default 1; + if num<=0 then select "非法输入,已退出"; + leave a; + elseif num <=5 then select "数字太小了,已退出"; + leave a; + end if; + b:while + i<=num + do + select i; + if i%2=0 then select concat("偶数",i); + end if; + set i=i+1; + end while b; +end // +delimiter; + +call p2 (8); + +#repeat循环 +drop procedure if exists p3; +delimiter // +create procedure p3 (in num int) +a:begin + declare i int default 1; + + if num<=0 then select "非法输入,已退出"; + leave a; + elseif num <=5 then select "数字太小了,已退出"; + leave a; + end if; + b:repeat + select i; + set i=i+1; + if i%2=0 then select concat("偶数",i); + end if; + until i>num + end repeat b; +end // +delimiter; + +call p3 (8); + +``` + +## 课后作业 + +### 题目 + +-- 写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +-- 否则先判断这个数是不是大于20,如果大于20就从1循环到这个数,并找出所有的偶数(但遇到逢10的数要跳过)。小于等于20就提示数太小了,并退出。 + +-- 要求,循环部分,要用三种语法分别做一遍 + +### 答案 + +```sql +-- 写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +-- 否则先判断这个数是不是大于20,如果大于20就从1循环到这个数,并找出所有的偶数(但遇到逢10的数要跳过)。 +-- 小于等于20就提示数太小了,并退出。 + +-- 要求,循环部分,要用三种语法分别做一遍 +#loop循环 + +use test; +drop procedure if exists p1; + + +delimiter // +create procedure p1(in num int) +a:begin + declare i int default 1; + if num<=0 then select "非法输入,已退出"; leave a; + elseif num<20 then select "数太小了,已退出"; leave a; + end if; + + b: LOOP + select i; + if i % 2=0 then + if i%10=0 then + set i=i+1; + iterate b; + end if; + select concat("偶数",i); + end if; + set i=i+1; + + IF i>num THEN + LEAVE b; + END IF; + END LOOP b; + +end // +delimiter; + +call p1(30); + +#while循环 +drop procedure if exists p2; + +delimiter // +create procedure p2(in num int) +a:begin + declare i int default 1; + if num<=0 then select "非法输入,已退出"; leave a; + elseif num<20 then select "数太小了,已退出"; leave a; + end if; + + b:WHILE i<=num DO + select i; + if i % 2=0 then + if i%10=0 then + set i=i+1; + iterate b; + end if; + select concat("偶数",i); + end if; + set i=i+1; + END WHILE; + +end // +delimiter; + +call p2(20); + +#repeat循环 +drop procedure if exists p3; + +delimiter // +create procedure p3(in num int) +a:begin + declare i int default 1; + if num<=0 then select "非法输入,已退出"; leave a; + elseif num<20 then select "数太小了,已退出"; leave a; + end if; + + b:REPEAT + select i; + if i % 2=0 then + if i%10=0 then + set i=i+1; + iterate b; + end if; + select concat("偶数",i); + end if; + set i=i+1; + UNTIL i>num END REPEAT b; + +end // +delimiter; + +call p3(20); + +``` +