《C++語言基礎(chǔ)》PPT課件

上傳人:san****019 文檔編號:15827757 上傳時間:2020-09-09 格式:PPT 頁數(shù):496 大?。?.47MB
收藏 版權(quán)申訴 舉報 下載
《C++語言基礎(chǔ)》PPT課件_第1頁
第1頁 / 共496頁
《C++語言基礎(chǔ)》PPT課件_第2頁
第2頁 / 共496頁
《C++語言基礎(chǔ)》PPT課件_第3頁
第3頁 / 共496頁

下載文檔到電腦,查找使用更方便

19.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《C++語言基礎(chǔ)》PPT課件》由會員分享,可在線閱讀,更多相關(guān)《《C++語言基礎(chǔ)》PPT課件(496頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、C++語言基礎(chǔ),鹽城工學院 惠為君,C++概述,C++的特點 發(fā)展歷史和未來 (CC++(AT const int Number_of_Student=100; 常變量必須也只能在說明時進行初始化; 常變量初始化之后,不允許再被賦值; 常變量必須先說明后使用; 常變量存儲在數(shù)據(jù)區(qū),并且可以按地址訪問,編譯時系統(tǒng)對常變量進行類型檢查。 C++建議使用常變量,而盡量不使用字面常量。,,2.3.3 結(jié)束,,,2.1.7 變 量,,,1 變量說明,2 變量賦初值,變量,在程序中是指可以改變值的量; 變量必須用標識符進行標識,稱為變量名; 變量有類型之分,如整形變量、字符變量等; 任何變量都必須先說明后

2、使用;一是便于編譯程序為變量分配空間,二是便于編譯時進行語法檢查; 變量使用的第一步,是給變量賦初始值;,,ok,,,變量說明,在C++中,變量說明的一般格式為: 存儲類型數(shù)據(jù)類型 變量名1,變量名2, ,變量名n;,下面是變量說明的幾個例子: int i, j, k; //說明三個整型變量i, j, k float x, y, z; //說明三個實型變量x, y, z char c1, c2; //說明兩個字符型變量c1, c2 double dx; //說明一個雙精度型變量dx,,變量說明 結(jié)束,,,變量賦初值,(1)變量說明時直接賦初值。 例如:int a=3, b=4, c

3、=5; float x=3.0; (2)用賦值語句賦初值。嚴格的說,只有前者可稱賦初值 例如:float x, e; x=3.5; e=2.71828;,,結(jié)束,,,給變量賦初值稱為初始化,有兩種方法:,2.2 基本運算符,,,對常量和變量進行運算是通過運算符來實現(xiàn)的. 常量和變量通過運算符組成C++表達式,由表達式再組成C++語句. 運算符是完成對常量和變量進行運算的符號. 把參與運算的對象稱為操作數(shù).,按照要求的操作數(shù)的個數(shù),運算符分為單目(一元)運算符、雙目(二元)運算符和三目(三元)運算符。單目運算符只對一個操作數(shù)運算,如負號運算符“”等;雙目運算符要求有兩個操作數(shù),如乘

4、號運算符“*”等;三目運算符要求有三個操作數(shù),三元運算符只有一個“?:”。,1.算術(shù)運算符,ok,,,,運算符重載: 當兩個操作數(shù)均為整數(shù)時,*和/重載為整乘和整除,結(jié)果為整數(shù),除法運算后舍去小數(shù)取整。如: 5/4//結(jié)果為1,整數(shù),,,當兩個操作數(shù)均為整數(shù),%定義為求余運算,也稱求模運算,結(jié)果為兩個整數(shù)相除后的余數(shù)。如果兩個整數(shù)中有負數(shù),則先用兩數(shù)絕對值求余,最后結(jié)果的符號與被除數(shù)相同。例如 6%3//結(jié)果為0 6%7//結(jié)果為6 7%6//結(jié)果為1,C++中算術(shù)運算應(yīng)注意數(shù)據(jù)溢出問題,即運算結(jié)果超出對應(yīng)數(shù)據(jù)類型的表示范圍。編譯程序只會對除法運算時除數(shù)為0這種情況提示出錯,而特別容易溢出的整

5、數(shù)的加、減和乘法運算產(chǎn)生溢出的情況,系統(tǒng)不作為錯誤處理,程序?qū)⒗^續(xù)執(zhí)行并產(chǎn)生錯誤的計算結(jié)果。因此,程序設(shè)計者必須在程序中解決檢查并處理整數(shù)溢出問題。,只要有一個操作數(shù)是實數(shù),兩個操作數(shù)均轉(zhuǎn)換為double型,*和/重載為普通的乘和除,結(jié)果是實數(shù): 5/4.0//結(jié)果為1.25,實數(shù),,,2.關(guān)系運算符和邏輯運算符,,ok,關(guān)系運算符都是二元運算符,包括:(大于)、(不小于)、(小于)、(不小于)、= =(等于)和!=(不等于)。關(guān)系運算符完成兩個操作數(shù)大小的比較,結(jié)果為邏輯值true(真)或false(假)。每種可比較大小的數(shù)據(jù)類型,都重載了關(guān)系運算符。不同類型,自動轉(zhuǎn)換為同一類型后,采用對應(yīng)

6、關(guān)系運算符進行比較。,,,,在C++中這兩個邏輯值與整數(shù)之間有一個對應(yīng)關(guān)系,真對應(yīng)1,假對應(yīng)0;反過來,0對應(yīng)假,非0整數(shù)對應(yīng)真。所以關(guān)系運算結(jié)果可以作為整數(shù)參與算術(shù)運算、關(guān)系運算、邏輯運算及其他運算。,2.關(guān)系運算符和邏輯運算符,設(shè)有定義 float a=3.2;int b=5;則: 3ab//結(jié)果是?,根據(jù)右結(jié)合 原則其運算 過程如下:,a,5,b,3.2,3,,,F, 即0,,,,F即0,,,,,,,邏輯運算符,邏輯運算符用來進行邏輯運算。其操作數(shù)和運算結(jié)果均為邏輯量。運算結(jié)果同樣可以作為一個整數(shù)參與其他運算。,由于邏輯值和整數(shù)之間的對應(yīng)關(guān)系,也允許整型和字符型操作數(shù)進行邏輯運算: 2

7、1//左值不能是常數(shù) x+y=z;//左值不能是表達式 const int N=30; N=40;//左值不能是常變量,5.自增自減運算,運算分前置和后置兩種,前置是先增減后引用,即先對變量自加或自減,用新的值參與其他運算;后置則是先引用后增減,即用變量原來的值參與其他運算,然后再對變量進行自加或自減,例如: int i=5, j=5, m, n; m=i++; //后置;相當于m=i; i=i+1; //結(jié)果:i的值為6,m的值為5; n=++j; //前置;相當于j=j+1;n=j; //結(jié)果:j的值為6,n的值為6;,意義:使變量當前值加1或減1,再賦給該變量。 要求:操作數(shù)只能

8、是變量,不能是常量或表達式;,ok,,,,sizeof( ) 運算符,用于計算一個操作數(shù)類型或一個變量的字節(jié)數(shù)。一般格式為:sizeof (數(shù)據(jù)類型) 或 sizeof(變量名) 例如:sizeof(int) 值為4 sizeof( float) 值為4 double x; sizeof( x) 值為8,,結(jié)束,,,2.2.2 表達式,,,,,,1 算術(shù)表達式,2 關(guān)系表達式,3 邏輯表達式和邏輯表達式求值的優(yōu)化,4 賦值表達式與復(fù)合賦值表達式,5 逗號表達式,ok,,,,,1.算術(shù)表達式,使用時注意: 1、表達式中每個變量都有確定的值時才能進行表達式求值; 2、考慮到算術(shù)運算溢出和精度

9、問題,應(yīng)避免: (1)兩個很接近的數(shù)直接相減; (2)除數(shù)是一個很小的數(shù); (3)整數(shù)的連續(xù)乘運算。,ok,,,,由算術(shù)運算符連接的表達式稱為算術(shù)表達式,例如:a+b*3 ;,2.關(guān)系表達式,例如: abc /*等同于(ab)c,先求ab 的值, 再將結(jié)果0或1與c比較大小*/ a+bc+d /*等同于(a+b)(c+d), 結(jié)果為0或1*/ y=ab /*計算ab的值0或1 賦給y,y的值為0或1*/,由關(guān)系運算符連接的表達式。值為true或false。,ok,,,,3.邏輯表達式和邏輯表達式求值的優(yōu)化,由邏輯運算符連接的表達式稱為邏輯表達式。邏輯表達式的值為true或fals

10、e。這個值可對應(yīng)整數(shù)1或0參與其他運算。,ok,,已知: int a=10, b=20, c=30;float x=1.8, y=2.4;,ay||ay)||(a<(b-(!c))),,,,,,,,,t1=1,t2=0,t4=0,-, 求: a

11、= 表達式 例如:x=5+6;a=b=c=d+1; 在C++中,所有的雙目算術(shù)運算符和位運算符均可與賦值運算符組合成一個單一運算符,稱為復(fù)合運賦值算符。包括以下10個: + = = * = / = % = = int i1, i2; float x1, x2; 則表達式 x2=c1*i1+c1*x1+c1*c2 的求值過程為:將c1轉(zhuǎn)換成整型,完成c1*i1,結(jié)果表示為t1;將c1和x1均轉(zhuǎn)換成雙精度型,完成c1*x1,結(jié)果表示為t2;將c1和c2均轉(zhuǎn)換成整型,完成c1*c2,結(jié)果表示為t3;然后t1轉(zhuǎn)換成雙精度型,完成t1+t2,結(jié)果表示為t4;將t3轉(zhuǎn)換成雙精度型,完成t4+t3,最后

12、結(jié)果轉(zhuǎn)為單精度型賦給x2。,,,2.賦值類型轉(zhuǎn)換,,2.5.3結(jié)束,系統(tǒng)自動進行類型轉(zhuǎn)換規(guī)則: 1、實型數(shù)賦給整形變量:取整;注意溢出; 2、整型數(shù)賦給實型變量:先轉(zhuǎn)換為實型數(shù); 3、字符型數(shù)賦給整形變量:ASCII碼為依據(jù);分為兩種情況:符號位是0或1時不同; 若符號位為1,則低位字節(jié)不變,高位字節(jié)全部置1再賦值。 4、絕對值較大的數(shù)賦給表達范圍較小的數(shù)據(jù)類型時,注意溢出;,,,2.5.4 強制類型轉(zhuǎn)換運算符,ok,,,其格式為: () //形式一 或 ()//形式二,作用:將表達式強制轉(zhuǎn)換為類型, 但表達式的值及其類型不變。,,任意數(shù)據(jù)類型,,,,賦值運算中,當左值與右值類型不一致時,

13、系統(tǒng)將按照左值的類型,自動進行強制轉(zhuǎn)換。,例如: 設(shè)有以下定義 double x=2.3,y; int i=2,j;,(1) j,2.3,x,,2.3, ,2,2,(1) j=x;(2) y=i;,由系統(tǒng)按 左值j 、y 類型自動 完成強制 轉(zhuǎn)換功能,(2) y,2,i,,2, ,2.0,2.0,,,2.5.4 強制類型轉(zhuǎn)換運算符,,,第三章: 簡單輸入/輸出,3.1 cin cin用來在程序執(zhí)行期間給變量輸入數(shù)據(jù), 一般格式為: cin變量名1變量名2變量名n; cout實現(xiàn)將數(shù)據(jù)輸出到顯示器的操作, 一般格式為: cout,3.1.1十進制數(shù)據(jù)的輸入輸出,請看下例: int i, j; f

14、loat x, y; coutij;//D cinxy; cout 則程序輸出: i=10j=20 x+y=13.1 輸出時各數(shù)據(jù)間是無間隔的,因此應(yīng)當有意輸出一些間隔符,ok,,,3.1.2 輸入字符數(shù)據(jù) cin 與cin.get( )的區(qū)別 (1) cin 例如:char c1, c2, c3; cinc1;//A cinc2c3; 程序執(zhí)行到A行時,等待用戶輸入數(shù)據(jù)。 若輸入:A b c 則cin分別將字符A、b、c賦給變量c1、c2、c3。 cin自動跳過輸入的空白字符(包括空格,制表,backspace和回車等)。,(2)cin.get() 例如:char c1, c2, c3, c

15、4; cin.get (c1);//B cin.get (c2); cin.get (c3); 程序執(zhí)行到B行時,若輸入:A b 則執(zhí)行結(jié)果是:字符A、空格、字符b分別賦給變量c1、c2、c3;輸入行中仍保留回車符。cin.get()把從鍵盤上輸入的所有字符,包括空白字符,都作為輸入字符賦給字符變量,關(guān)于字符的輸出,請看下例,假定字符c1、c2、c3的值分別為字符a、b和c,執(zhí)行以下語句序列: cout<

16、,補充.字符串輸入輸出,向一個字符數(shù)組中輸入字符串時,用函數(shù)getline() 。getline() 以用戶按下回車鍵作為結(jié)束,在此之前的所有輸入都放入字符數(shù)組中: cin.getline (char ,int) 其中第一個參數(shù)是已經(jīng)定義的字符數(shù)組名,第二個參數(shù)是讀入字符的最多個數(shù)n(包括字符串結(jié)束符/0)。,ok,,,常用cout輸出字符串。雙引號中的字符串常量照原樣輸出,程序中通常通過輸出字符串常量來輸出一些提示信息。字符數(shù)組將輸出串結(jié)束符前所有字符。,補充:字符串輸入輸出,函數(shù)保證在執(zhí)行時總會為字符串的結(jié)束符保留一個字節(jié)。當鍵盤的輸入字符(字節(jié))數(shù)多于(n1)時,后面的字符不會進入字符數(shù)

17、組,字符串結(jié)束符自動加在字符數(shù)組的最后一個字節(jié)中。當輸入字符數(shù)少于該值時,字符串結(jié)束符自動加在輸入到字符數(shù)組中的最后一個字符的后面。請看下例: char city11; cin.getline(city, 10); // 輸入城市名最多5個中文字 cout << “城市名:“ << city << endl;,ok,,,如果要求按八進制或十六進制輸入輸出,在cin或cout中必須指明相應(yīng)的數(shù)據(jù)形式,oct為八進制,hex為十六進制,dec為十進制。例如: int i, j, k, l; cout oct i;//輸入為八進制數(shù) cin hex j;//輸入為十六進制數(shù) cin k;//輸入仍為

18、十六進制數(shù) cin dec l;//輸入為十進制數(shù) cout<<” hex:”<<” i=”<< hex<< i<< endl; cout<<” dec:”<<” j=”<< dec<< j<

19、ex:i=1a dec:j=63k=160 oct:l=21 由于已經(jīng)在cin中指明數(shù)制,因此從鍵盤輸入時,八進制和十六進制數(shù)可以省略其開頭的0和0 x標志。 在cin或cout中指明數(shù)制后,該數(shù)制將一直有效,直到重新指明用其他數(shù)制。 特別注意:輸入數(shù)據(jù)的格式、個數(shù)和類型必須與cin中的變量一一對應(yīng),否則不僅使輸入數(shù)據(jù)錯誤,而且影響后面其他數(shù)據(jù)的正確輸入。,,,輸入輸出的格式控制,為了使數(shù)據(jù)間隔開,還可以用C++提供的函數(shù)setw() 指定輸出數(shù)據(jù)項的寬度。例如: int i=2, j=3; float x=2.6, y=1.8; cout,ok,(2)設(shè)置數(shù)據(jù)間隔,,,,第4章 流程控制語句

20、,,4.1 選擇結(jié)構(gòu)程序設(shè)計,,對程序的運行流程進行控制,主要通過執(zhí)行專門用來控制流程的語句來實現(xiàn)。流程控制語句也稱為過程化語句。分支語句是三種基本流程控制語句之一。C++提供以下三種分支語句:,if 語句 條件運算符 “ ? : ” swith 語句,4.2.1 if 語句,if語句有兩種基本格式為: 1、if () ; 2、if () else;,,,if 語句,【例41】 輸入一個年份,判斷是否閏年。 算法分析:假定年份為year, 閏年的條件是 : year%4==0 ,,ok,分析:讀入三個數(shù),先求出兩個數(shù)中較大者,再將該大數(shù)與第三個數(shù)比較,求出最大數(shù)。 #include

21、void main() int a, b, c, max; coutabc; coutb) max=a; else max=b; if(cmax) cout<< “最大數(shù)為:”<

