程序編程范文

時間:2023-04-03 19:19:05

導(dǎo)語:如何才能寫好一篇程序編程,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

程序編程

篇1

本課介紹c語言程序設(shè)計的基本方法和基本的程序語句。

從程序流程的角度來看,程序可以分為三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。c語言提供了多種語句來實現(xiàn)這些程序結(jié)構(gòu)。本章介紹這些基本語句及其應(yīng)用,使讀者對c程序有一個初步的認識,為后面各章的學(xué)習(xí)打下基礎(chǔ)。

c程序的語句

c程序的執(zhí)行部分是由語句組成的。程序的功能也是由執(zhí)行語句實現(xiàn)的。

C語句可分為以下五類:

1.表達式語句

2.函數(shù)調(diào)用語句

3.控制語句

4.復(fù)合語句

5.空語句

1.表達式語句

表達式語句由表達式加上分號“;”組成。其一般形式為:表達式;執(zhí)行表達式語句就是計算表達式的值。例如:x=y+z;賦值語句y+z;加法運算語句,但計算結(jié)果不能保留,無實際意義i++;自增1語句,i值增1

2.函數(shù)調(diào)用語句

由函數(shù)名、實際參數(shù)加上分號“;”組成。其一般形式為:函數(shù)名(實際參數(shù)表);執(zhí)行函數(shù)語句就是調(diào)用函數(shù)體并把實際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語句,求取函數(shù)值。(在第五章函數(shù)中再詳細介紹)例如printf("CProgram");調(diào)用庫函數(shù),輸出字符串。

3.控制語句

控制語句用于控制程序的流程,以實現(xiàn)程序的各種結(jié)構(gòu)方式。

它們由特定的語句定義符組成。c語言有九種控制語句。可分成以下三類:

(1)條件判斷語句

if語句,switch語句

(2)循環(huán)執(zhí)行語句

dowhile語句,while語句,for語句

(3)轉(zhuǎn)向語句

break語句,goto語句,continue語句,return語句

4.復(fù)合語句

把多個語句用括號{}括起來組成的一個語句稱復(fù)合語句。在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句,例如

{

x=y+z;

a=b+c;

printf(“%d%d”,x,a);

}

是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“}”外不能加分號。

5.空語句

只有分號“;”組成的語句稱為空語句??照Z句是什么也不執(zhí)行的語句。在程序中空語句可用來作空循環(huán)體。例如while(getchar()!=''''\n'''');本語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環(huán)體為空語句。

賦值語句

賦值語句是由賦值表達式再加上分號構(gòu)成的表達式語句。其一般形式為:變量=表達式;賦值語句的功能和特點都與賦值表達式相同。它是程序中使用最多的語句之一。在賦值語句的使用中需要注意以下幾點:

1.由于在賦值符“=”右邊的表達式也可以又是一個賦值表達式,因此,下述形式變量=(變量=表達式);是成立的,從而形成嵌套的情形。其展開之后的一般形式為:變量=變量=…=表達式;

例如:

a=b=c=d=e=5;按照賦值運算符的右接合性,因此實際上等效于:

e=5;

d=e;

c=d;

b=c;

a=b;

2.注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結(jié)尾。

3.在變量說明中,不允許連續(xù)給多個變量賦初值。如下述說明是錯誤的:inta=b=c=5必須寫為inta=5,b=5,c=5;而賦值語句允許連續(xù)賦值

4.注意賦值表達式和賦值語句的區(qū)別。賦值表達式是一種表達式,它可以出現(xiàn)在任何允許表達式出現(xiàn)的地方,而賦值語句則不能。

下述語句是合法的:if((x=y+5)>0)z=x;語句的功能是,若表達式x=y+5大于0則z=x。下述語句是非法的:if((x=y+5;)>0)z=x;因為=y+5;是語句,不能出現(xiàn)在表達式中。

數(shù)據(jù)輸出語句

本小節(jié)介紹的是向標準輸出設(shè)備顯示器輸出數(shù)據(jù)的語句。在c語言中,所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的。因此都是函數(shù)語句。本小節(jié)先介紹printf函數(shù)和putchar函數(shù)。printf函數(shù)printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個字母f即為“格式”(format)之意。其功能是按用戶指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個函數(shù)。

一、printf函數(shù)調(diào)用的一般形式

printf函數(shù)是一個標準庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個特例,不要求在使用printf函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。如“%d”表示按十進制整型輸出,“%ld”表示按十進制長整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。

非格式字符串在輸出時原樣照印,在顯示中起提示作用。輸出表列中給出了各個輸出項,要求格式字符串和各輸出項在數(shù)量和類型上應(yīng)該一一對應(yīng)。

voidmain()

{

inta=88,b=89;

printf("%d%d\n",a,b);

printf("%d,%d\n",a,b);

printf("%c,%c\n",a,b);

printf("a=%d,b=%d",a,b);

}

a<--8,b<--89

printf("%d%d\n",a,b);

printf("%d,%d\n",a,b);

printf("%c,%c\n",a,b);

printf("a=%d,b=%d",a,b);

本例中四次輸出了a,b的值,但由于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出語句格式控制串中,兩格式串%d之間加了一個空格(非格式字符),所以輸出的a,b值之間有一個空格。第五行的printf語句格式控制串中加入的是非格式字符逗號,因此輸出的a,b值之間加了一個逗號。第六行的格式串要求按字符型輸出a,b值。第七行中為了提示輸出結(jié)果又增加了非格式字符串。

二、格式字符串

在TurboC中格式字符串的一般形式為:[標志][輸出最小寬度][.精度][長度]類型其中方括號[]中的項為可選項。各項的意義介紹如下:

1.類型類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義下表所示:

表示輸出類型的格式字符格式字符意義

d以十進制形式輸出帶符號整數(shù)(正數(shù)不輸出符號)

o以八進制形式輸出無符號整數(shù)(不輸出前綴O)

x以十六進制形式輸出無符號整數(shù)(不輸出前綴OX)

u以十進制形式輸出無符號整數(shù)

f以小數(shù)形式輸出單、雙精度實數(shù)

e以指數(shù)形式輸出單、雙精度實數(shù)

g以%f%e中較短的輸出寬度輸出單、雙精度實數(shù)

c輸出單個字符

s輸出字符串

2.標志

標志字符為-、+、#、空格四種,其意義下表所示:

標志格式字符標志意義

-結(jié)果左對齊,右邊填空格

+輸出符號(正號或負號)空格輸出值為正時冠以空格,為負時冠以負號

#對c,s,d,u類無影響;對o類,在輸出時加前

綴o對x類,在輸出時加前綴0x;對e,g,f類當(dāng)結(jié)果有小數(shù)時才給出小數(shù)點

3.輸出最小寬度

用十進制整數(shù)來表示輸出的最少位數(shù)。若實際位數(shù)多于定義的寬度,則按實際位數(shù)輸出,若實際位數(shù)少于定義的寬度則補以空格或0。

4.精度

精度格式符以“.”開頭,后跟十進制整數(shù)。本項的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個數(shù);若實際位數(shù)大于所定義的精度數(shù),則截去超過的部分。

5.長度

長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。

voidmain(){

inta=15;

floatb=138.3576278;

doublec=35648256.3645687;

chard=''''p'''';

printf("a=%d,%5d,%o,%x\n",a,a,a,a);

printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);

printf("c=%lf,%f,%8.4lf\n",c,c,c);

printf("d=%c,%8c\n",d,d);

}a<--15

b<--138.3576278

c<--35648256.3645687

d<--''''p''''main()

{

inta=29;

floatb=1243.2341;

doublec=24212345.24232;

charc=''''h''''

printf("a=%d,%5d,%o,%x\n",a,a,a,a);

printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);

printf("c=%lf,%f,%8.4lf\n",c,c,c);

printf("d=%c,%8c\n",d,d);

}

本例第七行中以四種格式輸出整型變量a的值,其中“%5d”要求輸出寬度為5,而a值為15只有兩位故補三個空格。第八行中以四種格式輸出實型量b的值。其中“%f”和“%lf”格式的輸出相同,說明“l(fā)”符對“f”類型無影響?!?5.4lf”指定輸出寬度為5,精度為4,由于實際長度超過5故應(yīng)該按實際位數(shù)輸出,小數(shù)位數(shù)超過4位部分被截去。第九行輸出雙精度實數(shù),“%8.4lf”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符量d,其中“%bc”指定輸出寬度為8故在輸出字符p之前補加7個空格。

使用printf函數(shù)時還要注意一個問題,那就是輸出表列中的求值順序。不同的編譯系統(tǒng)不一定相同,可以從左到右,也可從右到左。TurboC是按從右到左進行的。如把例2.13改寫如下述形式:

voidmain(){

inti=8;

printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);

}i<--8

這個程序與例2.13相比只是把多個printf語句改一個printf語句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會不同呢?就是因為printf函數(shù)對輸出表中各量求值的順序是自右至左進行的。在式中,先對最后一項“-i--”求值,結(jié)果為-8,然后i自減1后為7。再對“-i++”項求值得-7,然后i自增1后為8。再對“i--”項求值得8,然后i再自減1后為7。再求“i++”項得7,然后I再自增1后為8。再求“--i”項,i先自減1后輸出,輸出值為7。最后才求輸出表列中的第一項“++i”,此時i自增1后輸出8。但是必須注意,求值順序雖是自右至左,但是輸出順序還是從左至右,因此得到的結(jié)果是上述輸出結(jié)果。

字符輸出函數(shù)

putchar函數(shù)

putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個字符。其一般形式為:putchar(字符變量)例如:

