版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
八、編譯預(yù)處理
宏定義
2文件包含命令3小型案例5
任務(wù)71條件編譯4任務(wù)分析1求解某校園圓形花壇的圓周長(zhǎng)及圓面積要解決這類問(wèn)題,首先為所需使用的常量確定好便于記憶和理解的符號(hào)標(biāo)識(shí),以便構(gòu)造程序和整理程序文本,從而也方便程序的修改和移值,接下來(lái)按程序功能編碼。程序中運(yùn)用圓周長(zhǎng)計(jì)算公式及圓面積計(jì)算公式進(jìn)行計(jì)算,公式書(shū)寫符合C語(yǔ)言語(yǔ)句形式即可。返回首頁(yè)任務(wù)分析1要解決這類問(wèn)題,首先為所需使用的常量確定好便于記憶和理解的符號(hào)標(biāo)識(shí),以便構(gòu)造程序和整理程序文本,從而也方便程序的修改和移值,接下來(lái)按程序功能編碼。程序中運(yùn)用圓周長(zhǎng)計(jì)算公式及圓面積計(jì)算公式進(jìn)行計(jì)算,公式書(shū)寫符合C語(yǔ)言語(yǔ)句形式即可。數(shù)據(jù)需求問(wèn)題輸入r/*表示圓的半徑*/問(wèn)題輸出circ/*存放圓的周長(zhǎng)*/area/*存放圓的面積*/返回首頁(yè)任務(wù)分析1求解圓周長(zhǎng)及面積的程序*/#include<stdio.h>/*預(yù)處理,頭文件對(duì)printf,scanf函數(shù)的聲明*/#definePI3.14159/*定義符號(hào)常量PI*/doublecirc(r)doubler;{return(2.0*PI*r);}doublearea(r)返回首頁(yè)任務(wù)分析1doubler;{return(PI*r*r);}main(){doubler;/*定義雙精度型變量r*/printf(“請(qǐng)輸入待求圓半徑:”);/*輸入圓的半徑*/scanf(“%lf\n”,r);printf(“所求圓的周長(zhǎng)%.4f=circ\n”,circ(r));/*所求圓的周長(zhǎng)*/printf(“所求圓的面積%.4f=area\n”,area(r));/*所求圓的面積*/}運(yùn)行結(jié)果:請(qǐng)輸入待求圓半徑:1.0所求圓的周長(zhǎng)=6.2832所求圓的面積=3.1416返回首頁(yè)宏定義1
宏定義是編譯預(yù)處理內(nèi)容之一,C語(yǔ)言的宏定義分為兩種形式,即帶參數(shù)的宏定義和不帶參數(shù)的宏定義兩種形式。返回首頁(yè)無(wú)參宏定義1無(wú)參宏是用一個(gè)簡(jiǎn)單的名字代替一長(zhǎng)的字符串,一般定義格式為:#define符號(hào)常量名字符串其中符號(hào)常量名稱為宏名,習(xí)慣上用大寫字母表示,常量名與所對(duì)應(yīng)的字符串間用空格符隔開(kāi),在程序中,凡出現(xiàn)符號(hào)常量名的地方,經(jīng)編譯預(yù)處理后就都被替換為它所對(duì)應(yīng)的字符串,即所謂的宏展開(kāi)。
行尾無(wú)需符號(hào)無(wú)參宏定義1例8.1無(wú)參宏應(yīng)用舉例#include<stdio.h>#defineR3.0#definePI3.1415926#defineL2*PI*R#defineSPI*R*Rmain(){printf(“L=%f\nS=%f\n”,L,S);}程序運(yùn)行結(jié)果為:L=18.849556S=28.274333帶參宏定義1除簡(jiǎn)單的宏定義(即不帶參的宏)外,C語(yǔ)言預(yù)處理還允許帶參數(shù)的宏定義,進(jìn)行預(yù)處理時(shí)不僅對(duì)定義的宏名進(jìn)行替換,而且還進(jìn)行參數(shù)替換,定義的一般格式為:#define宏名(參數(shù)表)字符串其中,字符串中應(yīng)該包含在參數(shù)表中所指定的參數(shù)注意:使用宏定義所帶的實(shí)參可以是常量、已被賦值的變量或表達(dá)式,一個(gè)宏定義所帶參數(shù)可以多于一個(gè),使用帶參宏編程時(shí),應(yīng)注意在宏定義中宏名和左括號(hào)間沒(méi)有空格,另外帶參宏還允許宏定義嵌套。返回首頁(yè)返回節(jié)首2
帶參宏定義例8.2帶參宏應(yīng)用舉例#include<stdio.h>#definePI3.1415926#defineCIRCLE(R,V)V=4.0/3.0*PI*R*Rmain(){floatr,v;scanf(“%f”,&r);CIRCLE(r,v);printf(“r=%6.2f,v=%6.2f\n”,r,v);}程序運(yùn)行結(jié)果為:3.5r=3.50,v=179.59返回首頁(yè)2
宏命令#undef用于終止宏定義的作用域,一般形式為:#undefine宏名例如:#defineG9.8main(){…../*G的有效范圍是從定義開(kāi)始到#undefG止*/}#undefGf1(){……}分析:由于在函數(shù)f1()之前終止了宏名G的作用,故G不再在f1()中起作用,#undef也可用于函數(shù)內(nèi)部。終止宏定義2
所謂文件包含預(yù)處理是指在一個(gè)文件中將另外一個(gè)文件的全部?jī)?nèi)容包含進(jìn)來(lái)的處理過(guò)程,即將另外的文件包含到本文件中。C語(yǔ)言編譯預(yù)處理命令#include實(shí)現(xiàn)包含操作,一般形式為:#include<文件名>或#include“文件名”其中,文件名是指要包含進(jìn)來(lái)的文本文件的名稱,也稱為頭文件或編譯預(yù)處理文件。
文件包含命令2
例如,在file1.c文件中有如下內(nèi)容:inta,b,c;floatx,y,z;charm,n,p;file2.c文件內(nèi)容如下:#include“file1.c”main(){……}則對(duì)file2.c文件進(jìn)行編譯處理時(shí),在編譯處理階段將對(duì)其中的#include命令進(jìn)行”文件包含”處理,將file1.c文件中的全部?jī)?nèi)容插入到file2.c文件中的#include“file1.c”預(yù)處理語(yǔ)句處,也即是將file1.c文件中的內(nèi)容包含到file2.c文件中,經(jīng)編譯預(yù)處理后,file2.c文件的內(nèi)容為:inta,b,c;floatx,y,z;charm,n,p;main(){……}文件包含命令2
不同的庫(kù)函數(shù)其功能是不一樣的,以下是C語(yǔ)言中常用的標(biāo)準(zhǔn)頭文件
文件包含命令表8.1C語(yǔ)言中的常用標(biāo)準(zhǔn)頭文件2
一般情況源程序中所有的行都參加編譯,但有時(shí)希望對(duì)其中一部分內(nèi)容只有在滿足一定條件下才進(jìn)行編譯,也即是對(duì)一部分內(nèi)容指定編譯條件,這就是“條件編譯”。適當(dāng)使用條件編譯將有助于程序的調(diào)試和移值。條件編譯分如下幾種形式:條件編譯2
1.帶#if、#else和#endif標(biāo)識(shí)的定義的一般形式為:#ifdef表達(dá)式程序段1#else表達(dá)式程序段2#endif其功能是當(dāng)表達(dá)式值為真時(shí),則執(zhí)行程序段1;否則執(zhí)行程序段2,其表達(dá)式必須是不整型常量表達(dá)式。2.帶#ifdef標(biāo)識(shí)的定義的一般形式為:#ifdef宏名程序段1#else條件編譯2
程序段2#endif其功能是用來(lái)測(cè)試一個(gè)宏名是否被定義,若宏名被定義則編譯程序段1;否則編譯程序段2。3.帶#ifndef標(biāo)識(shí)的定義的一般形式為:#ifndef宏名程序段1#else程序段2#endif其功能是用來(lái)測(cè)試一個(gè)宏名是否曾被定義,若宏名未被定義則編譯程序段1;否則編譯程序段2。條件編譯2
例8.3從鍵盤輸入10個(gè)整數(shù),并依所設(shè)置的編譯條件將其中的最大值或最小值顯示出來(lái)。#include<stdio.h>#defineMFLAG1mai(){inti,M;intarray[10];for(i=0;i<10;i++)scanf(“%d”,&array[i]);/*鍵盤輸入整數(shù)到數(shù)組array中*/M=array[0];/*將數(shù)組中第一個(gè)元素賦給M*/for(i=1;i<10;i++) {#ifMFLAG/*根據(jù)條件編譯完成不同條件下的編譯操作*/條件編譯2
/*當(dāng)M為1時(shí),/求10個(gè)數(shù)中的最大者,否則求最小者*/if(M<array[i])M=array[i];#elseif(M>array[i])M=array[i];#endif}printf(“M=%d”,M);}條件編譯2
提出問(wèn)題:對(duì)字符的操作,有時(shí)需要將字符的大小寫進(jìn)行切換,比如輸入一組字符將它轉(zhuǎn)換為大寫形式輸出或是以小寫形式輸出等,本例程中就是要求任意輸入一行字母字符,根據(jù)需要設(shè)條件編譯,使之能將字母全改為大寫輸出或小寫輸出。小型案例2
分析問(wèn)題:可先設(shè)定一個(gè)常量,作為后續(xù)進(jìn)行預(yù)處理的條件編譯命令的條件選項(xiàng),依不同的條件作相應(yīng)的條件編譯。數(shù)據(jù)需求問(wèn)題輸入LETTER/*作為存放字母字符的常量標(biāo)識(shí)*/str[]/*一個(gè)字符串?dāng)?shù)組*/問(wèn)題輸出轉(zhuǎn)換后的字母符號(hào)相關(guān)計(jì)算公式小寫字母-32==大寫字母小型案例2
求解問(wèn)題:算法如下1.讀取字符串?dāng)?shù)組的各個(gè)字符2.依LETTER標(biāo)識(shí)條件,作相應(yīng)的轉(zhuǎn)換3.用小寫字母與大寫字母間的差值為32進(jìn)行計(jì)算轉(zhuǎn)換小型案例2
程序?qū)崿F(xiàn):字符的大小寫轉(zhuǎn)換程序*/#defineLETTER1main(){charstr[20]=“Clanguage”,c;inti;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024路面鋪裝工程測(cè)量與放樣服務(wù)合同
- 2025年度智慧社區(qū)物業(yè)管理服務(wù)合同規(guī)范文本3篇
- 2025年度殯葬墓地銷售及售后服務(wù)協(xié)議書(shū)3篇
- 2025年度數(shù)據(jù)中心建設(shè)承包合同參考范文4篇
- 2025年度智能車位共享平臺(tái)代理銷售合同模板4篇
- 2024栽樹(shù)合同范本:生態(tài)濕地栽樹(shù)項(xiàng)目合同3篇
- 2025年度智能儲(chǔ)藏室資產(chǎn)交易合同4篇
- 2025年度智能化倉(cāng)儲(chǔ)儲(chǔ)藏室租賃及運(yùn)營(yíng)管理協(xié)議范本4篇
- 2025年度醫(yī)療設(shè)備代工制造合同4篇
- 2025年度個(gè)人車輛購(gòu)置稅連帶擔(dān)保協(xié)議4篇
- GB/T 11072-1989銻化銦多晶、單晶及切割片
- GB 15831-2006鋼管腳手架扣件
- 有機(jī)化學(xué)機(jī)理題(福山)
- 醫(yī)學(xué)會(huì)自律規(guī)范
- 商務(wù)溝通第二版第4章書(shū)面溝通
- 950項(xiàng)機(jī)電安裝施工工藝標(biāo)準(zhǔn)合集(含管線套管、支吊架、風(fēng)口安裝)
- 微生物學(xué)與免疫學(xué)-11免疫分子課件
- 《動(dòng)物遺傳育種學(xué)》動(dòng)物醫(yī)學(xué)全套教學(xué)課件
- 弱電工程自檢報(bào)告
- 民法案例分析教程(第五版)完整版課件全套ppt教學(xué)教程最全電子教案
- 7.6用銳角三角函數(shù)解決問(wèn)題 (2)
評(píng)論
0/150
提交評(píng)論