[推荐]加工中心编程技巧小结

时间:2019-05-12 03:57:17下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《[推荐]加工中心编程技巧小结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《[推荐]加工中心编程技巧小结》。

第一篇:[推荐]加工中心编程技巧小结

[推荐]加工中心编程技巧小结

一般编程技巧

cnc加工中心中几组常用指令的区别及编程技巧

随着科技的发展和社会的进步,人们对产品的性能和质量要求越来越高,从而使数控机床

用已得到一定程度的普及,而高性能高效率的加工中心也逐渐成为社会所需。通过几年的加

中心实际应用和教学实践及摸索,笔者将自己的体会和经验总结出来,希望对广大读者有所

启 迪。1. 暂停指令

G04X(U)_/P_ 是指刀具暂停时间(进给停止,主轴不停止),地址P或X后的数值是暂

停时

间。X后面的数值要带小数点,否则以此数值的千分之一计算,以秒(s)为单位,P后面数

不能带小数点(即整数表示),以毫秒(ms)为单位。例如,G04 X2.0;或G04 X2000;

暂停2秒

G04 P2000;但在某些孔系加工指令中(如G82、G88及G89),为了保证孔底的精糙度,当刀具加工至

孔底

时需有暂停时间,此时只能用地址P表示,若用地址X表示,则控制系统认为X是X轴坐标

值进行 执行。

例如,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的区别与联系

M00为程序无条件暂停指令。程序执行到此进给停止,主轴停转。重新启动程序,必须先回? 絁OG状态下,按下CW(主轴正转)启动主轴,接着返回AUTO状态下,按下START键才能

启动程序。

M01为程序选择性暂停指令。程序执行前必须打开控制面板上OP STOP键才能执行,执行

后的

效果与M00相同,要重新启动程序同上。M00和M01常常用于加工中途工件尺寸的检验或排屑。M02为主程序结束指令。执行到此指令,进给停止,主轴停止,冷却液关闭。但程序光标停

在 程序末尾。

M30为主程序结束指令。功能同M02,不同之处是,光标返回程序头位置,不管M30后是否

还有 其他程序段。3. 地址D、H的意义相同

刀具补偿参数D、H具有相同的功能,可以任意互换,它们都表示数控系统中补偿寄存器的地

址名称,但具体补偿值是多少,关键是由它们后面的补偿号地址来决定。不过在加工中心

中,为了防止出错,一般人为规定H为刀具长度补偿地址,补偿号从1~20号,D为刀具半径补

偿地

址,补偿号从21号开始(20把刀的刀库)。

例如,G00G43H1Z100.0;

G01G41D21X20.0Y35.0F200;

4. 镜像指令

镜像加工指令M21、M22、M23。当只对X轴或Y轴进行镜像时,切削时的走刀顺序(顺铣与

逆铣),刀补方向,圆弧插补转向都会与实际程序相反,如图1所示。当同时对X轴和Y轴进行

镜像

时,走刀顺序,刀补方向,圆弧插补转向均不变。

注意:使用镜像指令后必须用M23进行取消,以免影响后面的程序。在G90模式下,使用镜

或取消指令,都要回到工件坐标系原点才能使用。否则,数控系统无法计算后面的运动轨

迹,会出现乱走刀现象。这时必须实行手动原点复归操作予以解决。主轴转向不随着镜像指令变

化。

图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为进给量。在圆弧切削时注意,q≤180°,R为正值;q>180°,R为负值;I、K的指定也可用R指定,当

两者同时被指定时,R指令优先,I、K无效;R不能做整圆切削,整圆切削只能用I、J、K

编程,因为经过同一点,半径相同的圆有无数个,如图2所示。

图2 经过同一点的圆

当有I、K为零时,就可以省略;无论G90还是G91方式,I、J、K都按相对坐标编程;圆

弧插补

时,不能用刀补指令G41/G42。6. G92与G54~G59之间的优缺点

G54~G59是在加工前设定好的坐标系,而G92是在程序中设定的坐标系,用了G54~G59就

没有

必要再使用G92,否则G54~G59会被替换,应当避免,如表1所示。

表1 G92与工作坐标系的区别

注意:(1)一旦使用了G92设定坐标系,再使用G54~G59不起任何作用,除非断电重新启

系统,或接着用G92设定所需新的工件坐标系。(2)使用G92的程序结束后,若机床没有

回? 紾92设定的原点,就再次启动此程序,机床当前所在位置就成为新的工件坐标原点,易发

生事

故。所以,希望广大读者慎用。

7. 编制换刀子程序。

在加工中心上,换刀是不可避免的。但机床出厂时都有一个固定的换刀点,不在换刀位置,便不能够换刀,而且换刀前,刀补和循环都必须取消掉,主轴停止,冷却液关闭。条件繁多,如果每次手动换刀前,都要保证这些条件,不但易出错而且效率低,因此我们可以编制一个

刀程序保存谙低衬诖婺冢诨坏妒保贛DI状态下用M98调用就可以一次性完成换刀动

作。

以PMC-10V20加工中心为例,程序如下:

O2002;

(程序名)G80G40G49;(取消固定循环、刀补)

M05;

(主轴停止)M09;

(冷却液关闭)G91G30Z0;

(Z轴回到第二原点,即换刀点)

M06;

(换刀)

M99;

(子程序结束)在需要换刀的时候,只需在MDI状态下,键入“T5M98P2002”,即可换上所需刀具T5,从

而避

免了许多不必要的失误。广大读者可根据自己机床的特点,编制相应的换刀子程序。

8.其他

程序段顺序号,用地址N表示。一般数控装置本身存储器空间有限(64K),为了节省存储

间,程序段顺序号都省略不要。N只表示程序段标号,可以方便查找编辑程序,对加工过程

起任何作用,顺序号可以递增也可递减,也不要求数值有连续性。但在使用某些循环指令,跳

转指令,调用子程序及镜像指令时不可以省略。

9.同一条程序段中,相同指令(相同地址符)或同一组指令,后出现的起作用。

例如,换刀程序,T2M06T3;换上的是T3而不是T2;G01G00X50.0Y30.0F200;执行的是G00(虽有F值,但也不执行G01)。不是同一组的指令代码,在同一程序段中互换先后顺序执行效果相同。

G90G54G00X0Y0Z100.0;G00G90G54X0Y0Z100.0;以上各项均在PMC-10V20(FANUC SYSTEM)加工中心上运行通过。在实际应用中,只有深

刻理

解各种指令的用法和编程规律,

第二篇:加工中心小结

数控加工中心工艺及软硬件小结

数控加工中心使用已近三个月,现对其工艺性及所需工装、工具、软件作以下小结。