putchar(''''A'''');輸出大寫字母A

putchar(x);輸出字符變量x的值

putchar(''''\n'''');換行對控制字符則執(zhí)行控制功能,不在屏幕上顯示。使用本函數(shù)前必須要用文件包含命令:

#include<stdio.h>

#include<stdio.h>

voidmain(){

chara=''''B'''',b=''''o'''',c=''''k'''';

putchar(a);putchar(b);putchar(b);putchar(c);putchar(''''\t'''');

putchar(a);putchar(b);

putchar(''''\n'''');

putchar(b);putchar(c);

}

數(shù)據(jù)輸入語句

c語言的數(shù)據(jù)輸入也是由函數(shù)語句完成的。本節(jié)介紹從標準輸入設(shè)備—鍵盤上輸入數(shù)據(jù)的函數(shù)scanf和getchar。scanf函數(shù)scanf函數(shù)稱為格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。

一、scanf函數(shù)的一般形式

scanf函數(shù)是一個標準庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,c語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf函數(shù)的一般形式為:scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表列中給出各變量的地址。地址是由地址運算符“&”后跟變量名組成的。例如,&a,&b分別表示變量a和變量b的地址。這個地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在c語言中,使用了地址這個概念,這是與其它語言不同的。應(yīng)該把變量的值和變量的地址這兩個不同的概念區(qū)別開來。變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。變量的地址和變量值的關(guān)系如下:&a--->a567a為變量名,567是變量的值,&a是變量a的地址。在賦值表達式中給變量賦值,如:a=567在賦值號左邊是變量名,不能寫地址,而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。這兩者在形式上是不同的。&是一個取地址運算符,&a是一個表達式,其功能是求變量的地址。

voidmain(){

inta,b,c;

printf("inputa,b,c\n");

scanf("%d%d%d",&a,&b,&c);

printf("a=%d,b=%d,c=%d",a,b,c);

}

注意&的用法!

在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請用戶輸入a、b、c的值。執(zhí)行scanf語句,則退出TC屏幕進入用戶屏幕等待用戶輸入。用戶輸入7、8、9后按下回車鍵,此時,系統(tǒng)又將返回TC屏幕。在scanf語句的格式串中由于沒有非格式字符在“%d%d%d”之間作輸入時的間隔,因此在輸入時要用一個以上的空格或回車鍵作為每兩個輸入數(shù)之間的間隔。

如:789

7

8

9

格式字符串

格式字符串的一般形式為:%[*][輸入數(shù)據(jù)寬度][長度]類型其中有方括號[]的項為任選項。各項的意義如下:

1.類型

表示輸入數(shù)據(jù)的類型,其格式符和意義下表所示。

格式字符意義

d輸入十進制整數(shù)

o輸入八進制整數(shù)

x輸入十六進制整數(shù)

u輸入無符號十進制整數(shù)

f或e輸入實型數(shù)(用小數(shù)形式或指數(shù)形式)

c輸入單個字符

s輸入字符串

2.“*”符

用以表示該輸入項讀入后不賦予相應(yīng)的變量,即跳過該輸入值。如scanf("%d%*d%d",&a,&b);當(dāng)輸入為:123時,把1賦予a,2被跳過,3賦予b。

3.寬度

用十進制整數(shù)指定輸入的寬度(即字符數(shù))。例如:scanf("%5d",&a);

輸入:

12345678

只把12345賦予變量a,其余部分被截去。又如:scanf("%4d%4d",&a,&b);

輸入:

12345678將把1234賦予a,而把5678賦予b。

4.長度

長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld)和雙精度浮點數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。

使用scanf函數(shù)還必須注意以下幾點:

a.scanf函數(shù)中沒有精度控制,如:scanf("%5.2f",&a);是非法的。不能企圖用此語句輸入小數(shù)為2位的實數(shù)。

b.scanf中要求給出變量地址,如給出變量名則會出錯。如scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);才是合法的。

c.在輸入多個數(shù)值數(shù)據(jù)時,若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對“%d”輸入“12A”時,A即為非法數(shù)據(jù))時即認為該數(shù)據(jù)結(jié)束。

d.在輸入字符數(shù)據(jù)時,若格式控制串中無非格式字符,則認為所有輸入的字符均為有效字符。例如:

scanf("%c%c%c",&a,&b,&c);

輸入為:

def

則把''''d''''賦予a,''''f''''賦予b,''''e''''賦予c。只有當(dāng)輸入為:

def

時,才能把''''d''''賦于a,''''e''''賦予b,''''f''''賦予c。如果在格式控制中加入空格作為間隔,如scanf("%c%c%c",&a,&b,&c);則輸入時各數(shù)據(jù)之間可加空格。

voidmain(){

chara,b;

printf("inputcharactera,b\n");

scanf("%c%c",&a,&b);

printf("%c%c\n",a,b);

}

scanf("''''C14F14%c%c",&a,&b);

printf("%c%c\n",a,b);由于scanf函數(shù)"%c%c"中沒有空格,輸入MN,結(jié)果輸出只有M。

而輸入改為MN時則可輸出MN兩字符,見下面的輸入運行情況:inputcharactera,b

MN

MN

voidmain(){

chara,b;

printf("inputcharactera,b\n");

scanf("%c%c",&a,&b);

printf("\n%c%c\n",a,b);

}

scanf("%c%c",&a,&b);本例表示scanf格式控制串"%c%c"之間有空格時,輸入的數(shù)據(jù)之間可以有空格間隔。e.如果格式控制串中有非格式字符則輸入時也要輸入該非格式字符。

例如:

scanf("%d,%d,%d",&a,&b,&c);其中用非格式符“,”作間隔符,故輸入時應(yīng)為:5,6,7

又如:scanf("a=%d,b=%d,c=%d",&a,&b,&c);

則輸入應(yīng)為

a=5,b=6,c=7g.如輸入的數(shù)據(jù)與輸出的類型不一致時,雖然編譯能夠通過,但結(jié)果將不正確。

voidmain(){

inta;

printf("inputanumber\n");

scanf("%d",&a);

printf("%ld",a);

}

由于輸入數(shù)據(jù)類型為整型,而輸出語句的格式串中說明為長整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。如改動程序如下:

voidmain(){

longa;

printf("inputalonginteger\n");

scanf("%ld",&a);

printf("%ld",a);

}

運行結(jié)果為:

inputalonginteger

1234567890

1234567890當(dāng)輸入數(shù)據(jù)改為長整型后,輸入輸出數(shù)據(jù)相等。

鍵盤輸入函數(shù)

getchar函數(shù)getchar函數(shù)的功能是從鍵盤上輸入一個字符。其一般形式為:getchar();通常把輸入的字符賦予一個字符變量,構(gòu)成賦值語句,如:

charc;

c=getchar();#include<stdio.h>

voidmain(){

charc;

printf("inputacharacter\n");

c=getchar();

putchar(c);

}

使用getchar函數(shù)還應(yīng)注意幾個問題:

1.getchar函數(shù)只能接受單個字符,輸入數(shù)字也按字符處理。輸入多于一個字符時,只接收第一個字符。

2.使用本函數(shù)前必須包含文件“stdio.h”。

3.在TC屏幕下運行含本函數(shù)程序時,將退出TC屏幕進入用戶屏幕等待用戶輸入。輸入完畢再返回TC屏幕。

voidmain(){

chara,b,c;

printf("inputcharactera,b,c\n");

scanf("%c%c%c",&a,&b,&c);

printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);

}

輸入三個小寫字母

輸出其ASCII碼和對應(yīng)的大寫字母。

voidmain(){

inta;

longb;

floatf;

doubled;

charc;

printf("%d,%d,%d,%d,%d",sizeof(a),sizeof(b),sizeof(f)

,sizeof(d),sizeof(c));

}

輸出各種數(shù)據(jù)類型的字節(jié)長度。

分支結(jié)構(gòu)程序

關(guān)系運算符和表達式

在程序中經(jīng)常需要比較兩個量的大小關(guān)系,以決定程序下一步的工作。比較兩個量的運算符稱為關(guān)系運算符。在c語言中有以下關(guān)系運算符:

<小于

<=小于或等于

>大于

>=大于或等于

==等于

!=不等于

關(guān)系運算符都是雙目運算符,其結(jié)合性均為左結(jié)合。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。在六個關(guān)系運算符中,<,<=,>,>=的優(yōu)先級相同,高于==和!=,==和!=的優(yōu)先級相同。

關(guān)系表達式

關(guān)系表達式的一般形式為:表達式關(guān)系運算符表達式例如:a+b>c-d,x>3/2,''''a''''+1<c,-i-5*j==k+1;都是合法的關(guān)系表達式。由于表達式也可以又是關(guān)系表達式。因此也允許出現(xiàn)嵌套的情況,例如:a>(b>c),a!=(c==d)等。關(guān)系表達式的值是“真”和“假”,用“1”和“0”表示。

如:5>0的值為“真”,即為1。(a=3)>(b=5)由于3>5不成立,故其值為假,即為0。

voidmain(){

charc=''''k'''';

inti=1,j=2,k=3;

floatx=3e+5,y=0.85;

printf("%d,%d\n",''''a''''+5<c,-i-2*j>=k+1);

printf("%d,%d\n",1<j<5,x-5.25<=x+y);

printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);

}

charc=''''k'''';

inti=1,j=2,k=3;

floatx=3e+5,y=0.85;

printf("%d,%d\n",''''a''''+5<c,-i-2*j>=k+1);

printf("%d,%d\n",1<j<5,x-5.25<=x+y);

printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);

在本例中求出了各種關(guān)系運算符的值。字符變量是以它對應(yīng)的ASCII碼參與運算的。對于含多個關(guān)系運算符的表達式,如k==j==i+5,根據(jù)運算符的左結(jié)合性,先計算k==j,該式不成立,其值為0,再計算0==i+5,也不成立,故表達式值為0。

邏輯運算符和表達式

邏輯運算符c語言中提供了三種邏輯運算符&&與運算||或運算!非運算與運算符&&和或運算符||均為雙目運算符。具有左結(jié)合性。非

運算符!為單目運算符,具有右結(jié)合性。邏輯運算符和其它運算符優(yōu)先級的關(guān)系可表示如下:

按照運算符的優(yōu)先順序可以得出:

a>b&&c>d等價于(a>b)&&(c>d)

!b==c||d<a等價于((!b)==c)||(d<a)

a+b>c&&x+y<b等價于((a+b)>c)&&((x+y)<b)

邏輯運算的值

邏輯運算的值也為“真”和“假”兩種,用“1”和“0”來表示。其求值規(guī)則如下:

1.與運算&&參與運算的兩個量都為真時,結(jié)果才為真,否則為假。例如,5>0&&4>2,由于5>0為真,4>2也為真,相與的結(jié)果也為真。

2.或運算||參與運算的兩個量只要有一個為真,結(jié)果就為真。兩個量都為假時,結(jié)果為假。例如:5>0||5>8,由于5>0為真,相或的結(jié)果也就為真

3.非運算!參與運算量為真時,結(jié)果為假;參與運算量為假時,結(jié)果為真。

例如:!(5>0)的結(jié)果為假。

雖然c編譯在給出邏輯運算值時,以“1”代表“真”,“0”代表“假”。但反過來在判斷一個量是為“真”還是為“假”時,以“0”代表“假”,以非“0”的數(shù)值作為“真”。例如:由于5和3均為非“0”因此5&&3的值為“真”,即為1。

又如:5||0的值為“真”,即為1。

邏輯表達式邏輯表達式的一般形式為:表達式邏輯運算符表達式其中的表達式可以又是邏輯表達式,從而組成了嵌套的情形。例如:(a&&b)&&c根據(jù)邏輯運算符的左結(jié)合性,上式也可寫為:a&&b&&c邏輯表達式的值是式中各種邏輯運算的最后值,以“1”和“0”分別代表“真”和“假”。

voidmain(){

charc=''''k'''';

inti=1,j=2,k=3;

floatx=3e+5,y=0.85;

printf("%d,%d\n",!x*!y,!!!x);

printf("%d,%d\n",x||i&&j-3,i<j&&x<y);

printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);

}charc=''''k'''';

inti=1,j=2,k=3;

floatx=3e+5,y=0.85;

printf("%d,%d\n",!x*!y,!!!x);

printf("%d,%d\n",x||i&&j-3,i<j&&x<y);

printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);

本例中!x和!y分別為0,!x*!y也為0,故其輸出值為0。由于x為非0,故!!!x的邏輯值為0。對x||i&&j-3式,先計算j-3的值為非0,再求i&&j-3的邏輯值為1,故x||i&&j-3的邏輯值為1。對i<j&&x<y式,由于i<j的值為1,而x<y為0故表達式的值為1,0相與,最后為0,對i==5&&c&&(j=8)式,由于i==5為假,即值為0,該表達式由兩個與運算組成,所以整個表達式的值為0。對于式x+y||i+j+k由于x+y的值為非0,故整個或表達式的值為1。

if語句

用if語句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進行判斷,以決定執(zhí)行某個分支程序段。c語言的if語句有三種基本形式。

1.第一種形式為基本形式if(表達式)語句;其語義是:如果表達式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。其過程可表示為下圖

voidmain(){

inta,b,max;

printf("\ninputtwonumbers:");

scanf("%d%d",&a,&b);

max=a;

if(max<b)max=b;

printf("max=%d",max);

}

輸入兩個整數(shù),輸出其中的大數(shù)。

scanf("%d%d",&a,&b);

max=a;

if(max<b)max=b;

printf("max=%d",max);

本例程序中,輸入兩個數(shù)a,b。把a先賦予變量max,再用if語句判別max和b的大小,如max小于b,則把b賦予max。因此max中總是大數(shù),最后輸出max的值。

2.第二種形式為if-else形式

if(表達式)

語句1;

else

語句2;

其語義是:如果表達式的值為真,則執(zhí)行語句1,否則執(zhí)行語句2。

voidmain(){

inta,b;

printf("inputtwonumbers:");

scanf("%d%d",&a,&b);

if(a>b)

printf("max=%d\n",a);

else

printf("max=%d\n",b);

}

