版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計活頁式教程項目三:控制程序流程項目任務知識目標學習目標任務1:用if判斷成績區(qū)間任務2:用switch實現簡單計算器任務3:用for找出100以內的素數任務4:用while求一個正整數的逆序數任務5:輸出九九乘法表(1)了解C語言的三種程序結構。(2)了解break、continue語句的用法。(3)掌握if語句、switch語句的用法。(4)掌握for語句、while語句、do-while語句的用法。(5)能夠設計算法解決問題。任務準備任務實施任務描述任務1用if判斷成績區(qū)間任務描述本任務要求用戶輸入一個百分制的整數成績,根據成績的數值判斷成績對應的等級是“不及格”、“及格”、“良好”還是“優(yōu)秀”。本任務涉及數據的輸入輸出、邏輯運算符的使用、if語句的使用等。因此,本任務將重點講解if語句和它的各種變形形式,讓學生具備使用if語句處理各類判斷的能力。任務準備任務實施Part
1Part
2Part
3任務描述任務準備1.流程圖流程圖是一個描述程序的控制流程和指令執(zhí)行情況的有向圖,它是程序的一種比較直觀的表示形式。常用的流程圖符號及其代表的意義如表3-1所示:以閏年的判斷為例,如果年份能被4整除但不能被100整除,或者能被400整除,那么該年就是閏年。設計程序時先輸入年份y,判斷y能不能被4整除。如果y不能被4整除,則輸出y不是閏年。如果y能被4整除,再判斷y能不能被100整除。如果y能被4整除但不能被100整除,則輸出y是閏年;如果y能被4和100同時整除,再判斷y能不能被400整除。如果y能被400整除,則輸出y是閏年,否則輸出y不是閏年。任務準備很顯然用文字描述流程會很繁瑣,不便于理解和交流,而流程圖卻可以清晰明了地表達流程。輸入年份并判斷它是不是閏年的流程圖如圖3-1所示:圖3-1閏年判斷流程圖開始輸入年份y4整除y100整除y400整除y輸出y是閏年輸出y不是閏年結束是否否是是否任務準備再以求一個正整數的階乘為例。要求輸入一個正整數n,定義變量sum并賦初值為1,定義變量i并讓它的值從1遞增到n。在變量i遞增的過程中,將每一個i的取值都乘到變量sum上,最后sum的值就是1*2*3*…*n,即n的階乘。求正整數n的階乘的流程圖如圖3-2所示:流程圖是一種用于表示和理解動態(tài)過程的圖形工具,它具有概括性和抽象性,有清晰的起點和終點,簡單明了、形象直觀,便于描述、理解、交流和記錄。圖3-2求n的階乘流程圖輸出出錯信息開始結束輸入n的值n<0?是i=1,sum=1sum=sum*ii=i+1i>n?輸出sum的值否否是任務準備2.if語句if語句用來判定所給定的條件是否滿足,根據判定結果的真假決定是否執(zhí)行給出的語句。C語言用int型數據1代表真,對應條件成立;用int型數據0代表假,對應條件不成立。if語句有單分支、雙分支和多分支三種形式,適用于不同的場合。(1)單分支if語句單分支if語句的一般形式如下:if(表達式1){
語句1;}其作用是:當“表達式1”的值為真,即條件成立時,執(zhí)行大括號中的“語句1”;否則什么都不做。單分支if語句表達的是“如果…就…”的邏輯。當“語句1”只有一句代碼時,大括號可以省略不寫。“表達式1”一般是一個關系表達式,如if(x>5)表達的是“如果x大于5”。也可以是一個邏輯表達式,如if(x>5&&x<10)表達的是“如果x大于5并且x小于10”。還可以是一些特殊的關系表達式,如if(!x)表達的是“如果x等于0”,而if(x)表達的是“如果x不等于0”。在判斷變量x是否大于5且小于10的時候,初學者容易錯誤地寫成“if(5<x<10)”,正確的寫法是“if(x>5&&x<10)”。同理,判斷變量x是否小于0或者大于100的寫法是“if(x<0||x>100)”。任務準備【實例1】要求用戶輸入一個整數,輸出該整數的絕對值。#include<stdio.h>intmain(){ intx; printf("請輸入一個整數:"); scanf("%d",&x); if(x<0) x=(-1)*x; /*x乘以-1,變相反數*/ printf("絕對值是:%d",x); return0;}編譯運行,分別輸入-7、0、9的結果如圖3-3所示:只需要用單分支if語句處理x是負數的情況。圖3-3求絕對值任務準備(2)雙分支if語句雙分支if語句的一般形式如下:if(表達式1){
語句1;}else{
語句2;}其作用是:當“表達式1”的值為真,即條件成立時,執(zhí)行“語句1”,否則執(zhí)行“語句2”。雙分支if語句表達的是“如果…就…,否則…”的邏輯,只會執(zhí)行“語句1”與“語句2”中的一個。當“語句1”、“語句2”只有一句代碼時,大括號可以省略不寫。任務準備如果年份能被4整除但不能被100整除,或者能被400整除,那么該年就是閏年?!緦嵗?】要求用戶輸入一個正整數的年份,判斷它是不是閏年并輸出結果。intmain(){ inty; printf("請輸入正整數年份:"); scanf("%d",&y); if((y%4==0&&y%100!=0)||y%400==0) printf("%d是閏年",y); else printf("%d不是閏年",y); return0;}編譯運行,分別輸入2004、2010、2400的結果如圖3-4所示:圖3-4判斷閏年任務準備(3)多分支if語句多分支if語句可以根據實際情況添加多組elseif,實現對更多條件的判斷。它的一般形式如下,:if(表達式1){
語句1;}elseif(表達式2){
語句2;}…elseif(表達式n){
語句n;}else{
語句n+1;}其作用是:當“表達式1”的值為真,即條件成立時,執(zhí)行“語句1”。當“表達式1”的值為假時,再判斷“表達式2”的值是否為真,以此類推,直到判斷“表達式n”的值是否為真。當“表達式1”、“表達式2”…“表達式n”都為假時,最后默認執(zhí)行else分支下的“語句n+1”。當“語句1”、“語句2”…“語句n+1”只有一句代碼時,大括號可以省略不寫。對于多分支if語句來說,else分支不是必須的,可以不寫。任務準備多分支if語句表達的是“如果…就…,又如果…就…,…,否則…”的邏輯,實現了對多種條件的判斷。“語句1”、“語句2”…“語句n+1”只有其中一個會被執(zhí)行。一般要求“表達式1”、“表達式2”…“表達式n”所表達的條件范圍不能交叉,比如下面的代碼在語法上并沒有錯誤,但在邏輯上有錯,不建議這樣寫。intx=8;if(x>0){ printf("x大于0");}elseif(x>5){ printf("x大于5");}…上述代碼中,條件“x>0”與“x>5”的范圍有交叉,滿足“x>5”的變量x一定滿足“x>0”的條件,可以說“x>0”完全覆蓋了“x>5”的范圍。因此,語句printf("x大于5")永遠不會被執(zhí)行,這樣它所在的elseif分支就失去了意義。任務準備3.條件表達式條件表達式可以看作是雙分支if語句的簡捷形式,它的一般形式如下:
表達式1?表達式2:表達式3表達式1為關系表達式或邏輯表達式,結果為真或假。如果表達式1為真,則返回表達式2的值,否則返回表達式3的值。在條件表達式中,表達式2和表達式3必須是同種數據類型,否則編譯器將會自動進行類型轉換。條件表達式通常用在賦值語句的右側,可以根據條件進行不同的賦值操作。如,求兩個整數中的最大值,可以使用以下代碼:intx=32;inty=17;intz=(x>y)?x:y;如果x大于y,條件表達式“(x>y)?x:y”返回x的值,否則返回y的值。不管x與y的是怎樣的大小關系,該條件表達式都返回它們中的最大值。任務準備任務實施Part
1Part
2Part
3任務描述任務實施【任務1】要求用戶輸入0~100之間的一個整數成績,用if判斷成績所對應的等級。成績在[0,60)區(qū)間對應“不及格”,在[60,80)區(qū)間對應“及格”,在[80,90)區(qū)間對應“良好”,在[90,100]區(qū)間對應“優(yōu)秀”,其它對應“無效的成績”。1.任務分析本任務考查多分支if語句的和邏輯表達式運用。不同分段的成績對應不同的等級,在判斷成績score是否位于[0,60)時,千萬不要寫成數學式子“0≤score<60”,而是用邏輯表達式“score>=0&&score<60”來表示。其它區(qū)間的成績都是“無效的成績”,可以用else分支來實現。任務實施2.任務實現本任務的實現代碼如下,請將代碼中空白處補充完整。#include<stdio.h>intmain(){ intscore; printf("請輸入一個整數成績:"); scanf("%d",&score); if(
) printf("不及格"); elseif(
) printf("及格"); elseif(
) printf("良好");圖3-5成績等級 elseif(
) printf("優(yōu)秀"); else printf("無效的成績"); return1;}編譯運行,分別輸入43、95、114的結果如圖3-5所示:任務實施3.任務總結如果覺得每個分支的邏輯表達式(如“score>=0&&score<60”)太復雜,還可以采用另一種寫法:if(score>100||score<0) printf("無效的成績"); /*等價于if(score>=90&&score<=100)*/elseif(score>=90) printf("優(yōu)秀");elseif(score>=80) printf("良好");elseif(score>=60) printf("及格");else printf("不及格");上述代碼中,先將大于100或者小于0的成績判定為“無效的成績”,接下來再將大于等于90的成績判定為“優(yōu)秀”。判斷成績大于等于90的代碼是“score>=90”而不用寫成“score>=90&&score<=100”,因為“if(score>100||score<0)”已經將大于100或者小于0的成績范圍覆蓋,剩下的elseif則是在[0,100]的范圍中進行細致劃分。所以,“elseif(score>=90)”暗含的意思就是“elseif(score>=90&&score<=100)”。任務準備任務實施任務描述任務2:用switch實現簡單計算器任務描述本任務要求用戶輸入一個類似“3.14+5.23”的簡單算式,根據兩個操作數中的運算符來決定執(zhí)行加、減、乘、除中的哪一種運算。本任務涉及數據的輸入輸出、switch語句的使用等,重點講解switch語句的結構和語法,同時將switch語句與if語句作對比,讓學生具備使用switch語句和if語句處理分支判斷的能力。任務準備任務實施Part
1Part
2Part
3任務描述任務準備1.switch語句當程序的分支很多,且分支條件是等值判斷而不是對范圍的判斷時,推薦使用switch語句。switch語句在執(zhí)行的時候,先將“表達式”的值與“常量表達式1”的值比較,如果相等就執(zhí)行“語句1”后退出switch,不相等就繼續(xù)將“表達式”的值與“常量表達式2”的值比較,以此類推。如果“表達式”的值與所有常量表達式的值都不相等,則默認執(zhí)行default下的“語句n+1”后退出switch。switch語句的一般形式如下:switch(表達式){ case常量表達式1:
語句1; break; case常量表達式2:
語句2; break; … case常量表達式n:
語句n; break; default:
語句n+1; break;}任務準備switch語句的執(zhí)行流程圖如圖3-6所示:圖3-6switch流程圖開始結束表達式==常量表達式1?執(zhí)行語句1表達式==常量表達式2?執(zhí)行語句2……執(zhí)行語句n+1否否是是否是任務準備使用switch語句時,要注意以下事項:①switch后的圓括號中的表達式的值只能是整型、字符型和枚舉類型,每個case后的常量表達式的類型必須與switch后的表達式的類型一致。②switch語句會將其后的表達式的值依次與case后的常量表達式比較,兩者相等就執(zhí)行對應case中的語句,都不相等就執(zhí)行default中的語句(假如有default部分)。③case后的常量表達式的值不能相同,只能是一個常量,不能是一個區(qū)間。④case出現的順序不會影響程序的運行結果。⑤break語句可以跳出所在的switch語句、for語句、while語句,表示結束這些語句。建議每個case都以break結束,但不是必須的。如果某case下沒有break語句,則在執(zhí)行完該case下的語句后,會繼續(xù)判斷下一個case。⑥default部分不是必須的,可以沒有。任務準備【實例1】要求用戶輸入一個整數,1~7分別對應星期幾,其它數字則視為無效數字。intmain(){ intx; printf("請輸入一個整數:"); scanf("%d",&x); switch(x) { case1: printf("星期一"); break; case2: printf("星期二"); break; case3: printf("星期三"); break; case4: printf("星期四"); break; case5: printf("星期五"); break; case6: printf("星期六"); break; case7: printf("星期日"); break; default: printf("無效的數字");break; } return1;}任務準備編譯運行,分別輸入4、7、10的結果如圖3-7所示:從運行結果可以看出,輸入整數4時只會執(zhí)行“case4”中的代碼,輸入整數7時只會執(zhí)行“case7”中的代碼,輸入整數10時則會執(zhí)行“default”中的代碼。圖3-7求整數對應的星期任務準備【實例2】要求用戶輸入一個整數,如果是1~5之間的數字就輸出“工作日”,如果是6或7就輸出“周末”,其它數字則視為無效數字。intmain(){ intx; printf("請輸入一個整數:"); scanf("%d",&x); switch(x) { case1: case2: case3: case4: case5: printf("工作日"); break; case6: case7: printf("周末"); break; default: printf("無效的數字"); break; } return1;}編譯運行,分別輸入4、7、10的結果如圖3-8所示:任務準備編譯運行,分別輸入4、7、10的結果如圖3-8所示:由于數字1~5都對應“工作日”,所以它們的case共用一個輸出語句,除了“case5”外,其它的case不用以break結束。當用戶輸入數字4時,由于“case4”下沒有代碼,也沒有break語句,程序會繼續(xù)向下執(zhí)行,來到“case5”這里。由于數字6、7對應“周末”,所以它們的case也可以共用一個輸出語句。圖3-8求整數對應的工作日任務準備2.
switch語句與if語句的比較與轉換switch語句適用于多個分支的等值判斷,代碼更加精簡,性能更高。而if語句可以處理多種條件,包括等值判斷和范圍判斷,使用更加靈活。作為分支結構語句,switch適用于特定的情形,而if語句可用于任何情形。switch語句通常用于處理等值判斷,如字符、整數等可以直接比較的值。如果判斷條件涉及區(qū)間或范圍,或者需要復雜的邏輯判斷,則更適合使用if語句。所有switch語句都可以轉換成if語句,而只有少部分if語句能轉換成switch語句。任務準備下面在實例3中演示將實例2改成用if語句實現。【實例3】要求用戶輸入一個整數,如果是1~5之間的數字就輸出“工作日”,如果是6或7就輸出“周末”,其它數字則視為無效數字。要求用if語句實現。#include<stdio.h>intmain(){ intx; printf("請輸入一個整數:"); scanf("%d",&x); if(x>=1&&x<=5) printf("工作日"); elseif(x==6||x==7) printf("周末"); else printf("無效的數字"); return1;}編譯運行的結果與圖3-8相同。任務準備任務實施Part
1Part
2Part
3任務描述任務實施【任務1】要求用戶輸入一個類似“3.14+5.23”的簡單算式,根據兩個操作數中的運算符來決定執(zhí)行加、減、乘、除中的哪一種運算,然后輸出運算結果。1.任務分析本任務考查數據的輸入輸出和switch語句的使用。用戶輸入的數據由一個double類型數據、一個運算符字符、一個double類型數據組成,其中運算符只能是+、-、*和/中的一個。switch語句通過對比輸入的運算符來決定執(zhí)行哪種運算。需要特別注意的是,用scanf()函數輸入double類型數據時必須用“%lf”格式,而用printf()函數輸出double類型數據時用“%f”格式。任務實施2.任務實現本任務的實現代碼如下,請將代碼中空白處補充完整。#include<stdio.h>intmain(){ doublex,y,z; charch; printf("請輸入算式:"); scanf("%lf%c%lf",&x,&ch,&y); switch(ch) { case'+': z=
; printf("%f%c%f=%f",x,ch,y,z); break; case'-': z=
; printf("%f%c%f=%f",x,ch,y,z); break; case'*': z=
; printf("%f%c%f=%f",x,ch,y,z); break; case'/': z=
; printf("%f%c%f=%f",x,ch,y,z); break; default: printf("無效的算式"); break; } return0;}任務實施編譯運行,分別輸3.14+5.2、3.14*5、3.14%2.2后的結果如圖3-9所示:圖3-9簡單計算器任務實施3.任務總結鑒于字符數據輸入的特點,需要將操作數與運算符連續(xù)輸入,scanf()函數的格式字符串“%lf%c%lf”會自動識別dobule類型數據和char類型數據,將它們分別存入對應的變量中。當輸入“3.14+5.2”時,數據3.14會被識別成一個double數據,存入變量x;符號“+”會被識別成一個char數據,存入變量ch;而數據5.2會被識別成一個double數據,存入變量y。由于switch語句中的只有+、-、*、/的case分支,因此本任務只能進行對應的加、減、乘、除運算。輸入其它符號時,會被當成無效的算式。任務準備任務實施任務描述任務3用for找出100以內的素數任務描述素數是只能把1和它本身除盡的、大于1的自然數,如2、3、5、7、11、13、17、19……等。本任務要求找出2~100內的所有素數。本任務涉及for語句和if語句的聯合使用,鍛煉學生通過靈活使用循環(huán)結構和選擇結構來解決實際問題的能力,讓學生具備初步的邏輯思維能力。任務準備任務實施Part
1Part
2Part
3任務描述任務準備編程中常有需要大量重復計算的情況出現,比如要計算1+2+3+…+100的值。如果通過寫100個整數相加的語句來實現,那就太繁瑣了,也不現實。因此,C語言設計了循環(huán)結構來專門處理這類需要重復計算的問題。循環(huán)結構用于完成有規(guī)律的、需要重復計算或處理的任務。循環(huán)結構一般由循環(huán)變量、循環(huán)條件、重復執(zhí)行的語句組成。常見的一次循環(huán)的流程是這樣的:先給循環(huán)變量賦初值,再判斷循環(huán)條件是否成立,成立的話就執(zhí)行一次語句(重復執(zhí)行的語句),并修改循環(huán)變量的值,然后進入下一次循環(huán),再去判斷循環(huán)條件是否成立,如此循環(huán)往復;如果循環(huán)條件不成立,則循環(huán)結束。C語言提供了for語句、while語句和do…while語句共三種循環(huán)語句,本任務重點介紹for語句。任務準備1.for語句for語句是C語言中最常用的一種循環(huán)結構,它可以解決所有循環(huán)問題,但更適合于循環(huán)次數已知的循環(huán)問題。for語句的一般形式如下:for(表達式1;表達式2;表達式3){
循環(huán)體語句;}for語句的執(zhí)行流程如圖3-10所示:for開始表達式1表達式2成立?循環(huán)體語句否是表達式3for結束圖3-10for語句流程圖任務準備關于for語句的說明:①for語句最先執(zhí)行的是“表達式1”,而且只執(zhí)行一次?!氨磉_式1”通常是給循環(huán)變量賦初值的語句,如“i=0”或“i=0,j=10”。②“表達式2”是循環(huán)條件。for語句的唯一出口是“表達式2”不成立,即當“表達式2”不成立時,for循環(huán)結束。“表達式2”通常是一個關系表達式或邏輯表達式,如“i<100”或“i<100&&j>50”。③“循環(huán)體語句”是每次循環(huán)都會執(zhí)行的語句。“循環(huán)體語句”中還可以包含if語句、for語句等,構成嵌套結構。當“循環(huán)體語句”只有一條語句時,for語句的大括號可以省略。④“表達式3”通常是一個修改循環(huán)變量的增量語句,如“i++”、“i++,j--”或“i=i+2”等。它在“循環(huán)體語句”后執(zhí)行,執(zhí)行“表達式3”后再去判斷“表達式2”是否成立。⑤“表達式1”、“表達式2”、“表達式3”和“循環(huán)體語句”均可省略。當省略“表達式2”時,for語句將會一直循環(huán)執(zhí)行無法結束,俗稱“死循環(huán)”。省略“循環(huán)體語句”代表for語句什么都不做,沒有重復執(zhí)行任何代碼。任務準備以計算1+2+3+…+100為例,需要定義一個循環(huán)變量i和一個存儲總和的變量sum,核心代碼如下:inti,sum=0;for(i=1;i<=100;i++){ sum=sum+i;}上述代碼中,for語句的第一個表達式“i=1”是給循環(huán)變量i賦初值;第二個表達式“i<=100”是循環(huán)能繼續(xù)所必須滿足的條件;第三個表達式“i++”是修改循環(huán)變量i的值,以便某次循環(huán)后變量i不再滿足循環(huán)條件“i<=100”,從而結束循環(huán);每次循環(huán)時,循環(huán)體語句“sum=sum+i”都會被執(zhí)行一次,從而將1到100的所有整數都加到變量sum上。任務準備【實例1】計算1到100之間的所有奇數之和,然后輸出。intmain(){ inti,sum=0; for(i=1;i<=100;i=i+2) sum=sum+i; printf("1到100的所有奇數和:%d\n",sum); return0;}編譯運行,求出1到100的所有奇數的結果如圖3-11所示:由于1到100之間的奇數最小值是1,然后以增量2遞增就能遍歷出100以內的所有奇數。所以將for語句的循環(huán)變量i的初值設為1,修改循環(huán)變量的表達式寫為“i=i+2”(不是是默認的“i++”),這樣循環(huán)變量i的取值依次為1、3、5、7…99。將每一個i的取值都加到初值為0的變量sum上,實際上就是計算1+3+5+7+…+99的值,即1到100的所有奇數的和。圖3-111到100的所有奇數和任務準備也可以讓循環(huán)變量i取1到100之間的每一個整數值,再判斷i是不是奇數,如果是奇數則將i的值加到變量sum上。這種思路的實現代碼如下:inti,sum=0;for(i=1;i<=100;i++){ if(i%2==1) /*i除以2余1,說明i是奇數*/ sum=sum+i;}由于要判斷每一個i的取值是不是奇數,因此必須通過在for語句內部嵌套一個if語句來實現。任務準備【實例2】用for語句實現,將1~30之間所有是3的倍數的數輸出。intmain(){ inti; for(i=1;i<=30;i++) { if(i%3==0) /*i是3的倍數*/ printf("%d,",i); } return0;}編譯運行后的結果如圖3-12所示:用for語句實現從1循環(huán)到30時,給循環(huán)變量賦初值的語句(即表達式1)是“i=1”,表示循環(huán)條件的語句(即表達式2)是“i<=30”,修改循環(huán)變量的語句(即表達式3)是“i++”,循環(huán)體語句則是一個嵌套的if語句。由于只需要將能把3除盡的數挑出來,所以只用一個if就行,不需要用到else部分。圖3-12輸出3的所有倍數任務準備2.break語句break語句除了用于退出switch語句外,還可能出現在for語句、while語句和do…while語句的循環(huán)體中,用于中止循環(huán)。break語句通常出現在循環(huán)體中的if語句下,表示當循環(huán)變量滿足什么條件時,用break跳出循環(huán)。以判斷素數為例,素數是只能把1和它本身除盡的、大于1的自然數。假設要判斷x是不是素數,可以讓循環(huán)變量i從2遞增到x-1(從2遞增到x的平方根更準確更高效),在每一次循環(huán)中都判斷x是否能把i除盡。只要x能把i除盡,就說明x不是素數,這時候就可以使用break語句中止循環(huán)。但某次x沒有把i除盡,并不能說明x就是素數。除非整個循環(huán)過程中x都沒有把i除盡過,才能證明x是素數。因此,只要x把i除盡一次,就證明x不是素數。從這個思路出發(fā),在實例3中演示判斷用戶輸入的整數是不是素數。任務準備【實例3】要求用戶輸入一個大于1的整數,判斷該整數是不是素數,并輸出結果。intmain(){ /*先假設x是素數,用flag=1表示*/ inti,x,flag=1; printf("請輸入一個大于1的整數:"); scanf("%d",&x); for(i=2;i<x;i++){ if(x%i==0)/*x把i除盡了*/ { /*x不是素數,將flag改為0*/ flag=0; break; } }圖3-13判斷素數 if(flag==1) printf("%d是素數",x); else printf("%d不是素數",x); return0;}編譯運行后,分別輸入17和25的結果如圖3-13所示:任務準備實例3在判斷整數x是不是素數時,先假定x就是素數,用變量flag=1表示。即如果flag=1就說明x是素數,否則x不是素數。在循環(huán)變量i的值從2遞增到x-1的過程中,當x把i除盡時,將變量flag的值改為0,代表x不是素數,然后退出循環(huán)。在退出循環(huán)后,如果flag的值依然是1,就說明x是素數,如果flag的值是0(不是1),則說明x不是素數。定義一個變量flag來做標記,這是編程經常使用的一種做法。實例3實現判斷整數x是不是素數的流程圖3-14所示:圖3-14第一種判斷素數的流程開始輸入整數xi=2,flag=1i<x?x%i==0?i++flag=0flag==1?結束輸出x是素數輸出x不是素數否是是否是否任務準備判斷素數還有另一種實現思路:當變量x將循環(huán)變量i除盡時,輸出x不是素數,然后退出程序;否則在循環(huán)結束后輸出x是素數,程序結束。該思路的實現代碼如下:intmain(){ inti,x; printf("請輸入一個大于1的整數:"); scanf("%d",&x); for(i=2;i<x;i++) { /*x把i除盡了,x不是素數*/ if(x%i==0){ printf("%d不是素數",x); return; }/*退出main()函數,即退出程序*/ }/*整個循環(huán)都沒有除盡后退出,證明x是素數*/ printf("%d是素數",x); return0;}在循環(huán)變量i從2遞增到x-1的過程中,如果x把i除盡了,說明x不是素數,這時執(zhí)行return語句退出main()函數,也就退出了程序。如果在整個for循環(huán)過程中都沒有因為x把i除盡而退出,說明一直沒有除盡過,就能充分證明x是素數。該思路對應的算法流程如圖3-15所示。任務準備圖3-15第二種判斷素數的流程開始輸入整數xi=2i<x?x%i==0?輸出x不是素數結束輸出x是素數i++否是是否任務準備3.continue語句continue語句出現在for語句、while語句和do…while語句的循環(huán)體中,用于跳過continue后面尚未執(zhí)行的語句,開始下一次循環(huán)。與break語句終止整個循環(huán)不同,continue語句只結束本次循環(huán),提前進入下一次循環(huán)。假如要輸出1~10不能被3整除的所有整數,用continue實現的代碼如下:inti;for(i=1;i<=10;i++){ if(i%3==0) continue;/*結束本次循環(huán),提前進入下一次循環(huán),不會執(zhí)行后面的代碼*/ printf("%d,",i);}上述代碼中,當檢測到是能被3整除的數后,直接用continue跳轉到i++,不會執(zhí)行后面的輸出語句。上述代碼也可以不用continue實現,例如:inti;for(i=1;i<=10;i++){ if(i%3!=0) printf("%d,",i);}很顯然不用continue語句也能解決問題,但在一些特殊情況下用continue語句會使代碼變得更簡潔易懂,這一點在后續(xù)的綜合實例中會有所體現。任務準備任務實施Part
1Part
2Part
3任務描述任務實施【任務1】找出100以內的所有素數,然后輸出。1.任務分析本任務考查for語句和if語句的嵌套使用,以及設計算法、實現算法的能力。找出100以內的所有素數,需要用到兩層for循環(huán),外層的for循環(huán)實現循環(huán)變量i從2遞增到100,內層的for循環(huán)則實現判斷i的是不是素數。本任務采用實例3判斷素數的思路,設置變量flag作為標記。在內層循環(huán)開始前用flag=1表示假定i是素數,在內層循環(huán)中發(fā)現i不是素數時將flag的值改為0。在內層循環(huán)結束后,根據flag的值就能知道i是不是素數。任務實施2.任務實現本任務的實現代碼如下,請將代碼中空白處補充完整。intmain(){ inti,j,flag; for(i=2;
;i++) { /*先假定i是素數,用flag=1表示*/ flag=1; for(j=2;
;j++) { /*i把j除盡了*/ if(
){ /*用flag=0代表i不是素數*/
;break; } }圖3-16100以內的素數 if(
) printf("%d,",i); } return1;}編譯運行的結果如圖3-16所示:任務實施3.任務總結實例3是判斷用戶輸入的整數是不是素數,而本任務是對2~100中的每一個整數進行素數判斷。因此,本任務的實現代碼,可以理解成在實例3判斷素數的實現代碼外加了一層從2到100的循環(huán)。需要注意的是,針對2~100中的每一個整數,在判斷它是不是素數前需要先假定它是素數,因此flag=1應該放在內層循環(huán)語句開始之前。任務準備任務實施任務描述任務4用while求一個正整數的逆序數任務描述一個正整數的逆序數就是把它變成從右到左、順序倒過來的數,如123456的逆序數是654321。這里要求得到這個逆序數,而不僅僅是把各位上的數字倒過來輸出。本任務更適合使用while語句或do-while語句來實現。在任務的準備過程中,將while語句與for語句作對比,讓學生理解兩種循環(huán)的細微差別,能夠在解決不同類型的問題時選擇更適合的語句。同時能夠實現for語句與while語句的互換,鍛煉學生使用循環(huán)結構解決實際問題的能力,讓學生具備初步的邏輯思維能力。任務準備任務實施Part
1Part
2Part
3任務描述任務準備除了for語句外,還可以使用while語句、do-while語句來實現循環(huán)結構,它們在使用形式上稍有區(qū)別。本任務重點介紹while語句、do-while語句以及三種循環(huán)語句的不同之處。任務準備1.while語句while語句也可以完成不確定次數的循環(huán)。當滿足循環(huán)條件時反復執(zhí)行循環(huán)體語句,當不滿足循環(huán)條件時退出循環(huán)。while語句的一般形式如下:while(表達式){
循環(huán)體語句;}while語句在執(zhí)行時會先判斷“表達式”是否成立,如果成立就執(zhí)行“循環(huán)體語句”,不成立就退出while循環(huán)。while語句的執(zhí)行流程如圖3-17所示。圖3-17while語句的流程while開始循環(huán)體語句表達式成立?while結束否是任務準備while語句中的“表達式”可以是一個條件表達式,如“i<100”;也可以是一個邏輯表達式,如“i>1&&i<100”。當“循環(huán)體語句”只是一句代碼時,大括號可以省略不寫。以計算1+2+3+…+100為例,需要定義一個初值為1的循環(huán)變量i和一個初值為0的、存儲總和的變量sum,核心代碼如下:inti=1,sum=0;while(i<=100){ sum=sum+i; i++;}與for語句不同,while后的小括號中只能是循環(huán)條件,所以循環(huán)變量必須在while語句外面賦初值,修改循環(huán)變量的語句(i++)必須在while語句內部。需要特別注意的是,初學者很容易漏寫i++,導致循環(huán)變量i的值始終為1,永遠滿足i<=100的條件。最終導致程序陷在while語句中出不來,即形成常說的“死循環(huán)”。任務準備【實例1】用while語句計算1到100之間的所有奇數之和,然后輸出。intmain(){ inti=1,sum=0; while(i<=100) { if(i%2==1) /*i是奇數*/ sum+=i; /*sum=sum+i*/ i++; /*每次循環(huán)都修改循環(huán)變量的值*/ } printf("1到100的所有奇數和:%d\n",sum); return0;}編譯運行,求出1到100的所有奇數的結果如圖3-18所示:圖3-181到100的所有奇數和任務準備2.do-while語句do-while語句也用于完成不確定次數的循環(huán)。與while語句會先判斷循環(huán)條件不同,do-while語句會先執(zhí)行一次循環(huán)體語句,然后再判斷循環(huán)條件。如果滿足循環(huán)條件,則執(zhí)行循環(huán)體語句,再判斷循環(huán)條件,如此反復;否則結束循環(huán)。do-while語句的一般形式如下:do{
循環(huán)體語句;}while(表達式);如果循環(huán)體語句只有一句代碼,則可以省略大括號。do-while語句一定以分號結束,初學者很容易漏寫。do-while語句在執(zhí)行時會先執(zhí)行“循環(huán)體語句”,再判斷“表達式”是否成立,如果成立就再次執(zhí)行“循環(huán)體語句”,不成立就退出循環(huán)。do-while語句的執(zhí)行流程如圖3-19所示。任務準備2.do-while語句do-while語句也用于完成不確定次數的循環(huán)。與while語句會先判斷循環(huán)條件不同,do-while語句會先執(zhí)行一次循環(huán)體語句,然后再判斷循環(huán)條件。如果滿足循環(huán)條件,則執(zhí)行循環(huán)體語句,再判斷循環(huán)條件,如此反復;否則結束循環(huán)。do-while語句的一般形式如下:do{
循環(huán)體語句;}while(表達式);如果循環(huán)體語句只有一句代碼,則可以省略大括號。do-while語句一定以分號結束,初學者很容易漏寫。do-while語句在執(zhí)行時會先執(zhí)行“循環(huán)體語句”,再判斷“表達式”是否成立,如果成立就再次執(zhí)行“循環(huán)體語句”,不成立就退出循環(huán)。do-while語句的執(zhí)行流程如圖3-19所示。圖3-19do-while語句的流程do…while開始表達式成立?循環(huán)體語句do…while結束否是任務準備do-while循環(huán)與while循環(huán)的區(qū)別在于do-while循環(huán)先執(zhí)行一次循環(huán)體語句,再進行表達式的判斷,因此循環(huán)體中的語句至少要執(zhí)行一次。在設計程序時,如果不知道循環(huán)重復執(zhí)行的次數,且第一次必須執(zhí)行,則常采用do-while語句。do-while循環(huán)與while循環(huán)的區(qū)別在于do-while循環(huán)先執(zhí)行一次循環(huán)體語句,再進行表達式的判斷,因此循環(huán)體中的語句至少要執(zhí)行一次。在設計程序時,如果不知道循環(huán)重復執(zhí)行的次數,且第一次必須執(zhí)行,則常采用do-while語句。任務準備【實例2】重復讓用戶輸入一個字母,在屏幕上輸出對應的大寫字母,直到用戶輸入大寫的Q時退出。#include<stdio.h>intmain(){ charch; do { printf("請輸入一個字母:"); ch=getchar(); if(ch>='a'&&ch<='z') printf("%c\n",ch-32); /*小寫字母的ASCII碼比大寫字母大32*/ elseif(ch>='A'&&ch<='Z') printf("%c\n",ch);圖3-20do-while實現連續(xù)輸入 else printf("不是字母\n");/*接收回車符,以免影響后續(xù)輸入*/ getchar(); }while(ch!='Q'); return0;}編譯運行,輸入d、D、7、q和Q后的結果如圖所示:任務準備這是一個典型的do-while語句應用實例。因為要求用戶重復輸入,并且必須先輸入一次,才能對輸入的字母進行處理和判斷,所以用do-while語句更合適。如果用while語句實現,代碼就會顯得有些冗余,改用while語句實現實例2的核心代碼如下:charch;printf("請輸入一個字母:");ch=getchar(); /*需要在while語句之前輸入*/while(ch!='Q'){ if(ch>='a'&&ch<='z') printf("%c\n",ch-32); elseif(ch>='A'&&ch<='Z') printf("%c\n",ch); else printf("不是字母\n"); getchar(); /*接收回車符以免影響后續(xù)輸入*/ printf("請輸入一個字母:"); ch=getchar(); /*重復輸入*/}由于必須先輸入字母再判斷,所以在while語句之前要有輸入語句。又因為要求用戶重復輸入,所以在while語句內部也必須有輸入語句,如此一來,同樣的輸入語句要寫兩遍。如果用戶輸入大寫的Q,上述代碼不會將Q輸出,而是直接退出程序。對比發(fā)現,do-while語句更適合實例2。任務準備3.while語句和for語句的區(qū)別for語句與while語句可以相互轉換,但它們也有細微的差別,選用適合當前問題的循環(huán)語句會使編程更加高效。for語句適用于循環(huán)次數已知的循環(huán)問題,而while語句更適用于循環(huán)次數未知的循環(huán)問題。例如,求1+2+3+…+100的和,需要循環(huán)100次,用for語句實現比較好。而在設計游戲時,游戲程序不斷循環(huán)檢查用戶輸入的按鍵,作出諸如前進、后退、跳躍之類的動作,直到按下“Esc”鍵時才退出游戲,這種情況用while語句更適用。任務準備以判斷一個多位正整數是否包含某個數字為例,如多位正整數123456中包含了數字3,應該采用什么樣的思路來實現呢?初學者最容易想到的做法就是,得到六位正整數abcdef各個位上的數字a、b、c、d、e、f,再將它們分別與數字x對比,如果有相等就說明多位整數abcdef包含數字x。但由于正整數的位數不確定,難以確定該定義幾個變量來存儲各個位上的數字。還有一種思路是:每次循環(huán)都將多位正整數abcdef拆分成個位數字與剩下的部分,將拆分出來的個位數字與數字x比較,相等就說明包含。以判斷多位正整數123456是否包含數字8為例,每次循環(huán)的拆分過程如表3-2所示。表3-2正整數123456的拆分過程第幾次循環(huán)剩下的部分個位數字是否等于8第1次123456不等第2次12345不等第3次1234不等第4次123不等第5次12不等第6次01不等結束循環(huán)
任務準備下面采用上述思路,在實例3中演示用戶分別輸入一個多位正整數和一個數字,判斷該多位正整數是否包含那個數字。分別用while語句和for語句來實現,對比一下哪種語句更適合?!緦嵗?】要求用戶輸入多位正整數和一個數字,判斷正整數是否包含該數字,然后輸出結果。用while語句實現:intmain(){/*多位正整數,數字,個位數字,剩余部分,標志變量*/ intzs,x,gw,sy,flag=0; printf("輸入一個多位正整數和一個數字:"); scanf("%d,%d",&zs,&x); sy=zs; while(sy>0) { gw=sy%10;/*取出個位數字*/ /*去掉個位數字,得到剩余部分*/ sy=sy/10; if(gw==x) { flag=1; /*代表包含*/ break; } } if(flag==1) printf("%d包括數字%d\n",zs,x); else printf("%d不包括數字%d\n",zs,x); return0;}任務準備用for語句實現:intmain(){/*多位正整數,數字,個位數字,剩余部分,標志變量*/ intzs,x,gw,sy,flag=0; printf("輸入一個多位正整數和一個數字:"); scanf("%d,%d",&zs,&x); for(sy=zs;sy>0;sy=sy/10) { gw=sy%10;/*取出個位數字*/ if(gw==x) { flag=1; break; } } if(flag==1) printf("%d包括數字%d\n",zs,x); else printf("%d不包括數字%d\n",zs,x); return0;}編譯運行,分別輸入“123456,3”和“123456,8”后的結果如圖3-21所示:圖3-21判斷正整數是否包含數字任務準備無論用for語句還是while語句實現,程序運行后都能正確判斷一個多位正整數是否包含某個數字。用while語句實現時,每次循環(huán)都將正整數拆分成個位數字和剩余部分,再判斷個位數字是否與指定的數字相等。用for語句實現時,以輸入的正整數作為循環(huán)變量的初值,以循環(huán)變量大于0為條件,以除以10來修改循環(huán)變量(而不是遞增或遞減),每次循環(huán)都取出循環(huán)變量的個位數字,再判斷個位數字是否與指定的數字相等。在實現實例3時,用while語句實現的思路更簡單,而用for語句實現的代碼看起來更簡潔。任務準備任務實施Part
1Part
2Part
3任務描述任務實施【任務1】要求用戶輸入一個正整數,然后輸出該整數的逆序數。如輸入12345,輸出54321。1.任務分析本任務考查while語句的使用,以及用while實現簡單算法的能力。與判斷一個正整數是否包含某個數字的解法類似,求一個正整數的逆序數也需要將該整數拆分成個位數字和剩余部分,再將每次循環(huán)得到的個位數字按一定方式累加(上次的結果乘以10再加個位數字),就能得到逆序數。任務實施以求多位正整數123456的逆序數為例,每次循環(huán)拆分的個位數字和乘以10后累加的結果如表3-3所示。因此,需要定義變量存儲輸入的正整數、拆分的個位數字、拆分剩下的部分和累加的結果,它們分別對應下面代碼中定義的變量zs、gw、sy和sum。表3-3求123456的逆序數的過程第幾次循環(huán)剩下的部分個位數字乘以10后累加的結果
123456
0第1次1234560*10+6=6第2次123456*10+5=65第3次123465*10+4=654第4次123654*10+3=6543第5次126543*10+2=65432第6次0165432*10+1=654321結束循環(huán)
得逆序數654321任務實施2.任務實現本任務的實現代碼如下,請將代碼中空白處補充完整。#include<stdio.h>intmain(){/*多位正整數,個位數字,剩余部分,累加結果*/ intzs,gw,sy,sum=0; printf("請輸入一個多位正整數:"); scanf("%d",&zs); sy=
; while(
) { gw=
; /*個位數字*/ sy=
; /*剩余部分*/圖3-22求一個正整數的逆序數 /*乘以10后加上個位數字*/ sum=sum*10+gw; } printf("%d的逆序數是:%d\n",zs,sum); return0;}編譯運行,輸入“12345678”后的結果如圖3-22所示:任務實施3.任務總結變量zs用來保存用戶輸入的正整數,它的值始終沒有變化。存儲總和的變量sum的初值為0,每次循環(huán)都將sum乘以10再加上個位數字,整個循環(huán)結束后,sum的值就剛好是輸入的正整數的逆序數。任務準備任務實施任務描述任務5輸出九九乘法表任務描述九九乘法表有九行,第i行有i個等式,輸出格式如下:1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81輸出九九乘法表需要用到兩層循環(huán),并要處理好每行輸出多少個等式,每行結束后換行等細節(jié)問題。因為已知循環(huán)次數,所以本任務更適合使用for語句來實現。在任務中將穿插其它實例的講解,以鍛煉學生嵌套使用各種程序結構解決實際問題的能力,讓學生具備解決常見問題的邏輯思維能力。任務準備任務實施Part
1Part
2Part
3任務描述任務準備一個面向過程的程序由兩部分組成:數據結構和算法。數據結構指數據的描述和組織形式,簡單地說就是怎樣存儲程序中用到的數據。算法是對操作或行為的描述,即為了解決問題而設計的操作步驟。合理地組織數據和設計算法是通過編程解決問題的關鍵。使用C語言解決某個問題時,首先要確定需要幾個什么類型的變量來存儲數據,再綜合使用if、for、while等語句設計解決問題的流程。下面通過幾個實例來講解如何設計數據結構,如何設計算法,如何選用合適的語句來解決問題。任務準備1.輸出從A到B的所有整數本實例要求用戶輸入兩個整數A和B(均是0~100之間,且A<B),然后輸出從A到B的所有整數以及這些數的和。這是一個典型的已知循環(huán)次數的問題,因此推薦使用for語句來實現。解決此問題需要定義兩個變量A和B存儲輸入的數據,并判斷它們是否滿足要求。再定義一個循環(huán)變量i從A遞增到B。此外,還要定義一個變量sum來存儲從A到B的所有整數之和,它的初值設為0,執(zhí)行循環(huán)時將循環(huán)變量i的值累加到sum上。任務準備【實例1】要求用戶輸入兩個整數A和B(均是0~100之間,且A<B),輸出從A到B的所有整數以及這些數的和。intmain(){ intA,B,i,sum=0; printf("請輸入兩個整數:"); scanf("%d,%d",&A,&B); if((A>=0&&A<=100)&&(B>=0&&B<=100)&&A<B){ printf("從%d到%d的所有整數:",A,B); for(i=A;i<=B;i++){ printf("%d,",i); sum+=i; /*sum=sum+i*/ }圖3-23從A到B的所有整數和總和 printf("總和是:%d\n",sum); } else printf("A和B必須是0到100之間的整數,且A<B"); return0;}編譯運行,輸入“1,10”的結果如圖3-23所示:從運行結果可以看出,程序輸出了1~10之間的所有整數和它們的總和。如果輸入“15,4”或“-5,10”,程序則會輸出“A和B必須是0到100之間的整數,且A<B”。任務準備2.判斷完全數本實例要求用戶輸入一個自然數,判斷它是不是完全數。完全數又稱完美數或完備數,是一些特殊的自然數,它所有的真因子(即除了自身以外的約數)的和恰好等于它本身,即完全數恰好等于除自身外的因子之和。例如6等于1+2+3,其中1、2、3為6的因子,因此6就是一個完全數。判斷自然數x是不是完全數的思路是:讓循環(huán)變量i從1遞增到x-1,在循環(huán)過程中將能被x除盡的i都累加到初值為0的變量sum上,循環(huán)結束后如果sum等于x,就證明x是完全數。由于循環(huán)次數是確定的,所以適合用for語句來實現,當然用while或do…while實現也是可以的。任務準備【實例2】要求用戶輸入一個自然數,判斷它是不是完全數,然后輸出結果。#include<stdio.h>intmain(){ intx,i,sum=0; printf("請輸入一個自然數:"); scanf("%d",&x); for(i=1;i<x;i++) { if(x%i==0)/*x把i除盡了*/ sum+=i;/*sum=sum+i*/ } if(x==sum) printf("%d是完全數\n",x);圖3-24判斷完全數 else printf("%d不是完全數\n",x); return0;}編譯運行,輸入28后的結果如圖3-24所示:自然數28的真因子有1、2、4、7、14,1+2+4+7+14的和剛好與28相等,因此28就是一個完全數。只有求出所有真因子的和之后,才會去比較總和sum與原數x是否相等,因此,比較sum與x的代碼應該寫在for語句之后。有部分初學者習慣將比較代碼寫在for語句內部,這種做法是錯誤的。任務準備下面在實例3中演示輸出兩個正整數m和n(0<m≤n≤10000)之間的所有完數。實例3要求正整數m和n滿足0<m≤n≤10000的要求,因此要用if語句實現判斷。判斷m到n之間的所有整數是不是完全數,需要用循環(huán)變量i實現從m到n的遞增,這是外層循環(huán)。針對變量i的每一個取值,需要將循環(huán)變量j的值從1遞增到i-1,用來判斷i是不是完全數,這是內層循環(huán)。在內層循環(huán)中把能被i除盡的值(i的因子)挑出來,累加到初值為0的變量sum中,如果sum和i相等,就說明i是完全數,將它輸出到屏幕。任務準備【實例3】要求用戶輸入兩正整數m和n(0<m≤n≤10000),找出它們之間的所有完全數并輸出。intmain(){ intm,n,i,j,sum; printf("請輸入兩個正整數:"); scanf("%d,%d",&m,&n); if((m>0&&m<=10000)&&(n>0&&n<=10000)&&m<=n){ printf("%d到%d之間的完全數有:",m,n); /*用i訪問m到n的每一個整數*/ for(i=m;i<=n;i++) { /*判斷前將sum賦值為0*/ sum=0; for(j=1;j<i;j++) {/*i把j除盡了*/ if(i%j==0) sum+=j; }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)陽光房設計與施工一體化協(xié)議版A版
- 專用商標使用許可協(xié)議版B版
- 專業(yè)SaaS服務提供商協(xié)議范本(2024修訂版)版B版
- 專項咨詢與解決方案服務協(xié)議版B版
- 二零二四全新旅游服務雙向保密協(xié)議下載與體驗合同3篇
- 二零二五年度綠色能源項目補充合同協(xié)議書2篇
- 2025年度城市綜合體戶外廣告位及攤位聯合租賃合同4篇
- 2025年休閑娛樂場地租賃合作協(xié)議書4篇
- 2025年度綠色能源項目場地承包經營合同范本4篇
- 二零二五年度自然人互聯網金融消費合同3篇
- 2025年度土地經營權流轉合同補充條款范本
- 南通市2025屆高三第一次調研測試(一模)地理試卷(含答案 )
- 2025年上海市閔行區(qū)中考數學一模試卷
- 2025中國人民保險集團校園招聘高頻重點提升(共500題)附帶答案詳解
- 0的認識和加、減法(說課稿)-2024-2025學年一年級上冊數學人教版(2024)001
- 醫(yī)院安全生產治本攻堅三年行動實施方案
- 法規(guī)解讀丨2024新版《突發(fā)事件應對法》及其應用案例
- Python試題庫(附參考答案)
- 大斷面隧道設計技術基本原理
- 41某31層框架結構住宅預算書工程概算表
- 成都市國土資源局關于加強國有建設用地土地用途變更和
評論
0/150
提交評論