管網(wǎng)造價(jià)設(shè)計(jì)分析c語言課程設(shè)計(jì)_第1頁
管網(wǎng)造價(jià)設(shè)計(jì)分析c語言課程設(shè)計(jì)_第2頁
管網(wǎng)造價(jià)設(shè)計(jì)分析c語言課程設(shè)計(jì)_第3頁
管網(wǎng)造價(jià)設(shè)計(jì)分析c語言課程設(shè)計(jì)_第4頁
管網(wǎng)造價(jià)設(shè)計(jì)分析c語言課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、東南大學(xué)C語言課程設(shè)計(jì)報(bào)告課程名稱:計(jì)算機(jī)綜合課程設(shè)計(jì) 學(xué) 院:土木工程學(xué)院 設(shè)計(jì)題目:管網(wǎng)造價(jià)設(shè)計(jì)分析 級 別:B級 學(xué)生姓名:xxxxxx 學(xué) 號:xxxxxxxxxxxxxxxxx 同組學(xué)生: 指導(dǎo)教師:盧瑞華 2014年9月1號目 錄課程設(shè)計(jì)任務(wù)書(功能簡介、課程設(shè)計(jì)要求)··························

2、83;3系統(tǒng)設(shè)計(jì)(包括總體結(jié)構(gòu)、模塊、功能等,輔以程序設(shè)計(jì)組成框圖、流程圖解釋);···························4模塊設(shè)計(jì)(主要模塊功能、源代碼、注釋(如函數(shù)功能、入口及出口參數(shù)說明,函數(shù)調(diào)用關(guān)系描述等);.8調(diào)試及測試:(調(diào)試方法,測試結(jié)果的分析與討論,截屏、正確性分析);.11設(shè)計(jì)總結(jié):(編程中遇到的

3、問題及解決方法);.14參考文獻(xiàn).181. C語言課程設(shè)計(jì)任務(wù)書學(xué)生選題說明:以所發(fā)課程設(shè)計(jì)要求為準(zhǔn),請同學(xué)們仔細(xì)閱讀;本任務(wù)書提供的設(shè)計(jì)案例僅供選題參考;也可自選,但難易程度需難度相當(dāng);鼓勵結(jié)合本專業(yè)(土木工程、力學(xué))知識進(jìn)行選題,編制程序解決專業(yè)實(shí)際問題。限2人選的題目可由1-2人完成(A級);限1人選的題目只能由1人單獨(dú)完成(B級); 設(shè)計(jì)總體要求:采用模塊化程序設(shè)計(jì);鼓勵可視化編程;源程序中應(yīng)有足夠的注釋;學(xué)生可自行增加新功能模塊(視情況可另外加分);必須上機(jī)調(diào)試通過;注重算法運(yùn)用,優(yōu)化存儲效率與運(yùn)算效率;需提交源程序(含有注釋)及相關(guān)文件(數(shù)據(jù)或數(shù)據(jù)庫文件);提交設(shè)計(jì)報(bào)告書,具體要求

4、見以下說明。設(shè)計(jì)報(bào)告格式:目錄課程設(shè)計(jì)任務(wù)書(功能簡介、課程設(shè)計(jì)要求);系統(tǒng)設(shè)計(jì)(包括總體結(jié)構(gòu)、模塊、功能等,輔以程序設(shè)計(jì)組成框圖、流程圖解釋);模塊設(shè)計(jì)(主要模塊功能、源代碼、注釋(如函數(shù)功能、入口及出口參數(shù)說明,函數(shù)調(diào)用關(guān)系描述等);調(diào)試及測試:(調(diào)試方法,測試結(jié)果的分析與討論,截屏、正確性分析);設(shè)計(jì)總結(jié):(編程中遇到的問題及解決方法);心得體會及致謝;參考文獻(xiàn) 程序功能簡介:本程序是用來計(jì)算分析關(guān)于工程造價(jià)中管網(wǎng)單位造價(jià)的,而這個(gè)數(shù)學(xué)模型的方程為。你自己將需要分析的數(shù)據(jù)手動輸入,本程序就可以將這個(gè)非線性方程的回歸方程給計(jì)算出來,其中關(guān)于z的精度和取值范圍都可以自己動手輸入。這就是本程序

5、的簡要功能介紹。2. 系統(tǒng)要求2.1功能要求:對某地給水管網(wǎng)D=200mm以上的管道進(jìn)行了單位造價(jià)的綜合分析計(jì)算。造價(jià)構(gòu)成包括:(1)管材價(jià)格;(2)運(yùn)輸管理費(fèi)用;(3)施工費(fèi)用;(4)挖填溝槽費(fèi)用;(5)路面修復(fù)費(fèi)用;(6)消火栓費(fèi)用;(7)閘門費(fèi)用;(8)閘門井、支墩等構(gòu)筑物;(9)管配件費(fèi)用;(10)特殊措施費(fèi)用。得到管徑與單價(jià)如表所示。表2 管徑造價(jià)表管徑D(mm)200250300350400450500單價(jià)D(元/m)82.90102.10120.69140.78166.15229.08257.21管徑D(mm)600700800900100011001200單價(jià)D(元/m)324

6、.17377.87452.46517.40659.19747.94854.47試采用常規(guī)回歸分析,通過C語言編程確定管道造價(jià)的數(shù)學(xué)模型參數(shù)。管道造價(jià)的數(shù)學(xué)模型:式中:D管徑(m); C單位造價(jià)(元/m); a,b,z系數(shù)。2.2模塊設(shè)計(jì)分析2.2.1數(shù)學(xué)模型分析因?yàn)檫@是一個(gè)純非線性方程,直接運(yùn)用研究一般的例如方程的方法是行不通的,那么,在這里,就要引入一種數(shù)學(xué)思想,就是黃金分割與最小二乘法。黃金分割最小二乘法作為一種迭代的方法,可以獲得據(jù)怒的最優(yōu)解,因此可以在這里采用這種方法的。首先介紹一下最小二乘法,因?yàn)樵诤罄m(xù)的計(jì)算中,將會用到最小二乘法。在研究兩個(gè)變量的關(guān)系時(shí),通常會用到一系列的點(diǎn)坐標(biāo),將