輸入兩個整數(shù),輸出其中的大數(shù)。改用if-else語句判別a,b的大小,若a大,則輸出a,否則輸出b。

3.第三種形式為if-else-if形式

前二種形式的if語句一般都用于兩個分支的情況。當(dāng)有多個分支選擇時,可采用if-else-if語句,其一般形式為:

if(表達式1)

語句1;

elseif(表達式2)

語句2;

elseif(表達式3)

語句3;

elseif(表達式m)

語句m;

else

語句n;

其語義是:依次判斷表達式的值,當(dāng)出現(xiàn)某個值為真時,則執(zhí)行其對應(yīng)的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。如果所有的表達式均為假,則執(zhí)行語句n。然后繼續(xù)執(zhí)行后續(xù)程序。if-else-if語句的執(zhí)行過程如圖3—3所示。

#include"stdio.h"

voidmain(){

charc;

printf("inputacharacter:");

c=getchar();

if(c<32)

printf("Thisisacontrolcharacter\n");

elseif(c>=''''0''''&&c<=''''9'''')

printf("Thisisadigit\n");

elseif(c>=''''A''''&&c<=''''Z'''')

printf("Thisisacapitalletter\n");

elseif(c>=''''a''''&&c<=''''z'''')

printf("Thisisasmallletter\n");

else

printf("Thisisanothercharacter\n");

}

if(c<32)

printf("Thisisacontrolcharacter\n");

elseif(c>=''''0''''&&c<=''''9'''')

printf("Thisisadigit\n");

elseif(c>=''''A''''&&c<=''''Z'''')

printf("Thisisacapitalletter\n");

elseif(c>=''''a''''&&c<=''''z'''')

printf("Thisisasmallletter\n");

else

printf("Thisisanothercharacter\n");

本例要求判別鍵盤輸入字符的類別??梢愿鶕?jù)輸入字符的ASCII碼來判別類型。由ASCII碼表可知ASCII值小于32的為控制字符。在“0”和“9”之間的為數(shù)字,在“A”和“Z”之間為大寫字母,在“a”和“z”之間為小寫字母,其余則為其它字符。這是一個多分支選擇的問題,用if-else-if語句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不同的輸出。例如輸入為“g”,輸出顯示它為小寫字符。

4.在使用if語句中還應(yīng)注意以下問題

(1)在三種形式的if語句中,在if關(guān)鍵字之后均為表達式。該表達式通常是邏輯表達式或關(guān)系表達式,但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。例如:if(a=5)語句;if(b)語句;都是允許的。只要表達式的值為非0,即為“真”。如在if(a=5)…;中表達式的值永遠為非0,所以其后的語句總是要執(zhí)行的,當(dāng)然這種情況在程序中不一定會出現(xiàn),但在語法上是合法的。

又如,有程序段:if(a=b)

printf("%d",a);

else

printf("a=0");本語句的語義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。這種用法在程序中是經(jīng)常出現(xiàn)的。

(2)在if語句中,條件判斷表達式必須用括號括起來,在語句之后必須加分號。

(3)在if語句的三種形式中,所有的語句應(yīng)為單個語句,如果要想在滿足條件時執(zhí)行一組(多個)語句,則必須把這一組語句用{}括起來組成一個復(fù)合語句。但要注意的是在}之后不能再加分號。

例如:

if(a>b){

a++;

b++;

}

else{a=0;

b=10;

}

if語句的嵌套

當(dāng)if語句中的執(zhí)行語句又是if語句時,則構(gòu)成了if語句嵌套的情形。其一般形式可表示如下:

if(表達式)

if語句;

或者為

if(表達式)

if語句;

else

if語句;

在嵌套內(nèi)的if語句可能又是if-else型的,這將會出現(xiàn)多個if和多個else重疊的情況,這時要特別注意if和else的配對問題。例如:

if(表達式1)

if(表達式2)

語句1;

else

語句2;

其中的else究竟是與哪一個if配對呢?

應(yīng)該理解為:還是應(yīng)理解為:

if(表達式1)if(表達式1)

if(表達式2)if(表達式2)

語句1;語句1;

elseelse

語句2;語句2;

為了避免這種二義性,c語言規(guī)定,else總是與它前面最近的if配對,因此對上述例子應(yīng)按前一種情況理解。

voidmain(){

inta,b;

printf("pleaseinputA,B:");

scanf("%d%d",&a,&b);

if(a!=b)

if(a>b)printf("A>B\n");

elseprintf("A<B\n");

elseprintf("A=B\n");

}

比較兩個數(shù)的大小關(guān)系。

printf("pleaseinputA,B:");

scanf("%d%d",&a,&b);

if(a!=b)

if(a>b)printf("A>B\n");

elseprintf("A<B\n");

elseprintf("A=B\n");

本例中用了if語句的嵌套結(jié)構(gòu)。采用嵌套結(jié)構(gòu)實質(zhì)上是為了進行多分支選擇,例3.16實際上有三種選擇即A>B、A<B或A=B。這種問題用if-else-if語句也可以完成。而且程序更加清晰。因此,在一般情況下較少使用if語句的嵌套結(jié)構(gòu)。以使程序更便于閱讀理解。

voidmain(){

inta,b;

printf("pleaseinputA,B:");

scanf("%d%d",&a,&b);

if(a==b)printf("A=B\n");

elseif(a>b)printf("A>B\n");

elseprintf("A<B\n");

}

條件運算符和條件表達式

如果在條件語句中,只執(zhí)行單個的賦值語句時,??墒褂脳l件表達式來實現(xiàn)。不但使程序簡潔,也提高了運行效率。

條件運算符為?和:,它是一個三目運算符,即有三個參與運算的量。由條件運算符組成條件表達式的一般形式為:

表達式1?表達式2:表達式3

其求值規(guī)則為:如果表達式1的值為真,則以表達式2的值作為條件表達式的值,否則以表達式2的值作為整個條件表達式的值。條件表達式通常用于賦值語句之中。

例如條件語句:

if(a>b)max=a;

elsemax=b;

可用條件表達式寫為max=(a>b)?a:b;執(zhí)行該語句的語義是:如a>b為真,則把a賦予max,否則把b賦予max。

使用條件表達式時,還應(yīng)注意以下幾點:

1.條件運算符的運算優(yōu)先級低于關(guān)系運算符和算術(shù)運算符,但高于賦值符。因此max=(a>b)?a:b可以去掉括號而寫為max=a>b?a:b

2.條件運算符?和:是一對運算符,不能分開單獨使用。

3.條件運算符的結(jié)合方向是自右至左。

例如:

a>b?a:c>d?c:d應(yīng)理解為

a>b?a:(c>d?c:d)這也就是條件表達式嵌套的情形,即其中的表達式3又是一個條

件表達式。

voidmain(){

inta,b,max;

printf("\ninputtwonumbers:");

scanf("%d%d",&a,&b);

printf("max=%d",a>b?a:b);

}

用條件表達式對上例重新編程,輸出兩個數(shù)中的大數(shù)。

switch語句

c語言還提供了另一種用于多分支選擇的switch語句,其一般形式為:

switch(表達式){

case常量表達式1:語句1;

case常量表達式2:語句2;

case常量表達式n:語句n;

default:語句n+1;

}

其語義是:計算表達式的值。并逐個與其后的常量表達式值相比較,當(dāng)表達式的值與某個常量表達式的值相等時,即執(zhí)行其后的語句,然后不再進行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執(zhí)行default后的語句。

voidmain(){

inta;

printf("inputintegernumber:");

scanf("%d",&a);

switch(a){

case1:printf("Monday\n");

case2:printf("Tuesday\n");

case3:printf("Wednesday\n");

case4:printf("Thursday\n");

case5:printf("Friday\n");

case6:printf("Saturday\n");

case7:printf("Sunday\n");

default:printf("error\n");

}

}

本程序是要求輸入一個數(shù)字,輸出一個英文單詞。但是當(dāng)輸入3之后,卻執(zhí)行了case3以及以后的所有語句,輸出了Wednesday及以后的所有單詞。這當(dāng)然是不希望的。為什么會出現(xiàn)這種情況呢?這恰恰反應(yīng)了switch語句的一個特點。在switch語句中,“case常量表達式”只相當(dāng)于一個語句標號,表達式的值和某標號相等則轉(zhuǎn)向該標號執(zhí)行,但不能在執(zhí)行完該標號的語句后自動跳出整個switch語句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語句的情況。這是與前面介紹的if語句完全不同的,應(yīng)特別注意。為了避免上述情況,c語言還提供了一種break語句,專用于跳出switch語句,break語句只有關(guān)鍵字break,沒有參數(shù)。在后面還將詳細介紹。修改例題的程序,在每一case語句之后增加break語句,使每一次執(zhí)行之后均可跳出switch語句,從而避免輸出不應(yīng)有的結(jié)果。

voidmain(){

inta;

printf("inputintegernumber:");

scanf("%d",&a);

switch(a){

case1:printf("Monday\n");break;

case2:printf("Tuesday\n");break;

case3:printf("Wednesday\n");break;

case4:printf("Thursday\n");break;

case5:printf("Friday\n");break;

case6:printf("Saturday\n");break;

case7:printf("Sunday\n");break;

default:printf("error\n");

}

}

在使用switch語句時還應(yīng)注意以下幾點:

1.在case后的各常量表達式的值不能相同,否則會出現(xiàn)錯誤。

2.在case后,允許有多個語句,可以不用{}括起來。

3.各case和default子句的先后順序可以變動,而不會影響程序執(zhí)行結(jié)果。

4.default子句可以省略不用。程序舉例

輸入三個整數(shù),輸出最大數(shù)和最小數(shù)。

voidmain(){

inta,b,c,max,min;

printf("inputthreenumbers:");

scanf("%d%d%d",&a,&b,&c);

if(a>b)

{max=a;min=b;}

else

{max=b;min=a;}

if(max<c)

max=c;

else

if(min>c)

min=c;

printf("max=%d\nmin=%d",max,min);

}

本程序中,首先比較輸入的a,b的大小,并把大數(shù)裝入max,小數(shù)裝入min中,然后再與c比較,若max小于c,則把c賦予max;如果c小于min,則把c賦予min。因此max內(nèi)總是最大數(shù),而min內(nèi)總是最小數(shù)。最后輸出max和min的值即可。計算器程序。用戶輸入運算數(shù)和四則運算符,輸出計算結(jié)果。

voidmain(){

floata,b,s;

charc;

printf("inputexpression:a+(-,*,/)b\n");

scanf("%f%c%f",&a,&c,&b);

switch(c){

case''''+'''':printf("%f\n",a+b);break;

case''''-'''':printf("%f\n",a-b);break;

case''''*'''':printf("%f\n",a*b);break;

case''''/'''':printf("%f\n",a/b);break;

default:printf("inputerror\n");

}

}

floata,b,s;

charc;

printf("inputexpression:a+(-,*,/)b\n");

scanf("%f%c%f",&a,&c,&b);

switch(c){

case''''+'''':printf("%f\n",a+b);break;

case''''-'''':printf("%f\n",a-b);break;

case''''*'''':printf("%f\n",a*b);break;

case''''/'''':printf("%f\n",a/b);break;

default:printf("inputerror\n");

}

本例可用于四則運算求值。switch語句用于判斷運算符,然后輸出運算值。當(dāng)輸入運算符不是+,-,*,/時給出錯誤提示。

循環(huán)結(jié)構(gòu)程序

循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點是,在給定條件成立時,反復(fù)執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。c語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。

while語句

while語句的一般形式為:while(表達式)語句;其中表達式是循環(huán)條件,語句為循環(huán)體。

while語句的語義是:計算表達式的值,當(dāng)值為真(非0)時,執(zhí)行循環(huán)體語句。其執(zhí)行過程可用圖3—4表示。統(tǒng)計從鍵盤輸入一行字符的個數(shù)。

#include<stdio.h>

voidmain(){

intn=0;

printf("inputastring:\n");

while(getchar()!=''''\n'''')n++;

printf("%d",n);

}intn=0;

printf("inputastring:\n");

while(getchar()!=''''\n'''')

n++;

printf("%d",n);

本例程序中的循環(huán)條件為getchar()!=''''\n'''',其意義是,只要從鍵盤輸入的字符不是回車就繼續(xù)循環(huán)。循環(huán)體n++完成對輸入字符個數(shù)計數(shù)。從而程序?qū)崿F(xiàn)了對輸入一行字符的字符個數(shù)計數(shù)。

使用while語句應(yīng)注意以下幾點:

1.while語句中的表達式一般是關(guān)系表達或邏輯表達式,只要表達式的值為真(非0)即可繼續(xù)循環(huán)。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

while(n--)

printf("%d",a++*2);

}inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

while(n--)

printf("%d",a++*2);

本例程序?qū)?zhí)行n次循環(huán),每執(zhí)行一次,n值減1。循環(huán)體輸出表達式a++*2的值。該表達式等效于(a*2;a++)

2.循環(huán)體如包括有一個以上的語句,則必須用{}括起來,組成復(fù)合語句。

3.應(yīng)注意循環(huán)條件的選擇以避免死循環(huán)。

voidmain(){

inta,n=0;

while(a=5)

printf("%d",n++);

}inta,n=0;

while(a=5)

printf("%d",n++);

本例中while語句的循環(huán)條件為賦值表達式a=5,因此該表達式的值永遠為真,而循環(huán)體中又沒有其它中止循環(huán)的手段,因此該循環(huán)將無休止地進行下去,形成死循環(huán)。4.允許while語句的循環(huán)體又是while語句,從而形成雙重循環(huán)。

do-while語句

do-while語句的一般形式為:

do

語句;

while(表達式);

其中語句是循環(huán)體,表達式是循環(huán)條件。

do-while語句的語義是:

先執(zhí)行循環(huán)體語句一次,再判別表達式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。

do-while語句和while語句的區(qū)別在于do-while是先執(zhí)行后判斷,因此do-while至少要執(zhí)行一次循環(huán)體。而while是先判斷后執(zhí)行,如果條件不滿足,則一次循環(huán)體語句也不執(zhí)行。

while語句和do-while語句一般都可以相互改寫。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

doprintf("%d",a++*2);

while(--n);

}

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

doprintf("%d",a++*2);

while(--n);

在本例中,循環(huán)條件改為--n,否則將多執(zhí)行一次循環(huán)。這是由于先執(zhí)行后判斷而造成的。

對于do-while語句還應(yīng)注意以下幾點:

1.在if語句,while語句中,表達式后面都不能加分號,而在do-while語句的表達式后面則必須加分號。

2.do-while語句也可以組成多重循環(huán),而且也可以和while語句相互嵌套。

3.在do和while之間的循環(huán)體由多個語句組成時,也必須用{}括起來組成一個復(fù)合語句。

4.do-while和while語句相互替換時,要注意修改循環(huán)控制條件。

for語句

for語句是c語言所提供的功能更強,使用更廣泛的一種循環(huán)語句。其一般形式為:

for(表達式1;表達式2;表達3)

語句;

表達式1通常用來給循環(huán)變量賦初值,一般是賦值表達式。也允許在for語句外給循環(huán)變量賦初值,此時可以省略該表達式。

表達式2通常是循環(huán)條件,一般為關(guān)系表達式或邏輯表達式。

表達式3通??捎脕硇薷难h(huán)變量的值,一般是賦值語句。

這三個表達式都可以是逗號表達式,即每個表達式都可由多個表達式組成。三個表達式都是任選項,都可以省略。

一般形式中的“語句”即為循環(huán)體語句。for語句的語義是:

1.首先計算表達式1的值。

2.再計算表達式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則跳出循環(huán)。

3.然后再計算表達式3的值,轉(zhuǎn)回第2步重復(fù)執(zhí)行。在整個for循環(huán)過程中,表達式1只計算一次,表達式2和表達式,3則可能計算多次。循環(huán)體可能多次執(zhí)行,也可能一次都不執(zhí)行。for語句的執(zhí)行過程如圖所示。

voidmain(){

intn,s=0;

for(n=1;n<=100;n++)

s=s+n;

printf("s=%d\n",s);

}

用for語句計算s=1+2+3+...+99+100

intn,s=0;

for(n=1;n<=100;n++)

s=s+n;

printf("s=%d\n",s);

本例for語句中的表達式3為n++,實際上也是一種賦值語句,相當(dāng)于n=n+1,以改變循環(huán)變量的值。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;a++,n--)

printf("%d",a*2);

}