22、 if else ; 第二種是嵌套在if分支中為: if () if () ; else;,if 語句,//方法1:采用if中嵌套形式 #include void main() int a, b, c, max; coutabc; coutb) if(ac) max=a; //ab且ac else max=c; //ab且ac) max=b; //ac else max=c; //a<=b且b

23、main() int a,b,c,max; coutabc; coutb ,if 語句,,ok,要特別注意else和if的配對關(guān)系。C++規(guī)定了if和else的“就近配對”原則,即相距最近且還沒有配對的一對if和else首先配對。按上述規(guī)定,第二種嵌套形式中的else應(yīng)與第二個if配對。如果根據(jù)程序的邏輯需要改變配對關(guān)系,則要將屬于同一層的語句放在一對“”中。如第二種嵌套形式中,要讓else和第一個if配對,語句必須寫成: if (表達式1) if (表達式2) 語句1 ; else 語句2 ; 第二種嵌套形式較容易產(chǎn)生邏輯錯誤,而第一種形式配對關(guān)系則非常明確,因此從程序可讀性角度出發(fā),建議

24、盡量使用第一種嵌套形式。,請看以下兩個語句: //語句1: if(n%3==0) if(n%5==0) cout<

25、件) 打8折。設(shè)計程序根據(jù)客戶的購買量計 算總價。,if 語句,算法,1、輸入購買件數(shù)count,設(shè)置單價price=80(元) 2、根據(jù)count值確定折扣discount; 3、實際售價amount=price*count*discount; 4、輸出amount的值。 算法細化: 2.1、if(count=5//單價,折扣,總價 int count;//購買件數(shù) coutcount; if(count<5) discount=1; else if(count<10) discount=0.9; else discount=0.8; amount=price*cou

26、nt*discount; cout<<購買件數(shù):<

27、if 語句,算法,1、輸入系數(shù)a(a0)、b、c; 2、令delta= b24ac; 3、根據(jù)delta的值求方程的根; 4、輸出方程的根; 算法細化: 3.1、 if(delta==0)方程有兩個相同實根;計算 3.2、 if(delta0)方程有兩個不同實根;計算 3.3、 if(delta<0)方程無實根;計算,,ok,#include #include void main() float a,b,c; float delta,x1,x2; const float zero=0.0001;//定義一個很小的常數(shù) coutabc; cout<

28、<

29、元運算符,其構(gòu)成的表達式格式為: ? : 執(zhí)行邏輯:先計算表達式1,若其值為真(或非0),則計算表達式2(不計算表達式3),并將該值作為整個表達式的值;反之,即表達式1的值為假或為0,則計算表達式3(不計算表達式2),并將該值作為整個表達式的值。 例如:int a=6,b=7, min=a

30、現(xiàn)多選一: switch (表達式) case 常量表達式: 語句序列break; case 常量表達式n:語句序列nbreak; default:語句序列 ,,,switch語句格式,(1)各個case(包括default)分支出現(xiàn)的次序可以任意,通常將default放在最后。 (2)break語句可選,如果沒有break語句,每一個case分支都只作為開關(guān)語句的執(zhí)行入口,執(zhí)行完該分支后,還將接著執(zhí)行其后的所有分支。因此,為保證邏輯的正確實現(xiàn),通常每個case 分支都與break語句聯(lián)用。 (3)每個常量表達式的取值必須各不相同,否則將引起歧義。,(4)允許多個常量表達式對應(yīng)同一個語句序

31、列。 例如: char score; cinscore; switch (score) case A: case a: cout<

32、 2%折扣 500<=s<10005%折扣 1000<=s<20008%折扣 2000<=s<300010%折扣 3000<=s15%折扣 設(shè)每公里每噸的基本運費為p,貨物重量為w,折扣為d,則總運費f為:f=p*w*s*(1-d) 設(shè)計程序,當輸入p、w和s后,計算運費f。,算法,1、輸入每噸運費p、貨物重量w、運輸里程s; 2、根據(jù)運輸里程s計算折扣d; 3、計算總運費f=p*w*s*(1-d); 4、輸出計算結(jié)果; 算法細化: 2、根據(jù)運輸里程s計算折扣d 分析:如果用switch語句,必須使表達式符合語法要求,分析發(fā)現(xiàn),里程s的分段點均是250的倍數(shù),因此,將里程s除以250,取整數(shù)

33、商,便得到若干整數(shù)值。,,ok,switch(c=s/250) case 0: d=0; break; case 1: d=0.02; break; case 2: case 3: d=0.05; break; case 4: case 5: case 6: case 7: d=0.08; break; case 8: case 9: case 10: case 11:d=0.1;break; default:d=0.15; ,s<250 不打折扣 250<=s<500 2%折扣 500<=s<1000 5%折扣 1000<=s<2000 8%折扣 2000<=s<3000 10

34、%折扣 3000<=s 15%折扣,,#include #include void main( ) int c,s; float p,w,d,f; coutpws; c=s/250; switch(c) case 0: d=0; break; case 1: d=0.02; break; case 2: case 3: d=0.05; break; case 4: case 5: case 6: case 7: d=0.08; break; case 8:case9:case10:case11:d=0.1;break; default:d=0.15; f=p*w*s*(1-d); cout<<

35、運輸單價為<

36、l; break; case -: cout<

37、程序設(shè)計,,,4.3.1 while 語句,while語句也稱為當循環(huán)。 語句格式為: while (表達式) 循環(huán)體語句;,圖3.1 while語句的執(zhí)行流程圖,,,求表達式的值,表達式值為真?,是,,否,執(zhí)行循環(huán)體語句,,,while 語句,【例48】 求1+2+3+4的值。,,ok,N個連續(xù)整數(shù)相加算法 1、設(shè)置變量i用來放被加數(shù),變量sum用來放和值,并初始化; 2、從第一個數(shù)開始,依次將被加數(shù)賦給i,并進行操作sumsum+i; 3、輸出sum; 細化算法2: while(還有被加數(shù)) i=當前被加數(shù); sum+=i; i準備接受下一個被加數(shù); ,,,,源程序如下: #i

38、nclude void main( ) int i=1,sum=0;//循環(huán)初始條件 while(i<=4) sum+=i; i++;//修改循環(huán)條件 cout<

39、后在VC++平臺上運行,看是否正確,,4.3.2 do-while 語句,do-while語句稱為直到循環(huán), 格式為: do 循環(huán)體語句 while( 表達式 ),否,是,,,,表達式的 值為真?,執(zhí)行循環(huán)體語句,,求表達式的值,,,圖3.2 do-while語句的執(zhí)行流程圖,,,do-while 語句,do/while語句和while語句的區(qū)別: 多數(shù)情況下可以互相替代。 區(qū)別是do/while語句至少執(zhí)行一次循環(huán)體后再判斷循環(huán)條件是否滿足; while語句先判斷條件是否滿足,然后才執(zhí)行循環(huán)體。,【例49】 輸入一段文本,統(tǒng)計文本的行數(shù)、單詞數(shù)及字符數(shù)。假定單詞之間以空格或跳格或換行符間

40、隔,且文本開始沒有空行。 算法分析: 1、逐個讀入文本中的字符,直到讀到一個輸入結(jié)束符EOF為止。 2、如何算行數(shù)?行結(jié)束標志為讀到字符n; 3、如何算單詞數(shù)?設(shè)一個變量isword,讀到字符時isword=1,讀到間隔符時isword=0;如果讀到一個間隔符而此時isword值為1,則說明剛讀完一個單詞;(如果讀到一個字符而此時isword值為0,則說明剛開始讀一個單詞;) 4、如何算字符數(shù)?,do-while 語句,,ok,算法,1、設(shè)置變量line、word、ch分別代表行數(shù)、單詞數(shù)、非分隔字符數(shù),并初始化;設(shè)置變量isword來輔助統(tǒng)計單詞數(shù); 2、do從鍵盤讀入一個字符c; if (

41、 c==n) line++; if (是單詞開頭) word++; if (c不是分隔符) ch++; while (c!= EOF ); 3、輸出統(tǒng)計結(jié)果。,將下面的程序在VC++平臺上運行,試一試是否正確,#include void main( ) char c; int line=0, word=0, ch=0; //ch為非分隔字符數(shù) int isword=0; do c=cin.get(); if (c== n) line++; //遇換行符行數(shù)+1 if (c!= ,,,4.3.3 for 語句,for循環(huán)語句的格式為: for ( ; ; ) ,,ok,,,for

42、語句、while語句、do/while語句實現(xiàn)相同的功能:1+2+3+4,int i=1,sum=0; //循環(huán)初始條件 while(i<=4) sum+=i; i++; //修改循環(huán)條件 ,int i=1,sum=0; //循環(huán)初始條件 do sum+=i; i++;//修改循環(huán)條件 while(i<=4);,for( int i=1,sum=0; i<=4; i++ ) sum+=i; /*習慣上:表達式1:循環(huán)初始條件;表達式2:循環(huán)終止條件;表達式3:修改循環(huán)條件*/,,ok,for 語句的應(yīng)用,for語句的幾點說明: 1、是先判斷型的,同while語句; 2、使用更為靈活: 三個

43、表達式可以是任意表達式,因此他們就可以實現(xiàn)循環(huán)初始化、計算、修改循環(huán)條件等任務(wù),而不一定非在循環(huán)體中進行;,for 語句的應(yīng)用,【例411】 設(shè)計程序輸出Fibonacii數(shù)列的前20項,要求每行輸出5個數(shù)據(jù)。 Fibonacii數(shù)列定義如下:,算法分析:除了第0項和第1項外,每一項都是由類似方法產(chǎn)生,即前兩項之和;所以求當前項時,只需要記住前兩項;程序不需要為每一項設(shè)置專用變量; 屬遞推算法。,算法: 1、設(shè)置變量n表示第幾項,變量 f 1和 f 2用來記住當前項f 3之前的兩項 ;變量初始化n=0; 2、while (當前項不到第20項) if (當前項是第0項) f 1=0; if (

44、當前項是第1項) f 2=1; if (當前項是第2項或更高項)f 3=f 1+f 2; 按要求輸出 f 3 ; f 1=f 2; f 2=f 3; //記住最近兩項 當前項后移一位; ,【例311】 設(shè)計程序輸出Fibonacii數(shù)列的前20項,要求每行輸出2個數(shù)據(jù)。Fibonacii數(shù)列定義如下: 程序如下: //文件名:Ex3_11.cpp #include #include void main() int fib0=0,fib1=1,fib2; cout<

45、t n=3;n<=20;n++) fib2=fib0+fib1; cout<

