臥式鉆孔組合機床液壓系統(tǒng)設計及一元多項式計算(數據結構課程設計)_第1頁
臥式鉆孔組合機床液壓系統(tǒng)設計及一元多項式計算(數據結構課程設計)_第2頁
臥式鉆孔組合機床液壓系統(tǒng)設計及一元多項式計算(數據結構課程設計)_第3頁
臥式鉆孔組合機床液壓系統(tǒng)設計及一元多項式計算(數據結構課程設計)_第4頁
臥式鉆孔組合機床液壓系統(tǒng)設計及一元多項式計算(數據結構課程設計)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

臥式鉆孔組合機床液壓系統(tǒng)設計目錄1題目…………………32技術參數和設計要求………………33工況分析……………34擬定液壓系統(tǒng)原理圖………………44.1確定供油方式……………………44.2調速方式的選擇…………………54.3速度換接方式的選擇……………55液壓系統(tǒng)的計算和選擇液壓元件……………………55.1液壓缸主要尺寸的確定………55.1.1工作壓力P的確定…………55.1.2計算液壓缸內徑D和活塞桿直徑d……55.1.3計算在各工作階段液壓缸所需的流量…………65.2確定液壓泵的流量、壓力和選擇泵的規(guī)格…………………65.2.1泵的工作壓力的確定………………65.2.2泵的流量確定……………………75.2.3選擇液壓泵的規(guī)格………………75.2.4與液壓泵匹配的電動機的選定……75.3液壓閥的選擇………………85.4確定管道尺寸………………95.5液壓油箱容積的確定…………96液壓系統(tǒng)的驗算……………………96.1壓力損失的驗算………………96.1.1工作進給時進油路壓力損失……………96.1.2工作進給時回油路的壓力損失…………106.1.3變量泵出口處的壓力Pp…………………106.1.4快進時的壓力損失………106.2系統(tǒng)溫升的驗算……………117液壓缸的設計………………………117.1液壓缸工作壓力的確定………117.2液壓缸的內徑D和活塞桿d前面已經計算…………………127.3液壓缸的壁厚和外徑的計算…………………127.4缸蓋厚度的確定………………128參考文獻……………131.設計題目:臥式鉆孔組合機床液壓系統(tǒng)設計2.技術參數和設計要求設計一臺臥式鉆孔組合機床的液壓系統(tǒng),要求完成如下工作循環(huán):快進→工進→快退→停止。機床的切削力為2×104N,工作部件的重量為7.8×103N,快進與快退速度均為6m/min,工進速度為0.05m/min,快進行程為100mm,工進行程為50mm,加速、減速時間要求不大于0.2s,采用平導軌,靜摩擦系數為0.2,動摩擦系數為0.1。設計該組合機床的液壓傳動系統(tǒng)。3.工況分析根據已知條件,繪制運動部件的速度循環(huán)圖,如圖速度循環(huán)圖然后計算各階段的外負載并繪制負載圖,如圖液壓缸所受外負載F包括三種類型,即F=Fw+Ff+Fm式中:Fw—工作負載;Fm—運動部件速度變化時的慣性負載;Ff—導軌摩擦阻力負載,啟動時為靜摩擦阻力,啟動后為動摩擦阻力,對于平導軌Ff可由下式求得:Ff=f(G-Ffn)G—運動部件重力;Fn—垂直于導軌的工作負載;f—導軌摩擦系數于是可得:Ffs=0.2×7.8×103=1560NFfd=0.1×7.8×103=780N上式中,Ffs為靜摩擦阻力,Ffd為動摩擦阻力。Fm=GΔv/(g.Δt)式中:g—重力加速度;Δt—加速或減速時間;Δv—Δt時間內的進度變化量在本例中Fm=7.8×103×6/(9.8×0.2×60)=398N根據上述計算結果,列出各工作階段所受外負載工作循環(huán)外負載F(N)工作循環(huán)外負載F(N)啟動、加速F=Ffs+Fm1928工進F=Ffd+Fw20780快進F=Ffd780快退F=Ffd7804.擬定液壓系統(tǒng)原理圖4.1確定供油方式考慮到該機床在工作進給時負載較大,速度較低,而在快進、快退時負載較小,速度較高,從節(jié)省能量,減少發(fā)熱考慮,泵源系統(tǒng)宜選用雙泵供油或變量泵供油,現采用帶壓力反饋的限壓式變量葉片泵。4.2調速方式的選擇在中小型專業(yè)機床的液壓系統(tǒng)中,進給速度的控制一般采用節(jié)流閥或調速閥。根據鉆孔類專用機床工作時對低速性能和速度負載特性都有一定要求的特點,決定采用限壓式變量泵和調速閥組成的容積節(jié)流調速。這種調速回路具有效率高、發(fā)熱小和速度剛性好的特點,并且調速閥裝在回油路上,具有承受負切削力的能力。4.3速度換接方式的選擇本系統(tǒng)采用電磁閥的快慢速換接回路,它的特點是結構簡單、調節(jié)行程比較方便、閥的安裝也較簡單,但速度換接的平穩(wěn)性較差。若要提高系統(tǒng)的換接平穩(wěn)性,則可改用行程閥切換的速度換接回路。5.液壓系統(tǒng)的計算和選擇液壓元件5.1液壓缸主要尺寸的確定5.1.1工作壓力P的確定工作壓力P可根據負載大小及機器的類型來初步確定,現參閱指導書表2-1取液壓缸的工作壓力為3-5Mpa,本系統(tǒng)取液壓缸的工作壓力為5Mpa.5.1.2計算液壓缸內徑D和活塞桿直徑d由負載圖知最大負載F為20780N,按指導書表2-2執(zhí)行元件背壓的估算值:可取P2為0.5MPa,ηcm為0.95,考慮到快進、快退速度相等,取d/D為0.7。將上述數據代入公式可得D={(4×20780)/[3.14×50×100000×0.95(1-5(1-0.72)/50)]}1/2=0.077(m)圓整為標準值80mm.根據指導書表2-4液壓缸內徑尺寸系列(GB2348-80),將液壓缸內徑圓整為標準系列直徑D=80mm,活塞桿直徑d,按d/D=0.7及指導書表2-5活塞桿直徑尺寸系列(GB2348-80)活塞桿直徑系列取d=56mm。按最低工進速度驗算液壓缸的最小穩(wěn)定速度,可得:A≥Qmin/Vmin=0.05×1000/5=10(cm2)式中:Qmin是由產品樣本查得GE系列調速閥AQF3-E10B的最小穩(wěn)定流量為0.05L/min。A=π×(D2-d2)/4=π×(82-5.62)/4=25(cm2)可見上述不等式能滿足,液壓缸能達到所需低速。5.1.3計算在各工作階段液壓缸所需的流量Q(快進)=πd2V(快進)/4=π(0.0056)2×6/4=14.8(L/min)Q(工進)=πD2V(工進)/4=π(0.08)2×0.05/4=2.5(L/min)Q(快退)=π(D2-d2)V(快退)/4=π(0.082-0.0562)×6/4=15.4(L/min)5.2確定液壓泵的流量、壓力和選擇泵的規(guī)格5.2.1泵的工作壓力的確定考慮到正常工作中進油管路有一定的壓力損失,所以泵的工作壓力為Pp=P1+ΣΔp式中:Pp—液壓泵最大工作壓力;P1—執(zhí)行元件最大工作壓力;ΣΔp—進油管路中的壓力損失,初算是簡單系統(tǒng)可取0.2~0.5MPa,復雜系統(tǒng)可取0.5~1.5MPa。本題中取0.5MPa。因此Pp=P1+ΣΔp=5+0.5=5.5(MPa)上述計算所得的Pp是系統(tǒng)的靜態(tài)壓力,考慮到系統(tǒng)在各種工況的過渡階段出現的動態(tài)壓力往往超過靜態(tài)壓力。另外考慮到一定的壓力貯備量,并確保泵的壽命,因此選泵的額定壓力Pa應滿足Pa≥(1.25~1.6)Pp。中低壓系統(tǒng)取小值,高壓系統(tǒng)取大值。在本題中Pa=1.3Pp,Pp=5.5MPa。5.2.2泵的流量確定液壓泵的最大流量應為Qp≥KL(ΣQ)max式中:Q—液壓泵的最大流量;(ΣQ)max—各執(zhí)行元件所需流量之和的最大值。如果這時溢流閥正進行工作,尚須加1溢流閥的最小流量2~3L/min;KL—系統(tǒng)泄露系數,一般取1.1~1.3,現取KL=1.2。因此Qp=KL(ΣQ)max=1.2×15.4=18.48(L/min)5.2.3選擇液壓泵的規(guī)格根據以上算得的Pp和Qp,查閱有關手冊,現選用YBX—25限壓式變量葉片泵,該泵的基本參數為:每轉排量q=16mL/r,泵的額定壓力P0=6.3MPa,電動機轉速n0=1450r/min,容積效率ηv=0.85,總效率η=0.72。5.2.4與液壓泵匹配的電動機的選定首先分別算出快進與工進兩種不同工況時的功率,取兩者較大值作為選擇電動機規(guī)格的依據。由于在慢進時泵輸出的流量減小,泵的效率急劇降低,一般當流量在0.2~1L/min范圍內時,可取η=0.03~0.14。同時還應注意到,為了使所選擇的電動機在經過泵的流量特性曲線最大功率點時不致停轉,需進行驗算,即Pb=Qp/η≤Pd式中:Pd—所選電動機額定功率;Pb—限壓式變量泵的限定壓力;Qp—壓力為Pb時,泵的輸出流量。首先計算快進時的功率,快進時的外負載為780N,進油路的壓力損失定為0.3MPa,由公式可得:Pb=[780/(π0.00562/4)×10-6+0.3]=0.62MPa快進時所需電機功率為:P=PbQp/η=0.62×14.8/(60×0.72)=0.212(kW)工進時:Pb=[20780/(π0.082/4)×10-6+0.3]=4.44(MPa)工進時所需電機功率為:P=PbQp/η=4.44×2.5/(60×0.72)=0.257(kW)查閱電動機產品樣本,選用Y90S—4型電動機,其額定功率為1.1kW,額定轉速為1400r/min。根據產品樣本可查得YBX—25的流量壓力特性曲線。再由已知的快進時流量為23.08L/min,工進時的流量為3.93L/min,壓力為4.5MPa,作出泵的實際工作時的流量壓力特性曲線,如圖3-1所示,查得該曲線拐點處的流量為30L/min,壓力為3MPa,該工作點對應的功率為P=3×30/(60×0.7)=2.14(kW)所選電動機功率滿足要求,拐點處能正常工作。.圖3-1YBX—25液壓泵特性曲線1—額定壓力下的特性曲線;2—實際工作時的特性曲線5.3液壓閥的選擇該液壓系統(tǒng)可采用力士樂系列閥或GE系列閥。本題均選用GE系列閥。根據所擬定的液壓系統(tǒng)圖,按通過各元件的最大流量來選擇液壓元件的規(guī)格。選定的液壓元件如下表:5.4確定管道尺寸油管內徑尺寸一般可參照選用的液壓元件接口尺寸而定,也可按管路允許流速進行計算。本系統(tǒng)油路流量為差動時流量Q=30L/min,壓油路的允許流速取V=4m/s,則內徑d=4.6(Q/V)1/2=4.6(30/4)1/2=12.60(mm)若系統(tǒng)主油路流量按快退時取Q=15.4L/min,則可算得油路內徑d=9.0mm。綜合諸因素,現取油管的內徑d為10mm。吸油管同樣可按上式計算,現參照YBX—25變量泵吸油口連接尺寸,出吸油管內徑d為25mm。5.5液壓油箱容積的確定本題為中壓液壓系統(tǒng),液壓油箱有效容量按泵的流量的5~7倍來確定,現選用容量為160L的油箱。6液壓系統(tǒng)的驗算已知該液壓系統(tǒng)的進、回油管的內徑均為15mm,各段管道的長度分別為:AB=0.3m,AC=1.7m,AD=1.7m,DE=2m。選用L—HL32液壓油,考慮到油的最低溫度為15℃,查得15℃υ=150cst=1.5cm2/s油的密度ρ=920kg/m36.壓力損失的驗算6.1.1工作進給時進油路壓力損失運動部件工作進給時的速度為0.05m/min,進給時的最大流量為2.5L/min,則液壓油在管內流速v1為:v1=Q/(πd2/4)=4×2.5×1000/(3.14×12)=3184(cm/min)=53.1(cm/s)管道流動雷諾數Re1為Re1=v1d/υ=53.1×1.5/1.5=53.1<2300可見油液在管道中流態(tài)為層流,其沿程阻力系數λ1=75,Re1=0.68.進油管道的沿程壓力損失Δp1-1為Δp1-1=λ(l/d)/(ρv2/2)=0.68×(1.7+0.3)/(0.015×920×0.5312/2)=1.05MPa查得換向閥34EF3P—E10B的壓力損失Δp1-2=0.5MPa。忽略油液通過管接頭、油路板等處的局部壓力損失,則進油路的總壓力損失Δp1=Δp1-1+Δp1-2=1.05+0.5=1.55(MPa)6.1.2工作進給時回油路的壓力損失由于選用單活塞桿液壓缸,且液壓缸有桿腔的工作面積是無桿腔的工作面積的二分之一,則回油管道的流量為進油管道的二分之一,則v2=v1/2=53.1/2=26.55(cm/s)Re2=v2d/υ=26.55×1.5/1.5=26.55<2300λ2=75/Re2=75/26.55=2.83回油管道的沿程壓力損失Δp2-1為Δp2-1=λ2(l/d)/(ρv2/2)=2.83(1.7+0.3)/(0.01×920×0.2652/2)=1.75Mpa查產品樣本知換向閥24EF3M—E10B的壓力損失為Δp2-2=0.025MPa,調速閥QF3—E10B的壓力損失Δp2-3=0.5MPa?;赜吐房倝毫p失Δp2為Δp2=Δp2-1+Δp2-2+Δp2-3=1.75+0.025+0.5=2.275(MPa)6.1.3變量泵出口處的壓力PpPp=(F/ηcm+A2Δp2)/A1+Δp1=(20780/0.95+40.05×0.6×100)/0.007854+1.55=2.65(MPa)6.1.4快進時的壓力損失快進時液壓缸為差動連接,流量為液壓泵出口流量的兩倍,取40L/min。管路的沿程壓力損失Δp1-1為:v1=Q/(πd2/4)=4×40×1000/(3.14×12×60)=590(cm/s)Re1=v1d/υ=590×1.5/1.5=590λ1=75/Re1=75/590=0.159Δp1-1=λ1(l/d)/(ρv1/2)=0.159×(1.7/0.01)/(900×5.92/2)=0.36(MPa)同樣可求沿程壓力損失Δp1-2和Δp1-3為:Δp1-2=0.024MPa、Δp1-3=0.13MPa查產品樣本知,流經各閥的局部壓力損失為:換向閥Δp2-1=0.15MPa調速閥Δp2-2=0.15MPa故差動連接時,泵的出口壓力Pp為:Pp=2Δp1-1+Δp1-2+Δp1-3+Δp2-1+Δp2-2+F/(A2ηcm)=1.70(MPa)快退時壓力損失驗算從略,上述驗算表明,無需修改原設計。6.2系統(tǒng)溫升的驗算在整個工作循環(huán)中,工進階段所占的時間最長,為了簡化計算,主要考慮工進時的發(fā)熱量。一般情況下,工進速度大時發(fā)熱量較大,計算如下:v=0.05m/min:流量Q=v(πd2/4)=π×0.12×0.05/4=0.393(L/min)此時泵的效率為0.1,泵的出口壓力為2.65Mpa則有:P(輸入)=2.65×0.393/(60×0.1)=0.174(kW)P(輸入)=Fv=20780×10/60×102×103=0.0346(kW)此時的壓力損失為:ΔP=P(輸入)-P(輸入)=0.174Kw-0.0346KW=0.139KW假定系統(tǒng)的散熱狀況一般,取K=10×10-3=kW/(cm2℃),油箱的散熱面積A為1.92cm2ΔT=ΔP/KA=0.139/(10×10-3×1.92)=7.24(℃)驗算表明系統(tǒng)的溫升在許可范圍內。7.液壓缸的設計7.1液壓缸工作壓力的確定選擇5MP液壓缸工作壓力主要根據液壓設備類型確定,對不同用途的液壓設備,由于工作條件不同,通常采用的壓力也不同。7.2液壓缸的內徑D和活塞桿d前面已經計算D=80mm;d=56mm7.3液壓缸的壁厚和外徑的計算液壓缸的壁厚由液壓缸的強度條件來計算液壓缸的壁厚一般是指缸筒結構中最薄處的厚度,從材料力學可知,承受內壓力的圓筒,其內應力分布規(guī)律因壁厚的不同而各異,一般計算時可分為薄壁圓筒,起重運輸機械和工程機械的液壓缸一般用無縫鋼管材料,大多屬于薄壁圓筒結構,其壁厚按薄壁圓筒公式計算ζ≥PD/2[δ]公式中:ζ為液壓缸壁厚(m)D為液壓缸內徑(m)P試驗壓力,一般取最大工作壓力的(1.25-1.5倍)(Mpa)[δ]缸筒材料的許用應力:鍛鋼110-120,鑄鋼100-110,無縫鋼管100-110高強度鑄鐵60,灰鑄鐵25,單位(Mpa)ζ≥PD/2[δ]=8×0.80/(2×110)故取ζ=5mm液壓缸壁厚算出后,即可求出缸體的外徑D1為D1≥D+2ζ=80+2×5=90mm取D1=907.4缸蓋厚度的確定一般液壓缸多為平底缸蓋,其有效厚度t按強度要求可用下面兩個公式進行近似計算無孔時:t≥0.433D(P/【ζ】)有孔時:t≥0.433D{PD/【ζ】(D-d)}式中,t----------缸蓋有效厚度D---------缸蓋止口內直徑d----------缸蓋孔的直徑8.參考文獻左健民.液壓與氣動傳動.北京,機械工業(yè)出版社,2005宋錦春,蘇東海,張志偉.液壓與氣動傳動.北京,科學出版社,2006崔廣臣,謝群.液壓與氣動技術—課程設計指導書.沈陽,沈陽理工大學機械工程學院流體傳動與控制教研室,2007池州學院CHIZHOUCOLLEGE池州學院CHIZHOUCOLLEGE《數據結構》課程設計報告學號:姓名:班級:計算機科學與技術(2)班指導教師:成績:數學與計算機科學系課程設計基本情況1、設計名稱一元多項式計算2、主要功能能夠按照指數降序排列建立并輸出多項式;能夠完成兩個多項式的相加、相減,并將結果輸出;3、設計平臺電腦、Visualc++6.0系統(tǒng)設計1、算法思想根據一元多項式相加的運算規(guī)則:對于兩個一元多項式中所有指數相同的項,對應指數相加(減),若其和(差)不為零,則構成“和(差)多項式”中的一項;對于兩個一元多項式中所有指數不相同的項,則分別寫到“和(差)多項式”中去。因為多項式指數最高項以及項數是不確定的,因此采用線性鏈表的存儲結構便于實現一元多項式的運算。為了節(jié)省空間,我采用兩個鏈表分別存放多項式a和多項式b,對于最后計算所得的多項式則利用多項式a進行存儲。主要用到了單鏈表的插入和刪除操作。一元多項式加法運算它從兩個多項式的頭部開始,兩個多項式的某一項都不為空時,如果指數相等的話,系數就應該相加;相加的和不為零的話,用頭插法建立一個新的節(jié)點。P的指數小于q的指數的話就應該復制q的節(jié)點到多項式中。P的指數大于q的指數的話,就應該復制p節(jié)點到多項式中。當第二個多項式空,第一個多項式不為空時,將第一個多項式用新節(jié)點產生。當第一個多項式空,第二個多項式不為空時,將第二個多項式用新節(jié)點產生。一元多項式的減法運算它從兩個多項式的頭部開始,兩個多項式的某一項都不為空時,如果指數相等的話,系數就相減;相加的和不為零的話,用頭插法建立一個新的節(jié)點。p的指數小于q的指數的話,就應該復制q的節(jié)點到多項式中。P的指數大于q的指數的話就應該復制p的節(jié)點到多項式中,并且建立的節(jié)點的系數為原來的相反數;當第二個多項式空,第一個多項式不為空時,將第一個多項式用新節(jié)點產生。當第一個多項式空,第二個多項式不為空時,將第二個多項式用新節(jié)點產生,并且建立的節(jié)點的系數為原來的相反數。2、概要設計(1)主函數流程圖:(注:a代表第一個一元二次方程,b代表第二個一元二次方程)開始開始定義結構體定義函數類型及名稱構造指數比較函數排列順序(降序)用單鏈接儲存a,b項目的系數和指數開始進行加減法運算輸出構造出的多項式指數不同輸出多項式,求項數創(chuàng)建并初始化多項式鏈表輸入系數和指數指數相同合并同類項按指數排序結束將單鏈表的節(jié)點釋放,使已建立的多項式銷毀a項的指數值=b項的指數值選擇語句a項指數值<b項指數值輸出計算后的多項式摘取b的指數值到“和多項式”按指數值按降序排列摘取a指數值到“和多項式”釋放a和b的結點將a和b的系數相加(減)a項指數值>b項指數值 (2)一元多項式計算算法用類C語言表示:Typedefstruct00{//項的表示,多項式的項作為LinkList的數據元素Floatcoef;//細數Intexpn;//指數}term,ElemType;//兩個類型名:term用于本ADT,ElemType為LinkList的數據對象名TypedefLinkListpolynomial://用帶表頭的節(jié)點的有序鏈表表示多項式//基本操作的函數原型說明VoidCreatePolyn(polynomail&P);//輸入n的系數和指數,建立表示一元多項式的有序鏈表P銷毀一元多項式PVoidDestroyPolyn(polynomailP);銷毀一元多項式PvoidPrintPoly(polynomailP);//打印輸入一元多項式PIntPolynLength(polynnomailP);//返回一元多項式P中的項數voidCreatPolyn(polynomail&Pa.polunomail&Pb);//完成多項式相加運算,即:Pa=Pa+Pb,并賢惠一元多項式PbvoidSubtractPolyn(polunomail&Papolunomail&Pb);//完成多項式相減運算,即:Pa=Pa-Pb,并銷毀一元多項式Pb//基本操作的算法描述Intcmp(tema,tempb);//依a的指數值<(或=)(或>b的住數值,分別返回-1、0和+1VoidCreatePolyn(polynomail&P,intm){//輸入m項的系數和指數,建立表示一元多項式的有序鏈表PInitList(P); h=GetHead(P);E.coef=0.0; e.expn=-1; SerCurElem(h,e);//設置頭結點的數據元素For(i=1;i<=m;++i) { //依次輸入m個非零項Scanf(e.coef,e.epn);If(!LocateElem(P,e,q,(*cmp)())) {//當前鏈表中不存在該指數項If(MakeNode(s,e)) InsFirst(q,s); //生成節(jié)點并插入鏈表}}}//CreatPolun詳細設計1、算法實現輸入一元多項式函數:voidshuchu(pnode*head){pnode*p;intone_time=1;p=head;while(p!=NULL)/*如果不為空*/{if(one_time==1){if(p->zhishu==0)/*如果指數為0的話,直接輸出系數*/printf("%5.2f",p->xishu);/*如果系數是正的話前面就要加+號*/elseif(p->xishu==1||p->xishu==-1)printf("X^%d",p->zhishu);/*如果系數是1的話就直接輸出+x*//*如果系數是-1的話就直接輸出-x號*/elseif(p->xishu>0)/*如果系數是大于0的話就輸出+系數x^指數的形式*/printf("%5.2fX^%d",p->xishu,p->zhishu);elseif(p->xishu<0)/*如果系數是小于0的話就輸出系數x^指數的形式*/printf("%5.2fX^%d",p->xishu,p->zhishu);one_time=0;}else{if(p->zhishu==0)/*如果指數為0的話,直接輸出系數*/{if(p->xishu>0)printf("+%5.2f",p->xishu);/*如果系數是正的話前面就要加+號*/}elseif(p->xishu==1)/*如果系數是1的話就直接輸出+x號*/printf("+X^%d",p->zhishu);elseif(p->xishu==-1)/*如果系數是-1的話就直接輸出-x號*/printf("X^%d",p->zhishu);elseif(p->xishu>0)/*如果系數是大于0的話就輸出+系數x^指數的形式*/printf("+%5.2fX^%d",p->xishu,p->zhishu);elseif(p->xishu<0)/*如果系數是小于0的話就輸出系數x^指數的形式*/printf("%5.2fX^%d",p->xishu,p->zhishu);}p=p->next;/*指向下一個指針*/}printf("\n");}加法函數/*兩個多項式的加法運算*/pnode*add(pnode*heada,pnode*headb){pnode*headc,*p,*q,*s,*r;/*headc為頭指針,r,s為臨時指針,p指向第1個多項式并向右移動,q指向第2個多項式并向右移動*/floatx;/*x為系數的求和*/p=heada;/*指向第一個多項式的頭*/q=headb;/*指向第二個多項式的頭*/headc=(pnode*)malloc(sizeof(pnode));/*開辟空間*/r=headc;while(p!=NULL&&q!=NULL)/*2個多項式的某一項都不為空時*/{if(p->zhishu==q->zhishu)/*指數相等的話*/{x=p->xishu+q->xishu;/*系數就應該相加*/if(x!=0)/*相加的和不為0的話*/{s=(pnode*)malloc(sizeof(pnode));/*用頭插法建立一個新的節(jié)點*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next;/*2個多項式都向右移*/}elseif(p->zhishu<q->zhishu)/*p的系數小于q的系數的話,就應該復制q節(jié)點到多項式中*/{s=(pnode*)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;/*q向右移動*/}else/*p的系數大于q的系數的話,就應該復制p節(jié)點到多項式中*/{s=(pnode*)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;/*p向右移動*/}}/*當第2個多項式空,第1個數不為空時,將第一個數剩下的全用新節(jié)點產生*/while(p!=NULL){s=(pnode*)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*當第1個多項式空,第1個數不為空時,將第2個數剩下的全用新節(jié)點產生*/while(q!=NULL){s=(pnode*)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL;/*最后指向空*/headc=headc->next;/*第一個頭沒有用到*/returnheadc;/*返回頭接點*/}減法函數/*兩個多項式的加法運算*/pnode*add(pnode*heada,pnode*headb){pnode*headc,*p,*q,*s,*r;/*headc為頭指針,r,s為臨時指針,p指向第1個多項式并向右移動,q指向第2個多項式并向右移動*/floatx;/*x為系數的求和*/p=heada;/*指向第一個多項式的頭*/q=headb;/*指向第二個多項式的頭*/headc=(pnode*)malloc(sizeof(pnode));/*開辟空間*/r=headc;while(p!=NULL&&q!=NULL)/*2個多項式的某一項都不為空時*/{if(p->zhishu==q->zhishu)/*指數相等的話*/{x=p->xishu+q->xishu;/*系數就應該相加*/if(x!=0)/*相加的和不為0的話*/{s=(pnode*)malloc(sizeof(pnode));/*用頭插法建立一個新的節(jié)點*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next;/*2個多項式都向右移*/}elseif(p->zhishu<q->zhishu)/*p的系數小于q的系數的話,就應該復制q節(jié)點到多項式中*/{s=(pnode*)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;/*q向右移動*/}else/*p的系數大于q的系數的話,就應該復制p節(jié)點到多項式中*/{s=(pnode*)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;/*p向右移動*/}}/*當第2個多項式空,第1個數不為空時,將第一個數剩下的全用新節(jié)點產生*/while(p!=NULL){s=(pnode*)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*當第1個多項式空,第1個數不為空時,將第2個數剩下的全用新節(jié)點產生*/while(q!=NULL){s=(pnode*)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL;/*最后指向空*/headc=headc->next;/*第一個頭沒有用到*/returnheadc;/*返回頭接點*/}程序代碼/*一元多項式計算*//*程序功能:能夠按照指數降序排列建立并輸出多項式;能夠完成兩個多項式的相加、相減,并將結果輸出;*//*提示:輸入完一元多項式之后,輸入“00”結束本一元多項式的輸入*//*注意:系數只精確到百分位,最大系數只能為999.99,指數為整數.如果需要輸入更大的系數,可以對程序中5.2%f進行相應的修改*/#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>/*建立結構體*/typedefstructpnode{floatxishu;/*系數*/intzhishu;/*指數*/structpnode*next;/*下一個指針*/}pnode;/*用頭插法生成一個多項式,系數和指數輸入0時退出輸入*/pnode*creat(){intm;floatn;pnode*head,*rear,*s;/*head為頭指針,rear和s為臨時指針*/head=(pnode*)malloc(sizeof(pnode));rear=head;/*指向頭*/scanf("%f",&n);/*系數*/scanf("%d",&m);/*輸入指數*/while(n!=0)/*輸入0退出*/{s=(pnode*)malloc(sizeof(pnode));s->xishu=n;s->zhishu=m;s->next=NULL;rear->next=s;/*頭插法*/rear=s;scanf("%f",&n);/*輸入系數*/scanf("%d",&m);/*輸入指數*/}head=head->next;/*第一個頭沒有用到*/returnhead;}/*調整多項式*/voidtiaozhen(pnode*head){pnode*p,*q,*t;floattemp;p=head;while(p!=NULL){q=p;t=q->next;while(t!=NULL){if(t->zhishu>q->zhishu)q=t;t=t->next;}temp=p->xishu;p->xishu=q->xishu;q->xishu=temp;temp=p->zhishu;p->zhishu=q->zhishu;q->zhishu=temp;p=p->next;}}/*顯示一個多項式*/voidshuchu(pnode*head){pnode*p;intone_time=1;p=head;while(p!=NULL)/*如果不為空*/{if(one_time==1){if(p->zhishu==0)/*如果指數為0的話,直接輸出系數*/printf("%5.2f",p->xishu);/*如果系數是正的話前面就要加+號*/elseif(p->xishu==1||p->xishu==-1)printf("X^%d",p->zhishu);/*如果系數是1的話就直接輸出+x*//*如果系數是-1的話就直接輸出-x號*/elseif(p->xishu>0)/*如果系數是大于0的話就輸出+系數x^指數的形式*/printf("%5.2fX^%d",p->xishu,p->zhishu);elseif(p->xishu<0)/*如果系數是小于0的話就輸出系數x^指數的形式*/printf("%5.2fX^%d",p->xishu,p->zhishu);one_time=0;}else{if(p->zhishu==0)/*如果指數為0的話,直接輸出系數*/{if(p->xishu>0)printf("+%5.2f",p->xishu);/*如果系數是正的話前面就要加+號*/}elseif(p->xishu==1)/*如果系數是1的話就直接輸出+x號*/printf("+X^%d",p->zhishu);elseif(p->xishu==-1)/*如果系數是-1的話就直接輸出-x號*/printf("X^%d",p->zhishu);elseif(p->xishu>0)/*如果系數是大于0的話就輸出+系數x^指數的形式*/printf("+%5.2fX^%d",p->xishu,p->zhishu);elseif(p->xishu<0)/*如果系數是小于0的話就輸出系數x^指數的形式*/printf("%5.2fX^%d",p->xishu,p->zhishu);}p=p->next;/*指向下一個指針*/}printf("\n");}/*兩個多項式的加法運算*/pnode*add(pnode*heada,pnode*headb){pnode*headc,*p,*q,*s,*r;/*headc為頭指針,r,s為臨時指針,p指向第1個多項式并向右移動,q指向第2個多項式并向右移動*/floatx;/*x為系數的求和*/p=heada;/*指向第一個多項式的頭*/q=headb;/*指向第二個多項式的頭*/headc=(pnode*)malloc(sizeof(pnode));/*開辟空間*/r=headc;while(p!=NULL&&q!=NULL)/*2個多項式的某一項都不為空時*/{if(p->zhishu==q->zhishu)/*指數相等的話*/{x=p->xishu+q->xishu;/*系數就應該相加*/if(x!=0)/*相加的和不為0的話*/{s=(pnode*)malloc(sizeof(pnode));/*用頭插法建立一個新的節(jié)點*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next;/*2個多項式都向右移*/}elseif(p->zhishu<q->zhishu)/*p的系數小于q的系數的話,就應該復制q節(jié)點到多項式中*/{s=(pnode*)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;/*q向右移動*/}else/*p的系數大于q的系數的話,就應該復制p節(jié)點到多項式中*/{s=(pnode*)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;/*p向右移動*/}}/*當第2個多項式空,第1個數不為空時,將第一個數剩下的全用新節(jié)點產生*/while(p!=NULL){s=(pnode*)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*當第1個多項式空,第1個數不為空時,將第2個數剩下的全用新節(jié)點產生*/while(q!=NULL){s=(pnode*)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL;/*最后指向空*/headc=headc->next;/*第一個頭沒有用到*/returnheadc;/*返回頭接點*/}/*兩個多項式的減法運算*/pnode*sub(pnode*heada,pnode*headb){pnode*headc,*p,*q,*s,*r;floatx;/*x為系數相減*/p=heada;/*指向第一個多項式的頭*/q=headb;/*指向第二個多項式的頭*/headc=(pnode*)malloc(sizeof(pnode));/*開辟空間*/r=headc;while(p!=NULL&&q!=NULL)/*兩個多項式的某一項都不為空時*/{if(p->zhishu==q->zhishu)/*指數相等的話*/{x=p->xishu-q->xishu;/*系數相減*/if(x!=0)/*相減的差不為0的話*/{s=(pnode*)malloc(sizeof(pnode));/*用頭插法建立一個新的節(jié)點*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next;/*2個多項式都向右移*/}elseif(p->zhishu<q->zhishu)/*p的系數小于q的系數的話*/{s=(pnode*)malloc(sizeof(pnode));s->xishu=-q->xishu;/*建立的節(jié)點的系數為原來的相反數*/s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}else{s=(pnode*)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;/*p向右移動*/}}while(p!=NULL)/*當第2個多項式空,第1個數不為空時,將第一個數剩下的全用新節(jié)點產生*/{s=(pnode

溫馨提示

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

評論

0/150

提交評論