用for語句修改例題。從0開始,輸出n個連續(xù)的偶數(shù)。

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;a++,n--)

printf("%d",a*2);

本例的for語句中,表達式1已省去,循環(huán)變量的初值在for語句之前由scanf語句取得,表達式3是一個逗號表達式,由a++,n--兩個表達式組成。每循環(huán)一次a自增1,n自減1。a的變化使輸出的偶數(shù)遞增,n的變化控制循次數(shù)。

在使用for語句中要注意以下幾點

1.for語句中的各表達式都可省略,但分號間隔符不能少。如:for(;表達式;表達式)省去了表達式1。for(表達式;;表達式)省去了表達式2。

for(表達式;表達式;)省去了表達式3。for(;;)省去了全部表達式。

2.在循環(huán)變量已賦初值時,可省去表達式1,如例3.27即屬于這種情形。如省去表達式2或表達式3則將造成無限循環(huán),這時應(yīng)在循環(huán)體內(nèi)設(shè)法結(jié)束循環(huán)。例題即屬于此情況。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;)

{a++;n--;

printf("%d",a*2);

}

}inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;)

{a++;n--;

printf("%d",a*2);

}

本例中省略了表達式1和表達式3,由循環(huán)體內(nèi)的n--語句進行循環(huán)變量n的遞減,以控制循環(huán)次數(shù)。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;;){

a++;n--;

printf("%d",a*2);

if(n==0)break;

}

}

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;;){

a++;n--;

printf("%d",a*2);

if(n==0)break;

}

本例中for語句的表達式全部省去。由循環(huán)體中的語句實現(xiàn)循環(huán)變量的遞減和循環(huán)條件的判斷。當(dāng)n值為0時,由break語句中止循環(huán),轉(zhuǎn)去執(zhí)行for以后的程序。在此情況下,for語句已等效于while(1)語句。如在循環(huán)體中沒有相應(yīng)的控制手段,則造成死循環(huán)。

3.循環(huán)體可以是空語句。

#include"stdio.h"

voidmain(){

intn=0;

printf("inputastring:\n");

for(;getchar()!=''''\n'''';n++);

printf("%d",n);

}

本例中,省去了for語句的表達式1,表達式3也不是用來修改循環(huán)變量,而是用作輸入字符的計數(shù)。這樣,就把本應(yīng)在循環(huán)體中完成的計數(shù)放在表達式中完成了。因此循環(huán)體是空語句。應(yīng)注意的是,空語句后的分號不可少,如缺少此分號,則把后面的printf語句當(dāng)成循環(huán)體來執(zhí)行。反過來說,如循環(huán)體不為空語句時,決不能在表達式的括號后加分號,這樣又會認為循環(huán)體是空語句而不能反復(fù)執(zhí)行。這些都是編程中常見的錯誤,要十分注意。

4.for語句也可與while,do-while語句相互嵌套,構(gòu)成多重循環(huán)。以下形成都合法的嵌套。

(1)for(){…

while()

{…}

}

(2)do{

for()

{…}

}while();

(3)while(){

for()

{…}

}

(4)for(){

for(){

}

}

voidmain(){

inti,j,k;

for(i=1;i<=3;i++)

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

printf("");

for(k=1;k<=2*i-1+5;k++)

{

if(k<=5)printf("");

elseprintf("*");

}

printf("\n");

}

}

轉(zhuǎn)移語句

程序中的語句通??偸前错樞蚍较颍虬凑Z句功能所定義的方向執(zhí)行的。如果需要改變程序的正常流向,可以使用本小節(jié)介紹的轉(zhuǎn)移語句。在c語言中提供了4種轉(zhuǎn)移語句:

goto,break,continue和return。

其中的return語句只能出現(xiàn)在被調(diào)函數(shù)中,用于返回主調(diào)函數(shù),我們將在函數(shù)一章中具體介紹。本小節(jié)介紹前三種轉(zhuǎn)移語句。

1.goto語句

goto語句也稱為無條件轉(zhuǎn)移語句,其一般格式如下:goto語句標號;其中語句標號是按標識符規(guī)定書寫的符號,放在某一語句行的

前面,標號后加冒號(:)。語句標號起標識語句的作用,與goto語句配合使用。

如:label:i++;

loop:while(x<7);

c語言不限制程序中使用標號的次數(shù),但各標號不得重名。goto語句的語義是改變程序流向,轉(zhuǎn)去執(zhí)行語句標號所標識的語句。

goto語句通常與條件語句配合使用??捎脕韺崿F(xiàn)條件轉(zhuǎn)移,構(gòu)成循環(huán),跳出循環(huán)體等功能。

但是,在結(jié)構(gòu)化程序設(shè)計中一般不主張使用goto語句,以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。

統(tǒng)計從鍵盤輸入一行字符的個數(shù)。

#include"stdio.h"

