c++運(yùn)算符與表達(dá)式_第1頁
c++運(yùn)算符與表達(dá)式_第2頁
c++運(yùn)算符與表達(dá)式_第3頁
c++運(yùn)算符與表達(dá)式_第4頁
c++運(yùn)算符與表達(dá)式_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Chapter 2 數(shù)據(jù)運(yùn)算與表達(dá)式了解C、C+是如何處理數(shù)和進(jìn)行計算的2 本章主要內(nèi)容 2.1 數(shù)據(jù)類型 2.2 C+中的基本數(shù)據(jù)類型 2.3 變量 2.4 常量 2.5 數(shù)組 2.6 運(yùn)算和表達(dá)式面向?qū)ο蟮某绦蛟O(shè)計2.1 數(shù)據(jù)類型4 一、數(shù)據(jù)類型一類數(shù)據(jù)的統(tǒng)一規(guī)范稱作數(shù)據(jù)類型l同樣的存儲方式l同樣的取值范圍l同樣的表達(dá)能力l同樣的操作規(guī)范面向?qū)ο蟮某绦蛟O(shè)計5 一、數(shù)據(jù)類型C+中的數(shù)據(jù)類型可以分為l基本(預(yù)定義)數(shù)據(jù)類型:語言已經(jīng)定義好的,如整型、浮點l復(fù)合數(shù)據(jù)類型:由多個相同的基本數(shù)據(jù)類型組合成的新數(shù)據(jù)類型,如數(shù)組l自定義:程序員自定義的,由預(yù)定義數(shù)據(jù)類型所組成的數(shù)據(jù)類型,如結(jié)構(gòu)體、類面向

2、對象的程序設(shè)計2.2 C+中的基本數(shù)據(jù)類型7 一、基本數(shù)據(jù)類型只要二種基本數(shù)據(jù)類型:整型、浮點型根據(jù)數(shù)值的范圍不同,每類再細(xì)化為幾類:l整數(shù):char,short,long,intl浮點:float,double按照是否區(qū)分?jǐn)?shù)的正負(fù)分為:lsigned, unsigned無論變量、常數(shù),都有數(shù)據(jù)類型,按照各自的類型所規(guī)定的格式存放在內(nèi)存里面向?qū)ο蟮某绦蛟O(shè)計8 二、整型用補(bǔ)碼來存儲數(shù)據(jù)表示整數(shù)l正數(shù)的補(bǔ)碼:原碼l負(fù)數(shù)的補(bǔ)碼:取反加一輸出時,可以按照10進(jìn)制、16進(jìn)制、8進(jìn)制、字符(ASCII)進(jìn)行輸出按照存儲的數(shù)據(jù)長度分:l8位整數(shù):char,-128127,l16位整數(shù):short,-3276

3、832767l32位整數(shù):long,-6553665536lunsigned char: 0 255,unsigned short:065536,unsigned long: 0 2(32)-1運(yùn)算的溢出:自動截斷,不認(rèn)為是錯誤關(guān)于int:以編譯器的版本決定數(shù)據(jù)長度不同進(jìn)制:分別以0 x,0,1.9開頭的數(shù)字面向?qū)ο蟮某绦蛟O(shè)計9 三、字符型l表示范圍: 有符號:-128127 無符號:0255l常用來存儲字符,以ASCII表示特定的字符l輸出 面向?qū)ο蟮某绦蛟O(shè)計C+: int a = 65; char b = 65; couta“n”; coutbshort-long-double-float

4、l賦值,被賦值變量的類型,結(jié)果:不準(zhǔn)確人工強(qiáng)制轉(zhuǎn)換int a;(float) a;float(a);面向?qū)ο蟮某绦蛟O(shè)計2.3 變量(Variable)14 變量變量:指在程序的運(yùn)行過程中,其值隨時可以發(fā)生變化的量。定義變量的要素l數(shù)據(jù)類型:決定用來存放什么樣的數(shù)據(jù)(可省略)l存儲類型:決定變量存放在什么地方、使用范圍l變量的名稱:代號l變量的值:內(nèi)容一個具有唯一名稱的容器面向?qū)ο蟮某绦蛟O(shè)計15 如何從無到有聲明(declaration):告訴編譯器“我需要一個變量”定義(definition):告訴編譯器“生成一個變量”l以上兩步大部分場合是同時執(zhí)行的,如果不加特別說明,將以上兩步統(tǒng)稱為定義初