46、。 2、將整數(shù)各位數(shù)字分開的方法是,通過求余得到個位數(shù),然后將整數(shù)縮小十倍,再求余,并重復(fù)上述過程,分別得到十位、百位,直到整數(shù)的值變成0為止。,for 語句的應(yīng)用,,ok,數(shù)據(jù): 1、設(shè)置變量num表示輸入的整數(shù),整型數(shù)組digit5用來存放num 的各個位;變量i用來表示數(shù)組的當前下標; 算法: 1、輸入num; 變量初始化:i=0; 2、while (num!=0) num對10取余,得num的當前個位數(shù)digiti; num整除10,即去掉個位數(shù),十位變個位,百位變十位,; i++;數(shù)組digit準備記錄下一位; 3、將數(shù)組元素按下標從高到低的順序輸出;,程序如下: #include

47、void main() int num,subscript; int digit5; coutnum; cout0); for(int i=0;i

48、次一般不超過3層,已保證可讀性。,,,循環(huán)的嵌套,分析: 1、計算機的輸出是按行進行的,因此可以先用一個循環(huán)語句輸出第一行表頭。 2、表中各行數(shù)據(jù)的輸出可以用下面的算法描述: for (i=1; i<10; i++) cout<

49、下三角形表。進一步分析發(fā)現(xiàn)每一行的列數(shù)與所在行數(shù)相關(guān),因此要輸出三角形表,上面的循環(huán)語句需稍作修改: for (j=1; j<=i; j++) cout<

50、include #include void main() cout<

51、eak語句,444 return語句,443 goto 語句,442 continue語句,,4.4.1 break 語句,break語句只能用在switch語句和循環(huán)語句中,用來跳出switch語句或提前終止循環(huán),轉(zhuǎn)去執(zhí)行switch語句或循環(huán)語句之后的語句。 在for循環(huán)中可以用break結(jié)束循環(huán): for(; ;) if() break; ,,,break 語句應(yīng)用,【例4.14】 給定正整數(shù)m,判定其是否為素數(shù)。 分析:如果m2,m是素數(shù)的條件是不能被2,3,,(取整)整除。因此可以用2,3,,(取整)逐個去除m,如果被其中某個數(shù)整除了,則m不是素數(shù),否則是素數(shù)。算法屬于窮

52、舉法。 1、輸入被測數(shù)m(m2);令整型變量 k= sqrt(m) 2、判斷m是否素數(shù):設(shè)置輔助整型變量i, 使i從2開始直到k依次測試m能否整除i, 若能,則不是素數(shù);for( i=2;i<=k;i++)if(m%i==0) break; /* 條件滿足,m不是素數(shù),停止測試,結(jié)束for語句。*/ 3、根據(jù)i是否已達到k,輸出結(jié)果是否為素數(shù)。,#include #include void main() int m,i,k; coutm; if(m==2) coutk) cout<< m<<是素數(shù)<

53、 在VC++平臺上運行,改一下,使程序自動算出100以內(nèi)的素數(shù),,,4.3.2 continue 語句,continue語句只能用在循環(huán)語句中,用來終止本次循環(huán)。當程序執(zhí)行到continue語句時,將跳過其后尚未執(zhí)行的循環(huán)體語句,開始下一次循環(huán)。下一次循環(huán)是否執(zhí)行仍然取決于循環(huán)條件的判斷。 continue語句與break語句的區(qū)別在于,continue語句結(jié)束的只是本次循環(huán),而break結(jié)束的是整個循環(huán)。,,,例:輸出1100內(nèi)3的倍數(shù)。 分析:設(shè)置整型變量I從1變化到100,依次測試I是否3的倍數(shù),算法屬于窮舉法。 for (I=1;I<=100;I++) if ( I%3!=0)

54、 continue; //I不是3的倍數(shù),不輸出,繼續(xù)下一個I; 輸出I的值;//I是3的倍數(shù)才輸出 ,,4.3.3 goto 語句,goto語句和標號語句一起使用,所謂標號語句是用標識符標識的語句,它控制程序從goto語句所在的地方轉(zhuǎn)移到標號語句處。goto語句會導(dǎo)致程序結(jié)構(gòu)混亂,可讀性降低,而且它所完成的功能完全可以用算法的三種基本結(jié)構(gòu)實現(xiàn),因此一般不提倡使用goto語句。但在某些特定場合下goto語句可能會顯出價值,比如在多層循環(huán)嵌套中,要從深層地方跳出所有循環(huán),如果用break語句,不僅要使用多次,而且可讀性較差,這時goto語句可以發(fā)揮作用。,,4.3.4 return 語

55、句,return語句用于結(jié)束函數(shù)的執(zhí)行,返回調(diào)用者,如果是主函數(shù),則返回至操作系統(tǒng)。 利用一個return語句可以將一個數(shù)據(jù)返回給調(diào)用者。通常,當函數(shù)的返回類型為void時, return語句可以省略,如果使用也僅作為函數(shù)或程序結(jié)束的標志。,,,在結(jié)構(gòu)化程序設(shè)計中,函數(shù)是將任務(wù)進行模塊劃分的基本單位。,第四章 函數(shù) 和編譯預(yù)處理,,在面向?qū)ο蟮某绦蛟O(shè)計中,對數(shù)據(jù)的操作總是封裝在函數(shù)中,一個函數(shù)描述一種操作。不要完全按模塊思想講。也是讓學生處于面向?qū)ο蟪绦蛟O(shè)計的氛圍中。這樣第5章的教學會順利一些。,要掌握函數(shù)的使用,必須理解函數(shù)調(diào)用時的內(nèi)部實現(xiàn)機制,以及與此相關(guān)的內(nèi)存分配機制、變量生命期和作用域

