第一篇:[推薦]加工中心編程技巧小結(jié)
[推薦]加工中心編程技巧小結(jié)
一般編程技巧
cnc加工中心中幾組常用指令的區(qū)別及編程技巧
隨著科技的發(fā)展和社會的進步,人們對產(chǎn)品的性能和質(zhì)量要求越來越高,從而使數(shù)控機床
應
用已得到一定程度的普及,而高性能高效率的加工中心也逐漸成為社會所需。通過幾年的加
工
中心實際應用和教學實踐及摸索,筆者將自己的體會和經(jīng)驗總結(jié)出來,希望對廣大讀者有所
啟 迪。1. 暫停指令
G04X(U)_/P_ 是指刀具暫停時間(進給停止,主軸不停止),地址P或X后的數(shù)值是暫
停時
間。X后面的數(shù)值要帶小數(shù)點,否則以此數(shù)值的千分之一計算,以秒(s)為單位,P后面數(shù)
值
不能帶小數(shù)點(即整數(shù)表示),以毫秒(ms)為單位。例如,G04 X2.0;或G04 X2000;
暫停2秒
G04 P2000;但在某些孔系加工指令中(如G82、G88及G89),為了保證孔底的精糙度,當?shù)毒呒庸ぶ?/p>
孔底
時需有暫停時間,此時只能用地址P表示,若用地址X表示,則控制系統(tǒng)認為X是X軸坐標
值進行 執(zhí)行。
例如,G82X100.0Y100.0Z-20.0R5.0F200P2000;鉆孔(100.0,100.0)至孔底暫停2秒 G82X100.0Y100.0Z-20.0R5.0F200X2.0;
鉆孔(2.0,100.0)至孔底不會暫停。
2. M00、M01、M02和M30的區(qū)別與聯(lián)系
M00為程序無條件暫停指令。程序執(zhí)行到此進給停止,主軸停轉(zhuǎn)。重新啟動程序,必須先回? 絁OG狀態(tài)下,按下CW(主軸正轉(zhuǎn))啟動主軸,接著返回AUTO狀態(tài)下,按下START鍵才能
啟動程序。
M01為程序選擇性暫停指令。程序執(zhí)行前必須打開控制面板上OP STOP鍵才能執(zhí)行,執(zhí)行
后的
效果與M00相同,要重新啟動程序同上。M00和M01常常用于加工中途工件尺寸的檢驗或排屑。M02為主程序結(jié)束指令。執(zhí)行到此指令,進給停止,主軸停止,冷卻液關(guān)閉。但程序光標停
在 程序末尾。
M30為主程序結(jié)束指令。功能同M02,不同之處是,光標返回程序頭位置,不管M30后是否
還有 其他程序段。3. 地址D、H的意義相同
刀具補償參數(shù)D、H具有相同的功能,可以任意互換,它們都表示數(shù)控系統(tǒng)中補償寄存器的地
址名稱,但具體補償值是多少,關(guān)鍵是由它們后面的補償號地址來決定。不過在加工中心
中,為了防止出錯,一般人為規(guī)定H為刀具長度補償?shù)刂?,補償號從1~20號,D為刀具半徑補
償?shù)?/p>
址,補償號從21號開始(20把刀的刀庫)。
例如,G00G43H1Z100.0;
G01G41D21X20.0Y35.0F200;
4. 鏡像指令
鏡像加工指令M21、M22、M23。當只對X軸或Y軸進行鏡像時,切削時的走刀順序(順銑與
逆銑),刀補方向,圓弧插補轉(zhuǎn)向都會與實際程序相反,如圖1所示。當同時對X軸和Y軸進行
鏡像
時,走刀順序,刀補方向,圓弧插補轉(zhuǎn)向均不變。
注意:使用鏡像指令后必須用M23進行取消,以免影響后面的程序。在G90模式下,使用鏡
像
或取消指令,都要回到工件坐標系原點才能使用。否則,數(shù)控系統(tǒng)無法計算后面的運動軌
跡,會出現(xiàn)亂走刀現(xiàn)象。這時必須實行手動原點復歸操作予以解決。主軸轉(zhuǎn)向不隨著鏡像指令變
化。
圖1 鏡像時刀補、順逆變化
5. 圓弧插補指令
G02為順時針插補,G03為逆時針插補,在XY平面中,格式如下:G02/G03X_Y_I_K_F_或
G02/G 03 X_Y_R_F_,其中X、Y為圓弧終點坐標,I、J為圓弧起點到圓心在X、Y軸上的增量值,R為圓
弧半徑,F(xiàn)為進給量。在圓弧切削時注意,q≤180°,R為正值;q>180°,R為負值;I、K的指定也可用R指定,當
兩者同時被指定時,R指令優(yōu)先,I、K無效;R不能做整圓切削,整圓切削只能用I、J、K
編程,因為經(jīng)過同一點,半徑相同的圓有無數(shù)個,如圖2所示。
圖2 經(jīng)過同一點的圓
當有I、K為零時,就可以省略;無論G90還是G91方式,I、J、K都按相對坐標編程;圓
弧插補
時,不能用刀補指令G41/G42。6. G92與G54~G59之間的優(yōu)缺點
G54~G59是在加工前設定好的坐標系,而G92是在程序中設定的坐標系,用了G54~G59就
沒有
必要再使用G92,否則G54~G59會被替換,應當避免,如表1所示。
表1 G92與工作坐標系的區(qū)別
注意:(1)一旦使用了G92設定坐標系,再使用G54~G59不起任何作用,除非斷電重新啟
動
系統(tǒng),或接著用G92設定所需新的工件坐標系。(2)使用G92的程序結(jié)束后,若機床沒有
回? 紾92設定的原點,就再次啟動此程序,機床當前所在位置就成為新的工件坐標原點,易發(fā)
生事
故。所以,希望廣大讀者慎用。
7. 編制換刀子程序。
在加工中心上,換刀是不可避免的。但機床出廠時都有一個固定的換刀點,不在換刀位置,便不能夠換刀,而且換刀前,刀補和循環(huán)都必須取消掉,主軸停止,冷卻液關(guān)閉。條件繁多,如果每次手動換刀前,都要保證這些條件,不但易出錯而且效率低,因此我們可以編制一個
換
刀程序保存諳低襯詿婺?,哉焿亩时,在MDI狀態(tài)下用M98調(diào)用就可以一次性完成換刀動
作。
以PMC-10V20加工中心為例,程序如下:
O2002;
(程序名)G80G40G49;(取消固定循環(huán)、刀補)
M05;
(主軸停止)M09;
(冷卻液關(guān)閉)G91G30Z0;
(Z軸回到第二原點,即換刀點)
M06;
(換刀)
M99;
(子程序結(jié)束)在需要換刀的時候,只需在MDI狀態(tài)下,鍵入“T5M98P2002”,即可換上所需刀具T5,從
而避
免了許多不必要的失誤。廣大讀者可根據(jù)自己機床的特點,編制相應的換刀子程序。
8.其他
程序段順序號,用地址N表示。一般數(shù)控裝置本身存儲器空間有限(64K),為了節(jié)省存儲
空
間,程序段順序號都省略不要。N只表示程序段標號,可以方便查找編輯程序,對加工過程
不
起任何作用,順序號可以遞增也可遞減,也不要求數(shù)值有連續(xù)性。但在使用某些循環(huán)指令,跳
轉(zhuǎn)指令,調(diào)用子程序及鏡像指令時不可以省略。
9.同一條程序段中,相同指令(相同地址符)或同一組指令,后出現(xiàn)的起作用。
例如,換刀程序,T2M06T3;換上的是T3而不是T2;G01G00X50.0Y30.0F200;執(zhí)行的是G00(雖有F值,但也不執(zhí)行G01)。不是同一組的指令代碼,在同一程序段中互換先后順序執(zhí)行效果相同。
G90G54G00X0Y0Z100.0;G00G90G54X0Y0Z100.0;以上各項均在PMC-10V20(FANUC SYSTEM)加工中心上運行通過。在實際應用中,只有深
刻理
解各種指令的用法和編程規(guī)律,
第二篇:加工中心小結(jié)
數(shù)控加工中心工藝及軟硬件小結(jié)
數(shù)控加工中心使用已近三個月,現(xiàn)對其工藝性及所需工裝、工具、軟件作以下小結(jié)。
一、截止目前為止數(shù)控加工中心主要進行的零部件工序如下:
(1).上下模座擴導套孔,襯套孔及沉孔,其余各孔點中心孔。(2).陰模,脫料板,下墊板槽形穿絲孔,其余各孔點中心孔。上墊板螺紋孔過孔,其余孔點中心孔。
(3).聯(lián)軸器擴孔。(4).鉆模板鉆套孔成活。
(5).其它如繞線模、鉆模板及一些工裝異形腔及外形。(6).在線切割無空閑時代替線切割進行某些型腔加工。以上為近期數(shù)控加工中心主要進行的工序。由于加工中心為精密設備,機床剛性較差,故無法進行粗加工及重加工。同時由于分廠產(chǎn)品不系統(tǒng),無法形成小批量及成大批量的精加工,導致在生產(chǎn)過程中必須對每個零件進行單獨的編程,裝夾及找正,這無形中就造成加工中心效率降低,無法實現(xiàn)最初提高生產(chǎn)效率的目的。對于以上零部件而言,在加工中心上進行的工序都是需要保證各種形位公差,對此加工中心可以達到預期的目的,另由于加床本身在使用過程中自身精度有所降低,偶爾會出現(xiàn)形位公差不能達到要求的現(xiàn)象。
二、加工中心所需工裝及工具在使用發(fā)現(xiàn)缺少以下所列:(1).高精度機加虎鉗配置兩臺。(2).BT50-C32強力刀柄增加三把。
(3).BT50-ER32、BT50-ER40刀柄各兩把及相對應ER32.Φ4-Φ 20、ER40Φ6-Φ25彈簧夾頭各兩把。
(4).ER25-200mm延長桿一把。(5).S2 T系列扳手及螺絲適當配置(6).Φ16-R0.8可轉(zhuǎn)位立銑刀一把,各型號鑄鋼刀兩把及常用白鋼立銑刀。
(7).0-150mm帶刀口內(nèi)測量爪及深度尺表盤卡尺。(8).24-26梅花扳手。(9).18-35杠桿百分表。
(10).Φ3加長中心鉆,D20合金銑刀。(11)三角形墊鐵。
以上為目前所需工裝、刀具、量具及工具。針對目前加工中心效率低下,發(fā)現(xiàn)有以前問題:一、二、三名操作者識圖能力相對較弱,對本車間產(chǎn)品理解不夠,該方面需加強。
除金星星外其余兩人對編程軟件掌握不熟練,另外操作者對編程時間不能做出調(diào)整,使機床經(jīng)常處于閑置狀態(tài)。
由于對產(chǎn)品不了解,操作者在加工過程中經(jīng)常會出現(xiàn)對某個工序拿捏不準,猶豫不決。
鑒于機床本身的條件,建議以后盡可能進行一次裝夾、高精度、連續(xù)多工序加工。另外不得進行粗加工,必須在小余量的情況在加工中心上進行。
三、四、
第三篇:加工中心操作與編程考卷
加工中心操作與編程考卷
姓名:分數(shù):
是非題
1(×)當數(shù)控加工程序編制完成后即可進行正式加工。
2(×)數(shù)控機床是在普通機床的基礎上將普通電氣裝置更換成CNC 控制裝置。
3(√)圓弧插補中,對于整圓,其起點和終點相重合,用R 編程無法定義,所以只能用圓心坐標編程。
4(√)插補運動的實際插補軌跡始終不可能與理想軌跡完全相同。
5(×)數(shù)控機床編程有絕對值和增量值編程,使用時不能將它們放在同一程序段中。
6(√)G 代碼可以分為模態(tài)G 代碼和非模態(tài)G 代碼。
7(×)G00 G01 指令都能使機床坐標軸準確到位,因此它們都是插補指令。8(√)圓弧插補用半徑編程時,當圓弧所對應的圓心角大于180°時半徑取負值。
9(×)不同的數(shù)控機床可能選用不同的數(shù)控系統(tǒng),但數(shù)控加工程序指令都是相同的。
10(×)數(shù)控機床按控制系統(tǒng)的特點可分為開環(huán)、閉環(huán)和半閉環(huán)系統(tǒng)。11(√)在開環(huán)和半閉環(huán)數(shù)控機床上,定位精度主要取決于進給絲杠的精度。12(×)點位控制系統(tǒng)不僅要控制從一點到另一點的準確定位,還要控制從一點到另一點的路徑。
13(√)常用的位移執(zhí)行機構(gòu)有步進電機、直流伺服電機和交流伺服電機。14(√)通常在命名或編程時,不論何種機床,都一律假定工件靜止刀具移動。
15(×)數(shù)控機床適用于單品種,大批量的生產(chǎn)。
16(×)一個主程序中只能有一個子程序。
18(√)程序段的順序號,根據(jù)數(shù)控系統(tǒng)的不同,在某些系統(tǒng)中可以省略的。19(×)絕對編程和增量編程不能在同一程序中混合使用。
20(×)數(shù)控機床在輸入程序時,不論何種系統(tǒng)座標值不論是整數(shù)和小數(shù)都不必加入小數(shù)點。
21(√)RS232 主要作用是用于程序的自動輸入。
22(√)非模態(tài)指令只能在本程序段內(nèi)有效。
第四篇:編程小結(jié)
編程小結(jié)
(一)一.累加:加數(shù)1+加數(shù)2+加數(shù)3+??+加數(shù)n(n個加數(shù)相加)假設我們用i表示我們的加數(shù)數(shù)目,例如:當i=9時,就表示加數(shù)9 模版:int i,sum=0;(注意:如果是分數(shù)或者小數(shù)sum就是float類型)
for(i=1;i<=n;i++)(注意:循環(huán)變量的初值和遞變規(guī)律,也有
可能是i--,或者i+=2等等){通項a;(通項:用一個通用的式子表示所有的加數(shù))sum+=a;} printf(“%d”,sum);(注意:如果是float類型就是%f)
1、求1+2+3??+100的和,則通項a就是i。
分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略。整理之后就是: int i,sum=0;for(i=1;i<=100;i++)sum+=i;printf(“%d”,sum);
2、求2+4+6??+100的和。
分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略,再分析,再分析我們發(fā)現(xiàn)每個加數(shù)都是偶數(shù),那么i的變化就是i+=2,并且i是從2開始變化,那么在賦值的時候就應該是i=2。整理之后就是: int i,sum=0;for(i=2;i<=100;i+=2)sum+=i;printf(“%d”,sum);
3、求1+3+5??+99的和。
分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略,再分析,再分析我們發(fā)現(xiàn)每個加數(shù)都是奇數(shù),那么i的變化就是i+=2。整理之后就是: int i,sum=0;for(i=1;i<=100;i+=2)sum+=i;printf(“%d”,sum);
4、求1+5+9+13+17+??的前100項的和,則通項為j+4,則程序為: int i,sum=0,j=1;for(i=1;i<=100;i++){ sum+=j;j=j+4; } printf(“%d”,sum);因為加數(shù)的第一項是1,所以賦初值的時候j=1,然后加數(shù)進行變化,變成5加到sum里面,所以這里要將通項和求和這兩句話互換位置。
5、求1+4+9+16+??的前100項的和
分析可知:每個加數(shù)就是對應的加數(shù)數(shù)目的平方,則通項為i*i,則程序為: int i,sum=0;for(i=1;i<=100;i++)sum+= i*i;printf(“%d”,sum);
6、求1+(1+2)+(1+2+3)+(1+2+3+4)+??的前100項的和。
分析可知每一個加數(shù)本身又是一個累加的式子,進一步觀察可以發(fā)現(xiàn),每個累加的式子都是加到這個加數(shù)所在的加數(shù)數(shù)目,即第35個加數(shù)就是1+2+3??+35,并且是在前面一個加數(shù)的基礎上加上這個加數(shù)所在的加數(shù)數(shù)目,也就是說第36個加數(shù)就是在前一個加數(shù)的基礎上加上36,即:1+2+3??+35+36。假設第k個加數(shù)是j,那么第k+1個加數(shù)就可以表示為j+(k+1),然后第k+2個加數(shù)就是j+(k+1)+(k+2)??那么我們的通項就可以表示為a=a+i,則程序為: int i,sum=0, a=0;for(i=1;i<=100;i++){ a+=i;sum+=a;} printf(“%d”,sum);
7、求1+1+2+3+5+8+13+21+??的前100項的和。
分析可知從第三個加數(shù)開始,每一個加數(shù)是其前兩個加數(shù)之和,假設第k個加數(shù)是m,第k+1個加數(shù)是n,然后第k+2個加數(shù)就是m+n,那么我們的通項就可以表示為a=m+n,但是要注意每次加數(shù)所對應的m和n不一樣,所以我們要在求出每個加數(shù)之后,找出其對應的m和n;再分析我們可以發(fā)現(xiàn)當前的n是下一次的m,當前的加數(shù)a是下一次的n,假設接著上面的推導,那么第k+3個加數(shù)就是n+(m+n),對應我們的通項a=m+n,理解前面一句話。則程序為: int i,sum=0, m=1,n=1,a;for(i=3;i<=100;i++){ a=m+n;sum+=a;m=n;n=a;} printf(“%d”,sum);
8、求1+1/2+1/3+??+1/100 分析可知每一個加數(shù)就是我們的加數(shù)數(shù)目的倒數(shù),則通項a就是1/i,我們說循環(huán)變量i一般定義為整型,那么1/i的結(jié)果就是整型,這樣的話小數(shù)點后面的就會被省略,所以正確的應該寫為a=1.0/i,則程序為:
int i;float sum=0;for(i=1;i<=100;i++){a=1.0/i;sum+=a;} printf(“%f”,sum);
9、求1+1/2+2/3+3/5+5/8+??的前100項的和。
分析可從第三個加數(shù)開始觀察,每一個加數(shù)的分母是其前一個加數(shù)的分子和分母之和,每一個加數(shù)的分子是其前一個加數(shù)的分母??梢詫⒌谝粋€加數(shù)看成1/1,那么第二個加數(shù)也符合我們的規(guī)律,只有第一個不符合,那么我們可以先將第一個加數(shù)加到sum,然后再變下一個加數(shù),但是要注意每次加數(shù)所對應的分子和分母不一樣,所以我們要在求出每個加數(shù)之后,找出下一個加數(shù)所對應的分子和分母。設通項表示為a=m/n, 那么下一個加數(shù)是n/(m+n),然后下下一個加數(shù)就是(m+n)/(m+n+n);再分析我們可以發(fā)現(xiàn)當前的分子和分母之和(m+n)是下一次的分母n,當前的分母n是下一次的分子m,注意這里在做數(shù)據(jù)交換的時候需要中間變量,對應我們的通項a=m/n,理解前面一句話。則程序為: int i;float sum=0, m=1,n=1,t;for(i=1;i<=100;i++){ sum+=m/n;t=m+n;m=n;n=t;} printf(“%f”,sum);
二.累乘:乘數(shù)1*乘數(shù)2*乘數(shù)3*??*乘數(shù)n(n個乘數(shù)相乘)假設我們用i表示我們的乘數(shù)數(shù)目,例如:當i=9時,就表示乘數(shù)9 模版:int i,sum=1;(注意:如果是分數(shù)或者小數(shù)sum就是float類型)
for(i=1;i<=n;i++)(注意:循環(huán)變量的初值和遞變規(guī)律,也有
可能是i--,或者i+=2等等){通項a;(通項:用一個通用的式子表示所有的乘數(shù))sum*=a;} printf(“%d”,sum);(注意:如果是float類型就是%f)
1、求1*2*3??*100的積,則通項a就是i。
分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略。整理之后就是: int i,sum=1;for(i=1;i<=100;i**)sum*=i;printf(“%d”,sum);
2、求2*4*6??*100的和。分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略,再分析,再分析我們發(fā)現(xiàn)每個乘數(shù)都是偶數(shù),那么i的變化就是i+=2,并且i是從2開始變化,那么在賦值的時候就應該是i=2。整理之后就是: int i,sum=1;for(i=2;i<=100;i+=2)sum*=i;printf(“%d”,sum);
3、求1*3*5??*99的和。
分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略,再分析,再分析我們發(fā)現(xiàn)每個乘數(shù)都是奇數(shù),那么i的變化就是i+=2。整理之后就是: int i,sum=1;for(i=1;i<=100;i+=2)sum*=i;printf(“%d”,sum);
4、求1*5*9*13*17*??的前100項的積,則通項為j*4,則程序為: 分析:因為乘數(shù)的第一項是1,所以賦初值的時候j=1,然后乘數(shù)進行變化,變成5乘到sum里面,所以這里要將通項和求積這兩句話互換位置。
int i,sum=1,j=1;for(i=1;i<=100;i**){ sum*=j;j=j*4; } printf(“%d”,sum);
5、求1*4*9*16*??的前100項的積
分析可知:每個乘數(shù)就是對應的乘數(shù)數(shù)目的平方,則通項為i*i,則程序為: int i,sum=1;for(i=1;i<=100;i**)sum*= i*i;printf(“%d”,sum);
6、求1*(1*2)*(1*2*3)*(1*2*3*4)*??的前100項的積。分析可知每一個乘數(shù)本身又是一個累乘的式子,進一步觀察可以發(fā)現(xiàn),每個累乘的式子都是乘到這個乘數(shù)所在的乘數(shù)數(shù)目,即第35個乘數(shù)就是1*2*3??*35,并且是在前面一個乘數(shù)的基礎上乘上這個乘數(shù)所在的乘數(shù)數(shù)目,也就是說第36個乘數(shù)就是在前一個乘數(shù)的基礎上乘上36,即:1*2*3??*35*36。假設第k個乘數(shù)是j,那么第k+1個乘數(shù)就可以表示為j*(k+1),然后第k+2個乘數(shù)就是j*(k+1)*(k+2)??那么我們的通項就可以表示為a=a*i,則程序為: int i,sum=1, a=0;for(i=1;i<=100;i**){ a*=i;sum*=a;} printf(“%d”,sum);
7、求1*1*2*3*5*8*13*21*??的前100項的積。
分析可知從第三個乘數(shù)開始,每一個乘數(shù)是其前兩個乘數(shù)之和,假設第k個乘數(shù)是m,第k+1個乘數(shù)是n,然后第k+2個乘數(shù)就是m+n,那么我們的通項就可以表示為a=m+n,但是要注意每次乘數(shù)所對應的m和n不一樣,所以我們要在求出每個乘數(shù)之后,找出其對應的m和n;再分析我們可以發(fā)現(xiàn)當前的n是下一次的m,當前的乘數(shù)a是下一次的n,假設接著上面的推導,那么第k+3個乘數(shù)就是n*(m+n),對應我們的通項a=m*n,理解前面一句話。則程序為: int i,sum=1, m=1,n=1,a;for(i=3;i<=100;i**){ a=m+n;sum*=a;m=n;n=a;} printf(“%d”,sum);
8、求1*1/2*1/3*??*1/100 分析可知每一個乘數(shù)就是我們的乘數(shù)數(shù)目的倒數(shù),則通項a就是1/i,我們說循環(huán)變量i一般定義為整型,那么1/i的結(jié)果就是整型,這樣的話小數(shù)點后面的就會被省略,所以正確的應該寫為a=1.0/i,則程序為:
int i;float sum=1;for(i=1;i<=100;i**){a=1.0/i;sum*=a;} printf(“%f”,sum);
9、求1*1/2*2/3*3/5*5/8*??的前100項的積。
分析可從第三個乘數(shù)開始觀察,每一個乘數(shù)的分母是其前一個乘數(shù)的分子和分母之和,每一個乘數(shù)的分子是其前一個乘數(shù)的分母。可以將第一個乘數(shù)看成1/1,那么第二個乘數(shù)也符合我們的規(guī)律,只有第一個不符合,那么我們可以先將第一個乘數(shù)乘到sum,然后再變下一個乘數(shù),但是要注意每次乘數(shù)所對應的分子和分母不一樣,所以我們要在求出每個乘數(shù)之后,找出下一個乘數(shù)所對應的分子和分母。設通項表示為a=m/n, 那么下一個乘數(shù)是n/(m+n),然后下下一個乘數(shù)就是(m+n)/(m+n+n);再分析我們可以發(fā)現(xiàn)當前的分子和分母之和(m+n)是下一次的分母n,當前的分母n是下一次的分子m,注意這里在做數(shù)據(jù)交換的時候需要中間變量,對應我們的通項a=m/n,理解前面一句話。則程序為: int i;float sum=1, m=1,n=1,t;for(i=1;i<=100;i**){ sum*=m/n;t=m+n;m=n;n=t;} printf(“%f”,sum);
10、求1+(1*2)+(1*2*3)+(1*2*3*4)+??的前100項的和。
分析可知每一個加數(shù)本身是一個累乘的式子,進一步觀察可以發(fā)現(xiàn),每個累乘的式子都是乘到這個乘數(shù)所在的乘數(shù)數(shù)目,即第35個乘數(shù)就是1*2*3??*35,并且是在前面一個乘數(shù)的基礎上乘上這個乘數(shù)所在的乘數(shù)數(shù)目,也就是說第36個乘數(shù)就是在前一個乘數(shù)的基礎上乘上36,即:1*2*3??*35*36。假設第k個乘數(shù)是j,那么第k+1個乘數(shù)就可以表示為j*(k+1),然后第k+2個乘數(shù)就是j*(k+1)*(k+2)??那么我們的通項就可以表示為a=a*i,再利用累加的模版,則程序為:
int i,sum=0, a=1;for(i=1;i<=100;i**){ a*=i;sum+=a;} printf(“%d”,sum);
11、求1*(1+2)*(1+2+3)*(1+2+3+4)*??的前100項的積。
分析可知每一個乘數(shù)本身又是一個累加的式子,進一步觀察可以發(fā)現(xiàn),每個累加的式子都是加到這個乘數(shù)所在的乘數(shù)數(shù)目,即第35個乘數(shù)就是1+2+3??+35,并且是在前面一個乘數(shù)的基礎上加上這個乘數(shù)所在的乘數(shù)數(shù)目,也就是說第36個乘數(shù)就是在前一個乘數(shù)的基礎上加上36,即:1+2+3??+35+36。假設第k個乘數(shù)是j,那么第k+1個乘數(shù)就可以表示為j+(k+1),然后第k+2個乘數(shù)就是j+(k+1)+(k+2)??那么我們的通項就可以表示為a=a+i, 再利用累乘的模版,則程序為:
int i,sum=1, a=0;for(i=1;i<=100;i**){ a+=i;sum*=a;} printf(“%d”,sum);
三.最大值和最小值:數(shù)字0,數(shù)字1,數(shù)字2,??數(shù)字n-1(一共n個數(shù)字)假設我們用i表示我們的數(shù)字所在的位置,并且第一個位置是0,例如:當i=9時,就表示這個數(shù)字在第10個位子
模版: int i,max,a[n];(注意:如果是分數(shù)或者小數(shù)max和a[n]就是float
類型,注意這里定義的時候根據(jù)題目所給的具體數(shù)字把n換掉,千萬不可以寫a[n]o哦~~~~)
for(i=0;i 了數(shù)字,就在定義的時候直接賦值,這個循環(huán)就不需要了;如果要求產(chǎn)生給數(shù)組賦a到b之間的隨機數(shù),那么就用a[i]= a + rand()%(b-a);這句話代替這句。注意如果是float類型就是%f)max=a[0];for(i=0;i 1、求20個數(shù)字的最大值和最小值,要求賦1到100之間的隨機數(shù),并且輸出它們及其下標。 分析:因為這里還要輸出其下標,所以還有定義一個row來存放,并且要對其賦值為0,因為我們給max賦值為a[0],則程序為: int i,max,min,a[20],row1=0,row2=0;for(i=0;i<20;i++)a[i]= 1+rand()%99;max=a[0];min=a[0];for(i=0;i<20;i++){ if(maxa[i])(這里是找出最小值){ min=a[i];row2=i;} } printf(“max =%d, row=%dn min =%d, row=%dn”, max,row1,min,row2); 2、求4*5矩陣的最大值和最小值,要求賦值隨機數(shù),并且輸出它們及其下標。分析:雖然這是一個二維的數(shù)組,但是其思路仍然和一維數(shù)組的一樣,區(qū)別只是這里需要用嵌套循環(huán)。要求還要輸出其下標,二維數(shù)組的下標是兩個,所以還要定義一個row和一個col來存放,并且要對它們賦值為0,因為我們給max賦值為a[0] [0],則程序為: int i,j,max,min,a[4] [5],row1=0,row2=0,col1=0,col2=0;for(i=0;i<4;i++)for(j=0;j<5;j++)a[i] [j]=rand();max=a[0] [0];min=a[0] [0];for(i=0;i<4;i++)for(j=0;j<5;j++){ if(maxa[i] [j])(這里是找出最小值){ min=a[i] [j];row2=i;col2=j;} } printf(“max =%d, row=%d, col=%d n min =%d, row=%d, col=%d n”, max,row1, col1, min,row2, col2); 3、求4*5矩陣的每一行最大值和最小值,要求賦值隨機數(shù),并且輸出它們及其下標。 分析:雖然這是一個二維的數(shù)組,但是要求的是每一行的最大最小值,我們知道二維數(shù)組的每一行本身就是一個數(shù)組,那么我們就還需要一個控制行數(shù)的循環(huán)。要求還要輸出其下標,二維數(shù)組的下標是兩個,每一行的最大最小值其行號不就是i,所以還要定義一個存放列號的col,并且要對它賦值為0,因為我們給max賦值為每一行的第一個元素,也就是a[i] [0],則程序為: int i,j,max,min,a[4] [5],col1=0,col2=0;for(i=0;i<4;i++)for(j=0;j<5;j++)a[i] [j]=rand();for(i=0;i<4;i++)(這個循環(huán)是控制行的,里面的循環(huán)體本身就是一個求 一維數(shù)組的最大最小值的程序) {max=a[i] [0];min=a[i] [0];for(j=0;j<5;j++){ if(maxa[i] [j])(這里是找出最小值){ min=a[i] [j];col2=j;} } printf(“max =%d, row=%d, col=%d n min =%d, row=%d, col=%d n”,max,i, col1, min,i, col2);} 4、求4*5矩陣的每一列最大值和最小值,要求賦值隨機數(shù),并且輸出它們及其下標。 分析:雖然這是一個二維的數(shù)組,但是要求的是每一列的最大最小值,二維數(shù)組的每一列可以看成一個數(shù)組,那么我們就還需要一個控制列數(shù)的循環(huán)。要求還要輸出其下標,二維數(shù)組的下標是兩個,每一列的最大最小值其列號不就是j,所以還要定義一個存放行號的row,并且要對它賦值為0,因為我們給max賦值為每一列的第一個元素,也就是a[0] [j],則程序為: int i,j,max,min,a[4] [5],row1=0,row2=0;for(i=0;i<4;i++)for(j=0;j<5;j++)a[i] [j]=rand();for(j=0;j<5;j++)(這個循環(huán)是控制列的,里面的循環(huán)體本身就是一個求 一維數(shù)組的最大最小值的程序){max=a[0] [j];min=a[0] [j];for(i=0;i<4;i++){ if(maxa[i] [j])(這里是找出最小值){ min=a[i] [j];row2=i;} } printf(“max =%d, row=%d, col=%d n min =%d, row=%d, col=%d n”,max, row1,j, min, row2,j);} 5、排序(冒泡法)比如說 對于5個數(shù)字排序,首先要把5個數(shù)字放到一個一維的數(shù)組里面去 所以編程的前幾句為:int a[5] for(i=0;i<5;i++)scanf(“%d”,&a*i+); 那接下來就是排序了,為了方便理解就將數(shù)組實際化:比如 a[5]里面放著{7,9,0,12,3}那畫圖出來就是 a[5] a[0] a[1] a[2] a[3] a[4] ????????????那我們排序的方法是這樣的采用這樣幾步: 1,用a[0]與后面的(a[1]~a[4]里面的每一個成員比較即是說:a[0]~a[1]比較 a[0]~a[2]比較 a[0]~a[3]比較 a[0]~a[4]比較)當后面的成員只要發(fā)現(xiàn)比a[0]小的就與他的位置交換 這部做完之后數(shù)組就應 該是這個樣子: a[0] a[1] a[2] a[3] a[4] ???????????2,用a[1]與后面的(a[2]~a[4]里面的每一個成員比較即是說: a[1]~a[2]比較 a[1]~a[3]比較 a[1]~a[4]比較)當后面的成員只要發(fā)現(xiàn)比a[1]小的就與他的位置交換 這部做完之后數(shù) 組該是這個樣子:這個時候的a1不是我們賦初值時候的a1老就是我們改變后的數(shù)組所以這個時候的a1=9哦。 a[0] a[1] a[2] a[3] a[4] ???????????3,用a[2]與后面的(a[3]~a[4]里面的每一個成員比較即是說: a[2]~a[3]比較 a[2]~a[4]比較)當后面的成員只要發(fā)現(xiàn)比a[2]小的就與他的位置交換 這部做完之后數(shù)組就應 該是這個樣子: a[0] a[1] a[2] a[3] a[4] ???????????4,用a[3]與后面的(a[4]~a[4]里面的每一個成員比較即是說: a[3]~a[4]比較)當后面的成員只要發(fā)現(xiàn)比a[2]小的就與他的位置交換 這部做完之后數(shù)組就應 該是這個樣子: a[0] a[1] a[2] a[3] a[4] ???????????循環(huán)就是 寫成這個樣子的哦: for(i=0;i<4;i++)