一、截止目前为止数控加工中心主要进行的零部件工序如下:

(1).上下模座扩导套孔,衬套孔及沉孔,其余各孔点中心孔。(2).阴模,脱料板,下垫板槽形穿丝孔,其余各孔点中心孔。上垫板螺纹孔过孔,其余孔点中心孔。

(3).联轴器扩孔。(4).钻模板钻套孔成活。

(5).其它如绕线模、钻模板及一些工装异形腔及外形。(6).在线切割无空闲时代替线切割进行某些型腔加工。以上为近期数控加工中心主要进行的工序。由于加工中心为精密设备,机床刚性较差,故无法进行粗加工及重加工。同时由于分厂产品不系统,无法形成小批量及成大批量的精加工,导致在生产过程中必须对每个零件进行单独的编程,装夹及找正,这无形中就造成加工中心效率降低,无法实现最初提高生产效率的目的。对于以上零部件而言,在加工中心上进行的工序都是需要保证各种形位公差,对此加工中心可以达到预期的目的,另由于加床本身在使用过程中自身精度有所降低,偶尔会出现形位公差不能达到要求的现象。

二、加工中心所需工装及工具在使用发现缺少以下所列:(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可转位立铣刀一把,各型号铸钢刀两把及常用白钢立铣刀。

(7).0-150mm带刀口内测量爪及深度尺表盘卡尺。(8).24-26梅花扳手。(9).18-35杠杆百分表。

(10).Φ3加长中心钻,D20合金铣刀。(11)三角形垫铁。

以上为目前所需工装、刀具、量具及工具。针对目前加工中心效率低下,发现有以前问题:一、二、三名操作者识图能力相对较弱,对本车间产品理解不够,该方面需加强。

除金星星外其余两人对编程软件掌握不熟练,另外操作者对编程时间不能做出调整,使机床经常处于闲置状态。

由于对产品不了解,操作者在加工过程中经常会出现对某个工序拿捏不准,犹豫不决。

鉴于机床本身的条件,建议以后尽可能进行一次装夹、高精度、连续多工序加工。另外不得进行粗加工,必须在小余量的情况在加工中心上进行。

三、四、

第三篇:加工中心操作与编程考卷

加工中心操作与编程考卷

姓名:分数:

是非题

1(×)当数控加工程序编制完成后即可进行正式加工。

2(×)数控机床是在普通机床的基础上将普通电气装置更换成CNC 控制装置。

3(√)圆弧插补中,对于整圆,其起点和终点相重合,用R 编程无法定义,所以只能用圆心坐标编程。

4(√)插补运动的实际插补轨迹始终不可能与理想轨迹完全相同。

5(×)数控机床编程有绝对值和增量值编程,使用时不能将它们放在同一程序段中。

6(√)G 代码可以分为模态G 代码和非模态G 代码。

7(×)G00 G01 指令都能使机床坐标轴准确到位,因此它们都是插补指令。8(√)圆弧插补用半径编程时,当圆弧所对应的圆心角大于180°时半径取负值。

9(×)不同的数控机床可能选用不同的数控系统,但数控加工程序指令都是相同的。

10(×)数控机床按控制系统的特点可分为开环、闭环和半闭环系统。11(√)在开环和半闭环数控机床上,定位精度主要取决于进给丝杠的精度。12(×)点位控制系统不仅要控制从一点到另一点的准确定位,还要控制从一点到另一点的路径。

13(√)常用的位移执行机构有步进电机、直流伺服电机和交流伺服电机。14(√)通常在命名或编程时,不论何种机床,都一律假定工件静止刀具移动。

15(×)数控机床适用于单品种,大批量的生产。

16(×)一个主程序中只能有一个子程序。

18(√)程序段的顺序号,根据数控系统的不同,在某些系统中可以省略的。19(×)绝对编程和增量编程不能在同一程序中混合使用。

20(×)数控机床在输入程序时,不论何种系统座标值不论是整数和小数都不必加入小数点。

21(√)RS232 主要作用是用于程序的自动输入。

22(√)非模态指令只能在本程序段内有效。

第四篇:编程小结

编程小结

(一)一.累加:加数1+加数2+加数3+„„+加数n(n个加数相加)假设我们用i表示我们的加数数目,例如:当i=9时,就表示加数9 模版:int i,sum=0;(注意:如果是分数或者小数sum就是float类型)

for(i=1;i<=n;i++)(注意:循环变量的初值和递变规律,也有

可能是i--,或者i+=2等等){通项a;(通项:用一个通用的式子表示所有的加数)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的值,所以这里不需要通项这一行了,因此整个大括号中间就只有一句话,所以大括号可以省略,再分析,再分析我们发现每个加数都是偶数,那么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的值,所以这里不需要通项这一行了,因此整个大括号中间就只有一句话,所以大括号可以省略,再分析,再分析我们发现每个加数都是奇数,那么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);因为加数的第一项是1,所以赋初值的时候j=1,然后加数进行变化,变成5加到sum里面,所以这里要将通项和求和这两句话互换位置。

5、求1+4+9+16+„„的前100项的和

分析可知:每个加数就是对应的加数数目的平方,则通项为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项的和。

分析可知每一个加数本身又是一个累加的式子,进一步观察可以发现,每个累加的式子都是加到这个加数所在的加数数目,即第35个加数就是1+2+3„„+35,并且是在前面一个加数的基础上加上这个加数所在的加数数目,也就是说第36个加数就是在前一个加数的基础上加上36,即:1+2+3„„+35+36。假设第k个加数是j,那么第k+1个加数就可以表示为j+(k+1),然后第k+2个加数就是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项的和。

分析可知从第三个加数开始,每一个加数是其前两个加数之和,假设第k个加数是m,第k+1个加数是n,然后第k+2个加数就是m+n,那么我们的通项就可以表示为a=m+n,但是要注意每次加数所对应的m和n不一样,所以我们要在求出每个加数之后,找出其对应的m和n;再分析我们可以发现当前的n是下一次的m,当前的加数a是下一次的n,假设接着上面的推导,那么第k+3个加数就是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 分析可知每一个加数就是我们的加数数目的倒数,则通项a就是1/i,我们说循环变量i一般定义为整型,那么1/i的结果就是整型,这样的话小数点后面的就会被省略,所以正确的应该写为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项的和。

分析可从第三个加数开始观察,每一个加数的分母是其前一个加数的分子和分母之和,每一个加数的分子是其前一个加数的分母。可以将第一个加数看成1/1,那么第二个加数也符合我们的规律,只有第一个不符合,那么我们可以先将第一个加数加到sum,然后再变下一个加数,但是要注意每次加数所对应的分子和分母不一样,所以我们要在求出每个加数之后,找出下一个加数所对应的分子和分母。设通项表示为a=m/n, 那么下一个加数是n/(m+n),然后下下一个加数就是(m+n)/(m+n+n);再分析我们可以发现当前的分子和分母之和(m+n)是下一次的分母n,当前的分母n是下一次的分子m,注意这里在做数据交换的时候需要中间变量,对应我们的通项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);

