預(yù)處理和語句_第1頁
預(yù)處理和語句_第2頁
預(yù)處理和語句_第3頁
預(yù)處理和語句_第4頁
預(yù)處理和語句_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、C+程序設(shè)計(jì)程序設(shè)計(jì)主講人:謝昕華東交通大學(xué)信息工程學(xué)院20082008年秋季學(xué)期年秋季學(xué)期 預(yù)處理功能預(yù)處理功能 語句語句 選擇語句選擇語句 循環(huán)語句循環(huán)語句 轉(zhuǎn)向語句轉(zhuǎn)向語句文件包含命令文件包含命令條件編譯命令條件編譯命令宏定義命令宏定義命令文件包含命令一般放在程序頭;一條文件包含命令只能包含一個(gè)文件;文件包含命令可以嵌套;包含文件不易過多;文件名:myfile.h#include myfile2.h#include myfile3.h用來將一個(gè)標(biāo)識符定義為一個(gè)字符串,該標(biāo)識符稱為宏名,被定義的字符串稱為替換文本;兩種定義格式兩種定義格式: 簡單宏定義 帶參數(shù)的宏定義1 1、簡單宏定義、簡

2、單宏定義例如: #define PI 3.1415 /定義符號常量#define #define#define與與constconst定義符號常量的區(qū)別定義符號常量的區(qū)別 const產(chǎn)生一個(gè)具有類型的符號 #define僅產(chǎn)生文本替換,而不管內(nèi)容是否正確const double PI=3.1415;#define PI 3.1415 使用const可以定義一個(gè)局部常量,可局限在一個(gè)函數(shù)體內(nèi) 用#define定義的常量的作用域是從定義時(shí)開始,直到使用#undef取消定義為止,如果不取消定義,直到整個(gè)文件結(jié)束 使用const定義常量是一個(gè)說明語句,用分號(;)結(jié)束 使用#define定義常量是一個(gè)

3、預(yù)處理命令,不能用分號(;)結(jié)束書寫#define命令時(shí),與之間用空格分隔,不能使用等號連接;使用#define定義的標(biāo)識符不是變量,它只用作宏替換,不占用內(nèi)存;#define是一條預(yù)處理命令,不用分號結(jié)束,它所定義的標(biāo)識符等價(jià)于其后的字符串;標(biāo)識符被宏定義后,在取消這次宏定義之前,不允許重新對它進(jìn)行宏定義;宏定義可以嵌套,已定義的標(biāo)識符可以用來定義新的字符串; 應(yīng)寫在一行上,如果需要寫在多行時(shí),需使用續(xù)行符()結(jié)束,并在其后按下回車鍵; 與左括號之間不能出現(xiàn)空格,否則空格右邊都將作為宏體; 定義帶參數(shù)的宏體時(shí),宏體中與參數(shù)名相同的字符序列適當(dāng)?shù)丶由侠ㄌ?,可以避免宏替換后出現(xiàn)的優(yōu)先級問題; C

4、+中,帶參數(shù)的宏定義常由內(nèi)聯(lián)函數(shù)取代;2 2、帶參數(shù)的宏定義、帶參數(shù)的宏定義#define () 例1:分析下列程序的輸出結(jié)果。#include void main() int b(5); #define b 2 #define f(x) b*(x) int y(3); coutf(y+1)endl; #undef b coutf(y+1)endl; #define b(3) coutf(y+1)endl;輸出結(jié)果:82012簡單宏定義帶參數(shù)的宏定義b=2b=5b=3/取消宏定義用來定義某些編譯內(nèi)容要在滿足一定條件下才參與編譯,否則不參與編譯;可使同一源程序在不同的編譯條件下產(chǎn)生不同的目標(biāo)代碼

5、。#ifdef #else#end if#ifdef #end if格式一:格式一:或:或:#ifn ndef #else#end if或:#ifn ndef #end if#if#if #elif#elif #elif#elif .#else#else#end if#end if格式二:格式二:格式三:格式三:例2:分析下列程序的輸出結(jié)果。#include #define A 10void main() #if A0 cout0endl; #elif A0 couta0endl; #else couta=00例3:。/main.cpp#include myfile1.h#include my

