




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1C語言程序設(shè)計(jì)姜學(xué)峰22.預(yù)處理命令的分類主要有三類:宏定義文件包含條件編譯(改善程序的可移植性)3.預(yù)處理命令的使用要求1)以#號(hào)打頭;2)不是C語句,而不必以分號(hào)結(jié)束;3)通常書寫在函數(shù)之外、源文件開頭;第1頁/共27頁39.1
宏定義用一個(gè)標(biāo)識(shí)符來代表一個(gè)字符串;宏定義分為不帶參數(shù)和帶參數(shù)的宏定義。1.無參宏定義一般形式:#define宏名宏字符串其中:1)define是宏定義命令名;2)宏名按C標(biāo)識(shí)符命名規(guī)則命名,通常字母大寫;3)宏串是不加雙引號(hào)的字符序列;4)當(dāng)宏串為數(shù)字串時(shí),宏名又稱為符號(hào)常量。第2頁/共27頁4作用:在編譯預(yù)處理階段,將定義點(diǎn)之后的宏名全部用宏串替換;替換過程也稱為宏展開。意義:1)便于參數(shù)的修改,一改全改;2)一次定義可多處引用。第3頁/共27頁5例:輸入半徑r,求圓周長(zhǎng)和圓面積。#definePI3.141592main(){floatr,c,s;printf("Enterradius:");scanf("%f",&r);c=2.0*PI*r;/*展開后:c=2.0*3.141592*r;*/s=PI*r*r;/*展開后:s=3.141592*r*r;*/printf("C=%-10.2f\nS=%-10.2f\n",c,s);}Enterradius:1↙C=6.28S=3.14第4頁/共27頁6使用說明:1)利用TC的預(yù)處理實(shí)用程序CPP.EXE,可僅完成預(yù)編譯并產(chǎn)生預(yù)編譯的中間文件,其擴(kuò)展名為.i對(duì)上例:執(zhí)行CPP.EXE程序?qū)XA91.C進(jìn)行預(yù)處理:C:\TC30>CPPC:\ZYC\CPRG\EXA91.C↙顯示預(yù)編譯中間文件的內(nèi)容:C:\TC30>TYPEEXA91.I↙第5頁/共27頁72)一個(gè)宏命令只能定義一個(gè)宏名;3)宏串中的每個(gè)字符都是有效字符;下例多余字符均導(dǎo)致編譯出錯(cuò):#definePI"3.141592"宏展開結(jié)果:c=2.0*"3.141592"*r;
#definePI3.141592;宏展開結(jié)果:c=2.0*3.141592;*r;第6頁/共27頁84)宏定義可書寫在函數(shù)之外的任何位置;一個(gè)宏名的有效范圍是定義點(diǎn)開始直到本源文件結(jié)束;但可利用宏終止命令加以限定;如:#defineG9.8main(){……}宏名G有效;
fun1(…)main、fun1可引用。
{……}
#undefGfun2(…){……}第7頁/共27頁95)字符串中與宏名相同的字符不被替換;6)宏串中可出現(xiàn)已定義的宏名,這種現(xiàn)象稱為宏的嵌套定義;如:#defineR3.0#definePI3.141592#defineC2.0*PI*R#defineSPI*R*Rmain(){printf("C=%f\nS=%f\n",C,S);}最終輸出項(xiàng)C替換為:2.0*3.141592*3.0S替換為:3.141592*3.0*3.0第8頁/共27頁10例:一程序多處使用相同的輸入提示、多處使用相同的輸出格式字符串,為減少書寫量,使用宏定義來實(shí)現(xiàn)。#definePROMPTprintf("Pleaseinputdata:")#defineFORMAT"Result:%d,%d,%d,%d\n"main(){inta,b,c,d,e,f;PROMPT;/*宏引用*/scanf("%d,%d,%d",&a,&b,&c);PROMPT;scanf("%d,%d,%d",&d,&e,&f);printf(FORMAT,a,b,c,a+b+c);printf(FORMAT,d,e,f,d+e+f);}第9頁/共27頁112.帶參數(shù)的宏定義定義一般形式:#define宏名(形參字串表)宏串帶參的宏引用:宏名(實(shí)參字串表)其中:1)形參字串應(yīng)是宏串的子字串,長(zhǎng)度可為1或更大;2)實(shí)參字串應(yīng)與形參字串個(gè)數(shù)相同;帶參的宏展開過程:在宏串替換宏引用的過程中,將宏串從左到右逐一展開,遇到與形參相同的字符串,則用對(duì)應(yīng)的實(shí)參字符串頂替,遇到其它字符則按順序正常展開。第10頁/共27頁12例:計(jì)算以a、b為半徑的圓面積之和及以a、b之和為半徑的圓面積。#defineS(r)3.141592*r*rmain(){floata=2.0,b=3.0,area1,area2,area3;area1=S(a);/*area1=3.141592*a*a;*/area2=S(b);/*area2=3.141592*b*b;*/area3=S((a+b));/*area3=3.141592*(a+b)*(a+b);*/printf("Totalarea:%-7.2f\n",area1+area2);printf("R:%-7.2fCirclearea:%-7.2f\n",a+b,area3);}第11頁/共27頁13帶參的宏使用說明:1)帶參的宏展開過程中出現(xiàn)的實(shí)參頂替形參是字符的頂替,而不是值的頂替;如上例宏引用S(a):實(shí)參字符a頂替形參字符r,不是a的值2.0頂替r;上例宏引用S((a+b)):實(shí)參字符串(a+b)頂替形參字符r;2)為了保證宏展開的結(jié)果符合設(shè)計(jì)本意,應(yīng)在宏串或?qū)崊⒆执屑尤氡匾睦ㄌ?hào);如:#defineS(r)3.141592*(r)*(r)第12頁/共27頁143)宏定義中宏名與參數(shù)的括號(hào)間不能有空格;如:#defineS(r)3.141592*(r)*(r)
宏串由于出現(xiàn)了空格,則認(rèn)為S是宏名而且無參。4)TC對(duì)宏串中雙引號(hào)范圍內(nèi)的內(nèi)容不予替換;如:#definePR(V)printf("V=%d\t",V);main(){inta=1,b=2;PR(a);
/*printf("V=%d\t",a);*/PR(b);/*printf("V=%d\t",b);*/}第13頁/共27頁15例:計(jì)算四邊形的面積。#include"math.h"#defineS(a,b,c)(a+b+c)/2.0#defineAREA(s,a,b,c)sqrt(s*(s-a)*(s-b)*(s-c))floatfun(floatx,floaty,floatz){floatarea,t;t=S(x,y,z);/*t=(x+y+z)/2.0;*/area=AREA(t,x,y,z);return(area);}/*area=sqrt(t*(t-x)*(t-y)*(t-z));*/main(){floata,b,c,d,e,area;scanf("%f,%f,%f,%f,%f",&a,&b,&c,&d,&e);area=fun(a,b,c)+fun(c,d,e);printf("****%-7.2f\n",area);}
第14頁/共27頁16例:#defineN2#defineY(n)((N+1)*n)
執(zhí)行語句z=N*(2+Y(5));后的z值?宏展開后的語句:z=2*(2+15);z值為34。例:#defineMAX(x,y)(x)>(y)?(x):(y)
語句t=MAX(a+b,c+d);的展開結(jié)果?
宏展開后的語句:
t=(a+b)>(c+d)?(a+b):(c+d);第15頁/共27頁179.2"文件包含"預(yù)處理命令命令一般形式:#include"文件名"其中:1)include是文件包含命令名;2)文件名指出需要包含的文件名;可是系統(tǒng)頭文件、用戶頭文件、用戶源程序文件的名字;3)文件名前可帶盤符、路徑。作用:
在預(yù)編譯階段,將被包含文件的內(nèi)容包含到本源文件中,使正式編譯的對(duì)象是包含后的整體。第16頁/共27頁18例:輸入半徑r,求圓周長(zhǎng)和圓面積。方法:將宏定義等預(yù)處理命令編輯在一個(gè)用戶頭文件中,并保存在
c:\zyc\cprg\MY.H;將程序函數(shù)編輯在源文件EXA95.C中;MY.H:#definePI3.141592EXA95.C#include"c:\zyc\cprg\my.h"/*預(yù)編譯時(shí)將my.h的*/main()/*內(nèi)容包含到此處*/{floatr,c,s;printf("Enterradius:");scanf("%f",&r);c=2.0*PI*r;s=PI*r*r;DOSprintf("C=%-10.2f\nS=%-10.2f\n",c,s);}第17頁/共27頁19例:求3×4矩陣最大元素及位置,程序的兩個(gè)函數(shù)分別編制在MYPRG.C和EXA96.C兩個(gè)源文件中。MYPRG.C——intfun1(intx[][4]){inti,j,max;max=x[0][0];line=col=0;/*不必對(duì)外部變量聲明*/for(i=0;i<3;i++)for(j=0;j<4;j++)if(x[i][j]>max){max=x[i][j];line=i;col=j;}return(max);}
第18頁/共27頁20EXA96.C——intline,col;/*全局變量定義*/#include"c:\zyc\cprg\myprg.c"/*將myprg.c包含到此*/main(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},i,j,max;for(i=0;i<3;i++)/*按行輸出矩陣*/
{printf("\n");for(j=0;j<4;j++)printf("%4d",a[i][j]);}max=fun1(a);/*函數(shù)調(diào)用*/printf("\nMAX:a[%d][%d]=%d\n",line,col,max);}注:用這種包含源文件的方法也可調(diào)試多源文件程序;此時(shí)不必作外部函數(shù)聲明、不必建立項(xiàng)目文件。第19頁/共27頁21例:包含系統(tǒng)頭文件#include"stdio.h"#include"math.h"main(){charstr[80];floatx,y;printf("Enterastring:");gets(str);printf("Enteradata:");scanf("%f",&x);y=sqrt(x);printf("%s\n%fsquareroot:%7.2f\n",str,x,y);}
第20頁/共27頁22文件包含說明:1)系統(tǒng)頭文件存放在C:\TC30\INCLUDE目錄中,擴(kuò)展名為.h。頭文件是文本文件,內(nèi)容是相關(guān)的宏定義、結(jié)構(gòu)定義等;2)””與<>的區(qū)別””——先在當(dāng)前目錄查找指定的頭文件,未找到再沿TC的設(shè)置查找;
<>——僅在TC的設(shè)置中查找;第21頁/共27頁23函數(shù)舉例:例:用自定義函數(shù)判斷素?cái)?shù);main中輸出100~200
之間的全部素?cái)?shù)。#include"math.h"main(){intnum,m,count=0,prime(int);for(num=101;num<=199;num=num+2){m=prime(num);if(m){printf("%5d",num); count++; if(count%10==0)printf("\n");}}}第22頁/共27頁24main(){…;for(num=101;num<=199;num=num+2)
{m=prime(num);if(m){…;}}}intprime(intn){inti,k,mark=1;k=sqrt(n);for(i=2;i<=k;i++)if(n%i);/*余數(shù)非零為真*/else{mark=0;break;}return(mark);}第23頁/共27頁25例:用自定義函數(shù)將一方陣在原數(shù)組中轉(zhuǎn)置。#defineN5main(){voidchange(inta[][]),parray(inta[][N]);inta[N][N],i,j;printf("\nEnterAarray(%d):",N*N);for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);printf("\nOldAarray:");parray(a);change(a);/*數(shù)組名作實(shí)參*/pri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合成革的化學(xué)成分與結(jié)構(gòu)考核試卷
- 危險(xiǎn)品管理對(duì)噪聲振動(dòng)和輻射的管理和控制要求考核試卷
- 服裝設(shè)計(jì)人體工學(xué)原理考核試卷
- 批發(fā)業(yè)采購談判技巧與策略考核試卷
- 機(jī)床功能部件在虛擬現(xiàn)實(shí)設(shè)備中的交互式設(shè)計(jì)考核試卷
- 有機(jī)肥料在土壤侵蝕控制與生態(tài)恢復(fù)中的應(yīng)用考核試卷
- 兒童情商培訓(xùn)課件
- 代加工合同范本簡(jiǎn)單
- 燈具采購標(biāo)準(zhǔn)合同范本
- 簡(jiǎn)易的物業(yè)合同范本
- 四年級(jí)全冊(cè)《勞動(dòng)》課程知識(shí)點(diǎn)匯總精排
- 人本位醫(yī)療培訓(xùn)課件
- 《供應(yīng)鏈管理》課程整體設(shè)計(jì)
- 水利工程危險(xiǎn)源辨識(shí)評(píng)價(jià)及風(fēng)險(xiǎn)管控清單
- 申論范文:社區(qū)微治理 共建美好家園
- 高等工程熱力學(xué)教案課件
- 汽車機(jī)械基礎(chǔ)PPT(第3版)全套完整教學(xué)課件
- 醫(yī)療器械質(zhì)量管理制度
- 【招標(biāo)控制價(jià)編制研究文獻(xiàn)綜述(論文)4800字】
- 紅樓夢(mèng)讀書筆記4000字(3篇)
- 紋繡培訓(xùn)專業(yè)藝術(shù)教程課件
評(píng)論
0/150
提交評(píng)論