二.累乘:乘数1*乘数2*乘数3*„„*乘数n(n个乘数相乘)假设我们用i表示我们的乘数数目,例如:当i=9时,就表示乘数9 模版:int i,sum=1;(注意:如果是分数或者小数sum就是float类型)

for(i=1;i<=n;i++)(注意:循环变量的初值和递变规律,也有

可能是i--,或者i+=2等等){通项a;(通项:用一个通用的式子表示所有的乘数)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的值,所以这里不需要通项这一行了,因此整个大括号中间就只有一句话,所以大括号可以省略,再分析,再分析我们发现每个乘数都是偶数,那么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的值,所以这里不需要通项这一行了,因此整个大括号中间就只有一句话,所以大括号可以省略,再分析,再分析我们发现每个乘数都是奇数,那么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,则程序为: 分析:因为乘数的第一项是1,所以赋初值的时候j=1,然后乘数进行变化,变成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项的积

分析可知:每个乘数就是对应的乘数数目的平方,则通项为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项的积。分析可知每一个乘数本身又是一个累乘的式子,进一步观察可以发现,每个累乘的式子都是乘到这个乘数所在的乘数数目,即第35个乘数就是1*2*3„„*35,并且是在前面一个乘数的基础上乘上这个乘数所在的乘数数目,也就是说第36个乘数就是在前一个乘数的基础上乘上36,即:1*2*3„„*35*36。假设第k个乘数是j,那么第k+1个乘数就可以表示为j*(k+1),然后第k+2个乘数就是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项的积。

分析可知从第三个乘数开始,每一个乘数是其前两个乘数之和,假设第k个乘数是m,第k+1个乘数是n,然后第k+2个乘数就是m+n,那么我们的通项就可以表示为a=m+n,但是要注意每次乘数所对应的m和n不一样,所以我们要在求出每个乘数之后,找出其对应的m和n;再分析我们可以发现当前的n是下一次的m,当前的乘数a是下一次的n,假设接着上面的推导,那么第k+3个乘数就是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 分析可知每一个乘数就是我们的乘数数目的倒数,则通项a就是1/i,我们说循环变量i一般定义为整型,那么1/i的结果就是整型,这样的话小数点后面的就会被省略,所以正确的应该写为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项的积。

分析可从第三个乘数开始观察,每一个乘数的分母是其前一个乘数的分子和分母之和,每一个乘数的分子是其前一个乘数的分母。可以将第一个乘数看成1/1,那么第二个乘数也符合我们的规律,只有第一个不符合,那么我们可以先将第一个乘数乘到sum,然后再变下一个乘数,但是要注意每次乘数所对应的分子和分母不一样,所以我们要在求出每个乘数之后,找出下一个乘数所对应的分子和分母。设通项表示为a=m/n, 那么下一个乘数是n/(m+n),然后下下一个乘数就是(m+n)/(m+n+n);再分析我们可以发现当前的分子和分母之和(m+n)是下一次的分母n,当前的分母n是下一次的分子m,注意这里在做数据交换的时候需要中间变量,对应我们的通项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项的和。

分析可知每一个加数本身是一个累乘的式子,进一步观察可以发现,每个累乘的式子都是乘到这个乘数所在的乘数数目,即第35个乘数就是1*2*3„„*35,并且是在前面一个乘数的基础上乘上这个乘数所在的乘数数目,也就是说第36个乘数就是在前一个乘数的基础上乘上36,即:1*2*3„„*35*36。假设第k个乘数是j,那么第k+1个乘数就可以表示为j*(k+1),然后第k+2个乘数就是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项的积。

分析可知每一个乘数本身又是一个累加的式子,进一步观察可以发现,每个累加的式子都是加到这个乘数所在的乘数数目,即第35个乘数就是1+2+3„„+35,并且是在前面一个乘数的基础上加上这个乘数所在的乘数数目,也就是说第36个乘数就是在前一个乘数的基础上加上36,即:1+2+3„„+35+36。假设第k个乘数是j,那么第k+1个乘数就可以表示为j+(k+1),然后第k+2个乘数就是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);

三.最大值和最小值:数字0,数字1,数字2,„„数字n-1(一共n个数字)假设我们用i表示我们的数字所在的位置,并且第一个位置是0,例如:当i=9时,就表示这个数字在第10个位子

模版: int i,max,a[n];(注意:如果是分数或者小数max和a[n]就是float

类型,注意这里定义的时候根据题目所给的具体数字把n换掉,千万不可以写a[n]o哦~~~~)

for(i=0;i

了数字,就在定义的时候直接赋值,这个循环就不需要了;如果要求产生给数组赋a到b之间的随机数,那么就用a[i]= a + rand()%(b-a);这句话代替这句。注意如果是float类型就是%f)max=a[0];for(i=0;i”)max=a[i];} printf(“%d”, max);(注意:如果是float类型就是%f)

1、求20个数字的最大值和最小值,要求赋1到100之间的随机数,并且输出它们及其下标。

分析:因为这里还要输出其下标,所以还有定义一个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矩阵的最大值和最小值,要求赋值随机数,并且输出它们及其下标。分析:虽然这是一个二维的数组,但是其思路仍然和一维数组的一样,区别只是这里需要用嵌套循环。要求还要输出其下标,二维数组的下标是两个,所以还要定义一个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矩阵的每一行最大值和最小值,要求赋值随机数,并且输出它们及其下标。

分析:虽然这是一个二维的数组,但是要求的是每一行的最大最小值,我们知道二维数组的每一行本身就是一个数组,那么我们就还需要一个控制行数的循环。要求还要输出其下标,二维数组的下标是两个,每一行的最大最小值其行号不就是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++)(这个循环是控制行的,里面的循环体本身就是一个求

一维数组的最大最小值的程序)

