




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗八函數(shù)與子例行程序子程序是FORTRAN95提供的重要功能之一,F(xiàn)ORTRAN95允許用戶自己定義子程序,允許用戶通過子程序設計和編寫程序。在設計和編寫一個復雜的程序時,通常需要使用科學的程序設計方法,如:結構化程序設計方法、模塊化程序設計方法、面向對象程序設計方法等,子程序功能完全支持結構化和模塊化程序設計方法,結構化和模塊化程序設計方法可通過子程序得到應用。使用子程序可提高程序的可讀性、可理解性、可維護性和可修改性,是編寫高質量、高水平、高效率程序的有效手段。子程序分內部子程序和外部子程序。內部子程序是包含在程序單元CONTAINS結構中的子程序,只有定義它們的程序單元才能調用執(zhí)行它們。內部子程序包括函數(shù)子程序和子例行程序兩類,通常將函數(shù)子程序簡稱為函數(shù),子例行程序簡稱為子程序。本次實驗是學習和掌握子程序的一次系統(tǒng)實驗活動。通過本次實驗,能夠熟練使用語句函數(shù)、內部子程序、外部子程序設計和編寫程序,求解比較復雜的實際問題。一、實驗目的了解函數(shù)的有關基本概念,如:函數(shù)名稱、函數(shù)自變量、函數(shù)調用、函數(shù)表達式等。掌握語句函數(shù)定義、調用、參數(shù)的基本內容和使用規(guī)則。掌握使用語句函數(shù)設計和編寫程序的方法。了解內部子程序的有關基本概念,如:定義、調用、形式參數(shù)、實在參數(shù)、參數(shù)傳遞關系等。掌握內部子程序定義、調用、形式參數(shù)、實在參數(shù)、參數(shù)傳遞的基本內容和使用規(guī)則。掌握結構化程序設計方法。掌握使用內部子程序設計和編寫程序的方法。了解遞歸概念,掌握遞歸問題的求解方法。掌握遞歸子程序定義、調用、參數(shù)傳遞關系的基本內容和使用規(guī)則。了解外部子程序概念,掌握并行、協(xié)調、合作編寫大型復雜程序的方法。掌握外部子程序定義、調用、參數(shù)傳遞關系的基本內容和使用規(guī)則。掌握使用遞歸和外部子程序設計和編寫程序的方法二、實驗內容11、問題描述在解決某工程計算問題時,遇到下列函數(shù):J(x)=1+2x+x2f(x)=, x2\;1+2x+x2ln(1+x)P(x)=—;―—1+x2xq(x)=arctan,x,''1-x2計算x=0.1,0.2,0.3時,上述函數(shù)的值,并輸出。使用語句函數(shù)編寫程序實現(xiàn)之。2、算法設計該問題求解算法比較簡單,可使用順序結構或循環(huán)結構實現(xiàn)。根據(jù)分析,設計循環(huán)結構算法如下:算法:定義語句函數(shù)y(x),f(x),p(x),q(x)x=0.1;如果x>0.3,則轉(7)執(zhí)行;計算各函數(shù)值并輸出;x=x+1;轉⑶執(zhí)行;結束3、程序編寫設計和編寫程序如下(不完整,請在下劃線空白處填充正確內容):!班級:???!姓名:???舊期:???!語句函數(shù)應用PROGRAMMAINy(x)=1+2*x+x**2f(x)= p(x)= q(x)= DOx=0.1,0.3,0.1yx=y(x)fx=f(x)px= qx=q(x)PRINT*,'x=',xPRINT*,'y(x)=',yxPRINT*, ,'p(x)=',pxPRINT*,'q(x)=',qxEND4、實驗要求?分析問題,理解算法,編寫程序,將程序填寫正確完整。?函數(shù)計算必須使用語句函數(shù)實現(xiàn)。?在D盤上創(chuàng)建新工作區(qū):shiyan08和新項目:xm81。?在項目xm81內創(chuàng)建源程序文件:xm81.f90,同時在文件中編輯輸入程序。?在項目xm81內編譯、構建、運行、調試程序。?將輸出結果以注釋形式編輯輸入到源程序文件xm81.f90末尾。?使用FORALL語句改寫程序,實現(xiàn)程序的并行處理,提高程序運行和處理速度。5、實驗步驟?分析問題,理解算法,編寫程序。?啟動軟件開發(fā)環(huán)境MicrosoftDeveloperStudio。?在D盤上創(chuàng)建新工作區(qū):shiyan08。?在工作區(qū)shiyan08內創(chuàng)建新項目:xm81。?在項目xm81內創(chuàng)建源程序文件xm81.f90,編輯輸入源程序文本。?編譯、構建、運行、調試程序,得到輸出結果。?輸出結果以注釋形式編輯輸入到源程序文件末尾。?在工作區(qū)shiyan08內創(chuàng)建新項目:xm811,在新項目內創(chuàng)建源程序文件xm811.f90,在文件中編輯輸入已改寫程序。編譯、構建、運行、調試程序,獲得輸出結果。使用FORALL語句改寫程序如下:PROGRAMMAINy(x)=1+2*x+x**2f(x)= p(x)= q(x)= REAL,DIMENSION()::yx,fx,px,qxFORALL()yx(i)=y(0.1*i)fx(i)=f(0.1*i)qx(i)=q(0.1*i)DOI=1,3PRINT*,'x=',0.1*IPRINT*,'y(x)=',yx(I)PRINT*, ,'p(x)=',px(I)PRINT*,'q(x)=',qx(I)ENDDOEND三、實驗內容21、問題描述已知二項式公式如下:(X+J)n=C0Xn+C1Xn-1y+C2Xn-2y2+...+C^Xn-rjr+...+C"其中:Cr為二項式系數(shù),通過下面公式計算:n?n!,一一、Cr= (r=0,1,2,...,n)n (n-r)!r!計算(x+y)5的二項展開式系數(shù),并輸出。通過內部函數(shù)子程序計算階乘和二項式系數(shù),編寫程序實現(xiàn)之。2、算法設計分析問題,進行任務分解,得到求解問題的分層結構圖,如圖8-1所示。根據(jù)任務分解圖,自行設計和編寫主程序來求解總問題,分別設計和編寫子程序來求解子問題。根據(jù)子問題的具體內容,設計和編寫子程序為函數(shù)。圖8-1任務分解及分層結構圖3、程序編寫設計和編寫程序如下(不完整,請在下劃線空白處填充正確內容):!班級:???!姓名:???舊期:???!計算n階所有二項式系數(shù)PROGRAMMAININTEGERn,r,pPRINT'(A\)','請輸入二項式階數(shù)n:'READ*,nPRINT'(I2,A\)',n,'二項式系數(shù)有:’DOr=0,np= PRINT'(I4,2X\)',pENDDOPRINT*CONTAINS!計算階乘函數(shù)FUNCTIONfact(n)INTEGERfact,nfact=1DOi=1,nfact= ENDDO!計算任意一個二項式系數(shù)函數(shù) cnr(n,r)INTEGERcnr,n,rcnr=fact(n)/()ENDFUNCTIONEND4、實驗要求?分析問題,分解任務,設計算法,理解程序,將程序填寫完整。?階乘和二項式系數(shù)計算要求使用內部函數(shù)子程序實現(xiàn)。?輸入輸出數(shù)據(jù)采用有格式輸入輸出,使輸入輸出數(shù)據(jù)規(guī)范、醒目、簡潔。在工作區(qū):shiyan08內創(chuàng)建新項目:xm82。?在項目xm82內創(chuàng)建源程序文件:xm82.f90,同時在文件中編輯輸入程序。?在項目xm82內編譯、構建、運行、調試程序。?將輸出結果以注釋形式編輯輸入到源程序文件xm82.f90末尾。?使用遞歸子程序改寫階乘計算程序。5、實驗步驟?分析問題,設計算法,編寫程序。?啟動軟件開發(fā)環(huán)境MicrosoftDeveloperStudio。在工作區(qū)shiyan08內創(chuàng)建新項目:xm82。?在項目xm82內創(chuàng)建源程序文件xm82.f90,編輯輸入源程序文本。?編譯、構建、運行、調試程序,得到輸出結果。輸出結果以注釋形式編輯輸入到源程序文件末尾。?在工作區(qū)shiyan08內創(chuàng)建新項目:xm821,在新項目內創(chuàng)建源程序文件xm821.f90,在文件中輸入已改寫程序。編譯、構建、運行、調試程序,獲得輸出結果。四、實驗內容31、 問題描述已知兩個正整數(shù)數(shù)列A和B,每個數(shù)列數(shù)據(jù)個數(shù)不定(最多50個)。從A數(shù)列中刪除B數(shù)列中出現(xiàn)的數(shù),輸出刪除前后數(shù)列數(shù)據(jù)。通過內部子例行程序完成刪除操作。編寫程序實現(xiàn)之。2、 算法設計分析問題,進行任務分解,得到求解問題的分層結構圖,如圖8-2所示。根據(jù)圖8-2,設計和編寫主程序求解總問題,設計和編寫子例行程序求解子問題。問題:從A數(shù)列刪除R數(shù)列為舞廣問題:敏列'為容刪除
圖8-2任務分解及分層結構圖根據(jù)分析,設計求解總問題算法如下:(1) 輸入A數(shù)列和B數(shù)列數(shù)據(jù)(數(shù)據(jù)個數(shù)不定,最多50個)。(2) 輸出刪除前的A數(shù)列和B數(shù)列數(shù)據(jù)。(3) 從A數(shù)列中刪除B數(shù)列中出現(xiàn)的數(shù)據(jù)。(4) 輸出刪除后A數(shù)列數(shù)據(jù)。(5) 結束。根據(jù)分析,設計求解子問題算法,繪制流程圖如圖8-3所示。n、m分別表示A、B數(shù)列數(shù)據(jù)個數(shù)。因為數(shù)據(jù)均為正整數(shù),規(guī)定-1為刪除標志,要刪除的數(shù)據(jù)ai賦值為-1即可。
i=i十Ii=i十I將知置為-I圖8-3流程圖3、程序編寫使用內部子例行程序設計和編寫程序如下(含有若干錯誤,請查找并改正錯誤):!班級:???!姓名:???舊期:???!從A數(shù)列中刪除B數(shù)列中出現(xiàn)的數(shù)據(jù)PROGRAMmainPARAMETER(max=50)INTEGERA(n),B(max),n,mPRINT'(A\)','請輸入A數(shù)列數(shù)據(jù)個數(shù)n:'READ*,nPRINT'(A,I2,A)',請輸入A數(shù)列',n,'個數(shù)據(jù):’READ*,A(i),i=1,nPRINT'(A\)','請輸入B數(shù)列數(shù)據(jù)個數(shù)m:'READ*,mPRINT'(A,I2,A)',請輸入B數(shù)列',m,'個數(shù)據(jù):',(B(i),i=1,m)PRINT*,刪除前A數(shù)列數(shù)據(jù):’PRINT'(1X,<n>(I3,2X))',(A(i),i=1,n)PRINT*,刪除前B數(shù)列數(shù)據(jù):’PRINT'(1X,<m>(I3,2X))',(B(i),i=1,m)CALLdel(A,B)PRINT*,刪除后A數(shù)列數(shù)據(jù):’DOIF(A(i)/=-1)PRINT'(I3,2x\)',A(i)ENDDOPRINT*CONTAINS!數(shù)列內容刪除SUBROUTINEdel(A,B,n,m)INTEGERA(n),B(m),n,m,i,jDOi=1,nDOj=1,mIF(A(i)>B(j))A(i)=-1ENDIFENDDOENDFUNCTIONEND4、 實驗要求?分析問題,分解任務,理解算法和程序,查找并改正程序錯誤,得到正確程序。?在工作區(qū)shiyan08內創(chuàng)建新項目:xm83。?在項目xm83內創(chuàng)建源程序文件:xm83.f90,同時在文件中編輯輸入程序。?在項目xm83內編譯、構建、運行、調試程序。輸入自行確定的A數(shù)列和B數(shù)列數(shù)據(jù),得到運行結果。?將輸入數(shù)據(jù)和輸出結果以注釋形式編輯輸入到源程序文件xm83.f90末尾。5、 實驗步驟?分析問題,分解任務,理解算法和程序,查找并改正程序錯誤,得到正確程序。?在工作區(qū)shiyan08內創(chuàng)建新項目:xm83。?在項目xm83內創(chuàng)建源程序文件:xm83.f90,同時在文件中編輯輸入程序。?在項目xm83內編譯、構建、運行、調試程序。輸入自行確定的A數(shù)列和B數(shù)列數(shù)據(jù),得到運行結果。?將輸入數(shù)據(jù)和輸出結果以注釋形式編輯輸入到源程序文件xm83.f90末尾。五、實驗內容41、問題描述已知:f(X,n)= xn+ x(n-1)+n-2+x+ 1+X計算當x=2.85,n=15時的函數(shù)值。使用遞歸函數(shù)求解該問題。編寫程序實現(xiàn)之。x和n的值從鍵盤輸入。2、算法設計函數(shù)f可用以下遞推公式描述。rxf(x,n)=< X n+f(x,n-1)根據(jù)遞推公式可知,該問題是一個遞推問題,可采用遞歸函數(shù)實現(xiàn)。求解算法比較簡單,采用選擇結構就可實現(xiàn)。學生自行設計算法,繪制流程圖。3、 程序編寫設計和編寫程序如下(不完整,請在下劃線空白處填充正確內容):!班級:???!姓名:???舊期:???!主程序PROGRAMMAININTEGERnREALx,yPRINT*,請輸入實數(shù)x和整數(shù)n(n31):' *,x,ny= PRINT100,x,n,y100FORMAT(1X,'f(',F5.2,',',I2,')=',f10.6)CONTAINSFUNCTIONf(x,n)REALf,xINTEGERnIF(n==1)THENf= ELSEIF(n>1)THENf=x/(n+)ELSEPRINT*,'n值不符合n31要求.’ENDIFENDFUNCTIONEND4、 實驗要求?分析問題,理解遞推公式、算法、程序和遞歸函數(shù),將程序填寫完整。?函數(shù)計算使用遞歸函數(shù)子程序實現(xiàn)。?輸入輸出數(shù)據(jù)采用有格式輸入輸出,使輸入輸出數(shù)據(jù)規(guī)范、醒目、簡潔。?在工作區(qū):shiyan08內創(chuàng)建新項目xm84。?在項目xm84內創(chuàng)建源程序文件:xm84.f90,同時在文件中編輯輸入程序。?在項目xm84內編譯、構建、運行、調試程序。?將輸出結果以注釋形式編輯輸入到源程序文件xm84.f90末尾。5、 實驗步驟?分析問題,理解遞推公式、算法、程序和遞歸函數(shù),將程序填寫完整。?在工作區(qū):shiyan08內創(chuàng)建新項目xm84。?在項目xm84內創(chuàng)建源程序文件:xm84.f90,同時在文件中編輯輸入程序。?在項目xm84內編譯、構建、運行、調試程序,輸入x和n的值:2.85,15,得到輸出結果。?輸出結果以注釋形式編輯輸入到源程序文件末尾。六、實驗內容51、問題描述'1240201811、2517503045已知5x5矩陣A:24161454154820103828急19283542;按以下要求完成操作:從鍵盤輸入矩陣數(shù)據(jù);從屏幕輸出矩陣數(shù)據(jù);將第2行與第4行交換;從屏幕輸出交換后矩陣數(shù)據(jù);求矩陣中絕對值最小元素值,及所在行號和列號;用絕對值最小元素值與所在行、列每個元素相加;從屏幕輸出相加后矩陣數(shù)據(jù);結束對于矩陣輸入、矩陣輸出、矩陣元素交換、求矩陣絕對值最小元素值、絕對值最小元素值與所在行列元素相加五類操作,使用外部子例行程序實現(xiàn)。要求外部子例行程序與主程序單元分別保存在不同的源程序文件中。編寫程序實現(xiàn)之。2、 算法設計主程序算法類似于問題描述中給出的操作要求和操作順序。分析問題,學生自行設計主程序算法和繪制主程序流程圖。五類操作分別通過5個外部子程序input(A,m,n)、output(A,m,n)、exchange(A,m,n,i1,i2)、find(A,m,n,minval,min_i,imn_j)和add(A,m,n,minval,min_i,min_j)實現(xiàn)。學生自行設計五個外部子程序求解算法,繪制流程圖。A表示二維矩陣,m和n表示矩陣的行數(shù)和列數(shù),i1和i2表示要交換的兩個行號,minval、min_i和min_j分別表示絕對值最小值和所在的行號、列號。3、 程序編寫根據(jù)算法設計和編寫主程序程序如下:!班級:???!姓名:???舊期:???!主程序PROGRAMMAINEXTERNALinput,output,exchange,find,addPARAMETER(m=5,n=5)INTEGERA(m,n),i,j,minval,min_i,min_jCALLinput(A,m,n)CALLoutput(A,m,n)CALLexchange(A,m,n,2,4)CALLoutput(A,m,n)CALLfind(A,m,n,minval,min_i,min_j)CALLadd(A,m,n,minval,min_i,min_j)END根據(jù)矩陣輸入子例行程序input算法,設計和編寫外部子程序如下:!矩陣輸入外部子例行程序SUBROUTINEinput(A,m,n)INTEGERA(m,n),m,n,i,jPRINT'(A,I1,A,I1,A)',請輸入',m,'*',n,'矩陣數(shù)據(jù):’READ*,((A(i,j),j=1,n),i=1,m)ENDSUBROUTINE根據(jù)矩陣元素行交換子例行程序exchange算法,設計和編寫外部子程序如下:!矩陣元素行交換外部子例行程序SUBROUTINEexchange(A,m,n,i1,i2)INTEGERA(m,n),m,n,i1,i2,j,tDOj=1,nt=A(i1,j);A(i1,j)=A(i2,j);A(i2,j)=tENDDOENDSUBROUTINE根據(jù)矩陣絕對值最小元素行、列元素累加子例行程序add算法,設計和編寫外部子程序如下:!矩陣元素累加外部子例行程序SUBROUTINEadd(A,m,n,minval,min_i,min_j)INTEGERA(m,n),m,n,minval,min_i,min_j,i,j,sumsum=0DOi=1,msum=sum+A(i,min_j)ENDDODOj=1,nsum=sum+A(min_i,j)ENDDOsum=sum-minvalPRINT'('絕對值最小元素值與所在行、列每個元素的和為:',I4)',sumENDSUBROUTINE對于output和find子例行程序,學生可根據(jù)算法自行編寫。4、實驗要求?分析問題,理解主程序算法以及主程序和給定的外部子例行程序,編寫其他外部子例行程序。?在工作區(qū)shiyan08內創(chuàng)建新項目:xm85。?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 溝槽砂石墊層施工方案
- 液壓鋼板壩施工方案
- 端墻施工方案
- TSHAEPI 001-2022 凈味環(huán)保瀝青氣態(tài)污染物減排性能技術要求
- DLT-637-1997-閥控式密封鉛酸蓄電池訂貨技術條件
- 二零二五年度設備安裝安全協(xié)議及設備安裝驗收證書
- 二零二五年度房地產租賃稅務籌劃與合同管理服務協(xié)議
- 二零二五年度住宅及地下室使用權租賃合同
- 2025年度智能化綠植養(yǎng)護服務合同協(xié)議書模板
- 二零二五年度珠寶店電子商務平臺合作開發(fā)合同
- 人教鄂教版六年級下冊科學全冊知識點
- 2024年湖南生物機電職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設計規(guī)范
- 團員民主評議測評表
- SMED培訓材料-快速換模
- HG20592-2009法蘭(PL)法蘭蓋(BL)精加工尺寸
- 叉車蓄電池容量與鐵箱規(guī)格表
- 風管、水管支架估算表
- 淺談小學低年級數(shù)學計算課堂教學的有效策略
- scratch趣味編程社團活動方案活動計劃
- 如何從事完美事業(yè)
評論
0/150
提交評論