voidmain(){

intn=0;

printf("inputastring\n");

loop:if(getchar()!=''''\n'''')

{n++;

gotoloop;

}

printf("%d",n);

}intn=0;

printf("inputastring\n");

loop:if(getchar()!=''''\n'''')

{n++;

gotoloop;

}

printf("%d",n);

本例用if語句和goto語句構(gòu)成循環(huán)結(jié)構(gòu)。當(dāng)輸入字符不為''''\n''''時即執(zhí)行n++進行計數(shù),然后轉(zhuǎn)移至if語句循環(huán)執(zhí)行。直至輸入字符為''''\n''''才停止循環(huán)。

break語句

break語句只能用在switch語句或循環(huán)語句中,其作用是跳出switch語句或跳出本層循環(huán),轉(zhuǎn)去執(zhí)行后面的程序。由于break語句的轉(zhuǎn)移方向是明確的,所以不需要語句標號與之配合。break語句的一般形式為:break;上面例題中分別在switch語句和for語句中使用了break語句作為跳轉(zhuǎn)。使用break語句可以使循環(huán)語句有多個出口,在一些場合下使編程更加靈活、方便。

continue語句

continue語句只能用在循環(huán)體中,其一般格式是:

continue;

其語義是:結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。應(yīng)注意的是,本語句只結(jié)束本層本次的循環(huán),并不跳出循環(huán)。

voidmain(){

intn;

for(n=7;n<=100;n++)

{

if(n%7!=0)

continue;

printf("%d",n);

}

}

輸出100以內(nèi)能被7整除的數(shù)。

intn;

for(n=7;n<=100;n++)

{

if(n%7!=0)

continue;

printf("%d",n);

}

本例中,對7~100的每一個數(shù)進行測試,如該數(shù)不能被7整除,即模運算不為0,則由continus語句轉(zhuǎn)去下一次循環(huán)。只有模運算為0時,才能執(zhí)行后面的printf語句,輸出能被7整除的數(shù)。

#include"stdio.h"

voidmain(){

chara,b;

printf("inputastring:\n");

b=getchar();

while((a=getchar())!=''''\n''''){

if(a==b){

printf("samecharacter\n");

break;

}b=a;

}

}

檢查輸入的一行中有無相鄰兩字符相同。

chara,b;

printf("inputastring:\n");

b=getchar();

while((a=getchar())!=''''\n''''){

if(a==b){

printf("samecharacter\n");

break;

}b=a;

}

本例程序中,把第一個讀入的字符送入b。然后進入循環(huán),把下一字符讀入a,比較a,b是否相等,若相等則輸出提示串并中止循環(huán),若不相等則把a中的字符賦予b,輸入下一次循環(huán)。

輸出100以內(nèi)的素數(shù)。素數(shù)是只能被1和本身整除的數(shù)??捎酶F舉法來判斷一個數(shù)是否是素數(shù)。

voidmain(){

intn,i;

for(n=2;n<=100;n++){

for(i=2;i<n;i++)

if(n%i==0)break;

if(i>=n)printf("\t%d",n);

}

}intn,i;

for(n=2;n<=100;n++){

for(i=2;i<n;i++)

if(n%i==0)break;

if(i>=n)printf("\t%d",n);

}

本例程序中,第一層循環(huán)表示對1~100這100個數(shù)逐個判斷是否是素數(shù),共循環(huán)100次,在第二層循環(huán)中則對數(shù)n用2~n-1逐個去除,若某次除盡則跳出該層循環(huán),說明不是素數(shù)。如果在所有的數(shù)都是未除盡的情況下結(jié)束循環(huán),則為素數(shù),此時有i>=n,故可經(jīng)此判斷后輸出素數(shù)。然后轉(zhuǎn)入下一次大循環(huán)。實際上,2以上的所有偶數(shù)均不是素數(shù),因此可以使循環(huán)變量的步長值改為2,即每次增加2,此外只需對數(shù)n用2~n去除就可判斷該數(shù)是否素數(shù)。這樣將大大減少循環(huán)次數(shù),減少程序運行時間。

#include"math.h"

voidmain(){

intn,i,k;

for(n=2;n<=100;n+=2){

k=sqrt(n);

for(i=2;i<k;i++)

if(n%i==0)break;

if(i>=k)printf("\t%2d",n);

}

}

小結(jié)

1.從程序執(zhí)行的流程來看,程序可分為三種最基本的結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu)以及循環(huán)結(jié)構(gòu)

2.程序中執(zhí)行部分最基本的單位是語句。c語言的語句可分為五類:

(1)表達式語句任何表達式末尾加上分號即可構(gòu)成表達式語句,常用的表達式語句為賦值語句。

(2)函數(shù)調(diào)用語句由函數(shù)調(diào)用加上分號即組成函數(shù)調(diào)用語句。

(3)控制語句用于控制程序流程,由專門的語句定義符及所需的表達式組成。主要有條件判斷執(zhí)行語句,循環(huán)執(zhí)行語句,轉(zhuǎn)向語句等。

(4)復(fù)合語句由{}把多個語句括起來組成一個語句。復(fù)合語句被認為是單條語句,它可出現(xiàn)在所有允許出現(xiàn)語句的地方,如循環(huán)體等。

(5)空語句僅由分號組成,無實際功能。

3.c語言中沒有提供專門的輸入輸出語句,所有的輸入輸出都是由調(diào)用標準庫函數(shù)中的輸入輸出函數(shù)來實現(xiàn)的。

scanf和getchar函數(shù)是輸入函數(shù),接收來自鍵盤的輸入數(shù)據(jù)。

scanf是格式輸入函數(shù),可按指定的格式輸入任意類型數(shù)據(jù)。

getchar函數(shù)是字符輸入函數(shù),只能接收單個字符。

printf和putchar函數(shù)是輸出函數(shù),向顯示器屏幕輸出數(shù)據(jù)。

printf是格式輸出函數(shù),可按指定的格式顯示任意類型的數(shù)據(jù)。

putchar是字符顯示函數(shù),只能顯示單個字符。

4.關(guān)系表達式和邏輯表達式是兩種重要的表達式,主要用于條件執(zhí)行的判斷和循環(huán)執(zhí)行的判斷。

5.c語言提供了多種形式的條件語句以構(gòu)成分支結(jié)構(gòu)。

(1)if語句主要用于單向選擇。

(2)if-else語句主要用于雙向選擇。

(3)if-else-if語和switch語句用于多向選擇。

這幾種形式的條件語句一般來說是可以互相替代的。

6.c語言提供了三種循環(huán)語句。

(1)for語句主要用于給定循環(huán)變量初值,步長增量以及循環(huán)次數(shù)的循環(huán)結(jié)構(gòu)。

(2)循環(huán)次數(shù)及控制條件要在循環(huán)過程中才能確定的循環(huán)可用while或do-while語句。

(3)三種循環(huán)語句可以相互嵌套組成多重循環(huán)。循環(huán)之間可以并列但不能交叉。

(4)可用轉(zhuǎn)移語句把流程轉(zhuǎn)出循環(huán)體外,但不能從外面轉(zhuǎn)向循環(huán)體內(nèi)。

(5)在循環(huán)程序中應(yīng)避免出現(xiàn)死循環(huán),即應(yīng)保證循環(huán)變量的值在運行過程中可以得到修改,并使循環(huán)條件逐步變?yōu)榧?,從而結(jié)束循環(huán)。

7.c語言語句小結(jié)

名稱一般形式

簡單語句表達式語句表達式;

空語句;

復(fù)合語句{語句}

條件語句if(表達式)語句;

if(表達式)語句1;else語句2;

if(表達式1)語句1;elseif(表達式2)語句2…else語句n;

開關(guān)語句switch(表達式){case常量表達式:語句…default:語句;}

循環(huán)語句while語句

while(表達式)語句;

for語句for(表達式1;表達式2;表達式3)語句;

break語句break;

goto語句goto;

篇2

關(guān)鍵詞:螺紋; 宏程序; 循環(huán)功能; 參數(shù)化

中圖分類號:TG62

文獻標識碼:A文章編號:16749944(2017)8024002

1引言

螺紋是機械零部件之間的主要連接方式,所以機械加工中螺紋的加工是非常重要的環(huán)節(jié)。

數(shù)控鏜銑床設(shè)備上加工2400 t壓力機滑塊上的一組規(guī)格的螺紋,原有的加工方法存在一些弊端,除了對操作者的編程水平有一定要求外,加工效率也得不到提高,因此改進一種實用、簡便的螺紋銑削方法對提高公司生產(chǎn)線生產(chǎn)效率具有重大意義。

公司數(shù)控M銑床班組加工該零件的多個規(guī)格螺紋時,手工編程要求操作者具備一定的編程水平,當(dāng)更換不同規(guī)格的螺紋時就要重新編程,加工效率不高,對于簡單的螺紋加工采用自動編程又不太適用。所以,上報設(shè)計部門后決定添加一種螺紋銑削“循環(huán)功能”。

2螺紋銑削工藝

螺紋銑削需要配合三軸以上聯(lián)動機床,坐標系要在螺紋軸線與端面的交點處。采用數(shù)控鏜銑床TK6920加工螺紋,選用單刃螺紋銑刀,銑削螺紋時螺紋的導(dǎo)程跟轉(zhuǎn)速沒關(guān)系,僅跟程序設(shè)定刀具的圈數(shù)和下刀距離有關(guān)系。轉(zhuǎn)速和進給根據(jù)螺紋導(dǎo)程設(shè)置,轉(zhuǎn)速高進給快,會因為切削力太大導(dǎo)致絲錐或板牙損壞。雖然轉(zhuǎn)速慢進給慢在一定范圍內(nèi)能完成攻絲或套絲加工,但是轉(zhuǎn)速也要限制在電機的實際使用扭矩范圍內(nèi)。

3問題的解決

首先利用宏程序加工標準右旋內(nèi)螺紋M42×4.5,螺紋深度為50 mm,單刃螺紋銑刀半徑13 mm。

為了安全起見,同時也為了確保螺紋深度為Z-50,通過計算可知:

50÷4.5=11余0.5(mm),

應(yīng)考慮每次應(yīng)距初始面一定高度開始加工,安全高度值可為:

h=p-0.5=4.5-0.5=4(mm)(1)

由于直螺紋特點(上下徑線尺寸不變),這樣就可確保經(jīng)過11+1個循環(huán)后螺紋深度正好是50mm。

5結(jié)論

對螺紋銑削循環(huán)程序的生成,改進了傳統(tǒng)銑削螺紋加工的方式,操作者能夠簡單、快速地解決加工不同規(guī)格螺紋銑削的問題。

值得肯定的是在此螺紋循環(huán)程序中涉及的計算多為基本的計算,對于新培訓(xùn)上崗的操作工也能完成操作。降低了編程難度,具有方便、快捷、淺顯易懂的特點。剛好契合了參數(shù)化編程的理念,有利于節(jié)省人力成本。同時能滿足在產(chǎn)品多樣性情況下提高螺紋加工的生產(chǎn)效率的要求,直接為企業(yè)降低生產(chǎn)成本,提高企業(yè)的效益。

參考文獻:

[1]

梅艷波.螺紋加工方法研究[J].長江大學(xué)學(xué)報,2009(1):279~280.

[2]劉明璽. 西門子系統(tǒng)數(shù)控車床螺紋加工參數(shù)化編程方法探究[J].電子測試,2013(23).

[3]劉金文. 淺析加工中心銑削螺紋的加工方法[J].數(shù)字技術(shù)與應(yīng)用,2012(4) .

[4]李慶余. 機械制造裝備設(shè)計[M].北京:機械工業(yè)出版社,2008.

[5]孫本緒. 機械加工余量手冊[M].北京:國防工業(yè)出版社, 1999.

[6]艾興,肖詩綱.切削用量簡明手冊[M].3版.北京:機械工業(yè)出版社,1994.

[7]陳國文,馬芳薇,周瑜. 宏程序在螺紋銑削快速編程中的應(yīng)用[J]. 金屬加工(冷加工),2015(16):20~21.

[8]喬龍陽. 基于宏程序的螺紋數(shù)控銑削功能開發(fā)[J]. 機械研究與應(yīng)用,2014(1):181~183.

[9]鐘如全. 銑削螺紋固定循環(huán)指令的開發(fā)[J]. 組合機床與自動化加工技術(shù),2013(10):121~122,126.

[10]劉玉春. 基于FANUC宏程序的螺紋銑削加工編程應(yīng)用[J]. 金屬加工(冷加工),2013(13):46~48.

[11]楊輝,萬海鑫,張宣升. 基于螺紋銑削數(shù)控宏程序的優(yōu)化設(shè)計[J]. 制造業(yè)自動化,2012(21):26~29,39.

[12]戴冠林. 基于MasterCAM 9.1的螺紋銑削工藝分析與編程[J]. 機械,2010(8):66~68.

篇3

關(guān)鍵詞: 點位加工;宏程序;段落

隨著數(shù)控機床技術(shù)的不斷進步,加工中心在機械制造企業(yè)的應(yīng)用已經(jīng)得到了普及,對于一些箱體類零件、閥體類零件、機架類零件的銑面和點位加工,屬于典型的四面加工類零件,大多數(shù)企業(yè)仍然采用手工編寫程序代碼,如果孔系復(fù)雜,完成一個零件的加工可能用到幾十把刀具,程序也變得很長而且重復(fù)代碼非常多,下面以FANUC 16i系統(tǒng)G81、G85固定循環(huán)為例簡要說明。

要在坐標為(-100.0,0)和(100.0,0)兩處加工∮16的銷孔,采用中心鉆定位-->鉆孔-->擴孔-->鉸孔工藝,為方便程序調(diào)試和提高易讀性,我們一般將幾把刀具對應(yīng)的程序分成幾個大的“段落”,程序如下:

G90G00G17G54;

N101(ZHONG XIN ZUAN T01);

M09;

M05;

G91G00G30Z0;

G30Y0;

T01;

M06;

G90G00G80G49S600;

X-100.0Y0;

G43Z50.0H01;

Z10.0;

M03;

M08;

G98G81Z-3.0R3.0F80;

X100.0Y0;

N102(ZUAN KONG T02);

M09;

M05;

G91G00G30Z0;

G30Y0;

T02;

M06;

G90G00G80G49S600;

X-100.0Y0;

G43Z50.0H02;

Z10.0;