7、這些坐標(biāo)描繪在坐標(biāo)軸上時(shí),如若發(fā)現(xiàn)這些點(diǎn)是分布在一直線的附近,那么我們可以將之設(shè)為一個(gè)一元一次的方程:,其中,均為待定的數(shù)。那么,要想求出這些未知的數(shù),根據(jù)最小二乘法原理可以知道,通過計(jì)算實(shí)際值和用設(shè)的方程所得到的差的平方和,比較這些和,得到的值最小時(shí)所對應(yīng)的值就是要求的參數(shù)。就根據(jù)這種思想,通過運(yùn)用高等數(shù)學(xué)的知識,可以得到關(guān)于參數(shù)的計(jì)算方法:(為參數(shù),為方差)以上這些是研究的一元一次的線性回歸方程,那么,對于題目要求的純非線性方程來說,也是可以采用這種思路的。我們可以假設(shè)z為一個(gè)常量,就像一元一次方程中的一次方一樣。那么,我們就可以想研究線性回歸方程那樣來研究問題了。所以,就要用到黃金分割法

8、,將z值分成很多的值,每一個(gè)z值,將會對應(yīng)一個(gè)方差,最后將算到的很多方差進(jìn)行對比,得到最小的方差對應(yīng)的就求出了z值,對應(yīng)的a,b值就可以得到了。同樣的道理,在每一個(gè)z值下得到的a,b值:;因此根據(jù)這個(gè)思路,就可以將程序的思路設(shè)計(jì)出來:a. 輸入信息:將要計(jì)算的管徑和對應(yīng)的單價(jià)輸入文本文件中,自己宏定義要輸入的數(shù)據(jù)有多少組,然后輸入關(guān)于z的取值范圍和精度;b. 數(shù)據(jù)計(jì)算:設(shè)計(jì)函數(shù),將單價(jià)的和與管徑z次方的和分別計(jì)算出來;設(shè)計(jì)函數(shù),將管徑的z次方與之對應(yīng)的單價(jià)的成績計(jì)算出來;設(shè)計(jì)函數(shù),將管徑的z次方的和計(jì)算出來;c. 儲存數(shù)據(jù):定義數(shù)組A10000,B10000,K10000,分別用來記錄每一個(gè)z