6、file2.h/myfile1.h#include myhead.h/myfile2.h#include myhead.h改進(jìn): /myfile1.h #ifndef MYHEAD_H #define MYHEAD_H #include myhead.h#endif/myfile2.h #ifndef MYHEAD_H #define MYHEAD_H #include myhead.h#endif例4:用于調(diào)試。調(diào)試時(shí):#define DEBUG 1.#if DEBUG=1 coutOKendl;#end if.調(diào)試后:#define DEBUG 0.在一個(gè)表達(dá)式后加一個(gè)分號,就構(gòu)成表達(dá)式語

7、句。例如: a=3a=3* *b;b; x=a|b&c; x=a|b&c; Y=x=5; Y=xb?a+:b+; Ab?a+:b+; !a&b|c; !a&b|c; F(a,b); F(a,b); y=fun(&a,&b); y=fun(&a,&b);只有一個(gè)分號的語句就是空語句。它不產(chǎn)生任何操作運(yùn)算。常用于控制結(jié)構(gòu)中。ABTFP如:int x=20;int x=20;if(x=0)if(x=0)if(x50)if(x50) coutx is okn; coutx is okn;elseelse coutx is not okn;

8、 cout=0)if(x=0) if(x50) if(x50) coutx is okn; coutx is okn; else else coutx is not okn; coutx is not okn; ( () ) ( () ) ( () ) 見例題見例題if_elseif_else( () ) ( () ) ( () ) 格式如下:switch() case: case: case: default: /可無可無語義為:根據(jù)對整型表達(dá)式的計(jì)算得到的值,從第一個(gè)case常量開始從上到下逐個(gè)進(jìn)行匹配,若相等,則以此為入口,順序向下執(zhí)行各條語句序列。cinaoperb;見例題見例題swi

9、tch1switch13-4=-13*4=123/4=0.75出錯(cuò)啦出錯(cuò)啦3-4結(jié)果是?結(jié)果是?cinaoperb;34格式如下:switch() case:; break; case:; break; case:;break; default: /可無可無通過加break強(qiáng)行跳轉(zhuǎn)語句,在執(zhí)行完第一個(gè)語句序列后,就強(qiáng)行跳出switch結(jié)構(gòu)開關(guān)語句執(zhí)行路線開關(guān)語句執(zhí)行路線見例題見例題switch2switch2(1)switch后面的表達(dá)式只能是整型、字符型或枚舉型;(2)每個(gè)case表達(dá)式的值不能相同;(3)通常語句序列最后一個(gè)是break,表示退出switch;如果沒有break,并不如if

10、 else具有分支作用,此時(shí)case與default,只起語句標(biāo)號作用,并不改變控制流程; (4)多個(gè)case分支可共用一組語句;(5) default是可選的,且其中的break可省略;注注 意意見例題見例題switch3/3_1/3_2switch3/3_1/3_2注注 意意double s;switch(s) switch(s) case s=90&s=80&s90 : g=L; break; char s;switch(s) case A : g=Y; 非00格式格式: for(e1;e2;e3)計(jì)算e2退出退出循環(huán)循環(huán)計(jì)算e1計(jì)算e3e1;while(e2) ; e3

11、; 執(zhí)行語法為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體 /一般為塊語句形式如: sum=0; for (int I=1; I=100; I+) sum+=I; coutsum1-IIIsum+I-sumNY其執(zhí)行流程等效于下列程序段:int I=1;int I=1; /聲明循環(huán)變量I,并賦初值 /for中表達(dá)式1語句的一般作用while (I=n)while (I10) break; /省略表達(dá)式2 for (I=1; I=10; ) sum+=I+; /省略表達(dá)式3 I=1; for ( ; I10) break; /全部省略 for (sum=0,I=1;I=10;I+) sum+

12、=I; for (I=1;I=10;sum+=I+); ; /循環(huán)體為空語句 for (int I=1;I=10;I+) sum+=I; while循環(huán)由4部分組成:循環(huán)變量初始化,循環(huán)條件,循環(huán)體,改變循環(huán)變量的值。語法為:while(條件表達(dá)式) 循環(huán)體如:實(shí)現(xiàn)1到10累加的算法: I=1; /循環(huán)變量初始化 while (I=10) /循環(huán)條件 /循環(huán)體 sum = sum + I ; /算法語句 I+; /改變循環(huán)變量的值 PAFT I=1; /循環(huán)變量初始化while (I=10) /循環(huán)條件 /循環(huán)體 sum = sum + I ; /算法語句 I+; /改變循環(huán)變量的值 上述例句