56、。,本章還將介紹關(guān)于函數(shù)重載的概念,介紹遞歸算法、內(nèi)聯(lián)函數(shù)、默認參數(shù)函數(shù)以及多文件組織、編譯預(yù)處理、工程文件的概念和運行庫函數(shù)。,第四章 函數(shù) 和編譯預(yù)處理,51 函數(shù)的定義與調(diào)用,5. 5 內(nèi)聯(lián)函數(shù),54 作用域和存儲類,53 函數(shù)的嵌套和遞歸調(diào)用,52 函數(shù)的參數(shù)傳遞, 返回值及函數(shù)原型說明,5 9 程序多文件組織,58 編譯預(yù)處理,5 7 函數(shù)重載,5 6 具有缺省參數(shù)值的函數(shù),,,5.1 函數(shù)的定義與調(diào)用,5.1.1 函數(shù)概述,5.1.2 函數(shù)定義,5.1.3 函數(shù)調(diào)用,,,,4.1.1 函數(shù)概述,,函數(shù)是C++程序的基本組成模塊。,通過函數(shù),可以把一個復(fù)雜任務(wù)分解成為若干個易于解決

57、的小任務(wù)。充分體現(xiàn)結(jié)構(gòu)化程序設(shè)計由粗到精,逐步細化的設(shè)計思想。,組成C++程序的若干函數(shù)中,有一個稱為main()(Winmain())函數(shù),是程序執(zhí)行的入口,它可以調(diào)用其他函數(shù)。而其他一般函數(shù)既可以調(diào)用也可以被調(diào)用。函數(shù)之間的調(diào)用關(guān)系見下圖:,,,,5.1.1 函數(shù)概述,,,5.1.1 函數(shù)概述,,,,函數(shù)按是否帶有參數(shù),分為: 無參函數(shù)和有參函數(shù),4.1.1結(jié)束,函數(shù)按其是否系統(tǒng)預(yù)定義分為兩類: 一類是編譯系統(tǒng)預(yù)定義的,稱為庫函數(shù)或標準函數(shù),如一些常用的數(shù)學計算函數(shù)、字符串處理函數(shù)、圖形處理函數(shù)、標準輸入輸出函數(shù)等。這些庫函數(shù)都按功能分類,集中說明在不同的頭文件中。用戶只需在自己的程序中包