9、值得到的a,b,和方差;d. 比較數(shù)據(jù):將得到的數(shù)組k10000用冒泡法得到最小的值,并且用一個(gè)中間變量記錄下來數(shù)組中最小的值;e. 輸出結(jié)果:將得到的最佳擬合曲線輸出。f. 開始循環(huán):系統(tǒng)會給出是否還要繼續(xù)的提示,這樣只需組建一次,就可以計(jì)算很多次,可以用于比較不同精度時(shí)的函數(shù)曲線了。2.2.2模塊設(shè)計(jì)分析 系統(tǒng)功能模塊圖退出程序主菜單計(jì)算輸入數(shù)據(jù)輸出結(jié)果 排序Mabi 2.2.3程序工作分析1) 將待輸入的數(shù)按表輸入文本文件中:管徑D(mm)200250300350400450500單價(jià)D(元/m)82.90102.10120.69140.78166.15229.08257.21管徑D(m

10、m)600700800900100011001200單價(jià)D(元/m)324.17377.87452.46517.40659.19747.94854.472) 數(shù)據(jù)求和:根據(jù)各個(gè)函數(shù)將待要計(jì)算的數(shù)據(jù)計(jì)算出來;3) 計(jì)算公式:根據(jù)黃金分割最小二乘法的公式將每一個(gè)z值要求得的a,b計(jì)算出來;4) 記錄功能:將每一個(gè)z值所對應(yīng)的a,b,及方差都記錄在已知的數(shù)組中;排序功能:對得到的方差數(shù)組進(jìn)行冒泡法排序,就會選出該數(shù)組中的最小值,從而得到對應(yīng)的a,b值;輸出功能:將得到的最佳擬合曲線輸出;循環(huán)功能:再次將z的精度改變,比較不同精度時(shí)的數(shù)據(jù)差別。3. 模塊設(shè)計(jì)#include<stdio.h>

11、;-/編譯預(yù)處理#include<math.h>-/因?yàn)槌绦蛏婕暗酱畏降挠?jì)算,所以要用到數(shù)學(xué)函數(shù)#include<stdlib.h>-/涉及到文件夾的使用#define N 5- -/宏定義數(shù)據(jù)的組數(shù),這樣方便以后的計(jì)算float add(float a21000,int n,float m) -/計(jì)算單價(jià)的和與管徑的z次方的和的平均值的函數(shù)float SUM=0;int i;if(n=1)-/這是計(jì)算單價(jià)的和for(i=0;i<N;i+)SUM+=ani;else if(n=0) /這是計(jì)算管徑的z次方的和for(i=0;i<N;i+)SUM+=pow(a

12、0i,m);return (SUM/N);float product(float b21000,float p)-/計(jì)算管徑z次方與之對應(yīng)的單價(jià)的乘積的和的函數(shù)float SU=0;int i;for(i=0;i<N;i+)SU+=(pow(b0i,p)*b1i);return (SU);float guanjing(float c21000,float q)-/計(jì)算管徑的2z次方的和的函數(shù) float S=0;int i;for(i=0;i<N;i+)S+=pow(c0i,2*q);return (S);int main()float add(float a21000,int n

13、,float m);float product(float b21000,float p);float guanjing(float c21000,float q);float num21000;float A10000,B10000,k10000;/定義關(guān)于a和b的數(shù)組,Ki表示在每一個(gè)z值所得到的方差int i,j,n=0;float A1,A2,A3,A4,A5,A6,A7,z;-/這些數(shù)是計(jì)算過程的中間值,方便觀看float min,sum;-/定義min用來比較方差時(shí)的中間變量。sum是為了計(jì)算方差時(shí)用到的ifloat Min,Max;-/關(guān)于z的取值范圍定義FILE *fp;-/定