5、始化(initialization):在定義變量的同時讓它有一個初值賦值(assignment):給變量一個新值使用面向?qū)ο蟮某绦蛟O(shè)計16 變量的定義定義(創(chuàng)建)一個變量,并在內(nèi)存中為其分配存儲空間,以存放其值l存儲類型 數(shù)據(jù)類型 變量名;lC語言必須在外部或者塊語句開始的位置/C+可以在任何位置l聲明的方式?jīng)Q定了,其壽命周期和可見性(作用域)面向?qū)ο蟮某绦蛟O(shè)計17 變量的初始化在定義時賦予初值如果不賦初值,編譯器會自動給一個l不同類型的變量,初始化的方式和次數(shù)不同l外部、內(nèi)部static,僅進(jìn)行一次初始化,不顯式初始化時,初值為0l內(nèi)部,多次初始化,不顯式初始化時,初值為不定值面向?qū)ο蟮某绦?/p>

6、設(shè)計18 變量的使用面向?qū)ο蟮某绦蛟O(shè)計19 變量的壽命周期Everything has a beginning has a endl全局壽命:始終存在l局部壽命:在語句塊結(jié)束時消失l動態(tài)壽命:想讓它消失就消失面向?qū)ο蟮某绦蛟O(shè)計20 變量的壽命周期int a;Main()這里的a是一個全局變量,只有當(dāng)整個程序結(jié)束時它才會消失面向?qū)ο蟮某绦蛟O(shè)計21 變量的壽命周期Main()fun();void fun()int a;這里的a是一個局部變量,只有當(dāng)fun函數(shù)被調(diào)用時生成,調(diào)用結(jié)束時消失面向?qū)ο蟮某绦蛟O(shè)計22 變量的可見性作用域:在程序中可以見到并使用變量的范圍l全局可見l局部可見變量重名l在不同作

7、用域內(nèi)變量允許重名l內(nèi)部范圍對其外部范圍內(nèi)定義的變量,具有覆蓋性一個問題:可見性和壽命是一致的嗎?面向?qū)ο蟮某绦蛟O(shè)計23 變量的數(shù)據(jù)類型變量是實體,是存在于內(nèi)存之中的;數(shù)據(jù)類型只是一種規(guī)范,是與編譯器的約定。用數(shù)據(jù)類型來定義一個變量,就是指這個變量需要符合該數(shù)據(jù)類型所約定的規(guī)范面向?qū)ο蟮某绦蛟O(shè)計24 變量的名稱給變量起名字l變量的類型、數(shù)據(jù)類型、意義l匈牙利命名法:變量名屬性類型對象描述 l不能作為變量首字母的字符l不要太簡單,如a,b, 也不要使用大小寫會數(shù)據(jù)進(jìn)行區(qū)分,a1, b1, A1,B1面向?qū)ο蟮某绦蛟O(shè)計25 變量的存儲類型與變量的聲明位置一起,共同決定了變量在內(nèi)存中的存放位置,及變

8、量的壽命周期和可見性變量的幾個存放位置l數(shù)據(jù)段(全局)、堆棧段stack(臨時、局部)、堆heap(動態(tài))、寄存器(register)聲明位置:內(nèi)部變量、外部變量四種存儲類型lauto(默認(rèn))lstaticlregister(少用)lextern(多文件程序常用,以后講)面向?qū)ο蟮某绦蛟O(shè)計26 “Static”存儲類型Static有兩種不同的含義l如果用來修飾全局變量,表示該變量只在本文件內(nèi)可見(后面章節(jié)講)l如果用來修飾局部變量,則該變量在定義一次之后將永久存在,不隨著語句塊的結(jié)束而消失用static修飾的變量,可見性和壽命不一致面向?qū)ο蟮某绦蛟O(shè)計27 再回到變量的初始化如果不賦初值,編譯器

