




已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C+ 程序設(shè)計,計算機(jī)語言的基本體系結(jié)構(gòu),語言的基本體系結(jié)構(gòu),程序設(shè)計語言,本章將簡要介紹C+中的數(shù)據(jù)類型及相關(guān)運(yùn)算,以及常量、變量、表達(dá)式、語句等,最后介紹簡單的輸入輸出方法。,第一章 C+基礎(chǔ)知識,第一章 C+基礎(chǔ)知識,1.3 C+的詞法單位,1.6 運(yùn)算符和表達(dá)式,1.8 簡單的輸入輸出,1.7 數(shù)組與字符數(shù)組,1.5 常量和變量,1.4 C+ 中的數(shù)據(jù)類型,ok,1.1 C+語言概述,1.2 一個C+程序?qū)嵗?1.1 C語言概述,歷史: C+是由C語言為基礎(chǔ)發(fā)展起來的。 C語言是作為UNIX操作系統(tǒng)的開發(fā)語言為人們所認(rèn)識。七十年代末,C語言開始移植到非UNIX環(huán)境中,并逐步脫離UNIX系統(tǒng)成為一種獨立的程序設(shè)計語言。 1988年美國國家標(biāo)準(zhǔn)協(xié)會ANSI對C語言進(jìn)行了標(biāo)準(zhǔn)化,產(chǎn)生了ANSI C。,1.1 C 語言概述,(1)C語言既具備高級語言的結(jié)構(gòu)和編程環(huán)境,又提供類似于匯編語言那樣的系統(tǒng)資源操縱能力及程序執(zhí)行效率。適合解決有實時要求的問題。,C語言的主要特點:,(2)有豐富的運(yùn)算符和數(shù)據(jù)類型,表達(dá)式類型多樣化,可以方便地實現(xiàn)在其他語言中較難實現(xiàn)的運(yùn)算,對各種不同類型的程序設(shè)計都有良好的適應(yīng)性。,(3)以函數(shù)為基礎(chǔ)實現(xiàn)程序的結(jié)構(gòu)化設(shè)計,支持大型程序的多文件構(gòu)成及單個文件獨立編譯,適合大型復(fù)雜程序的設(shè)計。,(4)語言簡潔、緊湊,使用方便、靈活。,(5)可移植性好。,1.1 C 語言概述,C+是由C發(fā)展成為的以面向?qū)ο鬄橹饕卣鞯恼Z言。作為C語言的超集,C+繼承了C的所有優(yōu)點,又對數(shù)據(jù)類型做了擴(kuò)充,使得編譯系統(tǒng)可以檢查出更多類型錯誤。,C+支持面向?qū)ο蟪绦蛟O(shè)計,通過類和對象的概念把數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一起,通過派生、繼承、重載和多態(tài)性等特征實現(xiàn)了軟件重用和程序自動生成,使得大型復(fù)雜軟件的構(gòu)造和維護(hù)變得更加有效和容易。,C+語言的主要特點:,1.1 C 語言概述,C+與C完全兼容,很多用C編寫的庫函數(shù)和應(yīng)用程序都可以為C+所用。,但正是由于與C兼容,使得C+不是純正的面向?qū)ο蟮恼Z言,它既支持面向?qū)ο蟪绦蛟O(shè)計,也支持面向過程設(shè)計。但我們應(yīng)當(dāng)注意用面向?qū)ο蟮乃枷脒M(jìn)行設(shè)計,以發(fā)揮出C+的優(yōu)勢。,C+語言的兼容性:,1.2 一個C+程序?qū)嵗?# include int max(int i, int j) /A if (i=j) return i; else return j; int main(void) /B coutij; /從鍵盤上輸入變量值 coutmax number is:max(i, j) n ; /輸出提示和結(jié)果 return 0; ,【例1.1】 一個簡單的C+程序。,程序組成:,注釋,編譯預(yù)處理指令,程序體,由若干函數(shù)組成,其中有且僅有一個主函數(shù)main(),這是程序的執(zhí)行入口。在Windows編程中定義為winmain()。,下面進(jìn)入VC+ 運(yùn)行,1.3 C+的詞法單位,1.3.1 C+的字符集,1.3.2 關(guān)鍵字,1.3.3 標(biāo)識符(ID,identifier),1.3.4 標(biāo)點符號,ok,1.3.1 C+的字符集,ASCII碼字符集是計算機(jī)中的常用字符集。它包括英文字母及阿拉伯?dāng)?shù)字等128個字符,存儲一個ASCII碼占用一個字節(jié)單元。,漢字國標(biāo)碼用于漢字處理。國標(biāo)碼的存儲占用兩個字節(jié)單元。,Unicode字符集對各類字符進(jìn)行統(tǒng)一的雙字節(jié)編碼。它包括了世界上多種語言的基本字符,最多可容納65536個字符。 ASCII碼字符集,國標(biāo)碼字符集都是它的子集。,ok,常用字符集:,C+的字符集,C+語言基本字符:,1.3.2 關(guān) 鍵 字,關(guān)鍵字(keyword): 又稱保留字。是由系統(tǒng)定義的具有特定含義的英文單詞。關(guān)鍵字不能另作它用。,C+區(qū)分大小寫,關(guān)鍵字全部由小寫字母組成。標(biāo)準(zhǔn)C+(ISO14882)定義了74個關(guān)鍵字,具體的C+編譯器會做一些增刪。常用關(guān)鍵字及分類見表2.1。,ok,關(guān) 鍵 字,表2-1 C+常用關(guān)鍵字及分類,ok,關(guān) 鍵 字,1.3.3 標(biāo)識符,標(biāo)識符(Identifier,ID ): 是程序員定義的“單詞”,用來給變量、常量、數(shù)據(jù)類型、函數(shù)等命名。,合法標(biāo)識符由字母或下劃線開始,由字母、數(shù)字、下劃線組成,其有效長度為131個字符,長度超過31個字符者只識別前31個字符,VC+標(biāo)識符長度為1247個字符。,建議使用有一定含義的英文單詞或拼音序列作標(biāo)識符,以提高可讀性;另外盡量不用下劃線或雙下劃線打頭,以免與系統(tǒng)定義的關(guān)鍵字沖突。,ok,標(biāo)識符,例: 判斷下面哪些是合法的標(biāo)識符:,MyFile,Salary 94,amount,void,94Salary,Salary94,$amount,f3.5,Num_of_Student,1.3.4 標(biāo)點符號,標(biāo)點符號: # ( ) , : ; “ 等。,標(biāo)點符號的作用:,有一定的語法意義。如字符和字符串常量分別用 和 “ ”引起來。,對語法符號起分隔作用。如 ;等,1.4 C+中的數(shù)據(jù)類型,ok,C+基本數(shù)據(jù)類型稱為內(nèi)置數(shù)據(jù)類型,內(nèi)置數(shù)據(jù)類型不僅定義了數(shù)據(jù)類型,還定義了常用操作。本節(jié)僅介紹各種基本數(shù)據(jù)類型的定義,常用操作將在后面介紹。,C+為強(qiáng)類型語言,所有數(shù)據(jù)的使用嚴(yán)格遵從“先說明后使用”的原則,以便編譯器進(jìn)行編譯。,整型:用來存放整數(shù),整數(shù)(有符號的整數(shù))在內(nèi)存中存放的是它的補(bǔ)碼,無符號數(shù)沒有符號位,存放的就是原碼。整數(shù)占用的字節(jié)數(shù)與機(jī)型有關(guān),32位機(jī)上占用4個字節(jié)。,內(nèi)置數(shù)據(jù)類型:,字符型:用來保存字符,存儲的是該字符的ASCII碼,占用一個字節(jié)。如大寫字母A的ASCII碼為65,在對應(yīng)的一個字節(jié)中存放的就是65。字符型數(shù)據(jù)從本質(zhì)上說也是整數(shù),可以是任何一個8位二進(jìn)制整數(shù)。C+同時也支持寬字符類型(wchar_t),或稱雙字節(jié)字符型。,實型:單精度和雙精度型都用來存放實數(shù),兩者表示的實數(shù)精度不同。實數(shù)在內(nèi)存中以規(guī)范化的浮點數(shù)存放,包括尾數(shù)、數(shù)符和階碼。數(shù)的精度取決于尾數(shù)的位數(shù),32位機(jī)上實型為23位(因規(guī)范化數(shù)的數(shù)碼最高位恒為1,不必存儲,實際精度為24位),雙精度為52位。,邏輯型:也稱布爾型,其取值為true(邏輯真)和false(邏輯假),存儲字節(jié)數(shù)在不同編譯系統(tǒng)中可能有所不同,VC+6.0中為1個字節(jié)。布爾型在運(yùn)算中可以和整型相互轉(zhuǎn)化,false對應(yīng)為0,true對應(yīng)為1或非0,無值型:主要用來說明函數(shù)的返回值類型,將在函數(shù)一章中具體介紹。,基本數(shù)據(jù)類型還可以加上一些修飾詞,包括:signed(有符號)、unsigned(無符號)、long(長)、short(短)。參見下表:,VC+中所有基本數(shù)據(jù)類型,1.5 變量和常量,1.5.1 變 量,1.5.2 文字常量,1.5.3 常變量,在程序中,常量和變量是用來表示數(shù)據(jù)的; 常量又分為字面常量、常變量;,ok,1.5.1 變 量,1 變量說明,2 變量初始化值,變量,在程序中是指可以改變值的量; 變量必須用標(biāo)識符進(jìn)行標(biāo)識,稱為變量名; 變量有類型之分,如整形變量、字符變量等; 任何變量都必須先說明后使用;一是便于編譯程序為變量分配空間,二是便于編譯時進(jìn)行語法檢查; 變量使用的第一步,是給變量賦初始值;,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,變量初始化,賦初值: 定義變量時即給變量一個值稱為變量初始化 例如: int a=3, b=4, c=5; float x=3.0; 變量初始化可以避免引用到隨機(jī)變量。,float x; x=3.0;,1.5.2 文字常量,1. 整型常量,4. 字符串常量,3. 字符型常量,2. 實型常量,文字常量:指程序中直接給出的量; 常量的值在程序執(zhí)行過程中保持不變;并且存儲在程序區(qū),而非數(shù)據(jù)區(qū); 根據(jù)取值和表示方法的不同,可分為以下幾種:,ok,整型常量,十進(jìn)制表示法,八進(jìn)制表示法,十六進(jìn)制表示法,其他表示法,整型常量表示方法:,ok,整數(shù)的十進(jìn)制表示方法,十進(jìn)制表示與我們熟悉的書寫方式相同。 例: 15 -24,ok,整數(shù)的八進(jìn)制表示,八進(jìn)制表示以0開始,由數(shù)字07組成,用來表示一個八進(jìn)制數(shù)。 例: 012 /八進(jìn)制數(shù)12,即十進(jìn)制數(shù)10 -0655 /八進(jìn)制數(shù)-655,即十進(jìn)制數(shù)-429,ok,整數(shù)的十六進(jìn)制表示,十六進(jìn)制以0X(大小寫均可)開始,由數(shù)字09和字母AF(大小寫均可)組成,用來表示一個十六進(jìn)制數(shù)。 例: 0x32A /十六進(jìn)制數(shù)32A,即十進(jìn)制數(shù)810 -0x2fe0 /十六進(jìn)制數(shù)-2fe0, /即十進(jìn)制數(shù)-12256,ok,整數(shù)的其他表示方法,長整型常量和無符號整型常量: 長整型常數(shù)以 L 或 l 結(jié)尾,無符號常整數(shù)以 U 或 u 結(jié)尾,以 U L 或 L U(大小寫均可)結(jié)尾則可表示無符號長整型常數(shù)。 例如: -84L /十進(jìn)制長整數(shù)-84 026U /八進(jìn)制表示的無符號整數(shù)26 0X32LU /十六進(jìn)制表示的無符號長整型數(shù)32。,實型常量,(1)一般形式與平時書寫形式相同,由數(shù)字 0 9和小數(shù)點組成。例如: 0.23 -125.76 0.0 .46 -35.,(2) 指數(shù)形式(也稱為科學(xué)表示法)表示為尾數(shù)乘以10的次方形式,由尾數(shù)、E或e和階數(shù)組成。指數(shù)形式要求在E或e前面的尾數(shù)部分必須有數(shù)字,后面的指數(shù)部分必須為整數(shù)。,例 : 判斷下列表示是否合法,123E12,-.34e-2,E4,1.43E3.5,包含小數(shù)點和10的冪的數(shù)為實型常量 表示方法:,字符型常量,字符常量: 用單引號引起來的單個字符。在內(nèi)存中保存的是字符的ASCII碼值。在所有字符中,可顯示字符通常就用單引號引起來表示: a /字符a /字符 4 /字符4 /空格字符 特殊情況字符,如不可顯示的字符等,c+使用轉(zhuǎn)義序列表示方法(詳見表1-3,此處略): n /換行 /字符 a /響鈴,4. 字符串常量,字符串常量與字符型常量的區(qū)別:,字符串常量“ a“ 占兩個字節(jié),存放a和0,值為0x6100,字符型常量a 占一個字節(jié),存放a,值為0x61,字符串常量: 用雙引號引起來的若干個字符。 例如: “ I am a Chinese.“, “123“,“ a “, “ “,1.5.3 常變量,標(biāo)識符常量: 用常量說明符const給文字常量起的名字(標(biāo)識符),因為其說明和引用形式很像變量,所以也稱常變量; 例如: const float PI=3.14159; const int Number_of_Student=100; 常變量必須也只能在說明時進(jìn)行初始化; 常變量初始化之后,不允許再被賦值; 常變量必須先說明后使用; 常變量存儲在數(shù)據(jù)區(qū),并且可以按地址訪問,編譯時系 統(tǒng)對常變量進(jìn)行類型檢查。 C+建議使用常變量,而不要使用文字常量。,1.6 運(yùn)算符和表達(dá)式,1.6.1 運(yùn)算符、優(yōu)先級和結(jié)合性,1.6.2 基本運(yùn)算符及其表達(dá)式,1.6.4 算術(shù)類型轉(zhuǎn)換和賦值類型轉(zhuǎn)換 (選讀),1.6.5 求值次序與副作用,1.6.3 語句,本節(jié)的重點: 介紹與基本數(shù)據(jù)類型封裝在一起的運(yùn)算(操作)。,ok,1.6.1 運(yùn)算符、優(yōu)先級和結(jié)合性,ok,在C+中對常量或變量進(jìn)行運(yùn)算或處理的符號稱為運(yùn)算符,參與運(yùn)算的對象稱為操作數(shù)。,運(yùn)算符按操作數(shù)的數(shù)量分類: 單目運(yùn)算符只對一個操作數(shù)運(yùn)算,如負(fù)號運(yùn)算符“”等; 雙目運(yùn)算符要求有兩個操作數(shù),如乘號運(yùn)算符“*”等; 三目運(yùn)算符要求有三個操作數(shù),三元運(yùn)算符只有一個“?:”。,1.6.1 運(yùn)算符、優(yōu)先級和結(jié)合性,ok,優(yōu)先級和結(jié)合性決定了運(yùn)算中的優(yōu)先關(guān)系。,優(yōu)先級:指不同運(yùn)算符在運(yùn)算中的優(yōu)先關(guān)系,可以用序號表示,序號越小,優(yōu)先級越高。 例如: 加號()和減號()的優(yōu)先級是6;乘號( * )和除號( / )的優(yōu)先級是5;* 和 / 的優(yōu)先級高于和。,1.6.1 運(yùn)算符、優(yōu)先級和結(jié)合性,結(jié)合性: 決定優(yōu)先級相等的運(yùn)算符組合在一起時的運(yùn)算次序,同一優(yōu)先級的運(yùn)算符有相同的結(jié)合性。 如+、-的結(jié)合性是從左到右(左結(jié)合),則a+b+c-d的運(yùn)算次序為: (a+b)+c)-d /先算a+b,再加c,最后減d 又如前+和單目負(fù)-的結(jié)合性是從右到左(右結(jié)合),則-+a的運(yùn)算次序為: -(+a) /先做+a,再取相反數(shù)(加負(fù)號) 這對算法描述是必須的,每一步做什么必須確定。,1.6.1 運(yùn)算符、優(yōu)先級和結(jié)合性,例: (1) a*b+c; /先做乘法運(yùn)算,再做加法 (2) a+b-c ; /根據(jù)左結(jié)合性,先取a、b相加; /再取c,最后相減 演示如下:設(shè)a=10,b=20,c=15;,10,20,15,15,1 算術(shù)運(yùn)算符及其表達(dá)式,4 邏輯運(yùn)算、邏輯表達(dá)式及其求值優(yōu)化,5 位運(yùn)算(選讀),2 賦值運(yùn)算符賦值表達(dá)式,3 自增、自減運(yùn)算,6 逗號運(yùn)算符與逗號表達(dá)式,1.6.2 基本運(yùn)算符及其表達(dá)式,7 sizeof( )運(yùn)算符,表達(dá)式:由運(yùn)算符、操作數(shù)及標(biāo)點符號組成的,能取得一個值的式子。,1.算術(shù)運(yùn)算符及其表達(dá)式,ok,整數(shù)的算術(shù)運(yùn)算: 當(dāng)兩個操作數(shù)均為整數(shù)時,*和/重載為整乘和整除,結(jié)果為整數(shù),除法運(yùn)算后舍去小數(shù)取整。如: 5/4 /結(jié)果為1,整數(shù),當(dāng)兩個操作數(shù)均為整數(shù),%定義為求余運(yùn)算,也稱求模運(yùn)算,結(jié)果為兩個整數(shù)相除后的余數(shù)。如果兩個整數(shù)中有負(fù)數(shù),則先用兩數(shù)絕對值求余,最后結(jié)果的符號與被除數(shù)相同。例如 6%3 /結(jié)果為0 6%7 /結(jié)果為6 7%6 /結(jié)果為1 -7%6 /結(jié)果為-1 7%-6 /結(jié)果為1 -7%-6 /結(jié)果為-1,實數(shù)的算術(shù)運(yùn)算: 只要有一個操作數(shù)是實數(shù),兩個操作數(shù)均轉(zhuǎn)換為double型,*和/重載為普通的乘和除,結(jié)果是實數(shù): 5/4.0 /結(jié)果為1.25,實數(shù),運(yùn)算符的重載: 運(yùn)算符總是與操作數(shù)封裝在一起。相同的運(yùn)算符對不同類型的操作數(shù)執(zhí)行的運(yùn)算是有差異的。,算術(shù)表達(dá)式:,使用時注意: 1、表達(dá)式中每個變量都有確定的值時才能進(jìn)行表達(dá)式求值; 2、C+中算術(shù)運(yùn)算應(yīng)注意數(shù)據(jù)溢出問題,即運(yùn)算結(jié)果超出對應(yīng)數(shù)據(jù)類型的表示范圍。編譯程序只會對除法運(yùn)算時除數(shù)為0這種情況提示出錯,因此,程序設(shè)計者必須在程序中解決檢查并處理整數(shù)溢出問題。,ok,由算術(shù)運(yùn)算符連接的表達(dá)式,如:a+b*3 ;,2.賦值運(yùn)算符與賦值表達(dá)式,ok,賦值與引用: 將數(shù)據(jù)存放到相應(yīng)存儲單元中稱為賦值,如果該單元中已有值,賦值操作以新值取代舊值;從某個存儲單元中取出數(shù)據(jù)使用,稱為引用,引用不影響單元中的值,即一個量可以多次引用。常量只能引用,不能賦值。,賦值通過賦值運(yùn)算符“=”來完成,其意義是將賦值號右邊的值送到左邊變量所對應(yīng)的單元中。賦值號不是等號,它具有方向性。,左值與右值: C+將變量名代表的單元稱為 “左值”,而將變量的值稱為“右值”。 左值必須是內(nèi)存中一個可以訪問且可以合法修改的對象,因此只能是變量名,而不能是常量或表達(dá)式。,2.賦值運(yùn)算符與賦值表達(dá)式,例如下面的賦值運(yùn)算是錯誤的: 3.1415926=pi; /左值不能是常數(shù) x+y=z; /左值不能是表達(dá)式 const int N=30; N=40; /左值不能是常變量,2.賦值運(yùn)算符與賦值表達(dá)式,賦值表達(dá)式: 由賦值運(yùn)算符連接的表達(dá)式。格式為: 變量 = 表達(dá)式 例如:x=5+6;a=b=c=d+1; 復(fù)合賦值運(yùn)算符:雙目算術(shù)運(yùn)算符和賦值運(yùn)算符可以組合成單一運(yùn)算符: + = = * = / = % = 格式為: 變量 復(fù)合賦值運(yùn)算符 表達(dá)式 它等同于 變量 = 變量 運(yùn)算符 表達(dá)式 例如:x+=5 等同于:x=x+5,ok,3.自增自減運(yùn)算,前置和后置運(yùn)算: 前置是先增減后引用,即先對變量自加或自減,用新的值參與其他運(yùn)算;后置則是先引用后增減,即用變量原來的值參與其他運(yùn)算,然后再對變量進(jìn)行自加或自減,例如: int i=5, j=5, m, n; m=i+; /后置;相當(dāng)于m=i; i=i+1; /結(jié)果:i的值為6,m的值為5; n=+j; /前置;相當(dāng)于j=j+1;n=j; /結(jié)果:j的值為6,n的值為6;,自增自減運(yùn)算符: 意義:使變量當(dāng)前值加1或減1,再賦給該變量自己: i+或+i /相當(dāng)于i=i+1 j-或-j /相當(dāng)于j=j1 要求:操作數(shù)只能是變量,不能是常量或表達(dá)式;,ok,4.邏輯運(yùn)算、邏輯表達(dá)式及其求值優(yōu)化,ok,邏輯運(yùn)算: 用于判斷分析,運(yùn)算符包括關(guān)系和邏輯運(yùn)算符。 關(guān)系運(yùn)算符: 包括:(大于)、(大于等于)、(小于)、(小于等于)、= =(等于)和!=(不等于)。關(guān)系運(yùn)算符完成兩個操作數(shù)大小的比較,結(jié)果為邏輯值true(真)或false(假)。每種可比較大小的數(shù)據(jù)類型,都重載了關(guān)系運(yùn)算符。不同類型,自動轉(zhuǎn)換為同一類型后進(jìn)行比較。,在C+中這兩個邏輯值與整數(shù)之間有一個對應(yīng)關(guān)系,真對應(yīng)1,假對應(yīng)0;反過來,0對應(yīng)假,非0整數(shù)對應(yīng)真。所以邏輯運(yùn)算結(jié)果可以作為整數(shù)參與算術(shù)運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算及其他運(yùn)算。,關(guān)系表達(dá)式:,例如: a+bc+d /*等同于(a+b)(c+d), 結(jié)果為0或1*/ y=ab /*計算ab的值0或1 賦給y,y的值為0或1*/ abc /*等同于(ab)c,先求ab 的值, 再將結(jié)果0或1與c比較大小*/,由關(guān)系運(yùn)算符連接的表達(dá)式。值為true或false。,ok,4.邏輯運(yùn)算、邏輯表達(dá)式及其求值優(yōu)化,設(shè)有定義 float a=3.2;int b=5;則: 3ab /結(jié)果是?,根據(jù)右結(jié)合 原則其運(yùn)算 過程如下:,a,5,b,3.2,3,F, 即0,F即0,邏輯運(yùn)算符:,包括:!、&和|,其優(yōu)先級和語義見下表。,由邏輯運(yùn)算符連接的表達(dá)式。 其操作數(shù)和運(yùn)算結(jié)果均為邏輯量。運(yùn)算結(jié)果同樣可以作為一個整數(shù)參與其他運(yùn)算。,由于邏輯值和整數(shù)之間的對應(yīng)關(guān)系,也允許整型和字符型操作數(shù)進(jìn)行邏輯運(yùn)算: 21&0 /邏輯與,21與0,結(jié)果為假:0 21|0 /邏輯或,21或0,結(jié)果為真:1 !21 /邏輯非,21的非,結(jié)果為假:0,邏輯表達(dá)式:,邏輯表達(dá)式計算時,邏輯非優(yōu)先級最高,關(guān)系運(yùn)算其次,邏輯與和邏輯或最低。,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,-,&,t3=0,t5=b,t6=1,|,得整個表達(dá)式的值為:,1,邏輯表達(dá)式求值的優(yōu)化:,在求邏輯表達(dá)式值的過程中,一旦表達(dá)式的值能夠確定,就不再逐步進(jìn)行下面的運(yùn)算。稱為“求值優(yōu)化”。,已知: int a=10, b=20, c=30; 求: ab | c+ /結(jié)果以及a,b,c的值,t1=1,整個表達(dá)式的值為 1,可見: 表達(dá)式 c+ 已不需要計算所以: c不變?nèi)詾?30,編程人員在使用邏輯運(yùn)算時應(yīng)當(dāng)加以小心,優(yōu)化計算固然提高了運(yùn)算效率,但可能產(chǎn)生副作用。所謂副作用,就是出乎設(shè)計人員的意料,得到預(yù)想不到的結(jié)果。,5. 位運(yùn)算(選讀),(1)按位取反運(yùn)算符“” (2)左移運(yùn)算符“” (4)按位與運(yùn)算符“&” (5)按位或運(yùn)算符“|” (6)按位異或運(yùn)算符“”,ok,c+語言提供字位運(yùn)算,它對操作數(shù)的各個位進(jìn)行操作。,(1)按位取反運(yùn)算符“” 將操作數(shù)的每個二進(jìn)制位取反,即1變?yōu)?,0變?yōu)?。例如,整數(shù)a的值為10011011,則a的值為01100100。,(2)左移運(yùn)算符“” 運(yùn)算一般格式為:an 其中a為整數(shù),n為一個正整數(shù)常數(shù)。語義為將a的二進(jìn)制數(shù)依次向左移動n個二進(jìn)制位,并在低位補(bǔ)0。左移n位相當(dāng)于乘以2的n次方,但移位運(yùn)算的速度比乘法快。,(3)右移運(yùn)算符“” 與左移運(yùn)算符類同,將左操作數(shù)向右移動右操作數(shù)指定的二進(jìn)制位數(shù),忽略移位后的小數(shù)部分,并在高位補(bǔ)0。一個整數(shù)右移n位相當(dāng)于除以2的n次方,但比除法快。 在VC+6.0中有符號數(shù)右移時高位補(bǔ)符號位,嚴(yán)格對應(yīng)除法: -323 /-32右移3位,由11100000B得11111100B,即-4,(4)按位與運(yùn)算符“&” 將兩個操作數(shù)的對應(yīng)位逐一進(jìn)行按位邏輯與運(yùn)算。運(yùn)算規(guī)則為:對應(yīng)位均為1時,該位運(yùn)算結(jié)果為1;否則為0。例如: a 01001101 b 00001111 a & b 00001101 該運(yùn)算可用來將整數(shù)的某些位置0,而保留所需要的位,上例保留了低四位。,(5)按位或運(yùn)算符“|” 將兩個操作數(shù)的對應(yīng)位逐一進(jìn)行按位邏輯或運(yùn)算。運(yùn)算規(guī)則為:只要有一個數(shù)對應(yīng)位為1,該位運(yùn)算結(jié)果即為1;兩個數(shù)對應(yīng)位均為0,該位結(jié)果為0。例如: a 01001101 b 00001111 a | b 01001111 該運(yùn)算符可用來將整數(shù)的某些位置1。上例高四位不變,低四位全1。,(6)按位異或運(yùn)算符“” 將兩個操作數(shù)的對應(yīng)位逐一進(jìn)行按位異或運(yùn)算。運(yùn)算規(guī)則為:當(dāng)對應(yīng)位的值不同時,該位運(yùn)算結(jié)果為1,否則為0。例如: a 01001101 b 00001111 a b 01000010 該運(yùn)算符可用來將一個整數(shù)的某些位取反,或?qū)⒄妥兞康闹抵?(將整型變量與自身按位異或)。上例低四位取反,高四位不變。 雙目位運(yùn)算符也可以與賦值運(yùn)算符組合成復(fù)合賦值運(yùn)算符: = &= | = =,以上6種單目運(yùn)算不影響數(shù)據(jù)本身的值,而是只產(chǎn)生一個中間量,這個中間量被引用后即不再存在。,6.逗號運(yùn)算符與逗號表達(dá)式,用逗號連接起來的表達(dá)式稱為逗號表達(dá)式, (C+中,逗號既是分隔符,又是運(yùn)算符。) 格式為: 表達(dá)式1,表達(dá)式2,表達(dá)式n 逗號表達(dá)式中的每一個表達(dá)式都會被運(yùn)算,整個逗號表達(dá)式的值為最后一個表達(dá)式的值。 例如:a=(x=3,x+=6,5+6);/a=11 x=9,7. sizeof( ) 運(yùn)算符,用于計算一個操作數(shù)類型或一個變量的字節(jié)數(shù)。一般格式為: sizeof (數(shù)據(jù)類型) 或 sizeof(變量名) 例如:sizeof(int) 值為4 sizeof( float) 值為4 double x; sizeof( x) 值為8,1.6.3 語句,1 表達(dá)式語句:表達(dá)式; 2 空語句: ; 3 復(fù)合語句: /若干語句 流程控制語句:流程控制語句用來控制或 改變程序的執(zhí)行方向 ;,1.6.3結(jié)束,1.6.4 算術(shù)類型轉(zhuǎn)換和賦值類型轉(zhuǎn)換(選讀),1 混合運(yùn)算的類型轉(zhuǎn)換規(guī)則,2 賦 值 類 型 轉(zhuǎn) 換,ok,運(yùn)算過程中,當(dāng)某個二元運(yùn)算符兩邊的操作數(shù)類型不同但屬于類型相容時,系統(tǒng)先將精度低的操作數(shù)變換到與另一操作數(shù)精度相同,而后再進(jìn)行運(yùn)算。,類型相容: 類型不同但系統(tǒng)可以自動進(jìn)行轉(zhuǎn)換。,當(dāng)賦值號的左值和右值類型不一致但屬于類型相容時,由系統(tǒng)自動進(jìn)行類型轉(zhuǎn)換。,3 強(qiáng) 制 類 型 轉(zhuǎn) 換,1. 混合運(yùn)算的類型轉(zhuǎn)換規(guī)則,數(shù)據(jù)類型轉(zhuǎn)換方向,ok,具體規(guī)則: (1)字符可以作為整數(shù)參與數(shù)值運(yùn)算,整數(shù)值為其ASCII碼。 (2)操作數(shù)為字符或短整型時,系統(tǒng)自動變換成整型。 (3)操作數(shù)為實型時,系統(tǒng)自動變換成雙精度型。 (4)其余情況,當(dāng)兩操作數(shù)類型不同時,將精度低(或表示范圍?。┑牟僮鲾?shù)的數(shù)據(jù)類型變換到與另一操作數(shù)類型相同再進(jìn)行運(yùn)算,例: char c1, c2; int i1, i2; float x1, x2; 則表達(dá)式 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,最后結(jié)果轉(zhuǎn)為單精度型賦給x2。,2.賦值類型轉(zhuǎn)換,2.5.3結(jié)束,系統(tǒng)自動進(jìn)行類型轉(zhuǎn)換規(guī)則: 1、實型數(shù)賦給整型變量:取整;注意溢出; 2、整型數(shù)賦給實型變量:先轉(zhuǎn)換為實型數(shù); 3、字符型數(shù)賦給整型變量:ASCII碼為依據(jù);分為兩種情況:符號位是0或1時不同; 若符號位為1,則低位字節(jié)不變,高位字節(jié)全部置1再賦值。 4、絕對值較大的數(shù)賦給表達(dá)范圍較小的數(shù)據(jù)類型時,注意溢出;,賦值運(yùn)算中,當(dāng)左值與右值類型不一致時, 系統(tǒng)將按照左值的類型,自動進(jìn)行強(qiá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 類型自動 完成強(qiáng)制 轉(zhuǎn)換功能,(2) y,2,i,2, ,2.0,2.0,3 強(qiáng)制類型轉(zhuǎn)換,ok,強(qiáng)制類型轉(zhuǎn)換運(yùn)算符格式為: (type) 表達(dá)式 /形式一 或 type (表達(dá)式) /形式二,作用:將表達(dá)式強(qiáng)制轉(zhuǎn)換為type類型, 但表達(dá)式的值及其類型不變。,設(shè)有變量說明:int a=7, b=5;float x; 表達(dá)式 x=a/b的值將為1.0。 如果希望表達(dá)式求出這兩個整數(shù)相除的實數(shù)商1.4賦給x,就需要將兩個操作數(shù)或其中一個操作數(shù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換。可表示為: x=(float)a/(float)b或x=(float)a/b,說明: (1)強(qiáng)制類型轉(zhuǎn)換不改變表達(dá)式本身的值類型,而是產(chǎn)生一個臨時變量,用來暫存轉(zhuǎn)換后的值,該臨時變量引用后即自動釋放。如上例,執(zhí)行強(qiáng)制類型轉(zhuǎn)換后變量a和b的值及類型都不變,而是各自產(chǎn)生一個臨時變量,用這兩個臨時變量的值進(jìn)行運(yùn)算。 (2)強(qiáng)制類型轉(zhuǎn)換符優(yōu)先級較高,只對緊隨其后的表達(dá)式起作用,而對其他部分不起作用。如表達(dá)式(float)a/b的含義是先將變量a強(qiáng)制轉(zhuǎn)換為浮點數(shù),然后與整數(shù)b運(yùn)算。 新的C+標(biāo)準(zhǔn)中,強(qiáng)制類型轉(zhuǎn)換采用static_cast,const_cast, dynamic_cast,reinterpret_cast等4個關(guān)鍵字,形式為static_cast,語法上更加嚴(yán)謹(jǐn)。,1.6.5 求值次序與副作用(選讀),ok,在符合優(yōu)先級和結(jié)合性的前提下,C語言的標(biāo)準(zhǔn)對表達(dá)式中各操作數(shù)的求值次序沒有做統(tǒng)一規(guī)定。,編譯器為提高代碼質(zhì)量,在不影響優(yōu)先級和結(jié)合性的前提下也要對操作數(shù)的訪問次序作調(diào)整。在安排順序時,如果某個操作數(shù)經(jīng)歷了求值運(yùn)算,那么這個求值可能影響到其他操作數(shù)的值,這時就會產(chǎn)生副作用。 例如,設(shè)有int a=2, b=5, c; 對表達(dá)式c=a*b+(+a)+(b=10) 三個同級運(yùn)算中,是先算a*b,還是+a,還是b=10,其次再算哪個?顯然求值次序不同將導(dǎo)致結(jié)果不同。,1.7 數(shù)組與字符數(shù)組,1.7.1 數(shù) 組,1.7.2 字 符 數(shù) 組,本節(jié)介紹一種用戶自定義的導(dǎo)出數(shù)據(jù)類型 數(shù)組類型,ok,1.7.1 數(shù)組,數(shù)組定義: 數(shù)組是有限個同類型元素的有序集合,這些元素有一個共同的名字,每個元素以其在數(shù)組中的位置區(qū)分,位置用下標(biāo)表示。 例如數(shù)列或向量就可以看作一個數(shù)組,其中的元素用一個下標(biāo)即可確定。 矩陣也可看作一個數(shù)組,其中的元素需要用“行”、“列”兩個下標(biāo)確定。 數(shù)組下標(biāo)的個數(shù)稱作維數(shù),上述代表數(shù)列的數(shù)組和代表矩陣的數(shù)組分別稱為一維數(shù)組和二維數(shù)組。本節(jié)只介紹一維數(shù)組。,ok,一維數(shù)組,一維數(shù)組的定義格式: 存儲類型 數(shù)據(jù)類型 數(shù)組名常量; 數(shù)據(jù)類型指的是數(shù)組中元素的數(shù)據(jù)類型,可以是C+中定義的任何一種數(shù)據(jù)類型。 寫在方括號中的常量用來定義數(shù)組大小,即數(shù)組中元素的個數(shù)。 例如:int m5; /定義數(shù)組m, 其中有5個整數(shù) const int N=3; float xN; /數(shù)組x中有3個實數(shù),ok,一維數(shù)組,數(shù)組的存儲: 數(shù)組在存儲單元中是按下標(biāo)的順序連續(xù)存放的,數(shù)組名代表數(shù)組存儲區(qū)域的首地址。 數(shù)組的元素: 標(biāo)識方法是用數(shù)組名和下標(biāo): 數(shù)組名表達(dá)式 表達(dá)式用來計算下標(biāo)值。C+中規(guī)定數(shù)組第一個元素的下標(biāo)為0。,ok,一維數(shù)組,注意: C+中數(shù)組大小在編譯時確定,編譯系統(tǒng)按照定義為數(shù)組分配一段連續(xù)的存儲單元,這段單元的大小也是不能改變的,因此數(shù)組大小不能用變量定義,而只能是一個正整數(shù)常量。 為避免使用時數(shù)組出界,通?!按箝_小用”。 下列定義是非法的: int count; float scount; /數(shù)組個數(shù)不能是變量,且必 /須在定義時指明; const float Num=3; int nNum; /數(shù)組個數(shù)不能是實數(shù); 對數(shù)組的訪問指的是對數(shù)組元素的訪問,不能直接將數(shù)組名作為訪問對象,對數(shù)組賦值也必須對每一個元素逐個賦值。,ok,一維數(shù)組,數(shù)組的初始化 數(shù)組初始化的方法是在定義時用大括號列出元素的值。 例如: int score5=88, 92, 90, 85, 78; 初始化值的個數(shù)可以少于定義的元素個數(shù),這時從第0個元素開始逐個取得初始化值,其余的元素初始化為0。 例如: float y5=3.4, 4.2, 7; /5個元素的取值分別為 /3.4,4.2, 7, 0, 0 對于定義時初始化的情況,可以不指明元素個數(shù),編譯器會按照初始化值的個數(shù)確定數(shù)組大小。 例如: int n=1, 2, 3, 4; /數(shù)組n有4個元素 int nn; /非法定義,必須指明數(shù)組元素個數(shù),ok,一維數(shù)組,1,1,2,3,1,輸出,2.4.1結(jié)束,1,2,3,1+2=3,【例1.2】使用數(shù)組的簡單例子。 # include void main() int int_arr4; int_arr0=1; int_arr1=1; int_arr2=2; int_arr3=int_arr1+int_arr2; coutint_arr0n int_arr1n int_arr2n int_arr3 n; ,1.7.2 字符數(shù)組,字符數(shù)組定義: 如果數(shù)組中的元素為字符,就稱為字符數(shù)組。例如: char string110; /可用來保存10個字符的字符數(shù)組; char city_name1 = N, a, n, j, i, n, g; /可用來保存7個字符的字符數(shù)組; 字符串與字符數(shù)組: C+中用字符數(shù)組保存字符串。允許直接用字符串常量給字符數(shù)組初始化。例如: char city_name2=”Nanjing”; 用字符串初始化,字符數(shù)組會自動加上一個串結(jié)束符0 。串結(jié)束符在字符串操作中具有十分重要的意義,因此在定義字符數(shù)組大小時,要注意留出足夠的空間保存串結(jié)束符。,ok,1.7.2 字符數(shù)組,字符串處理函數(shù): 字符串處理函數(shù)定義在頭文件中,其中包括: strlen(s)/返回字符串s的實際長度(不包括0 ) strcpy(s1,s2)/將字符串s2中0 之前的所有字符/依次賦值到字符串s1中,最后再加上一個0 。 由于不能直接對字符數(shù)組名賦值,所以將一個字符串的值賦給另一個字符串必須用字符串復(fù)制函數(shù)完成。例如: char string220; string2=”VC+”; /非法 strcpy(string2, ”VC+”); /合法,1.7.2 字符數(shù)組,【例1.3】 字符數(shù)組和字符串處理函數(shù)的應(yīng)用。 # include # include using namespace std; int main( ) char s1 =“Hello C+“;/初始化決定數(shù)組s1有10個元素 char s210, s320; s20= B; s21= e; s22= g; s23= i; s24= n; s25= 0 ; /對字符串結(jié)束處理非常重要 strcpy(s3, s2); cout“The length of “s1“ is:“ strlen(s1) n; couts2 ts3 n; return 0 /只有字符數(shù)組可整體輸出,因為有結(jié)束符 運(yùn)行結(jié)果:The length of “ Hello C+ “ is:9 Begin Begin,2.4.2結(jié)束,1.8 簡單的輸入輸出,1.8.1 C+的輸入輸出簡介,1.8.2 數(shù)據(jù)的輸入輸出,ok,1.8.3 輸入輸出的格式控制,輸入流對象cin: cin用來在程序執(zhí)行期間給變量輸入數(shù)據(jù), 一般格式為: cin變量名1變量名2變量名n; 輸出流對象cout: cout實現(xiàn)將數(shù)據(jù)輸出到顯示器的操作, 一般格式為: cout using namespace std;,ok,1.8.1 C+輸入輸出簡介,1.8.2 數(shù)據(jù)的輸入輸出,(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和回車等)。,ok,1.字符的輸入輸出,1.8.2 數(shù)據(jù)的輸入輸出,(2)cinget() 例如: char c1, c2, c3, c4; cin.get (c1); /B cin.get (c2); cin.get (c3); 程序執(zhí)行到B行時,若輸入:A b 則執(zhí)行結(jié)果是:字符A、空格、字符b分別賦給變量c1、c2、c3;輸入行中仍保留回車符。 cin 與cinget( )的區(qū)別: cin.get()把從鍵盤上輸入的所有字符,包括空白字符,都作為輸入字符賦給字符變量
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國滅菌箱行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國漂白化學(xué)品行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 方圓模板施工方案
- 農(nóng)田回填施工方案
- 2025至2030年中國脫皮分離機(jī)市場分析及競爭策略研究報告
- 高中階段心理健康教育實施計劃
- 非招募協(xié)議模板
- 道路設(shè)備施工方案
- 5G基站全覆蓋工程實施方案(范文模板)
- 2025年色料添加劑項目可行性研究報告
- 人教版八年級數(shù)學(xué)下冊試題第18章平行四邊形綜合測試卷(含詳解)
- 2025智慧病區(qū)建設(shè)及評價規(guī)范
- 湖南能源集團(tuán)有限公司招聘筆試題庫2025
- 渣漿泵培訓(xùn)課件
- 智能座艙試題解析及答案
- 2025春季學(xué)期國開電大本科《人文英語3》一平臺在線形考綜合測試(形考任務(wù))試題及答案
- 中等職業(yè)學(xué)校物理教學(xué)大綱
- 靜脈輸血法并發(fā)癥的預(yù)防和處置
- 塔吊交叉作業(yè)安全技術(shù)交底
- 八大特種作業(yè)試題及答案
- 機(jī)關(guān)事業(yè)單位工作人員考勤管理辦法
評論
0/150
提交評論