版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C+ 程序設(shè)計基礎(chǔ)1第一章 C+語言基礎(chǔ) 2一、源程序的編輯、編譯、連接與執(zhí)行編輯:輸入、修改、存盤,形成 .cpp文件。編譯:編譯至無語法錯誤,形成 .OBJ文件。連接:與系統(tǒng)標準模塊連接,形成 .exe文件。執(zhí)行:運行程序,獲得結(jié)果。1.1 程序設(shè)計語言概述3二、程序錯誤類型編譯錯誤連接錯誤運行錯誤邏輯錯誤4一、語言特點中級語言,表達能力強;結(jié)構(gòu)化語言,層次清晰,結(jié)構(gòu)緊湊;運算符、數(shù)據(jù)類型豐富,功能齊全,靈活多樣;簡潔,方便、靈活;目標代碼質(zhì)量高,快捷高效;可移植性強,適用范圍廣。1.2 C+程序的基本結(jié)構(gòu)5二、C+程序的基本結(jié)構(gòu)例1 一個簡單的 C+程序/ program c101.cp
2、p#includevoid main( )cout”Welcome to C+ world!”; 程序輸出結(jié)果:Welcome to C+ world! 6例5 從鍵盤輸入兩個整數(shù)值,計算其和, 并輸出結(jié)果值。/ program c105.cpp #include void main( ) int i,j,sum;coutij;sum=i+j;cout”The sum is ”sum”.n”; 運行示例Enter two integers:63 58The sum is 121. 7例6 運行下述C+程序?qū)@得與例1相同的輸出結(jié)果。/ program c106.cpp #include voi
3、d displaymessage1( ) cout”Welcome”;void displaymessage2( ) cout”to”;void displaymessage3( ) cout”C+ world!n”;8void main( )displaymessage1( );displaymessage2( );displaymessage3( );運行示例Welcome to C+ world! 9 C+源程序主要有以下幾個特點:C+程序由函數(shù)構(gòu)成,一般用小寫字母書寫語句結(jié)尾要用;程序有且只有一個主函數(shù)main(),且()不能少程序體用和括起來函數(shù)體中又包括說明部分和執(zhí)行部分注釋以/
4、”開始,后跟注釋內(nèi)容。注釋自動在行尾結(jié)束。101.3 基本字符集與標識符一、基本字符集數(shù)字:0至9英文大、小寫字母:A至Z,a至z專用符號:+ - * / = ( ) 等等若干字符對:= != = 等等。特定功能的符號:轉(zhuǎn)義符( 如 n表示換行)11二、標識符標識符(identifier):常量、變量、函數(shù)等的名稱關(guān)鍵字(保留字) : 在C中有特定含義;預定義標識符(預定義標識符):C預先規(guī)定用來標識預定義的命令、庫函數(shù)等,如include,printf等;允許程序員將系統(tǒng)預定義標識符重新定義;自定義標識符:由程序員根據(jù)程序需要而自行選定的名字12作為標識符必須滿足以下規(guī)則:必須由字母或下劃線
5、開頭其它部分可由字母、下劃線或數(shù)字組成大小寫字母代表不同的標識符只有前32個字符有效不能使用 C+ 的關(guān)鍵字,盡量不使用系統(tǒng)預定義標識符盡量不要使用l (L) , I ( i ), o (O)等作為標識符13例9 一些符合規(guī)則的標識符smart_decisionFLOAT B757例10 幾個非法的標識符 1st 不能以數(shù)字開頭 Two Words 不能包含空格符 What_is_this? 問號符不允許 under-weight 減號符不允許14四、注釋注釋由/ ”開始,后跟注釋內(nèi)容,于行尾處結(jié)束。要連續(xù)書寫多行注釋,則要求每行都以/ ”打頭。注釋自/*”開始,至*/ ”結(jié)束,其間的注釋內(nèi)容
6、允許跨行書寫。注釋、空格符是分隔符。注釋可以加在C程序中任何能使用分隔符的地方。分隔符是指分開兩個相鄰的詞的符號。15例11 以下幾種書寫注釋的形式,均能順利通過C+編譯器的編譯。形式一/ the first line,/ the second line,/ and the third line.形式二/*the first line,the second line,and the third line. */ 形式三/* the first line,*/* the second line, */* and the third line. */16例12 下述書寫注釋的形式,將不能通過C編譯
7、器的編譯。/ the first line,the second line,and the third line.171.4 簡單數(shù)據(jù)類型 兩類數(shù)據(jù)類型:預定義數(shù)據(jù)類型和程序員自定義數(shù)據(jù)類型數(shù)據(jù)類型定義的作用:規(guī)定變量可接受值的集合以及對它所能執(zhí)行的操作指明對該類型的數(shù)據(jù)項(即變量)應分配多大內(nèi)存空間規(guī)定能用于該類型數(shù)據(jù)項的操作;防止數(shù)據(jù)類型不匹配。18 19Visual C 6.0編譯系統(tǒng)系在32位計算機上運行,int型、short型整數(shù)將各占內(nèi)存4個字節(jié) 20一、整型類型 整型常量簡稱整常量。 三種表示整型常量的形式:十進制形式、八進制形式、十六進制形式。十進制整常量: 以非0數(shù)字打頭的十
8、進制數(shù)字串八進制整常量: 以數(shù)字0打頭的八進制數(shù)字串十六進制整常量:以數(shù)字和字母的組合0 x或0X打 頭的十六進制數(shù)字串21例 十進制、八進制、十六進制整常量示例 220 十進制整常量 -560 十進制整常量 06 八進制整常量,相當于十進制數(shù)6 0106 八進制整常量,相當于十進制數(shù)70 0 x4e 十六進制整常量,相當于十進制數(shù)78 0XFF 十六進制整常量,相當于十進制數(shù)25522 C允許在變量說明時直接賦予一個初始值,這稱為變量初始化。 例 整型變量說明及初始化示例int a,b; /* 說明a,b為基本整型變量 */ /且它們分別具有隨機初始值int m=4,p=3,n=2; / 說
9、明m,p,n為基本整型變量, /且它們分別具有初始值4,3,2 23二、實數(shù)類型24實型常量簡稱實常量。實型常量: 十進制小數(shù)點形式和科學記數(shù)法的指數(shù)形式例16 兩種形式實常量示例6.365 十進制小數(shù)點形式6.8e-5 科學記數(shù)法的指數(shù)形式,表示6.810-5, 即0.000068。6.8E-5 與上數(shù)相同。25實常量缺省認作屬于double類型。例17 單精度型實常量與長雙精度型實常量示例6.365 雙精度(double)實常量3.14159f 單精度(float)實常量3.1415926535897932L 長雙精度型實常量,所有小 數(shù)位均為有效數(shù)字。26例 實型變量說明及初始化示例fl
10、oat radius,diameter,area; /* 說明radius,diameter,area為 單精度型實變量 */ double pi=3.14159265358979; /* 說明pi為雙精度型實變量,且具 有相應初始值 */ 27三、字符類型char類型數(shù)據(jù)用來存放ASCII字符集內(nèi)的某個字符。C+支持擴展ASCII代碼,共包括256個不同字符。28 將字符用單引號括起來,即成一個字符型常量或簡稱字符常量。例18 字符常量示例 A 表示英文大寫字母A的字符常量。 a 表示英文小寫字母a的字符常量。 表示空格符字符常量。29例 以下所示均為非法的字符常量表示 字符常量的單引號對內(nèi)
11、必須有一個字符, 若為空格,應寫為 。 Turbo 字符常量的單引號對內(nèi)只能包含一 個字符。 a a是字符串常量( a0 ), 而 a 才是字符常量。30四、布爾類型bool、false和true均為C+關(guān)鍵字。規(guī)定falsetrue。系統(tǒng)將false的值轉(zhuǎn)換為0,將true的值轉(zhuǎn)換為1bool型數(shù)據(jù)占據(jù)1字節(jié)內(nèi)存。31五、常量標識符說明時用關(guān)鍵字const做限定符,且必須為該常量標識符賦值。在整個程序運行期間,不允許改變常量標識符的值。用大寫字符序列。例21 常量標識符說明示例const int ZERO=0;const double PI=3.14159;321.5 運算符與表達式初探一、
12、算術(shù)運算符與算術(shù)表達式33 程序中的算術(shù)表達式與一般數(shù)學式在表示形式上有所不同: b2 - 4ac 應表示為b*b-4*a*c; sin2x 應表示為sin(2*PI*x),其中假設(shè)PI是一個預先定義的一個常量標識符。34二、關(guān)系運算符與關(guān)系表達式35例 關(guān)系運算示例 1+2=3 結(jié)果值為1 (true) A=a 結(jié)果值為0 (false) A!=a 結(jié)果值為1 (true)36例 設(shè)int型變量a, b, c分別有值1, 3, 2,則 b*b4*a*c=0結(jié)果值為1注意: 算術(shù)運算符的優(yōu)先級高于關(guān)系運算符,因此無須用圓括號將該算術(shù)表達式括起來。37三、邏輯運算符與邏輯表達式38例 邏輯運算示
13、例 !0結(jié)果值為1 (true) !1結(jié)果值為0 (false) !5結(jié)果值為0 (false) 1 & 5結(jié)果值為1 (true) 39運算優(yōu)先級函數(shù)優(yōu)先括號優(yōu)先(嵌套括號中內(nèi)層括號優(yōu)先) 優(yōu)先級高者優(yōu)先優(yōu)先級相同者按結(jié)合規(guī)則40運算符類型優(yōu)先級結(jié)合性( )圓括號從左到右+ - !單目運算符從右到左* / %乘法運算符從左到右+ -加法運算符從左到右 =關(guān)系運算符從左到右= !=相等測試運算符從左到右&邏輯與從左到右|邏輯或從左到右算術(shù)運算符的優(yōu)先級及結(jié)合性高41例 設(shè)int型變量a, b, c分別有值1,3,2,則 (a!=0) & (b*b4*a*c=0)與 a!=0 & b*b4*a*
14、c=0 等價,結(jié)果值為142四、類型轉(zhuǎn)換 雙目運算符兩邊操作數(shù)的類型必須一致。 兩種類型轉(zhuǎn)換:隱式類型轉(zhuǎn)換與顯式類型轉(zhuǎn)換。隱式類型轉(zhuǎn)換由系統(tǒng)自動進行例23 設(shè)已有帶初始賦值的變量說明 int a=2, b=4; double f=3.15;則:(a+f)/b的結(jié)果為1.2875,double型。432. 顯式類型轉(zhuǎn)換強制類型轉(zhuǎn)換。一般形式是 (類型名)表達式 或 類型名(表達式) 其中類型名是一個任意基本數(shù)據(jù)類型名。例 設(shè)已有帶初始賦值的變量說明 int a=2, b=4; double f=3.15; (int) (a+f)/b) 結(jié)果值為1 (int)(a+f)/b 結(jié)果值仍為1,注意:兩
15、者運算過程有所不同 強制類型轉(zhuǎn)換的優(yōu)先級高于/。441.6 賦值語句及簡單輸入、輸出一、賦值語句一般形式為 變量表達式;(=右結(jié)合,低優(yōu)先級)例 int i,j,k; double r;則以下幾個語句均為合法的賦值語句: i=j=k=3;i,j,k均有整型值3 r=2.5;r有雙精度實型值2.5 i=r;i有整型值2 r=i;r有雙精度實型值2.0 45二、賦值表達式一般形式: 變量表達式例33 設(shè)有變量說明 int m, n, k; k=(m=5)*(n=4);執(zhí)行后,int型變量m,n,k將分別有整數(shù)值5,4,20。46三、輸入輸出簡述輸入、輸出標準庫函數(shù)cin、cout使用標準庫函數(shù)如c
16、out、cin,需寫包含頭文件iostream.h。插入運算符”分別用于輸出和輸入。插入運算符的結(jié)合性亦為從左到右,故能按順序?qū)⑤斎敕謩e賦予相應的變量。輸出和輸入時,系統(tǒng)對各種類型的數(shù)據(jù)都能自動進行分析判別并按照缺省格式進行處理,從而無需專門提供格式化串。48例36 下述C程序演示了使用cout語句對各種數(shù)據(jù)類型的變量、表達式按缺省格式輸出的形式#includevoid main( )int i,j,m=4,p=3,n=2;double pi=3.14159265;char ch1=A,ch2=Z;bool ok=true;i=m+p+n;j=m*p/n;couti=m+p+n=m+p+n=i
17、n;49coutj=m*p/n=m*p/n=j n;coutpi=pin;coutch1=ch1,ch2=ch2n;coutok=okn;cout!ok=!okn;運行示例:i=m+p+n=4+3+2=9j=m*p/n=4*3/2=6pi=3.14159ch1=A,ch2=Zok=1!ok=050欲使用這些格式操縱符,需在C程序開頭書寫如下包含命令 #include 51第二章 程序控制結(jié)構(gòu)52條件控制結(jié)構(gòu):(選擇結(jié)構(gòu))無條件控制結(jié)構(gòu):循環(huán)控制結(jié)構(gòu):(重復結(jié)構(gòu))while 語句、do-while語句、for語句if 語句、switch語句break語句、continue語句、goto語句控制結(jié)
18、構(gòu)532.1 if語句2.1.1 簡單if語句形式一 if(表達式) /* 括號不能少 */ 語句 表達式0語句非054表達式 語句1 非0 語句2 0形式二 if (表達式) 語句1 else 語句2 55例3 從鍵盤輸入一個整數(shù),計算它的絕對值并輸出。#includevoid main( ) int i,absi; couti; if(i0) absi=i; else absi=-i; cout”The absolute value of ”i” is ”absi=A&ch=a &ch=z) coutch”is an English letter.n”;elsecoutch” is not
19、 an English letter.n”;測試條件不能寫成A=ch=Z|a=ch=z572.1.2 條件表達式與條件表達式語句一般形式:表達式1 ?表達式2 :表達式3 例6 使用條件表達式語句實現(xiàn)相同功能。#includevoid main( ) int i,absi; couti; absi=i0?i:-i; cout”The absolute value of ”i” is ”absi”.n”; 582.1.3 復合語句復合語句:一對花括號及其中包含的語句集。 說明語句(可選) 執(zhí)行語句集使用說明語句的復合語句稱為程序塊程序中凡可使用單一語句的地方,都可使用復合語句作為特例,函數(shù)體也就
20、是一個復合語句592.1.4 擴展if語句與嵌套if語句一般形式: if (表達式1) 語句1 else if (表達式2) 語句2 else if (表達式n) 語句n else 語句n+160例9 從鍵盤輸入一個表示百分制成績的非負整數(shù),按相應的五級記分制(A、B、C、D、F)轉(zhuǎn)換,并輸出結(jié)果。對于所輸入的數(shù)據(jù),需判斷其合理性,即應為0100之間的某個整數(shù)。#includevoid main( ) int score; char grade; coutscore; cout”score:”scoreendl; if(score100) cout=90) grade=A; else if(s
21、core=80) grade=B; else if(score=70) grade=C; else if(score=60) grade=D; else / 0=score60 grade=F; cout”grade:”gradeendl; 運行示例Enter score(0-100):95 score:95grade:A62if語句允許嵌套既定解釋規(guī)則是:else應與離它最近的那個尚未與其他else匹配的if-相匹配。 例#includemain() int a=2,b=-1,c=2; if(ab) if(b0) c=0; else c+=1; cout”C:”cendl; 輸出結(jié)果 2 6
22、32.2 switch語句一般形式: switch (表達式) case 常量表達式1:語句1 break; case 常量表達式2:語句2 break; case 常量表達式n:語句n break; default:語句n+1 可以省略default子句64 switch (表達式) case 常量表達式1: 語句1或空; case 常量表達式2: 語句2或空; . . . case 常量表達式n: 語句n或空; default: 語句n+1或空; 將表達式值逐個與case后的常量進行比較:若與其一個相等, 則從該常量下的語句開始向后執(zhí)行,不再進行判斷,直至整個語句結(jié)束;若不與任何一個常量相
23、等, 則執(zhí)行default 后面的語句。 65例10 #includevoid main( ) int score; char grade; coutscore; cout”score:”scoreendl; if(score100) cout”Error-out of range.n”; else66switch(score/10)case 10:case 9:grade=A; break;case 8:grade=B; break;case 7:grade=C; break;case 6:grade=D; break;case 5:case 4:case 3:case 2:case 1:
24、case 0:grade=F; break; cout”grade:”gradeendl;運行示例Enter score(0-100):95score:95grade:A672.3 while語句while語句的一般形式是: while (表達式) 語句 表達式0語句非0 為確定究竟執(zhí)行循環(huán)體多少次,必須仔細選擇所需的初值、終值以及增量,否則,會犯”多一錯誤”或”丟一錯誤”。 68例12 設(shè)ch是個字符變量。ch=A;while(ch=K)coutch;ch=ch+1;cout2) cout”NULL OPERATIONn”;while(true) cout”INFINITE LOOP!n”;
25、 while(getche( )!=X0D); / 這個循環(huán)直到鍵入回車為止 70復合語句do 語句 while (表達式);單一語句do 語句while (表達式);0非0表達式 語句 2.4 do-while語句71例16 承例12,可使用do-while語句實現(xiàn)同樣功能。ch=A;do coutch; ch=ch+1; while(ch=K);cout2) cout”NULL OPERATIONn”; / 空操作語句do cout2); / 輸出一行文字信息 732.5 for語句一般形式: for (表達式1;表達式2;表達式3) 語句注意:三個表達式可以部分地或全部省略,但分號必須保
26、留。 例23 承例12、例16,可使用for語句實現(xiàn)同樣功能。for(ch=A;ch=K;ch=ch+1)coutch;coutendl; 74例27 使用for語句實現(xiàn)循環(huán)控制的兩種特殊情形for(ch=Z;ch=Y;ch=ch-1) cout”DO NOTHINGn”;/ 相當于空操作語句for(;true;) cout”INFINITE LOOP!n”;/無限循環(huán)!應避免此類語句編碼752.6 用于循環(huán)控制的幾個特殊運算符2.6.1 增量運算符與減量運算符76增量運算符”+”:自增運算符。減量運算符”-”: 自減運算符。都是單目運算符,可出現(xiàn)在操作數(shù)前(作為前綴)或后(作為后綴)。結(jié)合規(guī)
27、則是從右到左。77例28 自增、自減運算符”+”、”-”的使用。#includevoid main( )int i=3,j=5;cout”i=”i”,j=”jendl;cout”i+=”i+”,j-=”j-endl;cout”Now i=”i”,j=”jendl;i=3;j=5;cout”i=”i”,j=”jendl;cout” i=”+i ”,-j=”-jendl;cout”Now i=”i”,j=”jendl;運行示例i=3,j=5i+=3,j-=5Now i=4,j=4i=3,j=5i=4,-j=4Now i=4,j=4782.6.2 逗號運算符用于將多個表達式串聯(lián)在一起,是優(yōu)先級最低的
28、運算符是雙目運算符,其結(jié)合規(guī)則從左到右由逗號運算符與左右兩個操作數(shù)組成逗號表達式逗號表達式一般形式: 表達式1,表達式2功能:先求表達式1的值,再求表達式2的值,并以表達式2的值作為該逗號表達式的結(jié)果值。79例 計算前N個自然數(shù)中所有奇數(shù)之和。sum=0;for (counter=1;counter=N;counter=counter+2) sum=sum+counter;改寫為for (sum=0,counter=1;counter=N; counter=counter+2) sum=sum+counter;還可改寫為for (sum=0,counter=1;counter=N; sum=s
29、um+counter,counter=counter+2); /for循環(huán)體為空語句 802.6.3 自反賦值運算符 自反賦值運算符是一個復合運算符。它用于簡寫賦值表達式。81例 可進一步改寫for語句for (sum=0, counter=1; counter=N; counter=counter+2) sum+=counter;或者for (sum=0, counter=1; counter=N; counter+, counter+) sum+=counter;82運算符的優(yōu)先級及結(jié)合性優(yōu)先級運算符( )+ - + - !* / %+ - = !=&|?:= += -= *= /+ %=
30、,類型圓括號單目運算符乘法運算符加法運算符關(guān)系運算符相等測試運算符邏輯與邏輯或條件運算符賦值運算符逗號運算符結(jié)合性從左到右從右到左從左到右從左到右從左到右從左到右從左到右從左到右從右到左從右到左從左到右高832.8.1 break語句break一般形式是: break; 功能:用于switch、 while、do-while或for結(jié)構(gòu)中 轉(zhuǎn)換控制流:立即退出該結(jié)構(gòu),使流程控制 轉(zhuǎn)向執(zhí)行該結(jié)構(gòu)后的第一條語句。注意:不能用于從if語句的選擇結(jié)構(gòu)中跳出。僅能從它自身所在循環(huán)體中跳出,即僅實現(xiàn)向”外”跳一層。2.8 break語句、continue語句和goto語句84#includevoid ma
31、in( ) int i,j,min,k; do coutij; while(!(i0&j0); min=i=1;k-) if(i%k=0&j%k=0) break; cout”The greatest common divisor of”i” and ”j” is ” k.endl;例34 求兩個正整數(shù)i, j的最大公因子,采用窮舉法。852.8.2 continue語句continue語句的一般形式是 continue; 功能:從當前位置將流程控制轉(zhuǎn)移至本次循環(huán)的結(jié)束 位置,并繼續(xù)執(zhí)行下一次循環(huán)。在while和do- while結(jié)構(gòu)中,執(zhí)行完continue語句后就立即 測試繼續(xù)循環(huán)的條件。
32、在for結(jié)構(gòu)中,執(zhí)行完 continue語句后即執(zhí)行增量表達式,然后測試 繼續(xù)循環(huán)的條件。注意:只用于while、do-while及for這三類循環(huán)中。86#include#includevoid main( ) int i=0,n; for(n=101;n=200;n+) if(n%3=0|n%5=0|n%7=0) continue; coutsetw(5)n; if(+i%10=0) coutendl; coutendl;例39 把101200之間除了能被3或5或7整除的數(shù)之外所有數(shù)輸出,每10個數(shù)據(jù)輸出在一行上。872.8.3 goto語句一般形式: goto標號名; 功能:將流程控制轉(zhuǎn)
33、向由標號名所指定的語句處繼續(xù) 執(zhí)行。注意:標號名不必特殊地加以定義,它可以是任意合法的標識符標號名加上冒號,就形成一個語句標號語句標號可以出現(xiàn)在任何語句之前88#include #include main() int i, sum=0; i=1; loop: if (i=100) sum+=i; i+; goto loop; cout ”The sum is: ” sum; 例 利用goto語句實現(xiàn)計算前100個自然數(shù)之和并輸出結(jié)果。 89第三章 數(shù)組903.1 一維數(shù)組3.1.1 一維數(shù)組說明一般形式:類型說明符 一維數(shù)組名 常量表達式 例1 int ia10; double da20; 9
34、192說明:數(shù)組以0為第一元素下標。數(shù)組名表示數(shù)組第一個元素的地址。數(shù)組以元素為單位進行操作,數(shù)組不能被整體引用或賦值。93引用一維數(shù)組元素: 一維數(shù)組名下標 例2 int i, ia10; 欲給數(shù)組ia的所有元素均賦以初始值0: for (i=0; i10; i+) iai=0;943.1.2 一維數(shù)組的初始化方式一 對數(shù)組全部元素賦初值例 int ia10=0,0,0,0,0,0,0,0,0,0;方式二 對數(shù)組部分元素賦初值例 int ib10=1,2,3,4,5; 系統(tǒng)將把1,2,3,4,5分別賦予ib的前5個元素,而后5個元素將自動被賦以0值。95方式三 對全部元素賦初值時,可在說明中
35、省 略對數(shù)組大小的指定。例 int ia =0,0,0,0,0,0,0,0,0,0; 系統(tǒng)將根據(jù)所賦初始值的個數(shù)自動確定該一維數(shù)組的大小。注意,若此時寫 int ia =0; 則其效果將與例10中的不一樣,ia只有一個元素。963.1.3 一維數(shù)組應用示例 例11 從鍵盤上任意輸入5個整數(shù),然后先按順 序?qū)⑺鼈冚敵鲈谝恍猩?,再按與輸入時的 相反順序?qū)⑺鼈冚敵鲈谙乱恍猩稀?97 #include #includevoid main( )int i,a5;cout”Enter 5 integers:”;for(i=0;iai;for(i=0;i5;i+) coutsetw(4)ai;cout=0;
36、i-) coutsetw(4)ai;coutendl;運行示例Enter5integers:8 6 5 4 18 6 5 4 11 4 5 6 8983.2 多維數(shù)組3.2.1 二維數(shù)組說明一般形式:類型說明符 二維數(shù)組名常量表達式1常量表達式2 例17 int ia34; double da510; 993.2.2 二維數(shù)組的初始化二維數(shù)組初始化允許用兩種形式:例19 形式一 int ia34=0,0,0,0,0,0,0,0,0,0,0,0; 形式二 int ia34=0,0,0,0, 0,0,0,0, 0,0,0,0;100 對二維數(shù)組的全部元素賦以初值時,可在數(shù)組 說明中省略書寫第一維的
37、大小,但第二維的大 小不可缺少。例 int m 5= 1,1,1,1,1, 2,2,2,2,2, 3,3,3,3,3, 4,4,4,4,4 ;1013.2.3 二維數(shù)組應用示例例26 計算兩矩陣a與b的乘積并輸出結(jié)果, 其中102分析 兩矩陣a(M P)、b(P N)相乘的條件是: 矩陣a的列數(shù)=矩陣b的行數(shù)=P=3設(shè)c=a*b,則有(i=1,2,3,4;k=1,2)103核心語句編碼for (i=1;i=M;i+) for (k=1;k=N;k+) s=0; for (j=1;j=P;j+) s+=aij*bjk; / for j cik=s; / for k / for i i=1,2,M
38、; k=1,2,N P=3,M=4,N=2 a(M P)b(P N)c(M N)104C+語言提供了字符串類string(標準標識符)。使用string類必須包含頭文件string.h。正確使用string字符串的幾點說明:(1)名字空間名字空間是一種方便有用的工具,用其將標識符限定在名字空間,以便防止標識符命名的沖突。3.3 字符串類型string 105C程序中的包含命令 #include#include將改寫成 #include #includeusing namespace std;using、namespace都是C+關(guān)鍵字。std是名字空間的名稱(代表standard)C+語言所有
39、標準函數(shù)庫都封裝在名為std的名字空間中。使用不帶擴展名.h的頭文件形式,必須加上using指令。106(2)string變量說明及初始化例31 string變量說明及初始化示例string s1=”I like C very much!”;string s2; /缺省初始值為空串(3)使用賦值運算符”=”對string型變量賦值。例32 s2= ”Do you like C+?”;107(4)string字符串的連接例33 s1=s1+s2; s1=s1+”Yes,I do.”;或: s1+=s2; s1+=”Yes,I do.”;108(5)string字符串的比較 ”、”、”=”、”=”
40、、”!=” (6)string字符串的長度 length是不帶參數(shù)的函數(shù),它返回某字符串的長度。例:求字符串變量s1的長度。s1.length( )。109第四章 函數(shù)110 函數(shù)使復雜問題劃分成若干目標明確、較易處理的子問題,程序易讀寫、理解、排錯、修改和維護。一個源程序文件由一個或多個函數(shù)組成。一個源程序文件是一個編譯單位。一個C程序由一個或多個源程序文件組成。一個源文件可以為多個C程序公用。一個較大的程序,一般將函數(shù)和其他內(nèi)容分別放到若干個源文件中,再由若干個源文件組成一個C程序。這樣可以分別編寫、分別編譯,提高調(diào)試效率。4.1 函數(shù)概述1114.2 函數(shù)定義與調(diào)用4.2.1 函數(shù)定義1
41、. 無參函數(shù)定義函數(shù)類型標識符 函數(shù)名( ) / 函數(shù)首部 語句序列 / 函數(shù)體 1122. 有參函數(shù)定義函數(shù)類型標識符 函數(shù)名(形式參數(shù)及類型說明表) 語句序列 形式參數(shù)及類型說明表:類型名1 形式參數(shù)1,類型名2 形式參數(shù)2, 1131.函數(shù)的數(shù)據(jù)類型函數(shù)返回值允許使用void類型。用于定義不返回值的函數(shù)允許在函數(shù)定義中省略書寫函數(shù)類型標識符,系統(tǒng)將默認該函數(shù)返回值的類型為int型C+中主函數(shù)main應指明函數(shù)類型。4.2.2 函數(shù)的數(shù)據(jù)類型和返回值1142.函數(shù)的返回值返回函數(shù)結(jié)果值的語句: return (表達式); 或 return 表達式; 或 return; /可不寫若retur
42、n語句中表達式的類型與函數(shù)的返回值類型不一致,則將轉(zhuǎn)換成函數(shù)的返回值類型在函數(shù)體中,可根據(jù)需要在多處使用return語句115例7 已給某三角形的三邊長,求該三角形的面積float area(float a,float b,float c) float l,s;l=(a+b+c)/2;s=sqrt(l*(l-a)*(l-b)*(l*-c);return (s); 116例 若ch的值是英文大寫字母,則返回相對應的英文小寫字母;若ch的值是英文小寫字母,則返回相對應的英文大寫字母;若ch的值是任意其他字符,則返回原字符值不變。 char change(char ch) char c=ch;if
43、(ch=A & ch=a & ch=z) c=ch-32;return (c); 1174.2.3 函數(shù)調(diào)用的一般形式無參函數(shù)調(diào)用函數(shù)名() 有參函數(shù)調(diào)用 函數(shù)名(實在參數(shù)1,實在參數(shù)2,) 1184.2.4 函數(shù)調(diào)用的兩種方式 所有允許書寫表達式的地方,均可出現(xiàn)對非void型函數(shù)的調(diào)用。方式一 函數(shù)調(diào)用可出現(xiàn)在表達式中例 承例7,設(shè)已說明實型變量s1,可寫 s1=area(3.0,4.0,5.0); 119方式二 void 型函數(shù)調(diào)用可作為獨立的語句出現(xiàn)在程序中例 設(shè)定義無返回值函數(shù)printviod print() int i; for (i=1;i=5;i+) cout * endl;
44、/由于無返回值,return語句可以省略。若寫下述函數(shù)調(diào)用語句 print();則將輸出5行星花串。120例15 編寫程序,以鍵盤輸入的三個正實數(shù)作 為三角形的三個邊長,計算三角形面積 并輸出結(jié)果。要求判斷輸入數(shù)據(jù)的合理 性并使用己知三邊長求三角形面積的函 數(shù)定義。121 #include #includedouble area(double a,double b,double c)double l,s;l=(a+b+c)/2;s=sqrt(l*(l-a)*(l-b)*(l-c);return(s);122void main( )double a,b,c,s; do cout0):; cina
45、bc; while(!(a0&b0&c0&a+bc&b+ca&c+ab);s=area(a,b,c);coutThe area is s.endl;1234.3 函數(shù)原型函數(shù)原型:函數(shù)必須在使用前先定義,或者先提供函數(shù)說明語句進行函數(shù)說明。系統(tǒng)預定義標準庫函數(shù),其函數(shù)原型包含在相應的頭文件中。程序員自定義函數(shù),而且函數(shù)定義出現(xiàn)在函數(shù)調(diào)用之后,則必須有函數(shù)原型。定義在函數(shù)調(diào)用之前的函數(shù)不要求有單獨的函數(shù)原型。124無參函數(shù)的函數(shù)原型其一般形式是函數(shù)類型標識符 函數(shù)名( );有參函數(shù)的函數(shù)原型其一般形式是函數(shù)類型標識符 函數(shù)名(類型名1 形式參數(shù)1,類型名2 形式參數(shù)2,);或函數(shù)類型標識符 函數(shù)
46、名(類型名1,類型名2,);125例 承例15。#include#includevoid main( )double area(double a,double b,double c); double a,b,c,s; do cout0):; cinabc; while(!(a0&b0&c0&a+bc&b+ca&c+ab);s=area(a,b,c);coutThe area is s.endl;126double area(double a,double b,double c)double l,s;l=(a+b+c)/2;s=sqrt(l*(l-a)*(l-b)*(l-c);return(s)
47、;1274.4 函數(shù)的嵌套調(diào)用與遞歸調(diào)用C中所有函數(shù)的定義都是平行的;不允許在一個函數(shù)的內(nèi)部再定義其他函數(shù);允許在函數(shù)定義中包含對其他函數(shù)的調(diào)用嵌套調(diào)用;允許間接地或直接地調(diào)用自身遞歸調(diào)用。128假如一個對象,它部分地由自己組成,或者是用自己來定義,則稱它是遞歸的。遞歸問題的共性遞歸的概念 (1)有一個”基本實例”,即結(jié)束遞歸的條件;(2)問題可轉(zhuǎn)化為相似問題,但較原始問題簡化;(3)可以應用此轉(zhuǎn)化過程使問題獲得解決。遞歸的概念與數(shù)學中的遞推、迭代等概念相似。129示例 計算階乘的遞推算法數(shù)學公式遞推算法130例25 計算某非負整數(shù)的階乘的遞歸函數(shù)定義 long fac(int n) long
48、 f; if (n=0) f=1; else f=n*fac(n-1); return (f); fac(5) fac(5)返回120 5*fac(4) 5*fac(4)返回120 4*fac(3) 4*fac(3)返回24 3*fac(2) 3*fac(2)返回6 2*fac(1) 2*fac(1)返回2 1*fac(0) 1*fac(0) 返回1 1 1131函數(shù)調(diào)用時,才在內(nèi)存的棧區(qū)為形參分配存儲單元,同時還為函數(shù)的返回地址、函數(shù)的返回值、函數(shù)體中所說明的局部變量等分配相應存儲單元。函數(shù)調(diào)用一般要求實參和形參的個數(shù)相等,按順序一一對應,且參數(shù)類型賦值匹配。調(diào)用函數(shù)和被調(diào)用函數(shù)之間產(chǎn)生數(shù)據(jù)
49、傳遞的途徑:通過實參和形參結(jié)合進行數(shù)據(jù)傳遞,并通過return語句把函數(shù)值返回調(diào)用函數(shù);通過全程變量在兩個函數(shù)之間傳遞數(shù)據(jù)。4.5 通過函數(shù)參數(shù)傳遞數(shù)據(jù)1324.5.1 值參數(shù)當用簡單變量作為函數(shù)傳遞數(shù)據(jù)的參數(shù)時,數(shù)據(jù)只能從實參單向傳遞給形參即按值傳遞。不管形參的值怎樣變化,都不會影響實參的原有取值。例31 下述C程序演示了函數(shù)參數(shù)傳遞數(shù)據(jù)是從實參單向傳遞給形參,即按值傳遞。133/ program c411.cpp #includevoid show(int n)n=5;cout“n=“nendl;void main( )int i=1; cout“i=“iendl; show(i); co
50、ut“now i=“iendl;運行示例i=1n=5now i=11344.5.2 引用參數(shù)傳引用調(diào)用:實現(xiàn)參數(shù)按傳引用方式傳遞,使實參與形參之間的傳遞關(guān)系可以是雙向的,即有去有回。傳引用調(diào)用時傳遞的是實參的地址,任何對形參的值的改變都必然反映到實參上。若寫如下函數(shù)首部void show(int &n)則表示:n是對一個整型變量的引用。135#includevoid swap(int &,int &);void main( )int i,j;coutij;cout”i=”i”,j=”jendl;swap(i,j);cout”now i=”i”,j=”jendl;例33下述程序?qū)崿F(xiàn):從鍵盤輸入兩
51、個整數(shù),調(diào)用帶引用參數(shù)的函數(shù),交換這兩個整數(shù)的值并輸出結(jié)果。136void swap(int &m,int &n)int t;t=m;m=n;n=t;運行示例Enter i,j:100 200i=100,j=200now i=200,j=1001374.5.4 缺省參數(shù) 缺省參數(shù)也稱默認參數(shù)。C+允許將有的形參指定為缺省參數(shù),并為它們提供缺省值。當函數(shù)調(diào)用時省略了與缺省參數(shù)相對應的實參時,系統(tǒng)將會把缺省值自動地傳遞給缺省參數(shù)。而當函數(shù)調(diào)用時寫上了實參時,則就把實參的值傳遞給相應的作為缺省參數(shù)的形參,此時其缺省值不起作用。138例35 下述C程序演示了帶缺省參數(shù)的函數(shù)原型、函數(shù)定義以及函數(shù)調(diào)用的
52、編寫與使用方法。整型函數(shù)volumn用于對已給三邊長計算并返回長方體體積。#include#includeconst int DEFAULT=10;int volumn(int length=DEFAULT, int width=DEFAULT, int height=DEFAULT);139void main( )int l,w,h,v; l=5;w=8;h=20; v=volumn(l,w,h);/不用缺省值 cout”For l=”setw(2)”,w=”setw(2)w”,h=setw(2)h”,”setw(2)l”*”setw(2)w”*”setw(2)h”=”setw(4)vend
53、l; l=5;w=8; v=volumn(l,w); /h用缺省值140cout”For l=”setw(2)l”,w=”setw(2)w”,h=”DEFAULT”,”setw(2)l”*”setw(2)w”*”DEFAULT”=”setw(4)vendl;l=5; v=volumn(l); /w,h用缺省值cout”For l=”setw(2)l”,w=”DEFAULT”,h=”DEFAULT”,”setw(2)l”*”DEFAULT”*”DEFAULT”=”setw(4)vendl;v=volumn( ); /l,w,h均用缺省值141cout”For l=”DEFAULT”,w=”DEF
54、AULT”,h=”DEFAULT”,”DEFAULT”*”DEFAULT”*”DEFAULT”=”setw(4)vendl;int volumn(int length,int width,int height)int v;v=length*width*height;return(v);142/* l=5; w=8; h=20; v=volumn(l,w,h); l=5; w=8; v=volumn(l,w); l=5; v=volumn(l); v=volumn( ); */運行示例 For l= 5,w=8,h=20, 5* 8*20= 800 For l= 5,w=8,h=10, 5* 8
55、*10= 400 For l= 5,w=10,h=10, 5*10*10= 500 For l=10,w=10,h=10,10*10*10=10001434.6 數(shù)組作為函數(shù)參數(shù)傳遞傳地址:但當數(shù)組名或指針作為形參向被調(diào)用函數(shù)傳遞時,調(diào)用時指向該數(shù)組第一個元素的指針(地址)就被傳遞給被調(diào)用函數(shù)。 當一個參數(shù)是傳地址時,任何對形式參數(shù)的值的改變都必然反映到實在參數(shù)上。注意數(shù)組變量的類型在兩個函數(shù)中必須相匹配。144例37 函數(shù)sort實現(xiàn)將含有n(n1)個元素的整型數(shù)組按其值從大到小的順序重新排列,且放置于原數(shù)組之中。#include#includevoid sort(int a ,int n)
56、;void print(int a ,int n);void main( )const int MAX=15; int i,n; int aMAX; docout”Enter n(1=n=”MAXn; while(!(n=1&n=MAX); cout”Enter ”n” integers:”;145for(i=0;iai;cout”Array a is:”endl;print(a,n);sort(a,n);cout”After sorting,now array a is:”endl;print(a,n);146void sort(int a ,int n)int i,j,k,temp; fo
57、r(i=0;in-1;i+) /選擇排序 k=i; /設(shè)i為最小值位置 for(j=i+1;jaj) /有更小的時 k=j; if(k!=i) temp=ai; ai=ak; ak=temp; 147void print(int a ,int n)int i; for(i=0;in;i+) coutsetw(4)ai; coutendl;1484.7 變量的作用域和存儲類別變量的作用域變量都有一個有效的作用域。作用域是指能使該變量保持有定義并能為系統(tǒng)所識別的那一程序區(qū)域,即能夠引用該變量的程序塊。作用域隨變量說明時不同存儲類別及所處不同位置而有大有小。有局部變量和全局變量兩類概念。1494.7
58、.1 局部變量和全局變量函數(shù)內(nèi)部或復合語句塊內(nèi)說明的變量稱為局部變量。函數(shù)首部中的形參也是局部變量。局部變量的作用域是它所在的函數(shù)或復合語句塊。不同函數(shù)中的變量,可以取相同名字,但它們卻是不相干的。在函數(shù)外部說明的變量稱為全局變量,或稱外部變量。全局變量的作用域是從該變量說明的位置開始,直至源文件結(jié)束。150例41 局部變量與全局變量#include int a=2,x=3,z; /全局變量a,x,z void p(int x) /局部變量x int a; /局部變量a a=x*x+1; z=a+x; couta,x,zendl; /a,x,z void main() p(a); /全局變量a
59、 couta,x,zendl; 運行示例 5,2,7 2,3,7ax1514.7.3 變量的生存期變量值的可繼承范圍(分配內(nèi)存單元)稱為該變量的生存期。非靜態(tài)局部變量的生存期是自進入變量說明所在的函數(shù)體或復合語句塊開始,直至從函數(shù)體或復合語句塊退出時為止。而靜態(tài)局部變量和全局變量的生存期是整個程序運行期間。注意:存在不等于其他函數(shù)可以引用。1524.7.4 變量的存儲類別存儲類別指變量在內(nèi)存中存儲的方式。存儲類別確定了變量在內(nèi)存中的存儲位置,從而也確定了該變量的作用域和生存期。內(nèi)存中的存儲區(qū)域包括程序代碼區(qū)、靜態(tài)存儲區(qū)和動態(tài)存儲區(qū)三個部分。變量根據(jù)其不同的存儲類別,可分別分配在靜態(tài)存儲區(qū)和動態(tài)
60、存儲區(qū)內(nèi)。153154四種變量的存儲類別說明符: auto 自動的 register 寄存器的 static 靜態(tài)的 extern 外部的155auto變量凡在函數(shù)內(nèi)或復合函數(shù)內(nèi)說明的變量都是auto變量。存儲方式說明符auto可予省略。auto變量在內(nèi)存的動態(tài)存儲區(qū)分配相應存儲單元。auto變量隨函數(shù)或復合語句塊的運行而產(chǎn)生,隨函數(shù)或復合語句塊的執(zhí)行完畢而消失。auto變量是局部變量,其有效作用域從說明該變量開始,到執(zhí)行完其所在函數(shù)或復合語句塊時結(jié)束。 1563. static局部變量(與auto變量的主要區(qū)別):static局部變量是在靜態(tài)存儲區(qū)占據(jù)著存儲單元,因此即使退出函數(shù)或復合語句塊
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年武漢大學廣慈醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 共享樂器:音樂學習的新方式
- 2024年汽車制造電腦設(shè)備采購合同
- 數(shù)字經(jīng)濟視角下企業(yè)財務管理轉(zhuǎn)型策略研究
- 形容領(lǐng)導講話好的成語
- 曲柄搖桿機構(gòu)雙曲柄機構(gòu)與雙搖桿機構(gòu)
- 公園改造項目環(huán)境和服務設(shè)施的游客需求研究-以廣州市曉
- 駱駝祥子-(一)-劇本
- 防水材料在食品加工廠建設(shè)中的應用考核試卷
- 陶瓷工藝品的綠色制造與品牌推廣策略實施案例考核試卷
- 活動房結(jié)構(gòu)計算書
- 醫(yī)療器械經(jīng)營質(zhì)量管理體系文件(全套)
- 富氫水項目經(jīng)濟效益及投資價值分析(模板參考)
- 小流域水土保持綜合治理工程初步設(shè)計
- 增強熱塑性塑料復合管在我國的發(fā)展現(xiàn)狀
- 機械設(shè)計外文文獻翻譯、中英文翻譯、外文翻譯
- 美標漸開線花鍵計算程序2014.8
- 英格索蘭空壓機操作規(guī)程
- 風動送樣手冊
- 績效考核評分標準
- 電力建設(shè)施工技術(shù)管理
評論
0/150
提交評論