13、可改寫為: while (I+=10) sum+=I; 或:或: while (I=10) sum+=I+;又如: while (sum+=I+,I=10) 循環(huán)條件循環(huán)體賦初值給循環(huán)變量循環(huán)體中使循環(huán)結(jié)束的語句YN語法為: do 循環(huán)體循環(huán)體 /一般為塊語句形式 while(條件表達(dá)式);如: int I=1;int sum=0; do sum+=I; while (I+10); 上述語句還是實(shí)現(xiàn)求1至10的累加。while語句是先判斷條件來決定是否執(zhí)行循環(huán)體,而do.while語句是先執(zhí)行一次循環(huán)體,再來判斷條件來決定是否繼續(xù)執(zhí)行。條件條件塊語句塊語句NY do do while(); w

14、hile(); while() do while(); for () while() for (int I=1;I10;I+) for(int j=1;j10;I+) coutIjI*j; coutendl; 該語句可用于while、do、for和switch語句中。在switch結(jié)構(gòu)中用來使流程跳出該結(jié)構(gòu),繼續(xù)執(zhí)行switch語句后的語句。在循環(huán)語句中,用來從最近的封閉循環(huán)體內(nèi)跳出。既跳出當(dāng)層循環(huán)結(jié)構(gòu)。注:不能跳出所有循環(huán)層。 for (; ; ) for ( ; ; ) / if (i= =1)break; / a=1; /break跳至此處 / /對于本次循環(huán)的循環(huán)體中的后面程序段內(nèi)容不

15、再執(zhí)行 /注:進(jìn)入下一次循環(huán)判斷前要先執(zhí)行表達(dá)式3)和其他類型變量一樣,字符串變量必須先定義后使用,定義字符串變量要用類名string。如string string1; /定義string1為字符串變量string string2=China; /定義string2同時(shí)對其初始化將C+標(biāo)準(zhǔn)庫中的string頭文件包含進(jìn)來,即應(yīng)加上#include /注意頭文件名不是string.hstring1=Canada;string2=string1; 在定義字符串變量時(shí)不需指定長度,長度隨其中的字符串長度而改變??蓪ψ址兞恐心骋蛔址M(jìn)行操作,如 string word=Then; /定義并初始化字

16、符串變量wordWord2=a; /修改后word的值為Thancin string1; /從鍵盤輸入一個(gè)字符串給string1cout(大于)、=(大于或等于)、=(小于或等于)等關(guān)系運(yùn)算符來進(jìn)行字符串的比較。string name5; /定義字符串?dāng)?shù)組,它包含5個(gè)字符串元素string name5=Zhang,Li,Fun,Wang,Tan; /定義一個(gè)字符串?dāng)?shù)組并初始化(1) 在一個(gè)字符串?dāng)?shù)組中包含若干個(gè)(現(xiàn)為5個(gè))元素,每個(gè)元素相當(dāng)于一個(gè)字符串變量。(2) 并不要求每個(gè)字符串元素具有相同的長度,即使對同一個(gè)元素而言,它的長度也是可以變化的,當(dāng)向某一個(gè)元素重新賦值,其長度就可能發(fā)生變化。

17、(3) 在字符串?dāng)?shù)組的每一個(gè)元素中存放一個(gè)字符串,而不是一個(gè)字符,這是字符串?dāng)?shù)組與字符數(shù)組的區(qū)別。如果用字符數(shù)組存放字符串,一個(gè)元素只能存放一個(gè)字符,用一個(gè)一維字符數(shù)組存放一個(gè)字符串。(4) 每一個(gè)字符串元素中只包含字符串本身的字符而不包括0。系統(tǒng)為每一個(gè)字符串變量分配4個(gè)字節(jié)(),在這個(gè)存儲單元中,并不是直接存放字符串本身,而是存放字符串的地址。在本例中,就是把字符串Zhang的地址存放在name0,把字符串Li 的地址存放在name1,把字符串Fun的地址存放在name2在字符串變量中存放的是字符串的指針(字符串的地址)。用字符串?dāng)?shù)組存放字符串及對字符串進(jìn)行處理是很方便的。#include