M03;

M08;

G98G81Z-55.0R3.0F80;

X100.0Y0;

N103(KUO KONG T03);

M09;

M05;

G91G00G30Z0;

G30Y0;

T03;

M06;

G90G00G80G49S400;

X-100.0Y0;

G43Z50.0H03;

Z10.0;

M03;

M08;

G98G81Z-50.0R3.0F80;

X100.0Y0;

N104(JIAO KONG T04);

M09;

M05;

G91G00G30Z0;

G30Y0;

T04;

M06;

G90G00G80G49S300;

X-100.0Y0;

G43Z50.0H04;

Z10.0;

M03;

M08;

G98G85Z-50.0R3.0F100;

X100.0Y0;

從以上四把刀具所用程序不難看出,程序結(jié)構(gòu)完全相同:標識—關(guān)切削液---主軸停---回參考點---換刀---坐標設(shè)定等---刀具補償、移動---主軸正轉(zhuǎn)---開切削液---固定循環(huán)加工-->調(diào)用下一把刀具加工程序。

如果我們將每把刀具對應(yīng)程序的“段落”寫成宏程序,那么在編程時調(diào)用宏程序,就會將十幾段程序用一段或幾段完成。比如中心鉆定位、鉆孔、擴孔都使用G81固定循環(huán)完成,所不同的只是刀具、坐標、切削參數(shù)等,把這些不同的數(shù)值用宏變量替代改為宏程序O0081,同理鉸孔程序改為O0085,清單如下:

O0081(ZUAN KONG);

M09;

M05;

G91G00G30Z0;

G30Y0;

T#20;

M06;

G17G90G00G80G49S#19;

X#24Y#25;

G43Z50.0H#20;

Z10.0;

M03;

M08;

G98G81Z#26R3.0F#9;

O0085(JIAO KONG);

M09;

M05;

G91G00G30Z0;

G30Y0;

T#20;

M06;

G90G00G80G49S#19;

X#240Y#25;

G43Z50.0H#20;

Z10.0;

M03;

M08;

G98G85Z#26R3.0F#9;

如此一來,上述四個“段落”的加工程序可通過宏程序調(diào)用編寫,程序代碼由原來的60多段減少到十幾段,大大減少了編程工作量,同時提高了程序的易讀性,節(jié)省了程序存儲空間,也可以很好地避免輸入錯誤。

G90G00G17G54;

N101(ZHONG XIN ZUAN T01);

G65P0081T01S600.0X-100.0Y0Z-3.0F80.0;

X100.0Y0;

N102(ZUAN KONG T02);

G65P0081T02S600.0X-100.0Y0Z-55.0F80.0;

X100.0Y0;

N103(KUO KONG T03);

G65P0081T03S400.0X-100.0Y0Z-50.0F80.0;

X100.0Y0;

N104(JIAO KONG T04);

G65P0085T04S300.0X-100.0Y0Z-50.0F100.0;

X100.0Y0;

同樣道理,讀者可以把類似的加工程序“段落” 改寫成宏程序存入數(shù)控機床,方便編程時調(diào)用。

參考文獻:

FANUC Series 16i-MA使用說明書

篇4

[關(guān)鍵詞]宏程序 特點 實例

一、宏程序編程的特點

隨著數(shù)控技術(shù)的快速發(fā)展以及數(shù)控車技能大賽的舉行,在數(shù)控車競賽中會經(jīng)常遇到復(fù)雜輪廓的加工,如橢圓、拋物線、雙曲線等,采用常規(guī)的數(shù)控編程指令,需要計算每個節(jié)點的坐標值,不但計算量大、精度差、編程速度慢,而且容易出錯,難以滿足生產(chǎn)要求。若采用CAD/CAM軟件自動編程,也需要大量時間來建模和處理,而且程序過于冗長,程序傳輸速度慢導(dǎo)致加工滯后,且空刀多,浪費時間。隨著數(shù)控技術(shù)的發(fā)展,現(xiàn)在先進的數(shù)控系統(tǒng)不僅向用戶編程提供了一般的準備功能和輔助功能,而且為編程提供了擴展數(shù)控功能的手段,宏程序的出現(xiàn)為此類圖形的編程提供了很好的解決辦法。宏程序在數(shù)控車中的運用越來越廣泛,掌握它的編程,掌握一定的編程模式,對剛開始接觸數(shù)控車宏程序的學(xué)生,可以大大降低學(xué)生接受的難度,從而提高教學(xué)的效果。宏程序也屬于計算機高級語言編程,它可以在程序中使用變量,通過對變量進行賦值,變量可以進行算術(shù)運算,邏輯判斷和跳轉(zhuǎn)等操作。

二、宏程序的應(yīng)用

(1)宏程序在實際生產(chǎn)中的應(yīng)用

在實際生產(chǎn)中,宏程序編程是自動編程的有效補充。使用CAD/CAM軟件編程一般都存在工作量大、程序龐大和加工參數(shù)不易修改等缺點,只要任何一個加工參數(shù)發(fā)生變化,軟件就要根據(jù)變化后的加工參數(shù)重新計算刀具軌跡,任何智能化的軟件也不能避免這一步驟。在實1.機械零件上常見的一些典型結(jié)構(gòu) ,如多邊形槽、圓槽、孔系、內(nèi)外球面和倒R面等,在采用了宏程序編程之后,只要是同一類型的零件,不論尺寸如何變化,都可以用同一程序來完成加工,而操作者只需在加工前把反映零件關(guān)鍵尺寸的參數(shù)輸入即可。

2.在車削零件加工中,可以通過G代碼編程與宏程序編程相結(jié)合的方式,來實現(xiàn)幾乎所有零件的加工。

3.對中等難度的零件來說 ,使用宏程序編程可以選擇更加合適的走刀方式。由于應(yīng)用了大量的編程技巧,使得宏程序的精度很高,這樣不僅使程序段大大的縮短了,而且也比自動編程的程序加工時間要少了很多。

(2)宏程序在數(shù)控編程教學(xué)中的應(yīng)用

與G代碼編程方式相比,宏程序編程要更加復(fù)雜,不再是利用已有的編程指令,而是輸入相應(yīng)的參數(shù)。在進行宏程序編程之前,學(xué)生必須對所加工的零件有全面的了解,如:為什么該零件要使用宏程序編程,用其它簡單的編程方法是否可以實現(xiàn);零件的哪些參數(shù)要設(shè)為變量,是什么類型的變量;要用到哪些數(shù)學(xué)知識;使用何種語句,達到什么樣的加工效果,等等,在綜合的考慮好這些問題之后方能進行編程。雖然這些問題對于高職學(xué)生來說是有一定難度的,但這也正是學(xué)生能力的最好體現(xiàn)。

(3)宏程序在數(shù)控大賽中的應(yīng)用

縱觀近幾年國家、省和市級的各種數(shù)控大賽,基本上還是以手工編程為主來實現(xiàn)零件的加工。如何做到在有限的時間里和有限的零件載體上體現(xiàn)出選手的綜合素質(zhì),需要參考多項指標,而宏程序編程就是其中重要的一項。

三、編程實例

手動編寫下圖零件的程序:

參考文獻:

[1] 陳光偉.關(guān)于宏程序循環(huán)語句的應(yīng)[J].Equipment ManufacturingTechnology,2010(5):100~ 103.

篇5

關(guān)鍵詞:PLC 工作原理 維護 故障查處

在PLC的課堂教學(xué)中,教師要教授的內(nèi)容包括運用PLC編寫程序、PLC的日常維護,以及PLC問題的解決,在教學(xué)中要從以下幾個方面入手開展工作。

一、讓學(xué)生了解PLC的系統(tǒng)組成

PLC系統(tǒng)是由CPU、存儲器、I/O裝置、編程器以及電源組成的。其中,教師要引導(dǎo)學(xué)生重點了解CPU。它是PLC的核心部分,用掃描的方式接收現(xiàn)場輸入裝置的狀態(tài)或數(shù)據(jù),并存入到映像寄存器或數(shù)據(jù)寄存器中,在PLC進入到運行狀態(tài)后,執(zhí)行用戶程序,進行數(shù)據(jù)處理,并隨時更新數(shù)據(jù)狀態(tài),起著診斷電源和PLC編程過程中出現(xiàn)的語法錯誤的作用。

二、讓學(xué)生掌握PLC的工作原理

PLC采用的是“順序掃描、不斷循環(huán)、集中采樣、集中輸出”的工作方式。在每次掃描的過程中,PLC集中對輸入信號進行采樣,集中對輸出信號進行刷新。在輸入刷新過程中,當(dāng)輸入端口關(guān)閉,程序在進行執(zhí)行階段時,輸入端有新狀態(tài),但是新狀態(tài)不能被讀入。只有當(dāng)程序進行下一次掃描時,新狀態(tài)才能被讀入。PLC的每一個掃描周期分為輸入采樣、程序執(zhí)行、輸出刷新三個環(huán)節(jié)。在這個過程中,元件映像寄存器的內(nèi)容是隨著程序的執(zhí)行變化而變化的。

三、讓學(xué)生熟悉PLC的工作環(huán)境

教師不能只教授學(xué)生如何編寫程序,還要讓學(xué)生熟悉PLC的工作環(huán)境。雖然PLC的抗干擾能力很強,但它對使用場合、環(huán)境等還是有一定的要求的,為了使PLC能更可靠地工作,延長其使用壽命,教師還要向?qū)W生講解PLC工作環(huán)境中的一些注意事項。PLC工作環(huán)境的溫度應(yīng)控制在0℃~50℃,而且要做到陽光不能直射,相對濕度小于85%。在PLC設(shè)備使用過程中,周圍不能有腐蝕性或易燃易爆氣體,不能有能導(dǎo)電的粉塵。設(shè)備安裝位置的振動頻率小于55Hz、振幅小于0.5mm,這樣可以保持PLC工作的穩(wěn)定性。設(shè)備周圍要留有用于擴展和通風(fēng)散熱的空間,必要時可安裝風(fēng)扇進行通風(fēng),在易燃易爆或有腐蝕性氣體的場所應(yīng)考慮在柜內(nèi)正壓通風(fēng),以便導(dǎo)出氣體。

四、讓學(xué)生掌握PLC系統(tǒng)的定期檢查和維護

教師要教會學(xué)生定期巡視PLC各I/O板指示燈指示狀態(tài),查看控制點的狀態(tài)信息,通過觀察設(shè)備運行狀態(tài)信息,判斷PLC控制是否正常;觀察散熱風(fēng)扇運行是否正常;觀察PLC柜有無異味。除此之外,教師還要培養(yǎng)學(xué)生定期除塵的習(xí)慣,除塵時要把被控設(shè)備調(diào)到初始運行狀態(tài),要小心謹慎。因為定期除塵可以保持電路板的清潔,防止短路故障發(fā)生,提高元器件的使用壽命,這也是對PLC控制系統(tǒng)的一種很好的防護措施,另外出現(xiàn)故障時也便于查找故障點。

當(dāng)設(shè)備出現(xiàn)故障的時候,要想快速、準確地查明故障并解決問題,教師在教學(xué)中要重點教會學(xué)生掌握以下要點。

首先,教師要向?qū)W生明確PLC控制回路和繼電器控制回路的不同。PLC與繼電接觸器控制的主要區(qū)別之一,就在于二者的工作方式不同。繼電接觸器控制系統(tǒng)是按照并行方式工作的,即是按照同時執(zhí)行命令的方式工作的,只要形成電流通路,就可能有幾個電器同時動作。而PLC是以串行方式工作的,PLC在循環(huán)執(zhí)行程序時,是按照語句的書寫順序自上而下進行邏輯運算的,而前面邏輯運算的結(jié)果會影響后面語句的邏輯運算結(jié)果。這一點教師必須要讓學(xué)生知道,由于工作方式不同,這兩種控制回路的故障應(yīng)對方法也略有不同。