58、含某個頭文件,就可直接使用該文件中定義的函數(shù)。 另一類是用戶自定義函數(shù),用戶可以根據(jù)需要將某個具有相對獨立功能的程序定義為函數(shù)。,5.1.2 函數(shù)的定義,,,,1. 無參函數(shù),2. 有參函數(shù),,,,1 無參函數(shù),定義格式為: 數(shù)據(jù)類型函數(shù)名(void)函數(shù)體,例: 下面函數(shù)的功能是打印一個表頭 void TableHead ( ) cout<<****************<

59、式參數(shù)2,函數(shù)體,例: 下面函數(shù)的功能是返回兩個整數(shù)中較大一個的值 max (int a, int b) return(a=b?a:b); ,,,,定義函數(shù)時可能會涉及若干個變量,究竟哪些變量應(yīng)當作為函數(shù)的參數(shù)?哪些應(yīng)當定義在函數(shù)體內(nèi)?這有一個原則:作為一個相對獨立的模塊,函數(shù)在使用時完全可以被看成 “黑匣子”,除了輸入輸出外,其他部分可不必關(guān)心。從函數(shù)的定義看出,函數(shù)頭正是用來反映函數(shù)的功能和使用接口,它所定義的是“做什么”,在這部分必須明確“黑匣子”的輸入輸出部分,輸出就是函數(shù)的返回值,輸入就是參數(shù)。因此,只有那些功能上起自變量作用的變量才必須作為參數(shù)定義在參數(shù)表中;函數(shù)體中具體描述“如何