18、 #include /別忘記了這行!using namespace std;int main( ) string string1,string2,string3,temp; cinstring1string2string3; if(string2string3) temp=string2;string2=string3;string3=temp; if(string1=string2) coutstring1 string2 string3endl; else if(string1=string3) coutstring2 string1 string3endl; else coutstrin

19、g2 string3 string1endl; 例6: 一個(gè)班有n個(gè)學(xué)生(姓名和學(xué)號), 當(dāng)輸入一個(gè)姓名后查找該班中有無此學(xué)生,如果有則輸出他的姓名和學(xué)號,如沒有則輸出“本班無此人”#include #include using namespace std;string name50,num50; /分別存放姓名和學(xué)號void input_data( ); /函數(shù)聲明void search(string find_name); /函數(shù)聲明int n; /n是實(shí)際的學(xué)生數(shù)int main( )string find_name; /find_name是要找的學(xué)生 cinn; /輸入學(xué)生數(shù) inpu

20、t_data( ); /調(diào)用input_data函數(shù),輸入學(xué)生數(shù)據(jù)cinfind_name; /輸入要找的學(xué)生的姓名 search(find_name); /調(diào)用search查找該學(xué)生姓名 return 0;void input_data( ) /函數(shù)首部 int i; for (i=0;in;i+) coutinput name and NO.i+1nameinumi;void search(string find_name) /函數(shù)首部 int i; bool flag=false; for(i=0;in;i+) if(namei=find_name) coutnamei Found! N

21、O. is numiendl; flag=true; break; if(flag=false) coutNo find!;情況如下:情況如下::5 input name and NO.1:Li 1001input name and NO.2:Zhang 1002input name and NO.3:Wang 1003input name and NO.4:Tan 1004input name and NO.5:Fun 1005:WangWang Found! NO. is 1003例例7 分析程序運(yùn)行結(jié)果。 int i(1),a(0); for (;i=5;i+) do i+; a+; w

22、hile(i3); i+; couta,iendl; ia1021i3成立32i3不成立45for (;I=5;I+)637831-127#define M 10void main()int num,sum(0);coutinput number:;for(int i=0;inum;if(num0) continue;sum+=num;coutsum=sumendl;例例9 9:求:求1010個(gè)數(shù)中的正數(shù)之和個(gè)數(shù)中的正數(shù)之和例:判斷整數(shù)例:判斷整數(shù) m m其是否為素?cái)?shù)其是否為素?cái)?shù)快速算法:判斷它能否被2到sqrt(m)之間的數(shù)之間的數(shù)整除,若不能則是素?cái)?shù)。 long m; coutm; int

23、 sqrtm=sqrt(m); for (int I=2;I=sqrtm+1) coutmis prime.n; else coutmisnt prime.n; /輸出 1、編程實(shí)現(xiàn)兩個(gè)浮點(diǎn)數(shù)的四則運(yùn)算;2、編程求出50至100之內(nèi)的素?cái)?shù)并輸出;3、求兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù);4、求一元二次方程ax2+bx+c=0的解;5、打印如下圖形: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 10 10 10 10 10 10 10 10 10 A A ABC ABC ABCDEABCDE ABCDEFG ABCDEFGABCDEFG.SABCDEFG.S1

24、、百錢買百雞。公雞每只7元,母雞每只5元,小雞1元3只,用100元買100只雞(每種雞都要有),公雞母雞小雞各有多少?2、編程求水仙花數(shù)。水仙花數(shù)是指一個(gè)三位數(shù),如果其各位數(shù)的立方和剛好等于該數(shù)本身)。如1531353333、求1000以內(nèi)的所有完數(shù)(指一個(gè)數(shù)恰好等于它的包括1在內(nèi)的所有因子之和)。如6123.4、將100元兌換成10、5、1元,有哪些兌換方法?void main() double d1,d2; char op; double temp; coutd1opd2; switch(op) case+:temp=d1+d2; break; case-:temp=d1-d2; break; case*:temp=d1*d2; break; case/:temp=d1/d2; break; default:couterror!n; coutd1opd2=tempendl; /匹配main#include#include#define MIN 51#define MAX 100void main() int i, j, k,n(0);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論