其次,教師還要讓學(xué)生了解到PLC在運行程序判別觸點通斷狀態(tài)時,只取決于其內(nèi)部輸入繼電器線圈的狀態(tài),并不直接識別外部設(shè)備,而輸入繼電器線圈狀態(tài)取決于外部設(shè)備,這是二者的又一個不同之處。PLC中使用的繼電器并非實體繼電器,而是軟體繼電器,每個軟體繼電器僅對應(yīng)PLC存儲單元中的“一位”,該狀態(tài)為“1”時,表示繼電器線圈通電,這時程序中有該繼電器的觸點就會動作。

篇6

關(guān)鍵詞:IAP;自舉程序;56F8013

DOI: 10.3969/j.issn.1005-5517.2012.8.018

智能汽車競賽要求必須采用飛思卡爾公司的微控制器作為控制單元的核心芯片,數(shù)字信號控制器(DSC)系列具有運算速度快、功耗低、設(shè)備豐富等特點,非常適合智能汽車競賽車??刂?。在競賽秘書處提供的直立車??刂茀⒖挤桨钢芯筒捎昧薉SC56F8013芯片組成控制核心電路[1]。該芯片不僅內(nèi)部硬件資源可以滿足車??刂埔螅宜能浖_發(fā)環(huán)境Codewarrior中的PE(Processor Expert)可以自動生成芯片中各硬件模塊的接口代碼,使得開發(fā)者只需關(guān)注應(yīng)用軟件的開發(fā),這樣便可以提高軟件的開發(fā)效率和準確性。

在DSC56F8013的程序開發(fā)和調(diào)試中,可以使用專用的JTEG調(diào)試工具,這種方式在車??刂葡到y(tǒng)開發(fā)中

根據(jù)上述代碼空間劃定,單片機在復(fù)位之后,首先執(zhí)行Bootloader程序,在Bootloader程序中,先檢查在一定時間內(nèi)(一般設(shè)置為100ms左右)是否接受到用戶通過串口發(fā)送的0x55數(shù)據(jù)。如果受到了0x55數(shù)據(jù),并在最后由0xaa數(shù)據(jù)結(jié)束,便進入Bootloader命令狀態(tài),接受相應(yīng)的程序下載指令,進行程序的更新。否則便從0x1AFF讀取用戶程序的起始地址,開始執(zhí)行用戶程序。具體的啟動過程如圖3所示。

也可以通過設(shè)定一定的觸發(fā)條件

件格式,或者Motorola的S-Record的格式存儲。安裝這些文件格式標準,下載程序?qū)纹瑱C程序轉(zhuǎn)化成可以對Flash進行編程的二進制數(shù)據(jù)。

(2)對于單片機二進制格式的程序前面兩個跳轉(zhuǎn)指令數(shù)據(jù)修改成兩條JMP 0x1B00指令數(shù)據(jù),并保存原有程序的起始地址;

(3)通過串口完成對單片機的復(fù)位,同時發(fā)送0x55和0xaa數(shù)據(jù),引導(dǎo)單片機進入Bootloader命令狀態(tài)。

(4)通過Bootloader的擦除和編程命令完成對單片機Flash的程序下載,并將單片機程序的首地址編程在0x1AFF位置。

篇7

1可編程序控制器起重機系統(tǒng)應(yīng)用

1.1回轉(zhuǎn)系統(tǒng)控制要求(1)港口潮濕多污,所以對軸承密封性能比較高,使用壽命必須達到和本機持平。滾動軸承有三大排,支撐著門機回轉(zhuǎn)工作。(2)回轉(zhuǎn)大軸聯(lián)接處要進行機加工,不僅要有足夠的過渡圓角,還要用熱處理消除應(yīng)力。做到精加工,軸承表面平直無翹曲。在剛度上做到合適且無透光現(xiàn)象。(3)做到360度全能回轉(zhuǎn),依靠變頻電動機和行星減速箱運作回轉(zhuǎn)支撐。

1.2PLC系統(tǒng)IO分配表及ABB變頻器檔位輸入PLC系統(tǒng)IO分配表(如表1)。ABB變頻器輸入的檔位輸入(如表2)。IO分配表工作原理:(1)當(dāng)風(fēng)速達到22m/s時,YF6電接風(fēng)速儀產(chǎn)生信號報警,報警信號使工作狀態(tài)下的電機自動跳閘并停止旋轉(zhuǎn)動作。風(fēng)速儀可選用輪轉(zhuǎn)式探頭。(2)PCI1002-CHR起重機超載限制器和壓電式傳感器連接,PLC信號輸入由超載限制器來完成。假設(shè)門機額定起重量為40T,工作狀態(tài)下的物體重量超過百分之十,超載信號就由限制器發(fā)出PLC輸入信號。這就是超載輸入信號生產(chǎn)原理。(3)電機過載監(jiān)測器使用熱敏電,其原理是電阻急數(shù)字隨著溫度會逐步增加,當(dāng)溫度達到一定上限超額,電子電路可以檢測出來。

1.3PLC控制系統(tǒng)流程門機對回轉(zhuǎn)速度的控制是隨變頻器的反饋信號決定的。連接作用在于PLC,在控制手柄后控制變頻器,這就是門機整個機構(gòu)的工作流程。如圖1:

1.4PLC元件組合門機的旋轉(zhuǎn)電機選變頻調(diào)速三相異步,1-100hz變頻范圍工頻電壓為380V,介于工作變化轉(zhuǎn)速需要,YZP2系列可以滿足1475r/min的轉(zhuǎn)速。根據(jù)設(shè)備,PLC可選簡單可靠的安裝,不僅有豐富指令和靈活的系統(tǒng),還有標準的編程語言和模擬處理。比如需要14輸入和6輸出的,可以選24輸入16輸出的設(shè)備。門機裝卸任務(wù)可由PLC控制電路后,進行輸入信號和運算過程完成旋轉(zhuǎn)系統(tǒng)動作。

2實現(xiàn)港口自動化的可編程序控制系統(tǒng)發(fā)展

2.1可編程序發(fā)展中的問題目前我國可變程序控制器的發(fā)展存在三大足:在技術(shù)層面,由于不具備自主知識產(chǎn)權(quán),所在芯片制造磨具加工等方面有諸多遺憾,也為我國港口發(fā)展帶來束縛;在競爭層面上,目前95%的國內(nèi)市場被國外的PLC程序占據(jù),而且國外對一些中大型的控制器每年都會推成出新,如果我國繼續(xù)沒有自主的相關(guān)知識產(chǎn)權(quán),在競爭中就不具備任何優(yōu)勢;在市場秩序方面,國外的控制器一般都以銷售為主,這就造成了各部總經(jīng)銷商和分經(jīng)銷商及各個終端銷售商的激烈競爭,市場的無序除去造成銷售市場的混亂之外,無法獲取高額利潤更是成了大家的雞肋。

2.2相關(guān)對策(1)集中資金和技術(shù),研制自主的可編程序控制器。讓芯片加工迅速發(fā)展,提高效益和利潤。(2)在可編程序應(yīng)用技術(shù)發(fā)展的同時,不僅將這項技術(shù)應(yīng)用于國民領(lǐng)域,更要憑借技術(shù)力量和勞動優(yōu)勢,打入外商投資市場。制造國際應(yīng)用的可編程序控制系統(tǒng)。只有形成只有這樣的增值服務(wù),才能帶動我國經(jīng)濟發(fā)展。(3)生產(chǎn)設(shè)計自有特色的可編程序控制器,并提煉核心技術(shù),在國際上形成不可復(fù)制的模塊化軟件。

2.3港口自動化的可編程序發(fā)展

2.3.1實現(xiàn)PLC控制網(wǎng)絡(luò)技術(shù)可編程序有很強的數(shù)字計算功能,也有很強數(shù)據(jù)管理功能。在一個散貨碼頭可以通過集中控制和分布控制這兩個系統(tǒng)對港口進行全盤操控。PLC控制系統(tǒng)時效高,容錯能力強大。而且它的可靠性和安全性能都比較優(yōu)越。一個控制主機完成整個系統(tǒng)的運算,各個網(wǎng)絡(luò)通信和信息數(shù)據(jù)由分布系統(tǒng)連接控制。實現(xiàn)港口信息通信自動化。工控管理網(wǎng)絡(luò)和港口各部門互聯(lián),為管理信息提供相關(guān)數(shù)據(jù),完成PLC在內(nèi)的現(xiàn)場控制。向高效率的可靠性方向發(fā)展。

2.3.2實現(xiàn)PLC實時監(jiān)控和在線管理實時監(jiān)控系統(tǒng)對現(xiàn)場作業(yè)控制設(shè)備起著連接作用,它的結(jié)構(gòu)硬件及軟件,硬件安裝PLC控制系統(tǒng),提供各種相關(guān)數(shù)據(jù),并連接上層和管理層的作用。它與管理系統(tǒng)組合。采用監(jiān)控軟件生成應(yīng)用系統(tǒng),實現(xiàn)數(shù)據(jù)庫組織。能及時處理報警現(xiàn)場,并參與和干預(yù)生產(chǎn)過程,在線管理系統(tǒng)則可以為港口操作人員提供安全。

3結(jié)語

篇8

摘 要:分析了電磁干擾及其對PLC控制系統(tǒng)干擾的機理,指出在工程應(yīng)用時必須綜合考慮控制系統(tǒng)的抗干擾性能,并結(jié)合工程提出了幾種有效的抗干擾措施。

關(guān)鍵詞:可編程控制器 電磁干擾 電磁兼容性 控制系統(tǒng) 接地技術(shù)

可編程控制器(以下稱PLC)是一種用于工業(yè)生產(chǎn)自動化控制的設(shè)備。盡管其制造廠采取了一些措施,使得它的可靠性較高,但還有許多外部因素也會使它產(chǎn)生干擾,造成程序誤變或運算錯誤,從而產(chǎn)生誤輸入井引起誤輸出,這將會造成設(shè)備的失控和誤動作。要提高PLC控制系統(tǒng)可靠性,一方面要求PLC生產(chǎn)廠家用提高設(shè)備的抗干擾能力;另一方面,要求工程設(shè)計、安裝施工和使用維護中引起高度重視,多方配合才能完善解決問題,有效地增強系統(tǒng)的抗干擾性能。隨著PLC應(yīng)用的日漸廣泛,其抗干擾問題也顯得日益重要。本文就此問題提出一些抗干擾的措施。

一、 控制系統(tǒng)中干擾及其來源

1、 干擾源及一般分類

影響PLC控制系統(tǒng)的干擾源與一般影響工業(yè)控制設(shè)備的干擾源一樣,大都產(chǎn)生在電流或電壓劇烈變化的部位,這些電荷劇烈移動的部位就是噪聲源,即干擾源。

點擊查看全文

篇9

關(guān)鍵詞:數(shù)控車 宏程序 非圓曲線 零件加工

經(jīng)過近幾年的發(fā)展,我國在數(shù)控專業(yè)技能鑒定方面增添了反對非圓曲線的加工以及嚴格的考察,在全國范圍內(nèi)也舉辦了四屆數(shù)控技能比賽。我們從比賽的結(jié)果上可以看出非圓曲線的加工技能是一個非常重要的考點,并且所占的考核分值比較重。從企業(yè)發(fā)展的角度上來分析,宏程序不只使用在非圓曲線的加工方面,還可以擴展到同樣類型、但是在型號方面存在很大差異性的零件加工上。這些方面我們都可以看出,對于當(dāng)前職業(yè)院校的數(shù)控專業(yè)來講,學(xué)習(xí)和掌握宏程序是非常重要的。

一、五步編程法的定義