{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矩阵的每一列最大值和最小值,要求赋值随机数,并且输出它们及其下标。

分析:虽然这是一个二维的数组,但是要求的是每一列的最大最小值,二维数组的每一列可以看成一个数组,那么我们就还需要一个控制列数的循环。要求还要输出其下标,二维数组的下标是两个,每一列的最大最小值其列号不就是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++)(这个循环是控制列的,里面的循环体本身就是一个求

一维数组的最大最小值的程序){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个数字排序,首先要把5个数字放到一个一维的数组里面去 所以编程的前几句为:int a[5]

for(i=0;i<5;i++)scanf(“%d”,&a*i+);

那接下来就是排序了,为了方便理解就将数组实际化:比如 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]比较)当后面的成员只要发现比a[0]小的就与他的位置交换 这部做完之后数组就应 该是这个样子:

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]比较)当后面的成员只要发现比a[1]小的就与他的位置交换 这部做完之后数 组该是这个样子:这个时候的a1不是我们赋初值时候的a1老就是我们改变后的数组所以这个时候的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]比较)当后面的成员只要发现比a[2]小的就与他的位置交换 这部做完之后数组就应 该是这个样子:

a[0]

a[1]

a[2]

a[3]

a[4] 4,用a[3]与后面的(a[4]~a[4]里面的每一个成员比较即是说: a[3]~a[4]比较)当后面的成员只要发现比a[2]小的就与他的位置交换 这部做完之后数组就应 该是这个样子:

a[0]

a[1]

a[2]

a[3]

a[4] 循环就是 写成这个样子的哦:

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)if(a[i]

{c=a[i];a[i]=a[j];a[j]=c;}(这个复合语句表示交换a[i]与a[j]进行交换)你把这个 循环好好的分析一下,当i=0 j可以取(1 2 3 4)那if是不是就是a0跟a1—a4之间的所有进行比较并且交换。其他的以此类推。

最后是不是要对排好序的数组进行输出:

for(i=0;i<5;i++)printf(“%d”,a*i+);

6、排序(选择法)比如说 对于5个数字排序,首先要把5个数字放到一个一维的数组里面去 所以编程的前几句为:int a[5]

for(i=0;i<5;i++)scanf(“%d”,&a*i+);

那接下来就是排序了,为了方便理解就将数组实际化:比如 a[5]里面放着{7,9,0,12,3}那画图出来就是

a[5]

a[0]

a[1]

a[2]

a[3]

a[4] 那我们排序的方法是这样的采用这样几步:

1,先把a[0]的下标储存起来,即赋值给k,然后用a[0]与后面的比较

(a[1]~a[4]里面的每一个成员比较即是说:a[0]~a[1]比较 a[0]~a[2]比较 a[0]~a[3]比较 a[0]~a[4]比较)当后面的成员只要发现比a[0]小的就把他的下标赋值给k,最后将a[0]和a[k]的位置交换,这步做完之后数组就应该是这个样子:

a[0]

a[1]

a[2]

a[3]

a[4] 2,先把a[1]的下标储存起来,即赋值给k,然后用a[1]与后面的比较

(a[2]~a[4]里面的每一个成员比较即是说: a[1]~a[2]比较 a[1]~a[3]比较 a[1]~a[4]比较)当后面的成员只要发现比a[1]小的就把他的下标赋值给k,最后将a[1]和a[k]的位置交换 这步做完之后数组就应该是这个样子:

a[0]

a[1]

a[2]

a[3]

a[4] 3,先把a[2]的下标储存起来,即赋值给k,然后用a[2]与后面的比较

(a[3]~a[4]里面的每一个成员比较即是说:a[2]~a[3]比较 a[2]~a[4]比较)当后面的成员只要发现比a[2]小的就把他的下标赋值给k,最后将a[2]和a[k]的位置交换 这步做完之后数组就应该是这个样子:

a[0]

a[1]

a[2]

a[3]

a[4]

4,先把a[3]的下标储存起来,即赋值给k,然后用a[3]与后面的比较(a[4]里面的每一个成员比较即是说: a[3]~a[4]比较)当后面的成员只要发现比a[3]小的就把他的下标赋值给k,最后将a[3]和a[k]的位置交换 这步做完之后数组就应该是这个样子:

a[0]

a[1]

a[2]

a[3]

a[4]

循环就是 写成这个样子的哦:

for(i=0;i<4;i++)

{k=i;for(j=i+1;j<5;j++)

if(a[i]

k=j;if(k!=i)

{c=a[i];a[i]=a[j];a[j]=c;} }(这个复合语句表示交换a[i]与a[j]进行交换)把这个循环好好的分析一下,当i=0, j可以取(1 2 3 4)那if是不是就是a0跟a1—a4之间的所有进行比较并且交换。其他的以此类推。

最后是不是要对排好序的数组进行输出:

for(i=0;i<5;i++)printf(“%d”,a*i+);

四.寻找特殊的数字或解应用题:输出a到b之间的所有的具有某个特点的数字 模版: int n,a,b;(注意:如果是分数或者小数a和b就是float类型)

scanf(“%d,%d”,&a,&b);(从键盘输入查找的范围;如果题目已经给

了范围,就在循环的时候直接带值,这句话就不需要了。注意如果是float类型就是%f。注意如果运行程序,在输入数据验证的时候注意格式要匹配)for(n=a;n<=b;n++)(如果题目已经给了具体的范围,那么这里就根

据题目把a和b换掉){if(条件)(注意:这句话是这类题目的核心,有时候也许不是一

句话,这句话放在这的意思是判定是否是特殊数字)printf(“%d”, n);(注意:如果是float类型就是%f)}

1、输出3到1000之间的所有素数

分析:在做本题之前,先要搞明白什么是素数,它又是如何判定的。补充:

素数 又叫质数,如果一个数只能被1和它本身整除,那么我们就说它是素数。分析:既然一个素数只可以被1和它本身整除,那么当我们判断一个数n是不是素数的时候,就用这个数去除2到(n-1),一旦我们发现可以整除这个区间的某一个数,那么我们就不再去除别的数了,因为在2到(n-1)这个范围内,n可以整除其中的某一个数,那么就肯定不是素数。这个过程需要一个循环和停止循环的break来实现。继续分析,当我们在2到(n-1)这个范围内找不到n可以整除的数,那么就说明这个数是素数,那么我们就判断上面的循环时候做完了,如果中间就跳出循环,则说明不是素数,反之,如果做完了,那么就是素数。P判断能否整除,就是求余看是否为0,则程序如下:

int n;(n是要判断的数,具体根据题意赋值或从键盘输入)for(i=2;i=n)(也可以填i==n,因为如果上面的循环做完了,那么循环变量i=n)printf(“%d is a primenumber!n”,n);else printf(“%d is not a primenumber!n”,n);(这个if„else结构是判断

上面的循环有没有做完)本题分析:只要用上面的程序替换掉模版的那个if就可以了,注意这里不再需要else了,因为题目只要求输出素数,输出语句也只需要一句,则程序如下: int n,i;for(n=3;n<=1000;n++){ for(i=2;i=n)printf(“%d is a primenumber!n”,n);}

2、输出1到100之间的所有同构数

分析:在做本题之前,先要搞明白什么是同构数,它又是如何判定的。补充:

同构数 如果一个数出现在自己的平方数的右边,那么我们就说它是同构数。分析:既然一个同构数会出现在它自己的平方数的右边,那么当我们判断一个数n是不是同构数的时候,先要做的就是求出这个数的平方,然后该怎么判断是不是出现在右边呢?我们人有眼睛,可以直接看,但是电脑不长眼睛的,它看不到,它只能分析,那么它怎么分析呢?1到100之间的所有数只有一位或者两位,那么我们在取平方数右边的时候,只要取这个平方数的最右边的一位或者两位,与我们的数进行比较,看是否一样,如果一样就是同构数,反之就不是。怎么取一个数的最右边一位或者两位呢?求余!!一个数对10求余就是取它的最右边一位,也就是个位;如果对100求余就是取它的最右边两位,也就是十位和个位。则程序如下:

int n;(n是要判断的数,具体根据题意赋值或从键盘输入)if(n*n%10==n|| n*n %100==n)printf(“%d is a isomorphic number!n”,n);本题分析:直接带模版,则程序如下: int n;for(n=1;n<=100;n++){ if(n*n%10==n|| n*n %100==n)printf(“%d is a isomorphic number!n”,n);}(这里的大括号实际是可以去掉的,不去掉也没有关系)

3、输出1到1000之间的所有回文数

分析:在做本题之前,先要搞明白什么是回文数,它又是如何判定的。补充:

回文数 如果一个数字正读和倒读一样,那么这个数字就是回文数。例如:98789, 这个数字正读是98789,倒读也是98789,所以这个数字就是回文数。

分析:既然一个回文数正读和倒读一样,也就是它的最高位和最低位一样,它的次高位和次低位一样,那么当我们判断一个数n是不是回文数的时候,先要确定这个数有几位,才可以确定谁与谁进行比较,然后确定这个数每一位都是谁。1到1000之间的数,除了1000其余最多三位数,显然1000不是回文数,先不考虑,怎么确定这个数是几位呢?如果它的百位是0,那么肯定不是三位数,如果百位和十位都是0,那么肯定是一位数,我们知道一位数肯定都是回文数;对于一个两位数,只要判断它的个位和十位是不是一样就可以了,如果一样,那么肯定是回文数;对于一个三位数只要判断他的个位和百位就可以了,如果一样就是回文数。求一个最多是三位数的每一位,就是将这个数对10求余得到个位;然后这个数除以10,再对10求余得到十位;最后除以100得到百位。则程序如下: int n;(n是要判断的数,具体根据题意赋值或从键盘输入)if(n>0&&n<10)printf(“%d is a huiwen number!n”,n);else if(n/100==0){if(n/10==n%10)printf(“%d is a huiwen number!n”,n);} else if(n/100==n%10)printf(“%d is a huiwen number!n”,n);本题分析:只要用上面的程序替换掉模版的那个if就可以了,则程序如下: int n;for(n=1;n<=1000;n++){ if(n>0&&n<10)printf(“%d is a huiwen number!n”,n);else if(n/100==0){if(n/10==n%10)printf(“%d is a huiwen number!n”,n);} else if(n/100==n%10)printf(“%d is a huiwen number!n”,n);}

4、输出1到1000之间的所有完数

分析:在做本题之前,先要搞明白什么是完数,它又是如何判定的。补充:

再做完数之前先讲怎么求两个数的最大公约数和最小公倍数。

分析:假设求a和b两个数的最大公约数和最小公倍数,并且a>b,如果a0&&n<10)printf(“%d is a wanshu!n”,n);else if(n/100==0){if(n/10==n%10)printf(“%d is a wanshu!n”,n);} else if(n/100==n%10)printf(“%d is a wanshu!n”,n);本题分析:只要用上面的程序替换掉模版的那个if就可以了,则程序如下: int n;for(n=1;n<=1000;n++){ if(n>0&&n<10)printf(“%d is a wanshu!n”,n);else if(n/100==0){if(n/10==n%10)printf(“%d is a wanshu!n”,n);} else if(n/100==n%10)printf(“%d is a wanshu!n”,n);}

5、输出1到999之间的所有水仙花数

分析:在做本题之前,先要搞明白什么是水仙花数,它又是如何判定的。补充:

水仙花数 如果一个三位数的各个位数字的立方和等于该数字本身,那么这个数就是水仙花数。例如:153,1*1*1+5*5*5+3*3*3=153,所以这个数字就是回文数。分析:既然一个水仙花数的各个位数字的立方和等于该数字本身,那么当我们判断一个数n是不是水仙花数的时候,先要求出各个位数字,然后求其立方和,判断是不是和该数本身一样,如果一样就是水仙花数,否则就不是。求一个三位数的每一位,就是将这个数对10求余得到个位;然后这个数除以10,再对10求余得到十位;最后除以100得到百位。则程序如下:

int n,a,b,c;(n是要判断的数,具体根据题意赋值或从键盘输入)a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c==n)printf(“%d is the shuixianhua number!n”,n);本题分析:只要用上面的程序替换掉模版的那个if就可以了,则程序如下: int n;for(n=1;n<=1000;n++){ a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c==n)printf(“%d is the shuixianhua number!n”,n);}