9、會自動給一個l不同類型的變量,初始化的方式和次數(shù)不同l外部、內(nèi)部static,僅進(jìn)行一次初始化,不顯式初始化時,初值為0l內(nèi)部,多次初始化,不顯式初始化時,初值為不定值面向?qū)ο蟮某绦蛟O(shè)計28 #includeint i=1;main() static int a; int b=-10; int c=0; printf(- main -n); printf(i=%d, a=%d ,b=%d, c=%dn“, i,a,b,c); c = c + 8; other(); printf(- main -n); printf(“i=%d, a=%d ,b=%d, c=%dn”, i,a,b,c); i

10、= i+10; other(); getch();面向?qū)ο蟮某绦蛟O(shè)計other() static int a=2; static int b; int c =10; a= a+2; i = i+32; c = c+5; printf(- other -n); printf(i=%d, a=%d ,b=%d, c=%dn, i, a, b, c); b=a;2.4 常量30 一旦定義值就不能改變的量l在數(shù)據(jù)類型前加 const在C語言里沒有,C語言的常量一般用宏來實現(xiàn)l#define A 100(注意這后面沒有分號)面向?qū)ο蟮某绦蛟O(shè)計31 各種顯式的數(shù)或字符也是一種常量l立即數(shù):進(jìn)制,類型l字符

11、常量:單引號:Al字符串常量:雙引號 “ABC”l換碼序列(轉(zhuǎn)義序列)l反斜杠 + 一個字母|三位八進(jìn)制數(shù)|x二位十六進(jìn)制數(shù)l用途:l字符l控制字符:回車、換行、tabl不方便表示的字符,如 ”、 等面向?qū)ο蟮某绦蛟O(shè)計2.5 數(shù)組(了解)33 一、什么是數(shù)組把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。 C中屬于構(gòu)造(復(fù)合)數(shù)據(jù)類型面向?qū)ο蟮某绦蛟O(shè)計34 二、數(shù)組的聲明聲明格式:l類型說明符 數(shù)組名 常量表達(dá)式,; l類型是數(shù)組元素的類型l表達(dá)式是常量表達(dá)式,不能含變量l表達(dá)式的值是數(shù)組元素的最大個數(shù),l元素從0開始,a0命名遵守標(biāo)識符的命名規(guī)則,不允

12、許與其他標(biāo)識符重名數(shù)據(jù)類型、存儲類型及其它特性與變量相同面向?qū)ο蟮某绦蛟O(shè)計35 三、數(shù)組的使用、賦值和初始化使用:不能整體使用,使用數(shù)組元素賦值:按元素賦值,不能整體賦值初始化:l外部數(shù)組、內(nèi)部static可以初始化(原來),現(xiàn)在一般允許l使用初始化列表,一次初始化lint a5=100,120,140,160,200;lint b=1,3,6,8;注意下標(biāo)溢出的問題面向?qū)ο蟮某绦蛟O(shè)計36 #define MAXA 10void main() int i, max, aMAXA;printf(input 10 numbers:n);for(i=0;iMAXA;i+)scanf(%d, &

13、;ai);max=a0;for(i=1;imax) max=ai;printf(maxmum=%dn, max);面向?qū)ο蟮某绦蛟O(shè)計2.6 運(yùn)算和表達(dá)式38 一、基本概念運(yùn)算:對數(shù)據(jù)(對象)進(jìn)行的處理操作符(運(yùn)算符,operator):描述不同運(yùn)算的符號,同一個運(yùn)算符對不同類型的數(shù)據(jù),運(yùn)算的邏輯意義一樣,處理的過程是不同的。l一元(單目)、二元(雙目)、三元運(yùn)算符面向?qū)ο蟮某绦蛟O(shè)計39 表達(dá)式:有操作符、操作數(shù)組成的式子,用來描述一個計算過程,涉及類型轉(zhuǎn)換、優(yōu)先級、結(jié)合規(guī)則、求值順序等l優(yōu)先級:表達(dá)式中多個操作符的執(zhí)行順序的規(guī)定性,如: *x+; / 先做x+結(jié)合性:同級操作符的執(zhí)行順序的規(guī)定