60、做”,因此除參數(shù)之外的為實現(xiàn)算法所需用的變量應(yīng)當定義在函數(shù)體內(nèi)。 C++中不允許函數(shù)的嵌套定義,即在一個函數(shù)中定義另一個函數(shù)。,提示,,,,5.1.3 函數(shù)的調(diào)用,在C++中,除了主函數(shù)外,其他任何函數(shù)都不能單獨作為程序運行。任何函數(shù)功能的實現(xiàn)都是通過被主函數(shù)直接或間接調(diào)用進行的。所謂函數(shù)調(diào)用,就是使程序轉(zhuǎn)去執(zhí)行函數(shù)體。 無參函數(shù)的調(diào)用格式為: 函數(shù)名( ) 有參函數(shù)的調(diào)用格式為: 函數(shù)名(實際參數(shù)表) 其中實際參數(shù)簡稱實參,用來將實際參數(shù)的值傳遞給形參,因此可以是常量、具有值的變量或表達式。,,,,,,,,5.1.3 函數(shù)的調(diào)用,,,,main( )函數(shù),,調(diào)用max(2.5,4.

61、7 ),函數(shù)max(2.5,4.7 ),,return 4.7,主程序后續(xù)語句,,,,,【例41】 輸入兩個實數(shù),輸出其中較大的數(shù)。其中求兩個實數(shù)中的較大數(shù)用函數(shù)完成。 程序如下: #include float max(float x,float y) return(x=y?x:y); void main() float x,y; coutxy; cout<