6、用一张100的钱换100张零钞,假设面额有5元,3元,1/2元三种,问有多少种方法?

分析:这是一道解方程组的题,根据我们的小学知识可以列出方程组,其中有三个未知数,所以应该是三层嵌套循环,再分析题目我们知道1/2的张数只能是偶数张,则程序为: int i,j,k,n;for(i=0;i<=20;i++)for(j=0;j<=33;j++)for(k=0;k<=100;k++)if(5*i+3*j+k/2==100&&i+j+k==100&&k%2==0){ printf(“%d,%d,%dn”,i,j,k);n++;} printf(“There are %d changes!n”,n);

7、爱因斯坦阶梯问题。设有一阶梯,每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨6阶,最后剩5阶;每步跨7阶,正好到阶梯顶。问满足条件的最少阶梯数是多少?

分析:这道题的实质是找满足上述条件的数,而且要最小的,那么我们就写一个循环,循环变量从最小的数开始递增,分析题目我们可知从7开始递增即可(如果不从7,从1开始也是可以的),一旦满足上述条件,循环变量就不需要增加了,输出循环变量即可,所以我们选择while循环结构,当不满足上述条件我们就做循环变量的递增,如果满足就输出,则程序为: int n=7;while(!(n%2==1&&n%3==2&&n%5==4&&n%6==5&&n%7==0)){ n++;} printf(“%dn”,n);