14、性,如: a=b=6; / 先做b=6表達(dá)式是C/C+的語句面向?qū)ο蟮某绦蛟O(shè)計40 二、算術(shù)操作符賦值運(yùn)算la=3, b=c; d=r=f;算術(shù)運(yùn)算l+ - * / %l操作數(shù)的類型,混合運(yùn)算,類型轉(zhuǎn)換l表達(dá)式的類型算術(shù)賦值運(yùn)算l+= -= *= /= %=面向?qū)ο蟮某绦蛟O(shè)計41 賦值運(yùn)算式作為一個整體的值賦值運(yùn)算式作為一個整體的值賦值運(yùn)算表達(dá)式整個表達(dá)式的值是最右側(cè)操作數(shù)的值面向?qū)ο蟮某绦蛟O(shè)計42 算術(shù)運(yùn)算問題算術(shù)運(yùn)算問題( Arithmetic Problems )( Arithmetic Problems )超出范圍,溢出整型數(shù)表示范圍有限,如: 不能用整型變量累計的一般循環(huán)方法來解:

15、int sum = 0; for(int i=1; i=10000; +i) sum += i; coutsum“n”;面向?qū)ο蟮某绦蛟O(shè)計43 浮點數(shù)的精度和有效位 影響比較的正確性,如: float f1 = 7.123456789;float f1 = 7.123456789; float f2 = 7.123456785; float f2 = 7.123456785; if ( f1=f2 ) cout if ( f1=f2 ) cout“f1 equal to f2nf1 equal to f2n”; ; float f = 1.0/3.0; float f = 1.0/3.0; d

16、ouble d = 1.0/3.0; double d = 1.0/3.0; if ( g=d ) cout if ( g=d ) cout“g not equal to dng not equal to dn”; ;結(jié)果為:結(jié)果為: f1 equals to f2f1 equals to f2 g not equals to d g not equals to d面向?qū)ο蟮某绦蛟O(shè)計44 浮點數(shù)計算的近似性 使精確性比較失敗,如: double d1 = 123456789.9double d1 = 123456789.9* *9;9; double d2 = 1111111109.1; do

17、uble d2 = 1111111109.1;if ( d1!=d2 ) cout if ( d1!=d2 ) cout “Not samenNot samen” ; ;else cout else cout “SamenSamen” ; ;if ( abs ( d1-d2 ) 0.00001f) cout if ( abs ( d1-d2 ) 0.00001f) cout “SamenSamen” ; ;else cout else cout , =,=,!=l關(guān)系運(yùn)算的結(jié)果:成立:1,不成立:0邏輯運(yùn)算l&,|,!l運(yùn)算的結(jié)果:成立:1,不成立:0面向?qū)ο蟮某绦蛟O(shè)計48 =與=的區(qū)

18、別intint x = 9;if if ( x = 0 ) cout “test 1 okn” ;if if ( x = 5 ) cout “test 2 okn” ;if if ( x = 0 ) cout “test 3 okn” ;結(jié)果為:test 2 ok面向?qū)ο蟮某绦蛟O(shè)計49 !=!=是操作符,是操作符,=!=!不是操作符不是操作符 int int x = 3; if if ( x!=9 ) cout “not 9n” ; if if ( x=!9 ) cout “impossiblen” ;條件表達(dá)式(x!=0)與(x)等同 int int x = 3; if if ( x !=

19、0 ) cout x ; if if ( x ) cout x ;面向?qū)ο蟮某绦蛟O(shè)計50 不等式連寫的錯誤: int int a = -1, b = 0, c = 1; if if ( abc ) cout “ok1n” ; if if ( ab & bc ) cout 2 ) if ( b & a / b2 ) cout cout “oknokn” ; ; 避免不必要的求值 if ( a=0 | b=func() ) if ( a=0 | b=func() ) coutcout”uselessnuselessn”; ; 面向?qū)ο蟮某绦蛟O(shè)計52 五、位操作( Bit Opera

20、tions ) 左移操作 將整數(shù)最高位擠掉,在右端補(bǔ)0。如: intint a = 12; / a為:00000000000000000000000000001100 a = a在整數(shù)的高位擠一個在整數(shù)的高位擠一個0 0或或1 1進(jìn)去(有符號數(shù)擠符號位,無符進(jìn)去(有符號數(shù)擠符號位,無符號數(shù)擠號數(shù)擠 ),而整數(shù)最低位被擠掉。如:),而整數(shù)最低位被擠掉。如: short intshort int a = -2; / 1111111111111110 a = a1; a=-1 即1111111111111111 unsigned short int unsigned short int b = 65535; / 1111111111111111 b = b1;

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論