在進行編程工作之前需要對已有的圖樣實施數(shù)學(xué)工作處理,這其中主要是需要解決兩個方面的問題:依照實際的要求,選用X方向或者是Z方向上的變量來代替曲線上的開始和結(jié)束的位置,這樣可以方便地確定具置;依照所選取的變量的大小,對曲線的標準方程依照實際加工的要求進行準確的計算。對圖紙了解和掌握以及基本的數(shù)學(xué)處理之后就可以正式開始宏程序的編制,具體的五步編程法如下。

1.將變量進行初始化

第一步主要是依照具體的圖紙來確定一個變量以及給定一個實際的變量,通常宏程序就是從這個加工點開始進行加工,所確定的這個點可以方便人們確定位置并且存在的誤差相對較小?;緛碇v,初始的變量值為曲線標準方程中坐標系靠下的值,通過簡化的方式進行計算;對于實際的位置,在五步法中的第三步可以通過具體的坐標平移來實現(xiàn)。

2.公式計算

第二步是依照所選用的實際變量來對數(shù)學(xué)公式實施具體處理,將另外一個坐標軸上的數(shù)值用實際的變量值來具體表現(xiàn)出來。這個步驟之前應(yīng)當(dāng)具備一個程序段的段落號,這樣可以方便對終點值的判斷,這個語句可以組成一個循環(huán)性的語句來完成整體的加工過程。

3.對G01進行加工

第三步是在對G01實施直線近似值的處理過程中,需要完成單、雙兩方面量的轉(zhuǎn)換以及對平面坐標實施平移,讓圖標可以處于坐標系當(dāng)中具體所指定的位置。這其中單雙兩方面的轉(zhuǎn)換主要是通過宏程序的編程來實現(xiàn)的。

4.自變量的增減

第四步是主要是推動刀具工作的驅(qū)動器。其中自變量就是通過第一步的變量初始化的定義變量,主要是控制增量的大小,提升量加大則出現(xiàn)的誤差就比較大,但是實際的運行速度比較快,增效比較小,那么實際的誤差就比較小,運行的速度就比較緩慢。

5.對終點進行判斷

這是五步編程法中最后一個步驟,這個步驟主要是對判斷宏程序是否真實執(zhí)行到頭,屬于宏程序是繼續(xù)執(zhí)行還是進行終止的判斷者。對變量是否達到了終點進行判斷,如果沒有到達終點,就通過跳轉(zhuǎn)的語句將其轉(zhuǎn)移到計算機計算語句補分來重新開始執(zhí)行;如果已經(jīng)到達了終點,那么就依照順序繼續(xù)進行接下來的程序。

二、數(shù)控車宏程序教學(xué)五步編程法的實際應(yīng)用探究

一個比較簡單的橢圓形的曲線,此時就可以采取五步編程的方式來實現(xiàn)精確的加工。首先我們需要分析的就是采取何種變量來作為具體的自變量,因為X的值通過象限的方式處理是比較繁瑣的,而采取Z來作為自變量是相對比較容易的。Z在橢圓形的標準方程當(dāng)中,采用Z來作為實際的自變量當(dāng)中取值可以從30降低到-22.。

#1=30;其中Z為變量初始化的值,依照標準方程來具體確定。

N20 #2=[1/3]?sqrt[900-#1*#2];根據(jù) Z 計算相應(yīng)點 X 坐標。

G01 Z[2*#1] X[#0-30] F1.1;G01 進行加工,X 中開始單、雙邊變量的計算,Z 中完成橫縱坐標系的準確平移。

#1=#2-0.2;自變量自減,增量為 0.2。

IF [#1GT-11] GOT20;對終點進行判斷,要是不滿足實際數(shù)值,馬上返回到20號的程序段繼續(xù)計算。運用非圓曲線中的宏程序的模板,這樣就可以快速地實現(xiàn)零件加工公式的權(quán)限外部輪廓的編程以及加工。下面我們來具體介紹一個實際的應(yīng)用案例。

在實際的教學(xué)過程當(dāng)中,通過橢圓形的編程和加工居多的,橢圓形的編程具備較強的代表性,具體的橢圓形編程需要重點注意以下幾個方面。

第一,工件的實際精度和在其編程過程中所選取的插補距離有著非常密切的關(guān)系,并且差距越來越小,實際的加工的精度就會有很大提升,但是這種方式就會造成數(shù)控系統(tǒng)中的實際工作量太大,嚴重影響到程序運行的效率,這樣就會造成加工效率低下。在滿足了這個加工條件的基礎(chǔ)下,需要盡量選取步距較大的。

第二,橢圓形的中心和工件軸線出現(xiàn)不重合的零件的時候,就需要將工件的坐標系實施偏置之后,再依照上述的步驟來進行加工。

第三,以上所運行的程序具備一定的宏觀性和通用性,每次只需要改變其中的變量所賦予的數(shù)值,比如橢圓的長軸和短軸的數(shù)值,就可以對同一類型和相似類型的零件進行加工。

具體的模板如下。

橢圓長半軸值為a。

橢圓短半軸值為b。

自變量初始值為c。

橢圓的曲線自起點到橢圓中心點的距離為Z。

自變量的終點值為P,也就是橢圓虛線的終點到橢圓中心距離Z的距離。

設(shè)#3位橢圓中自變量數(shù)值Z;#4作為橢圓中橫軸變量X。

N20 #3=a作為自變量Z的初始值。

N11 WHILE[#3GEp]DOm;WHILE執(zhí)行循環(huán),當(dāng)#3滿足大于或等于p時,則程序在WHILE DOm和ENDm之間循環(huán),否則跳出循環(huán),p為橢圓終點至橢圓中心的Z向距離。

三、小結(jié)

通過對數(shù)控車宏程序教學(xué)中五步編程法的應(yīng)用實踐和探究,我們可以看出五步編程教學(xué)的方式主要是將一個比較完整的宏程序具體分解成五個步驟,數(shù)控車宏程序通常只需要依照一定的順序去執(zhí)行就可以得到實現(xiàn)。在數(shù)控車的教學(xué)中和高級工培養(yǎng)教學(xué)中,宏程序的教學(xué)是不可或缺的。對宏程序教學(xué)中的編程技巧進行有效掌握是對零件進行加工的關(guān)鍵所在。這種方式可以有效降低職業(yè)院校教師對學(xué)生傳授普宏程序教學(xué)的實際難度,通過這種方式的教學(xué)可以給當(dāng)前高職院校的數(shù)控教學(xué)帶來質(zhì)的改變,對數(shù)控車編程教學(xué)的發(fā)展起到推動作用。

參考文獻:

[1]杜江,高俊川,孫道恒.宏程序在數(shù)控車削二次曲線中的應(yīng)用[J].CAD/CAM與制造業(yè)信息化,2012(4).

[2]劉磊.數(shù)控車宏程序教學(xué)的五步編程法[J].成功(教育),2012(7).

[3]崔俊明.中等職業(yè)教育數(shù)控技術(shù)應(yīng)用專業(yè)教材開發(fā)實踐研究[D].河北師范大學(xué),2013(5).

[4]陳曦.在數(shù)控編程教學(xué)中的宏程序教學(xué)[J].重慶與世界(學(xué)術(shù)版),2012(6).

[5]周金蓮.基于華中系統(tǒng)數(shù)控車宏程序編程實例[J].商場現(xiàn)代化,2012(20).

篇10

【關(guān)鍵詞】UG;Ncbrain;加工中心;程序優(yōu)化

0 引言

加工具有自由曲面的復(fù)雜零件需要利用CAD/CAM軟件進行自動編程,生成刀位文件,并利用軟件的后置處理功能把刀位文件轉(zhuǎn)換為滿足加工中心結(jié)構(gòu)和系統(tǒng)要求的NC程序,為了確保所產(chǎn)生的NC程序的正確性和合理性,在實際加工之前還需利用Ncbrain數(shù)控程序優(yōu)化軟件對加工程序進行優(yōu)化和校驗。

本文以某產(chǎn)品的沖壓模具的凸模零件為例,利用UG軟件對零件進行自動編程,并后置處理生成NC程序。利用NCbrain軟件對NC程序進行優(yōu)化并模擬零件真實加工過程,確保NC程序的正確及合理,提高數(shù)控機床的加工效率和安全使用率。

1 UG建模與自動編程

1.1 建模

根據(jù)凸模二維圖紙,利用UG4.0軟件的建模功能建立凸模的三維數(shù)模。

圖1 凸模的三維圖

1.2 加工工藝方案制定及參數(shù)設(shè)置

毛胚為350mm×250mm×120mm的鍛打料,材料為Cr12MoV,在UG/CAM環(huán)境下,分別對其進行粗加工,半精加工,精加工,清根,刀具及參數(shù)設(shè)置見表1。

表1 UG自動編程參數(shù)設(shè)置

1.3 路徑計算及生成刀位文件

利用UG進行編程生成刀具路徑和刀位文件(CLSF),如圖2所示為機身精加工刀路軌跡。

圖2

2 UG后置處理生成NC代碼

利用UG選擇合適的后處理器,生成相應(yīng)的NC代碼,其中粗加工NC代碼如下:

%

(C63XM YL=0.00mm )

(ToolName=BT63R8 D=63.00 R=8.00 L=75.00)

N00001 G40 G17 G90

N00002 G00 Z120.

N00003 G00 X-147.419 Y52.597 S1200 M03

N00004 G00 Z58.911

N00005 G00 Z58.115

N00006 G01 Z43.115 F300

N00007 G01 X-104.069

N00008 G01 Y73.907 F1800

N00009 G01 X104.069

…………

N06513 G00 Z120.

N06514 M05

N06515 M02

N06516 (加工時間::60.min)

3 NCbrain程序優(yōu)化與校驗

圖3

3.1 構(gòu)建毛胚

按照毛胚實際尺寸和加工坐標定義毛胚,如圖3所示。

3.2 NC程序優(yōu)化及驗證

NC代碼中常存在一些不合理現(xiàn)象:

(1)切削進給率過分保守。

(2)空行程時使用切削時的進給率。

(3)實際切削量大于或小于預(yù)期值。

(4)不合理的進退刀及過多的抬刀,這些現(xiàn)象影響了加工效率和加工質(zhì)量,因此需要進行優(yōu)化。

在NCbrain下設(shè)置優(yōu)化參數(shù),調(diào)入NC程序,啟動優(yōu)化自動輸出優(yōu)化結(jié)果。

優(yōu)化及模擬后的狀態(tài)如圖4:

模擬加工后工件狀態(tài) 優(yōu)化后開粗程序

圖4

優(yōu)化后開粗程序:

N1(C63XM YL=0.00mm )

N2(ToolName=BT63R8 D=63.00 R=8.00 L=75.00)

N3G40G17G90

N4G00Z120.

N5G00X-147.419Y52.597S1000M03

N6G0Z66.016

N7G1Z52.016F650

N8Z49.016F250

N9X-144.323F1500

N10X-110.262

N11X-107.165F2000

N12X-104.069F3000

……

N7449G0Z120.

N7450M05

N7451M02

通過對優(yōu)化前后的開粗程序?qū)Ρ瓤梢园l(fā)現(xiàn):優(yōu)化后,提高了空行程的速度,刀具軌跡的進給速度變化更加頻繁,極大的提高了加工效率。

4 驗證

對優(yōu)化后的NC代碼,在我廠加工中心上進行加工驗證,將加工后的實物與仿真結(jié)果進行對比,兩者結(jié)果幾乎一致,這說明優(yōu)化后的NC程序正確合理。

5 結(jié)語

本文基于UG和NCbrain軟件對凸模零件進行程序編制和NC代碼優(yōu)化,可得出一下結(jié)論:

5.1 用UG和Ncbrain軟件相結(jié)合對數(shù)控加工過程進行仿真是可靠的,保證實際加工的安全性,節(jié)省加工設(shè)備和材料的消耗。從而節(jié)省了實際和加工成本。

5.2 優(yōu)化后加工省時效果顯著提高了生產(chǎn)效率,減小刀具磨損,縮短生產(chǎn)周期,降低生產(chǎn)成本。