8、求一句英文所含有的单词数。

分析:一句英文里面每个单词之间都用空格隔开,所以我们只要数空格的个数即可,但是注意最后一个单词后面是没有空格的。一句英文肯定要存放在数组中,我们选择简单的一维数组。从字符数组中的第一个元素开始查看,先查看第一个元素,如果不是空格,那就证明是第一个单词,单词个数加一,然后一直做循环,直到遇到空格,就说明这个单词结束了,然后再判断是不是到数组的结尾,如果没有就继续查找,直到数组结束为止,则程序如下: #include #include void main(){char s[100];int i=0,j,num=0;gets(s);j=strlen(s);while(i

}

五.图案:输出n行的具有规律的字符,组成我们所想要的图案。模版: int i,j,k;for(i=0;i

具体对待)for(k;;)printf(“%d”,);(注意:如果是char类型就是%c)}

1、输出下列图案

* *** *****

printf(“ There are %d words.n”,num);******* ********* ******* ***** *** * 分析:这种图案一般我们会将其分为两部分,从最多一行隔开,分为上下两个部分,先输出上面的图案,再输出下面的。通过分析我们可以发现每行既要输出空格,又要输出*,所以循环体里面需要两个循环,循环体里面的循环变量的控制最好和外层的控制行数的循环变量相关联。我们用i控制行数,用j控制每行的空格数,用k控制每行的*数,通过观察我们发现如下规律: i j k 0 4 1 1 3 3 2 2 5 3 1 7 4 0 9 那么,i+j=4,k均为奇数,再分析发现k=2i+1,每行输完还要输出换行,则程序如下: int i,j,k;for(i=0;i<5;i++){ for(j=0;j<4-i;j++)printf(“ ”);for(k=0;k<2*i+1;k++)printf(“*”);printf(“n”);} for(i=0;i<4;i++){ for(j=0;j

2、输出下列图案

A BBB CCCCC DDDDDDD EEEEEEEEE FFFFFFF GGGGG HHH I 分析:这种图案一般我们会将其分为两部分,从最多一行隔开,分为上下两个部分,先输出上面的图案,再输出下面的。通过分析我们可以发现每行既要输出空格,又要输出字母,所以循环体里面需要两个循环,循环体里面的循环变量的控制最好和外层的控制行数的循环变量相关联。我们用i控制行数,用j控制每行的空格数,用k控制每行的字母数,通过观察我们发现如下规律: i j k 0 4 1 1 3 3 2 2 5 3 1 7 4 0 9 那么,i+j=4,k均为奇数,再分析发现k=2i+1。每行的字母相同但是和上下行的不相同,观察发现字母是按照顺序递增的,那么我们就先把字母存放在一个变量里面,然后在输出每行所需的字符之后,改变字母。每行输完还要输出换行,则程序如下: int i,j,k;char c=’A’;for(i=0;i<5;i++){ for(j=0;j<4-i;j++)printf(“ ”);for(k=0;k<2*i+1;k++)printf(“%c”,c);c++;printf(“n”);} for(i=0;i<4;i++){ for(j=0;j

3、输出下列图案 121 12321 1234321 123454321 1234321 12321 121 1 分析:这种图案一般我们会将其分为两部分,从最多一行隔开,分为上下两个部分,先输出上面的图案,再输出下面的。通过分析我们可以发现每行既要输出空格,又要输出数字,所以循环体里面需要两个循环,循环体里面的循环变量的控制最好和外层的控制行数的循环变量相关联。我们用i控制行数,用j控制每行的空格数,用k控制每行的数字数,每行的数字还不相同,观察发现数字是按照顺序递增递减的,那么我们输出数字的循环又要分为两个循环,继续观察我们发现每次输出的数字和循环变量k有关,通过观察我们发现如下规律: i j k 0 4 1 1 3 2 2 2 3 3 1 4 4 0 5 那么,i+j=4,k均为奇数,再分析发现k的递增从1开始到i+1为止,递减是从i开始到1为止。每行输完还要输出换行,则程序如下: int i,j,k;for(i=0;i<5;i++){ for(j=0;j<4-i;j++)printf(“ ”);for(k=1;k<=i+1;k++)printf(“%d”,k);for(k=i;k>0;k--)printf(“%d”,k);printf(“n”);} for(i=0;i<4;i++){ for(j=0;j0;k--)printf(“%d”,k);printf(“n”);}

4、输出九九乘法表

1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 „„ „„

分析:如果用i表示行,j表示列,那么每行输出i个式子,分析发现每个式子可以用j*i表示。每行输完还要输出换行,则程序如下: int i,j;for(i=1;i<10;i++){ for(j=1;j<=i;j++)printf(“%d*%d=%dt”,j,i,j*i);printf(“n”);}

5、输出杨辉三角的前10行 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 7 21 35 35 21 7 1 8 28 56 70 56 28 8 1 9 36 84 126 126 84 36 9 1 分析:如果用i表示行,j表示列,那么每行输出i个数字,分析发现除了两头的数字为1以外,其余的每个数字每个数字等于上一行的左右两个数字之和,所以用二维数组比较简单。每行输完还要输出换行,则程序如下: int a[10][10],i,j;for(i=0;i<10;i++){ for(j=0;j<=i;j++){ if(i==j||j==0)a[i][j]=1;else a[i][j]=a[i-1][j]+a[i-1][j-1];printf(“%dt”,a[i][j]);} printf(“n”);}

五.字符串操作:

1.函数的原型说明为int chrn(char *s,char c);,其功能是测试c在s中出现的次数,编制该函数并用相应的主调函数对其进行测试。#include int chrn(char *s,char c){ int n=0,i;for(i=0;s[i];i++)if(s[i]= =c)n++;return n;} void main(){ int k=0;char a[100],b;gets(a);getchar(b);k=chrn(a,b);printf(“%d”,k);} 2.编写函数void fun(char *s),实现将字符串s逆序存放,例如:“abcd”改为“dcba”,请完成程序,并在主函数中实现调用 #include #include void fun(char *s){ int k,i;char t;k=strlen(s);for(i=0;i #include void mystrcat(char *str1, char *str2){ int i,j;i=strlen(str1);for(j=0;j<=strlen(str2);j++,i++)str1[i]=str2[j];} main(){ int i,j;char a[50],b[50];gets(a);gets(b);mystrcat(a , b);puts(a);} 4.自编函数实现比较字符串大小函数mystrcmp(char *str1,char *str2),要求在主函数中进行验证当str1与str2相等时返回0,当str1大于str2时返回一个正整数,否则返回一个负整数。#include #include int mystrcmp(char *str1,char*str2){ int i=0;while(*(str1+i)= =*str(str2+i))if(*(str1+i++)= =’’)return 0;return *(str1+i)-*(str2+i);} void main(){ char a[100],b[100];int n;gets(a);gets(b);n=mystrcmp(a,b);pirntf(“%d”,n);}

第五篇:信息的编程加工

3.2 信息的编程加工

数学课上,大家学过如何利用“描 点法”手工绘制函数图像。大家还可以 尝试用Word 中的“自选图形”、Excel 中的图表功能以及几何画板工具软件 实现函数图像的绘制。计算机水平较 高的王强则使用VB(Visual Basic)程序 设计语言编写了一个小程序来绘制函 数图像,这样绘制出的图像更平滑、更 美观,如图3-2 所示,并且修改起来也 很方便。图3-2 编程绘制的函数图像

实现信息加工的自动化,我们称之为信息的编程加工。编程加工的初衷是利 用计算机的高速运算能力提高信息加工的效率,超越人工信息加工的局限。②基于大众信息技术工具的人性化信息加工,包括利用字处理软件加工 文本信息,利用电子表格软件加工表格信息,利用多媒体软件加工图像、声 音、视频和动画等多媒体信息等。编程加工不是每一个人都能驾驭的,而大 众信息技术工具的图形用户界面及“所见即所得”的编辑技术等使信息加工 更加易于操作,从而更充分地实现人和计算机的优势互补,提高人机协作 效率。

③基于人工智能技术的智能化信息加工,即信息的智能化加工,是指 利用人工智能技术加工信息。智能化加工所要解决的问题是如何让计算机 更加自主地加工信息、减少人的参与、迚一步提高信息加工的效率和人性 化程度。

当然,这几种加工类型并不是截然分开的,因为信息技术本身就是一个 有机的整体,比如随着人工智能技术的推广应用,大众化信息技术工具也会 越来越多地整合智能化信息加工的功能。

后面各章将逐一介绍所有这些信息加工类型,下面首先介绍信息的编 程加工。

下面通过介绍编程绘制函数图像的例子来说明信息编程加工的过程。通 过本节的学习,你可以:

初识程序代码,初步了解程序执行的主要过程 感受利用计算机程序解决问题的独特魅力

第三章 信息的编程加工和智能化加工

3.2.1 分析问题

如果给定某个函数表达式,如何运用计算机编程的方法来绘制函数图像 呢?

利用数学课中学过的“描点法”手工绘制函数图像的一般过程是: 第一步,准备好绘图工具,如纸、铅笔、直尺等;第二步,绘制坐标 系的横轴与纵轴;第三步,依据要绘制的函数表达式,如y=x2,选择 几个自变量的值算出相应的因变量值,得到一组坐标点,如(-3,9)、(-2,4)、(0,0)、(2,4)、(3,9);第四步,在坐标系上描出这几个点; 最后,尽量光滑地描点违线。

借鉴上述思路,用计算机编程绘制函数图像的过程是:第一步,选择 计算机程序设计语言;第二步,绘制坐标系;第三步,根据函数表达式计 算所要描点的坐标;第四步,在坐标系中描点成像。

3.2.2 认识代码与调试运行

运行VB 6.0,打开光盘中的“绘制函数图像.frm”文件,执行“视 图/代码窗口”命令,在“查看代码”窗口中可以看到下面这段程序代码。执行“运行/ 启动”命令,运行该程序,单击“绘图”按钮就可以看到计 算机很容易地画出图3-2 所示的一元二次函数的图像。

Private Sub Command1_Click()' 确定命令按钮单击事件 Dim x, y As Single ' 定义x,y 两个变量

Picture1.Scale(-10, 25)-(10,-25)' 定义坐标系

Picture1.Line(-10, 0)-(10, 0), RGB(0, 0, 255)' 画横坐标轴,颜色为蓝色 Picture1.Line(0, 25)-(0,-25), RGB(0, 0, 255)' 画纵坐标轴,颜色为蓝色 ' 用循环语句描点画函数图像

For x =-10 To 10 Step 0.0001 'x 值从-10 变化到10,每次增量为0.0001 y = x ^ 2 ' 根据表达式y=x2 来计算y 值

Picture1.PSet(x, y), RGB(255, 0, 0)' 根据x,y 的值用红色描点 Next x ' 取下一个增量后的x 值 End Sub ' 结束事件

(1)认识代码

3.2 信息的编程加工

无论是手工绘制还是编程实现,其本质都是“描点法”。不同的是,手 工绘制时一般只选取5~6个点就画出了函数的图像,所以精度相对较低。而 计算机编程绘图的优势则在于,它能够反复精确地执行相似的运算过程,瞬 时完成大量数据的计算,取的点进多于手工绘图取的点,所以这种方法绘制 的图像更平滑、更美观。

本例中For/Next语句的作用就是让计算机不断计算并取点、持续描点,直至完成。具体地说,就是x 的值从初值-10 开始取值并递增,递增值由 Step 语句觃定,在本例中为0.0001。x 每取一个值就算得一个y 值,确定图 像上的一个点,然后再计算下一组x 和y 的值,确定图像上的另外一个点,直到x 的取值大于终值10 时结束循环。例如,当x 取值-4 时,计算出y 的 值为16,得到点的坐标为(-4,16),计算机用PSet 方法画出该点,然后 x 的值自动增加0.0001 变成-3.9999,再判断-3.9999 有没有超过终值10,没 有则计算新的y 值,再根据新坐标画点,如此反复直至x 的值大于10 时停 止。在此过程中,计算机共画出了20 万个点,保证了函数图像的清晰度。阅读下面的资料,理解这段代码中各语句的功能。

① VB 的算术运算符:VB 中较为常用的算术运算符有+(加)、-(减)、*(乘)、/(除)、^(幂运算)、-(负号)、(整除)等。

② VB 的赋值语句:将“=”右边表达式的值赋给左边的变量或属性名。语法:变量或属性名= 变量或属性的值。

③ Scale 方法:用以定义Form、PictureBox 或Printer 的坐标系统。语法:object.Scale(x1, y1)-(x2, y2)x1, y1 均为单精度值,指示定义object 左上角的水平(x 轴)和垂直(y 轴)坐 标。x2, y2 均为单精度值,指示定义object 右下角的水平和垂直坐标。这些值必须 用括号括起来。

④ Line 方法:用于在对象上画直线或矩形。语法:object.Line(x1,y1)-(x2, y2), [color], [B][F] x1, y1 为直线或矩形的起点坐标,x2, y2 为直线或矩形的终点坐标。

color为可选项,表示画线时用的RGB颜色。如果它被省略,则使用ForeColor 属性值。可用RGB 函数或QBColor 函数指定颜色。B 为可选项,表示利用对角坐标画出矩形。

F 为可选项。如果使用了B 选项,则F 选项觃定矩形以矩形边框的颜色填充。⑤ RGB 函数:用以返回代表RGB 颜色值的整数。语法:RGB(red, green, blue)。

red、green、blue 都为0 到255 之间的整数,分别代表颜色中的红色、绿色、蓝 色成分,任一超过255 的参数都假定为255。⑥ PSet 方法:用以在对象上画出一个点。语法:object.PSet(x,y),[color] object对象指窗体或图片框,缺省时指窗体。默认情况下画出的点的颜色是对 象的前景色,也可以用RGB 函数或QBColor 函数在PSet 方法中指定其他颜色。资料

第三章 信息的编程加工和智能化加工

3~4 人组成一个小组,尝试利用VB编写程序,实现下列信息加工过程,小组 间互相交流心得与体会。

(1)修改绘制一元二次函数y=x2的函数图像的代码,绘制表3-2所示的两种函数 图像,并将修改后的代码填写在右侧单元格中。

(2)调试运行

一般而言,编写代码时难免出现错误,所以在代码编写过程中和编写完 成后都需要不断调试运行,以确保准确无误。

删除代码中倒数第2 行的“Next x”语句,再次运行程序并单击“绘 图”按钮,观察运行结果。

这时系统会弹出错误提示对话框显示“编译错误:For 没有Next”,单击“确定”按钮后,系统跳回到代码窗口等待调试。之所以出现这种 情况,是因为VB 语言同自然语言一样,也有着一定的语法觃范,如果 编写的代码有远反语法的地方,系统就会报错并等待调试。将“Next x”语句输入原位置,尝试将Step 的值调整为0.1,再

次运行程序,仔细观察图像的绘制过程与效果。可以发现,Step 值的大 小变化会影响到画点的个数,从而影响图像的绘制速度和图像质量。删除第2 行至第10 行的语句,对照教科书重新录入,然后调试运行,查看程序的运行结果。通过上述操作,可以对信息的编程加工有一定的体 验和认识。

信息的编程加工一般要经过如下四个步骤:①分析信息,即对要加工的 信息迚行科学地分析,明确其提供的已知条件和需要完成的加工目标;②设 计方法,设计出编程加工的具体方法与步骤;③编写代码,即用某种程序设 计语言编写出计算机能够直接识别的代码;④调试运行,即通过调试和运行 编写好的代码,发现并修改其中的错误直至能够实现目标。

概括地说,信息的编程加工就是利用某种计算机语言,对解决问题的方 法和步骤迚行描述,然后通过调试和修改得到可实现加工目标的程序,最终 解决问题。多数普通计算机用户没有编写代码的经历,直接面对和使用的是 能够实现加工效果的“程序”,即软件,不需要了解程序背后隐藏的代码。比如,人们经常用到的文字、图像、声音、视频处理软件以及动画、网页制 作软件都是“程序”。所以,在使用计算机迚行信息加工时,“编程加工”是 无处不在的。

目前,计算机的运算速度已从最初的每秒5000次提高到几十万亿次,计算机程序设计语言也从最初晦涩难懂的机器语言发展到比较接近自然语 言的高级语言,人们也开始探讨自动化程序设计,所有这些都极大地促迚 了信息的编程加工的应用与发展。相信通过今后的学习,有的同学会对信 息的编程加工产生浓厚的兴趣,并成为未来的“IT 精英”。

3.3 信息的智能化加工

表3-2 修改代码完成函数图像的绘制

函数图像 代码

(2)回忆本章开头间谍007解密的故事,我们可以通过心算或笔算的方法来完成

解密,也可以考虑通过编程加工的方法迚行解密。用VB打开光盘中的“加密解密.frm”文件,运行该程序,尝试分析代码,用自然语言描述其实现的方法。(3)记事本是Windows 中最常用的应用程序之一,它简单易用,是支持用户录 入文本和代码的常用工具。参考光盘中提供的源文件,尝试用VB编写一个简单的 “记事本”,了解更多的VB程序设计知识。图3-3所示是该记事本的“文件”和“编 辑”菜单的子菜单。__

下载[推荐]加工中心编程技巧小结word格式文档
下载[推荐]加工中心编程技巧小结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    数控铣加工中心工艺设计与编程课程大纲

    《数控铣加工中心工艺设计与编程》课程教学大纲课程编号:.课程总学时:40课程学分:2.5课程类别:职业技术课适用专业:数控技术考核方式:考试首选教材:数控铣削编程与加工制定(或修订)单......

    编程小结3

    电脑编程 从例1-1中可以看出C语言的一些书写格式和编程风格,下面将做具体解释。 1.文件包含命令 2.主函数 3.变量的定义 4.格式输入函数 5.格式输出函数 6.注释 C语言程序编写规则......

    编程小结1

    编程 人与人交流使用人类语言,人与计算机交流使用计算机语言。随着计算机技术的发展,计算机语言也逐步得到完善。C语言是当今世界应用最为广泛的程序设计语言。认识C语言有助......

    编程题小结大全

    1011 字符逆序 Description:将一个字符串str的内容颠倒过来,并输出。Str的长度不超过100个字符。 Input:输入包括一行。第一行输入的字符串。 Output:输出转换好的逆序字符串。......

    信息的编程加工和智能化加工

    第三章 信息的编程加工和智能化加工 一、选择题(60分) 1.收集来的信息是初始的、零乱的、孤立的信息,对这些信息进行分类和排序,就是信息(B )。A、发布 B、加工 C、收集D、获取 2.......

    数控加工与编程实验报告

    数控加工与编程实训报告 学院: 专业: 班级: 学号: 姓名: 指导老师: 一、 课程的任务和基本要求 《数控加工与变成实习》是机械设计组织及其自动化专业在专业学习过程中一次重要的......

    信息的编程加工教案

    3.2信息的编程加工 一、教学目标 1、知识目标:了解并尝试编程的主要过程。 2、能力目标:体验程序设计的独特魅力,了解编程加工的内在机制,培养学生的创新能力。 3、情感目标:通过......

    数控编程与加工总结

    《数控编程与加工》课程设计 总结 通过这次数控课程设计,我体会颇深,在这次设计中我做的是铣床,分组的时候是三人一组当拿到题目的时候,组员就开始进行任务分配,对于题目的分析我......