14、義文件夾指針fp=fopen(“數(shù)據(jù)輸入.txt”,”r”);-/使文件指針指向數(shù)據(jù)存儲的文件for(i=0;i<2;i+)-/用循環(huán)輸入管徑和單價(jià)for(j=0;j<N;j+)fscanf(fp,"%f",&numij);-/從文件中讀取數(shù)據(jù)fscanf(fp,”n”);Prinft(“您從文件中讀取的數(shù)組如下:n");For(i=0;i<2;i+)-/將讀取的文件向屏幕輸出if(i=0)printf(“管徑(毫米):”);If(i=1)printf(“單價(jià)(元):”);For(j=0;j<N;j+)Printf(“%8.2f”.

15、&numij);Printf(“n”); printf("請輸入關(guān)于z的取值范圍(用MinMax來表示):");scanf("%f%f",&Min,&Max);-/從鍵盤中得到z值得范圍A1=add(num,1,0);-/求出單價(jià)的平均值While(n=0)-/開始循環(huán),用n來做nt r=0;-/在用冒泡法比較時(shí),用來記錄方差最小時(shí)的i值scanf("%f%f",&Min,&Max);for(z=Min,i=0;z<=Max;z+=0.01,i+)-/開始循環(huán),每次z值是增加0.。01fl

