管網造價設計分析c語言課程設計.doc_第1頁
管網造價設計分析c語言課程設計.doc_第2頁
管網造價設計分析c語言課程設計.doc_第3頁
管網造價設計分析c語言課程設計.doc_第4頁
管網造價設計分析c語言課程設計.doc_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2014年東南大學 c語言課程設計報告 xxx xxxxxxx東南大學c語言課程設計報告課程名稱:計算機綜合課程設計 學 院:土木工程學院 設計題目:管網造價設計分析 級 別:b級 學生姓名:xxxxxx 學 號:xxxxxxxxxxxxxxxxx 同組學生: 指導教師:盧瑞華 2014年9月1號20目 錄課程設計任務書(功能簡介、課程設計要求)3系統設計(包括總體結構、模塊、功能等,輔以程序設計組成框圖、流程圖解釋);4模塊設計(主要模塊功能、源代碼、注釋(如函數功能、入口及出口參數說明,函數調用關系描述等);.8調試及測試:(調試方法,測試結果的分析與討論,截屏、正確性分析);.11設計總結:(編程中遇到的問題及解決方法);.14參考文獻.181. c語言課程設計任務書學生選題說明:以所發課程設計要求為準,請同學們仔細閱讀;本任務書提供的設計案例僅供選題參考;也可自選,但難易程度需難度相當;鼓勵結合本專業(土木工程、力學)知識進行選題,編制程序解決專業實際問題。限2人選的題目可由1-2人完成(a級);限1人選的題目只能由1人單獨完成(b級); 設計總體要求:采用模塊化程序設計;鼓勵可視化編程;源程序中應有足夠的注釋;學生可自行增加新功能模塊(視情況可另外加分);必須上機調試通過;注重算法運用,優化存儲效率與運算效率;需提交源程序(含有注釋)及相關文件(數據或數據庫文件);提交設計報告書,具體要求見以下說明。設計報告格式:目 錄課程設計任務書(功能簡介、課程設計要求);系統設計(包括總體結構、模塊、功能等,輔以程序設計組成框圖、流程圖解釋);模塊設計(主要模塊功能、源代碼、注釋(如函數功能、入口及出口參數說明,函數調用關系描述等);調試及測試:(調試方法,測試結果的分析與討論,截屏、正確性分析);設計總結:(編程中遇到的問題及解決方法);心得體會及致謝;參考文獻 程序功能簡介:本程序是用來計算分析關于工程造價中管網單位造價的,而這個數學模型的方程為。你自己將需要分析的數據手動輸入,本程序就可以將這個非線性方程的回歸方程給計算出來,其中關于z的精度和取值范圍都可以自己動手輸入。這就是本程序的簡要功能介紹。2. 系統要求2.1功能要求:對某地給水管網d=200mm以上的管道進行了單位造價的綜合分析計算。造價構成包括:(1)管材價格;(2)運輸管理費用;(3)施工費用;(4)挖填溝槽費用;(5)路面修復費用;(6)消火栓費用;(7)閘門費用;(8)閘門井、支墩等構筑物;(9)管配件費用;(10)特殊措施費用。得到管徑與單價如表所示。表2 管徑造價表管徑d(mm)200250300350400450500單價d(元/m)82.90102.10120.69140.78166.15229.08257.21管徑d(mm)600700800900100011001200單價d(元/m)324.17377.87452.46517.40659.19747.94854.47試采用常規回歸分析,通過c語言編程確定管道造價的數學模型參數。管道造價的數學模型: 式中:d管徑(m); c單位造價(元/m); a,b,z系數。2.2模塊設計分析2.2.1數學模型分析因為這是一個純非線性方程,直接運用研究一般的例如方程的方法是行不通的,那么,在這里,就要引入一種數學思想,就是黃金分割與最小二乘法。黃金分割最小二乘法作為一種迭代的方法,可以獲得據怒的最優解,因此可以在這里采用這種方法的。首先介紹一下最小二乘法,因為在后續的計算中,將會用到最小二乘法。在研究兩個變量的關系時,通常會用到一系列的點坐標,將這些坐標描繪在坐標軸上時,如若發現這些點是分布在一直線的附近,那么我們可以將之設為一個一元一次的方程:,其中,均為待定的數。那么,要想求出這些未知的數,根據最小二乘法原理可以知道,通過計算實際值和用設的方程所得到的差的平方和,比較這些和,得到的值最小時所對應的值就是要求的參數。就根據這種思想,通過運用高等數學的知識,可以得到關于參數的計算方法:(為參數,為方差)以上這些是研究的一元一次的線性回歸方程,那么,對于題目要求的純非線性方程來說,也是可以采用這種思路的。我們可以假設z為一個常量,就像一元一次方程中的一次方一樣。那么,我們就可以想研究線性回歸方程那樣來研究問題了。所以,就要用到黃金分割法,將z值分成很多的值,每一個z值,將會對應一個方差,最后將算到的很多方差進行對比,得到最小的方差對應的就求出了z值,對應的a,b值就可以得到了。同樣的道理,在每一個z值下得到的a,b值:;因此根據這個思路,就可以將程序的思路設計出來:a. 輸入信息:將要計算的管徑和對應的單價輸入文本文件中,自己宏定義要輸入的數據有多少組,然后輸入關于z的取值范圍和精度;b. 數據計算:設計函數,將單價的和與管徑z次方的和分別計算出來;設計函數,將管徑的z次方與之對應的單價的成績計算出來;設計函數,將管徑的z次方的和計算出來;c. 儲存數據:定義數組a10000,b10000,k10000,分別用來記錄每一個z值得到的a,b,和方差;d. 比較數據:將得到的數組k10000用冒泡法得到最小的值,并且用一個中間變量記錄下來數組中最小的值;e. 輸出結果:將得到的最佳擬合曲線輸出。f. 開始循環:系統會給出是否還要繼續的提示,這樣只需組建一次,就可以計算很多次,可以用于比較不同精度時的函數曲線了。2.2.2模塊設計分析 系統功能模塊圖退出程序主菜單計算輸入數據輸出結果 排序mabi 2.2.3程序工作分析1) 將待輸入的數按表輸入文本文件中:管徑d(mm)200250300350400450500單價d(元/m)82.90102.10120.69140.78166.15229.08257.21管徑d(mm)600700800900100011001200單價d(元/m)324.17377.87452.46517.40659.19747.94854.472) 數據求和:根據各個函數將待要計算的數據計算出來;3) 計算公式:根據黃金分割最小二乘法的公式將每一個z值要求得的a,b計算出來;4) 記錄功能:將每一個z值所對應的a,b,及方差都記錄在已知的數組中;排序功能:對得到的方差數組進行冒泡法排序,就會選出該數組中的最小值,從而得到對應的a,b值;輸出功能:將得到的最佳擬合曲線輸出;循環功能:再次將z的精度改變,比較不同精度時的數據差別。3. 模塊設計#include-/編譯預處理#include-/因為程序涉及到次方的計算,所以要用到數學函數#include-/涉及到文件夾的使用#define n 5- -/宏定義數據的組數,這樣方便以后的計算float add(float a21000,int n,float m) -/計算單價的和與管徑的z次方的和的平均值的函數float sum=0;int i;if(n=1)-/這是計算單價的和for(i=0;in;i+)sum+=ani;else if(n=0) /這是計算管徑的z次方的和for(i=0;in;i+)sum+=pow(a0i,m);return (sum/n);float product(float b21000,float p)-/計算管徑z次方與之對應的單價的乘積的和的函數float su=0;int i;for(i=0;in;i+)su+=(pow(b0i,p)*b1i);return (su);float guanjing(float c21000,float q)-/計算管徑的2z次方的和的函數 float s=0;int i;for(i=0;in;i+)s+=pow(c0i,2*q);return (s);int main()float add(float a21000,int n,float m);float product(float b21000,float p);float guanjing(float c21000,float q);float num21000;float a10000,b10000,k10000;/定義關于a和b的數組,ki表示在每一個z值所得到的方差int i,j,n=0;float a1,a2,a3,a4,a5,a6,a7,z;-/這些數是計算過程的中間值,方便觀看float min,sum;-/定義min用來比較方差時的中間變量。sum是為了計算方差時用到的ifloat min,max;-/關于z的取值范圍定義file *fp;-/定義文件夾指針 fp=fopen(“數據輸入.txt”,”r”);-/使文件指針指向數據存儲的文件for(i=0;i2;i+)-/用循環輸入管徑和單價 for(j=0;jn;j+)fscanf(fp,%f,&numij);-/從文件中讀取數據fscanf(fp,”n”);prinft(“您從文件中讀取的數組如下:n);for(i=0;i2;i+)-/將讀取的文件向屏幕輸出if(i=0)printf(“管徑(毫米):”);if(i=1)printf(“單價(元):”);for(j=0;jn;j+)printf(“%8.2f”.&numij);printf(“n”); printf(請輸入關于z的取值范圍(用minmax來表示):);scanf(%f%f,&min,&max);-/從鍵盤中得到z值得范圍a1=add(num,1,0);-/求出單價的平均值 while(n=0)-/開始循環,用n來做nt r=0;-/在用冒泡法比較時,用來記錄方差最小時的i值scanf(%f%f,&min,&max);for(z=min,i=0;z=max;z+=0.01,i+)-/開始循環,每次z值是增加0.。01float sum=0;a2=product(num,z);-/計算管徑z次方與之對應的單價的乘積的和a3=add(num,0,z);-/計算在每一個z值下的管徑的z次方的平均值a4=guanjing(num,z);-/計算在每一個 z值下的管徑的2*z次方的和a5=n*pow(a3,2); bi=(a2-n*a3*a1)/(a4-a5);-/得到管徑前面的系數ai=a1-a3*bi;-/得到常量for(j=0;jn;j+)-/開始計算在每一個z值下所得到的方差a6=bi*(pow(num0j,z);- /計算b*dz的值a7=ai+a6-num1j; -/計算c(i)與c的平均值的差積,為方差的計算做準備sum+=pow(a7,2);/這里為了提高運算速度,就只運算平方和,不在計算接下來的開方了;ki=sum;-/將得到的方差賦給ki; min=k0;-/開始用冒泡法的到最小的ki.也就是最小的方差for(i=0;iki)min=ki;r=i;-/這里用r來記錄下最小的方差是哪個,從而找到最小的方差printf(您得到的最佳擬合曲線為:c=%f+%f*d%f。n,ar,br,min+0.01*r);-/輸出的到的擬合的曲線printf(如果繼續輸入,請按【0】鍵;否者按【1】鍵退出:);scanf(%d,&n);-/循環結束return 0;4.調試及測試1 信息存儲:2 開始界面:3 輸入信息4 開始循環:5 程序結束5.調試中的問題:1.關于記錄系數sum的問題:在本程序的比較模塊中,有一個記錄方差的中間量sum,在初始程序中,它的定義如下:也就是說,未對sum的初始值賦值,結果在運行程序的時候,系統就一直提示無法從內存中讀取數據。后來經過檢查以后,才發現原來是sum這里出現了問題。因為如果他沒有初始化的話,那么系統會給它賦一個隨機的值,它就會影響整個的程序運行。后來將其賦值為0以后,那么問題就得到解決了。2. 關于從文件中讀取數據的錯誤:一開始,程序建立的結構體數組,其設置如下:結果,用了文件指針后,就無法實現從文件中既讀取字符串,又讀取了數組。雖然通過在網上查找資料,可以做到這一點,但是其運用的是c+,不符合我們的要求。所以就將此結構體去掉了,而是直接定義了一個數組,在輸出數組的時候,就將“管徑”和“單價”直接輸出,然后再輸出這樣,就回避了難以解決的問題,也充分運用了自己的知識。3. 在程序中的警告:這是在程序中出現的警告,程序顯示在定義數據類型時,double和float型之間的轉換存在數據可能丟失的警告,經過在同學的幫助下,我才明白對于本題而言,數據不會溢出,因此暫認為可以。而且在全部定義為double型數據時易出現一些問題。所以個人在設計程序時將部分不會存在數據溢出的變量定義為float型。6.設計總結當初一看到這個題是首先想到的是平常學習中較為常用的一般線性回歸方程,但經過仔細研究題目,才發現其存在一個次方系數,導致了這個問題的復雜化。所以就開始查找一些關于此方面的書籍。在一本關于數據統計的書上邊,我知道了這是屬于一個純非線性的回歸方程,也就是說它不可以化成一般的回歸方程上邊。雖然可以用數學的方法將它計算出來,但是要用到積分的知識,由于種種限制,故無法實現用直接得到結果。后來,又在關于管網造價的相關書籍中,查到了如何用程序來計算這種函數的方法,其就是黃金分割最小二乘法。他可以借助電腦快速的計算能力,很方便的找到最佳擬合的曲線。后來也經過了老師的認可,說這種方法是正確的。 編寫成程序時,為了黃金分割最小二乘法的公式的計算方便定義了3個函數,求取一些在黃金分割最小二乘法的公式中需要用到的值。 此外,本程序還是設定了一些其他的功能,例如可以自己定義z的范圍和精度,并且解決了從文件中讀取數據的問題,大大的提高了工作效率。還有值得提的一點就是可以一直使用不同的精度,來得到不同的結果,完全可以滿足使用者的要求,可以比較不同精度時的差別,得到自己滿意的答案。在這里,我題外說一下,為什么要設計循環結構呢?其實一開始程序只能計算一個精度,后來,我自己在運行這個程序時發現,不同的精度值所得出來的結果有時候會有很大的差別,我就想,這應該是計算過程中數據的丟失所造成的吧。那么,為了給使用者提供一個完全自主的模式,我就開始引入這個循環功能,就對一組數據的到很多個不同的曲線,到時候,使用者就會選擇自己說要用到的結果。不過,本程序比較遺憾的地方就是無法將得到的最佳擬合曲線儲存在文件中以供使用者以后的讀取。不是不會這么將數據讀到文件中,而是不知道怎么將既有字符串,又有數據的一串文字讀到文件中,這也是被本程序最為遺憾的地方,希望看到本程序的人,可以幫助我修改或者提出寶貴的意見,本人在這里將不勝感激。7.心得體會及致謝 課程設計是培養學生綜合運用所學知識,發現,提出,分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發展的日新日異,當今計算機應用在生活中可以說得

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論