練習(xí)題)
------------------------------------------------------# Oracle PL/SQL 判斷循環(huán)練習(xí)題10道中等~偏難約束**禁止使用游標(biāo)、異常處理、觸發(fā)器**只允許IF/ELSIF/ELSE、CASE、LOOP/EXIT、WHILE LOOP、FOR LOOP、變量、簡單DML、賦值、輸出DBMS_OUTPUT。 環(huán)境Oracle 11g/19c全部塊為 PL/SQL 匿名塊不建觸發(fā)器、不寫EXCEPTION、不使用cursor。## 題目1FOR循環(huán)多分支IF中等編寫PL/SQL匿名塊輸出1?100之間所有數(shù)字規(guī)則1. 是3的倍數(shù)輸出Fizz2. 是5的倍數(shù)輸出Buzz3. 同時是3和5倍數(shù)輸出FizzBuzz4. 其他輸出數(shù)字本身。要求使用FOR循環(huán)IF?ELSIF多分支。declarebeginfor i in 1..100loopif mod(i,3)0 and mod(i,5)0 thendbms_output.put_line(Fizz);elsif mod(i,5) 0 thendbms_output.put_line(Buzz);elsif mod(i,3)0 thendbms_output.put_line(FizzBuzz);elsedbms_output.put_line(i);end if;end loop;end;## 題目2WHILE循環(huán)嵌套IF中等給定數(shù)字變量v_n : 12345用WHILE循環(huán)逐位拆解整數(shù)**計(jì)算每一位數(shù)字的總和**。 示例12345 → 012345 15不允許轉(zhuǎn)為字符串截取只用數(shù)學(xué)運(yùn)算取模、除法。declareV_n number:12345;n number:0;a number;begina:V_n;while a0loopn:nmod(a,10);a : trunc(a/10);end loop;end;## 題目3LOOP EXIT循環(huán)CASE中等偏上使用LOOP ... EXIT WHEN循環(huán)實(shí)現(xiàn)求不大于1000的所有7的倍數(shù)統(tǒng)計(jì)兩個結(jié)果- 滿足條件數(shù)字的總個數(shù)- 所有數(shù)字累加和使用CASE表達(dá)式做條件判斷最后dbms_output打印個數(shù)與總和。declaren number:1;v_count number:0;V_sum number:0;beginloopif mod(n,7)0 thenv_count:v_count1;end if;v_sum:v_sumn;n:n1;exit when n1001;end loop;dbms_output.put_line( v_count || v_sum );end;## 題目4FOR循環(huán)嵌套IF中等偏上打印九九乘法表PL/SQL匿名塊兩層FOR嵌套循環(huán)輸出控制臺格式化乘法表。## 題目5循環(huán)復(fù)合IF條件中等變量v_max :50計(jì)算1~v_max區(qū)間同時滿足1. 是偶數(shù)2. 不能被4整除求這一類數(shù)字的累加總和使用FOR循環(huán)多條件IF判斷輸出最終總和。declareV_max number:50;n number :0 ;beginfor i in 1..V_maxloopif mod(i,2)0 and mod(i,4)0 thenn:n i;end if;end loop;dbms_output.put_line(n);end;## 題目6LOOP循環(huán)區(qū)間判斷偏難給定初始值v_x:2使用無條件LOOP循環(huán)每次v_x v_x *3循環(huán)退出條件v_x 2000循環(huán)內(nèi)部如果v_x大于100且小于1000則打印該值其他數(shù)值不打印。最后輸出循環(huán)一共執(zhí)行多少次。declarev_x number:2;n number:0;m number:0;beginloopif v_x between 100 and 1000 thendbms_output.put_line(v_x);m :m1;end if;n:n1; -------------------計(jì)數(shù)v_x : v_x *3;exit when v_x2000;end loop;dbms_output.put_line(n||m);end;## 題目7WHILE嵌套IF中等偏上實(shí)現(xiàn)斐波那契數(shù)列輸出小于500的全部斐波那契數(shù)字1,1,2,3,5,8…WHILE循環(huán)if控制輸出不使用數(shù)組只用普通數(shù)值變量迭代。declaren number:1;m number:0;a number:1;beginwhile n500loopdbms_output.put_line(n);dbms_output.put_line(a);m:na;n:m;end loop;end;declarea number : 1;b number : 1;s number;begindbms_output.put_line(a);dbms_output.put_line(b);while a b 500loops : a b;dbms_output.put_line(s);a : b;b : s;end loop;end;## 題目8FOR循環(huán)CASE搜索式偏難遍歷1?60數(shù)字根據(jù)數(shù)字區(qū)間做分類統(tǒng)計(jì)- [1,20] A類計(jì)數(shù)- [21,40]B類計(jì)數(shù)- [41,60]C類計(jì)數(shù)使用**搜索CASE**做分支FOR循環(huán)最后輸出A/B/C三類各自計(jì)數(shù)。declarea number:0;b number:0;c number:0;beginfor i in 1..60loopif i between 1 and 20 thena:a1;elsif i between 21 and 40 thenb:b1;elsif i between 41 and 60 thenc:c1;end if ;end loop;dbms_output.put_line(a||b||c);end;## 題目9雙重LOOPIF判斷偏難外層LOOP循環(huán)i從2到8內(nèi)層LOOP循環(huán)j從2到i當(dāng) i mod j 0 立刻退出內(nèi)層循環(huán)內(nèi)層結(jié)束后判斷如果 j i說明i是質(zhì)數(shù)打印i。功能輸出2?8之間全部質(zhì)數(shù)。禁止游標(biāo)只用LOOPEXIT WHEN。declarei number : 2;j number;beginloopj : 2;loopexit when mod(i, j) 0;----成立了 可定不是質(zhì)數(shù)j : j 1;exit when j i;end loop;if j i thendbms_output.put_line(i);end if;i : i 1;exit when i 8;end loop;end;## 題目10循環(huán)多條件組合判斷綜合偏難給定變量v_total:0遍歷1?200滿足下面**任意一個條件**就要累加到v_total1. 能被7整除2. 數(shù)字包含數(shù)字9數(shù)學(xué)運(yùn)算取模/除法判斷**禁止轉(zhuǎn)字符串**FOR循環(huán)IF多條件邏輯最后輸出v_total最終結(jié)果。declareV_total number : 0;beginfor i in 1..200 loopif mod(i, 7) 0 or (mod(trunc(i / 10), 10) 9 or mod(i, 10) 9) thendbms_output.put_line(i);V_total : V_total i;end if;end loop;dbms_output.put_line(V_total);end;---# 參考答案示例選2道給參考方便講課### T2 參考答案數(shù)字按位求和 WHILEplsqlDECLAREv_n NUMBER : 12345;v_sum NUMBER : 0;v_temp NUMBER;BEGINv_temp : v_n;WHILE v_temp 0 LOOPv_sum : v_sum MOD(v_temp,10);v_temp : TRUNC(v_temp / 10);END LOOP;DBMS_OUTPUT.PUT_LINE(各位和||v_sum);END;/### T7 斐波那契 WHILE示例plsqlDECLAREv_a NUMBER :1;v_b NUMBER :1;v_c NUMBER;BEGINDBMS_OUTPUT.PUT_LINE(v_a);DBMS_OUTPUT.PUT_LINE(v_b);WHILE v_a v_b 500 LOOPv_c : v_a v_b;DBMS_OUTPUT.PUT_LINE(v_c);v_a : v_b;v_b : v_c;END LOOP;END;/如果你需要我可以把**10道題全部完整參考答案一次性輸出**或者生成可復(fù)制的試卷文本適合直接給學(xué)生做題。