62、向是由實參傳遞給形參。傳遞過程是,先計算實參表達式的值,再將該值傳遞給對應(yīng)的形參變量。一般情況下,實參和形參的個數(shù)和排列順序應(yīng)一一對應(yīng),并且對應(yīng)參數(shù)應(yīng)類型匹配(賦值兼容),即實參的類型可以轉(zhuǎn)化為形參類型。而對應(yīng)參數(shù)的參數(shù)名則不要求相同。,5.2.1 函數(shù)的參數(shù)傳遞及傳值調(diào)用,,,,按照參數(shù)形式的不同,C++有兩種調(diào)用方式:傳值調(diào)用和引用調(diào)用。顧名思義,傳值調(diào)用傳遞的是實參的值,本章主要介紹傳值調(diào)用。關(guān)于引用調(diào)用,將在第五章類與對象中介紹。,,,,5.2.1 函數(shù)的參數(shù)傳遞及傳值調(diào)用,調(diào)用power(a,3 ),函數(shù)power(a,3 ),,return 912673,主程序后續(xù)語句,,,,,,

63、【例52】 說明實參和形參對應(yīng)關(guān)系的示例。 #include #include float power(float x,int n) //求x的n次冪 float pow=1; while(n--) pow*=x; return pow; void main() int n=3; float x=4.6; char c=a; cout<