16、oat sum=0;A2=product(num,z);-/計(jì)算管徑z次方與之對應(yīng)的單價(jià)的乘積的和A3=add(num,0,z);-/計(jì)算在每一個(gè)z值下的管徑的z次方的平均值A(chǔ)4=guanjing(num,z);-/計(jì)算在每一個(gè)z值下的管徑的2*z次方的和A5=N*pow(A3,2); Bi=(A2-N*A3*A1)/(A4-A5);-/得到管徑前面的系數(shù)Ai=A1-A3*Bi;-/得到常量for(j=0;j<N;j+)-/開始計(jì)算在每一個(gè)z值下所得到的方差A(yù)6=Bi*(pow(num0j,z);- /計(jì)算b*Dz的值A(chǔ)7=Ai+A6-num1j; -/計(jì)算C(i)與C的平均值的差積,為

17、方差的計(jì)算做準(zhǔn)備sum+=pow(A7,2);/這里為了提高運(yùn)算速度,就只運(yùn)算平方和,不在計(jì)算接下來的開方了;ki=sum;-/將得到的方差賦給ki; min=k0;-/開始用冒泡法的到最小的ki.也就是最小的方差for(i=0;i<(Max-Min)/10000;i+)if(min>ki)min=ki;r=i;-/這里用r來記錄下最小的方差是哪個(gè),從而找到最小的方差printf("您得到的最佳擬合曲線為:C=%f+%f*D%f。n",Ar,Br,Min+0.01*r);-/輸出的到的擬合的曲線printf("如果繼續(xù)輸入,請按【0】鍵;否者按【1】鍵

18、退出:");scanf("%d",&n);-/循環(huán)結(jié)束return 0;4.調(diào)試及測試1 信息存儲:2 開始界面:3 輸入信息4 開始循環(huán):5 程序結(jié)束5.調(diào)試中的問題:1.關(guān)于記錄系數(shù)sum的問題:在本程序的比較模塊中,有一個(gè)記錄方差的中間量sum,在初始程序中,它的定義如下:也就是說,未對sum的初始值賦值,結(jié)果在運(yùn)行程序的時(shí)候,系統(tǒng)就一直提示無法從內(nèi)存中讀取數(shù)據(jù)。后來經(jīng)過檢查以后,才發(fā)現(xiàn)原來是sum這里出現(xiàn)了問題。因?yàn)槿绻麤]有初始化的話,那么系統(tǒng)會給它賦一個(gè)隨機(jī)的值,它就會影響整個(gè)的程序運(yùn)行。后來將其賦值為0以后,那么問題就得到解決了。2. 關(guān)于從

19、文件中讀取數(shù)據(jù)的錯誤:一開始,程序建立的結(jié)構(gòu)體數(shù)組,其設(shè)置如下:結(jié)果,用了文件指針后,就無法實(shí)現(xiàn)從文件中既讀取字符串,又讀取了數(shù)組。雖然通過在網(wǎng)上查找資料,可以做到這一點(diǎn),但是其運(yùn)用的是C+,不符合我們的要求。所以就將此結(jié)構(gòu)體去掉了,而是直接定義了一個(gè)數(shù)組,在輸出數(shù)組的時(shí)候,就將“管徑”和“單價(jià)”直接輸出,然后再輸出這樣,就回避了難以解決的問題,也充分運(yùn)用了自己的知識。3. 在程序中的警告:這是在程序中出現(xiàn)的警告,程序顯示在定義數(shù)據(jù)類型時(shí),double和float型之間的轉(zhuǎn)換存在數(shù)據(jù)可能丟失的警告,經(jīng)過在同學(xué)的幫助下,我才明白對于本題而言,數(shù)據(jù)不會溢出,因此暫認(rèn)為可以。而且在全部定義為doub

20、le型數(shù)據(jù)時(shí)易出現(xiàn)一些問題。所以個(gè)人在設(shè)計(jì)程序時(shí)將部分不會存在數(shù)據(jù)溢出的變量定義為float型。6.設(shè)計(jì)總結(jié)當(dāng)初一看到這個(gè)題是首先想到的是平常學(xué)習(xí)中較為常用的一般線性回歸方程,但經(jīng)過仔細(xì)研究題目,才發(fā)現(xiàn)其存在一個(gè)次方系數(shù),導(dǎo)致了這個(gè)問題的復(fù)雜化。所以就開始查找一些關(guān)于此方面的書籍。在一本關(guān)于數(shù)據(jù)統(tǒng)計(jì)的書上邊,我知道了這是屬于一個(gè)純非線性的回歸方程,也就是說它不可以化成一般的回歸方程上邊。雖然可以用數(shù)學(xué)的方法將它計(jì)算出來,但是要用到積分的知識,由于種種限制,故無法實(shí)現(xiàn)用直接得到結(jié)果。后來,又在關(guān)于管網(wǎng)造價(jià)的相關(guān)書籍中,查到了如何用程序來計(jì)算這種函數(shù)的方法,其就是黃金分割最小二乘法。他可以借助電腦

21、快速的計(jì)算能力,很方便的找到最佳擬合的曲線。后來也經(jīng)過了老師的認(rèn)可,說這種方法是正確的。 編寫成程序時(shí),為了黃金分割最小二乘法的公式的計(jì)算方便定義了3個(gè)函數(shù),求取一些在黃金分割最小二乘法的公式中需要用到的值。 此外,本程序還是設(shè)定了一些其他的功能,例如可以自己定義z的范圍和精度,并且解決了從文件中讀取數(shù)據(jù)的問題,大大的提高了工作效率。還有值得提的一點(diǎn)就是可以一直使用不同的精度,來得到不同的結(jié)果,完全可以滿足使用者的要求,可以比較不同精度時(shí)的差別,得到自己滿意的答案。在這里,我題外說一下,為什么要設(shè)計(jì)循環(huán)結(jié)構(gòu)呢?其實(shí)一開始程序只能計(jì)算一個(gè)精度,后來,我自己在運(yùn)行這個(gè)程序時(shí)發(fā)現(xiàn),不同的精度值所得出

22、來的結(jié)果有時(shí)候會有很大的差別,我就想,這應(yīng)該是計(jì)算過程中數(shù)據(jù)的丟失所造成的吧。那么,為了給使用者提供一個(gè)完全自主的模式,我就開始引入這個(gè)循環(huán)功能,就對一組數(shù)據(jù)的到很多個(gè)不同的曲線,到時(shí)候,使用者就會選擇自己說要用到的結(jié)果。不過,本程序比較遺憾的地方就是無法將得到的最佳擬合曲線儲存在文件中以供使用者以后的讀取。不是不會這么將數(shù)據(jù)讀到文件中,而是不知道怎么將既有字符串,又有數(shù)據(jù)的一串文字讀到文件中,這也是被本程序最為遺憾的地方,希望看到本程序的人,可以幫助我修改或者提出寶貴的意見,本人在這里將不勝感激。7.心得體會及致謝 課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)

溫馨提示

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

評論

0/150

提交評論