64、5.2.2 函數(shù)返回值,return語句的一般格式為: return 表達式; 函數(shù)的計算結(jié)果通過該語句傳遞回主調(diào)函數(shù)。,,,,【例43】設(shè)計函數(shù),根據(jù)三角形的三邊長求面積。如果不能構(gòu)成三角形,給出提示信息。 分析:函數(shù)為計算三角形面積,一般三角形返回面積值,若不能構(gòu)成三角形則返回-1。設(shè)計一個主函數(shù)完成函數(shù)測試。根據(jù)返回值情況輸出相應(yīng)結(jié)果。 程序見下頁:,#include #include float TriangleArea(float a, float b, float c) if ((a+babc; area=TriangleArea(a,b,c); if(area==-1

65、) cout<<(<

66、表),,,,語法上對程序文件中函數(shù)的排列次序是沒有固定要求的,只要滿足先定義后使用即可。但從結(jié)構(gòu)化程序設(shè)計的角度,通常是先調(diào)用后定義。使用函數(shù)原型,則既符合由粗到精的思維方式,又滿足了語法要求。,其中形參表可以逐個列出每個參數(shù)的類型和參數(shù)名,也可以列出每個形參的類型,參數(shù)名可省略,各形參之間以逗號分隔。函數(shù)原型和所定義的函數(shù)必須在返回值類型、函數(shù)名、形參個數(shù)和類型及次序等方面完全對應(yīng)一致,否則將導(dǎo)致編譯錯誤。,下面是一個使用結(jié)構(gòu)化程序設(shè)計思想開發(fā)的企業(yè)管理報表程序的框架。它使用了函數(shù)原型說明。 #include void menu_print(); void account_report(); void engineering_report(); void marketing_report(); void main() int choice; do menu_print(); cinchoice; while(choice=4); switch(choice) case 1: account_report(); break; case 2: engineering_re

展開閱讀全文
溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!