廣州大學C++第二節課課件_第1頁
廣州大學C++第二節課課件_第2頁
廣州大學C++第二節課課件_第3頁
廣州大學C++第二節課課件_第4頁
廣州大學C++第二節課課件_第5頁
已閱讀5頁,還剩45頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C++程序設計中國高等院校計算機基礎教育課程體系規劃教材譚浩強編著第2章數據類型和表達式2.1C++數據類型2.2常量2.3變量2.4C++運算符2.5算術運算符和表達式2.6賦值運算符和表達式2.7逗號運算符和表達式教學目標熟悉C++語言的數據類型;能夠區分常量與變量的不同,掌握基本數據類型的常量與變量的定義、使用;熟悉常用的運算符,能夠根據要求構造相應的表達式。重點:基本數據類型、常量與變量、常用的運算符難點:不同數據類型的差異、常量與變量的區別、部分運算符的功能與優先級第2章數據類型和表達式2.1C++數據類型2.2常量2.3變量2.4C++運算符2.5算術運算符和表達式2.6賦值運算符和表達式2.7逗號運算符和表達式2.1.C++的數據類型

數據是計算機處理的對象,是以某種特定形式存在的(整型、浮點等形式)。

例如:

從上我們可以得到數據:姓名、國籍、民族,年齡:23歲,身高:1.91m,體重:91.0kg,…它們具有不同的性質:字符串有標識作用,數值型可計算,還有精度差異。編寫程序時,需區別對待中文名:林書豪英文名:JeremyShu-HowLin國籍:美國民族:漢族出生日期:1988.8.23畢業院校:哈佛大學經濟系身高:1.91m體重:91kg什么是數據掌握數據類型的目的程序運行時所處理的數據需要存儲在內存中,不同性質的數據所占用存儲空間的多少、數值范圍及可進行的操作也不同;所謂類型,就是對數據分配存儲單元的安排,包括存儲單元的長度(占多少字節)以及數據的存儲形式不同的類型分配不同的長度和存儲形式數據在計算機中的存儲是以字節為單位計算的,一個字節是8位。例如:整數10的用2字節表示的示圖:單精度型(float)雙精度型(double)數據類型基本類型整型字符型(char)浮點型派生類型指針類型(*)數組類型([])結構體類型(struct)共用體類型(union)類類型空類型(void)枚舉類型(enum)整型(int)短整型(shortint)長整型(longint)C++的數據類型掌握數據類型的關鍵數據類型情況重點掌握類型類型標識符(關鍵字)、所占字節數、表示的數值范圍。下表是VC的基本數據類型:C++語言還允許在基本數據類型(除void類型外)前加上類型修飾符,更具體地表示數據類型。C語言的類型修飾符包括:signed(有符號)

unsigned(無符號)short(短型)long(長型(1)整型數據基本整型(int):不同編譯系統或計算機系統中所占用的字節不同,通常為2字節(TC)或4字節(VC)在VC中,占4字節(32位), 范圍:-2147483648~2147483647存儲方式:以二進制補碼形式存放數據(以VC系統為例)問題:最小整數-231的存儲形式是什么?000011000000000000000000000000001211110100111111111111111111111111-12231-1(最大整數)11111111111111111111111101111111(1)整型數據(續)短整型(shortint):為2字節,范圍:-32768~32767(即215-1)長整型(longint):為4字節,范圍:-2147483648~2147483647(即-231~231-1)雙長整型(long

longint):一般分配8字節,是C99新增類型,許多編譯系統尚未實現。可用:sizeof(類型名或數據)

來獲取該類型數據所占字節數。(注:Sizeof是運算符,不是函數)雖然在不同系統中,同一數據類型所占用字節存在著差異,但同一系統不同數據類型的長度有明確的大小關系,即:sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(lomglong)例1:使用sizeof運算符獲取數據、類型的所占字節數#include<iostream>usingnamespacestd;intmain(){cout<<"int型數據所占字節數:"<<sizeof(int)<<"\n";cout<<"shortint型數據所占字節數:"<<sizeof(shortint)<<"\n";cout<<"longint型數據所占字節數:"<<sizeof(longint)<<"\n";cout<<"整數2345所占字節數:"<<sizeof(2345)<<"\n"; return0;}(1)整型數據(續)可在整型前加unsigned來定義無符號整數,例如:unsignedint、

unsignedshortint、unsignedlongint、unsignedlonglongint,由于最高位不再用來存放整數的符號,因此,可表示整數的范圍擴大一倍:(以VC系統為例)unsignedshortint:0~65535(即216-1)unsignedint:0~4294967295(即232-1)unsignedlongint:0~4294967295(即232-1)unsignedlonglongint:0~264-1說明:只有整型(包括字符型)可加unsigned或signed,實數不允許;若將一個負數賦值給一個無符號變量,將得到錯誤結果,見p47(2)字符型數據(由一個字符組成)字符是按其代碼(整數)形式存儲的C99把字符型數據作為整數類型的一種字符型數據在使用上有自己的特點字符與字符代碼大多數系統采用ASCII字符集字母:A~Z,a~z數字:0~9專門符號:29個:!”#&‘()*等空格符:空格、水平制表符、換行等不能顯示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回車(以‘\r’表示)等(2)字符型數據(續)字符’1’和整數1是不同的概念:字符’1’只是代表一個形狀為’1’的符號,在需要時按原樣輸出,在內存中以ASCII碼形式存儲,占1個字節(在所有系統中)整數1是以整數存儲方式(二進制補碼方式)存儲的,TC系統占2個字節,VC系統4個字節,例如:00000001000000000000000000000000字符型的定義與輸出:用char定義字符變量,例如:

charc=’?’;//系統把“?”的ASCII代碼63賦給變量c可用強制轉換方式控制字符的輸出00110001(3)浮點型數據浮點型數據是用來表示具有小數點的實數在C語言中,實數是以指數形式存放在內存存儲單位中的小數部分指數數符以圓周率PI的近似值3.14159為例,可寫成:3.14159x100、0.314159x101、0.0314159x102、31.4159x10-1等形式。由于小數點位置可以浮動,故稱為浮點數。規格化指數形式:小數點前數字為0、小數點的第1位數字非0 對于一個實數來說,其規格化指數形式只有一種,例如: 0.314159x101符合要求,0.0314159x102、31.4159x10-1等則不符合要求指數表示了數據的大小,尾數表示了數據的精度。通常用e或E后面帶整數表示10的多少次方。2.2常量概念:在程序運行過程中,其值不能被改變的量 包括:整型常量、實型常量、字符常量和字符串常量等如12,0,-3為整型常量4.6,-1.23為實型常量,包含在兩個單撇號之間的字符為字符常量,如′a′,′x′。

2.2.1什么是常量?2.2.2數值常量整型常量:在整數末尾使用u和l字母:若后綴有字母u(大、小寫等效),則硬性規定它為一個無符號整型(unsignedint)數;若后綴有字母l(大、小寫等效),則硬性規定它為一個長整型(longint)數;在一個整數的末尾,可以同時使用u和l,并且對排列無要求。如25U,0327UL,0x3ffbL,648LU等都是整數。十進制整數:由正號(+)或負號(-)開始的、接著為首位非0的若干個十進制數字所組成。如38,-25,+120,74286等八進制整數:由首位數字為0的后接若干個八進制數字(借用十進制數字中的0-7)所組成。八進制整數不帶符號位,隱含為正數。如0,012,0377,04056等等十六進制整數:由數字0和字母x(大、小寫均可)開始的、后接若干個十六進制數字(0-9,A-F或a-f)所組成。同八進制整數一樣,十六進制整數也均為正數。如0x0,0X25,0x1ff,0x30CA等2.2.2數值常量2)浮點常量:格式:有兩種小數形式:1.23,0.23,-999.34,3.14159,…指數形式:1.23e5,2.3e-1,-0.999E3,…

(注:e或E均可,e前是小數,e后是整數)通常,浮點數當作double型看待。可在尾部加f或F指定為float型2.2.2字符常量1)普通的字符常量:用一對單引號括起來的一個字符,形式為:‘單字符’,如:’a’,’%’,’A’等,區分大小寫 注意:’ab’是錯誤的,為什么?2)轉義字符常量:格式:\特定字符性質:改變原先字符的含義,實現特定功能 例如:\n(換行功能),\t(下一制表位)還允許用反斜線引導一個具有1至3位的八進制整數(形式:’\ddd’)或一個以字母x作為開始標記的具有1至2位的十六進制整數(形式:’\xhh’),對應的字符就是以這個整數作為ASCII碼的字符 例如:\101、\x41均表示ASCII為65的字符,即‘A’常用的轉義字符:轉義字符含義ASCII碼值(十進制)\a響鈴(bell)7\b退格(backspace)8\n換行(newline)10\r回車(carriagereturn)13\t水平制表(horizontaltab)9\v垂直制表(verticaltab)11\\反斜杠92\’單引號39\”雙引號34\0空格符(null)0\ddd任意字符3位八進制數\xhh任意字符2位十六進制數3)字符數據在內存中的存儲形式相關知識:字符數據存放在內存的是其ASCII碼,可與當作整數處理;熟悉常用字符的ASCII(十進制數):A~Z(65~90),a~z(97~122),0~9(48~57),空格(32),null(0)等#include<iostream>usingnamespacestd;intmain(){ inti,j; i='A'; j='B'; cout<<i<<""<<j<<'\n'; return0;}例3將字符賦給整型變量#include<iostream>usingnamespacestd;intmain(){ charc1,c2; c1='A'; c2='B'; c1=c1+32; c2=c2+32;cout<<c1<<""<<c2<<endl; return0;}例4字符數據與整數進行算術運算4)字符串常量:格式:“…”,即:用一對雙引號括起來的字符序列(字符個數可以0、1或多個,也可以是轉義字符),起標識、提示作用。字符串以雙引號為定界符,雙引號不作為字符串的一部分。如:“Hello”,“GoodMorning!”,“廣州大學”…長度:字符串的字符數。如:“Hello”的長度為5.存儲:在內存中占一串連續的存儲單元,系統自動在字符串的末尾加以字符串結束標志,即轉義字符‘\0’。 Hello‘\0’特別注意:“字符串”與“字符型數據”是兩個完全不同的概念,它們在定界符、字符個數、結束標識上不同(以后講解)占6個存儲單元問題:分辨哪些是字符常量?哪些是字符串?

“sise”、”?”、””、‘!’、‘\x20’、“”5)怎樣確定常量的類型?字符常量:由單撇號(‘’)括起來的單個字符或轉義字符字符串常量:由雙撇號(“”)括起來的單個字符或轉義字符整型常量:不帶小數點的數值,系統根據數值的大小確定int型還是long型等浮點型常量:凡以小數形式或指數形式出現的實數24格式:#define符號常量 例如:#definenum50處理:編譯前,預處理器將所此符號置換成常量。由此可知,符號常量不同于變量,不占用內存空間好處:做到“一改全改”2.2.4符號常量2.2常量例2輸入圓的半徑,輸出其周長、面積

解題思路:

圓的半徑用cout<<"輸入,再用公式計算其周長、面積圓的周長、面積計算都要用PI,可用符號常量表示#include<iostream>usingnamespacestd;#definePI3.14159intmain(){ floatr,c,s; cout<<"請輸入圓的半徑:“; cin>>r; c=2*PI*r; s=PI*r*r; cout<<s;return0;}思考題:請用常變量方法修改此程序,功能不變2.3.1什么是變量:在程序運行過程中,其值可以被改變的量。2.3變量2.3.2變量命名規則

(1)標識符在C語言中,有許多符號需要命名,如:變量名、函數名、數組名等,這些符號稱為標識符。inta=3;標識符的命名規則:由字母、數字、下劃線組成,并且第一個字符必須為字母或下劃線。合法標識符:area、PI、a_array、price等非法標識符:456p、cade-y、x.y、a&b等不同的C++語言編譯系統所規定的標識符長度可能不同建議:命名時最好“見名知意”,多采用單詞、拼音、下劃線等標識符有三類:關鍵字:C語言預先規定的一批有固定含義的標識符,不能另作他用autodouble

int

structcase else long switchbreakenum

register

typedefchar

extern

return

unionconst

float

short

unsignedcontinue

for

signed

voiddefault

goto

sizeof

volatiledo

if

static

while等

預定義標識符:C語言預先定義并有特定含義的標識符,如:預處理命令(define)。不建議另作他用用戶標識符:用戶定義的標識符,如:變量名、函數名、數組名等,最好“見名知意”變量定義:數據類型變量名1[,變量名2,…]; 實質:在編譯時為其分配相應的存儲單元 例如:inta,b,c;floatr;doubleroot1,root2;說明:變量定義時,都有一個確定的數據類型,這樣才能分配存儲單元;C語言規定,變量要“先定義,后使用”,編譯時系統進行檢查。例如,如果在定義時為intstudent;而在執行語句中錯寫成statent編譯時就會輸出“變量statent未經聲明”的信息變量定義后,如果未賦值,則其值是不確定的。應避免這種情況的出現變量初始化:數據類型變量名1=初值[,變量名2=初值,…];

功能:將變量定義、賦值“合二為一”2.3.3定義變量2.3.4為變量賦初值定義變量時對它賦予一個初值,這稱為變量初始化。初值可以是常量,也可以是一個有確定值的表達式。如floata,b=5.78*3.5,c=2*sin(2.0);2.3.5常變量在定義變量時,如果加上關鍵字const,則變量的值在程序運行期間不能改變,這種變量稱為常變量(constantvariable)。例如,constinta=3;2.4C++的運算符運算符(操作符):是對數據進行運算的符號操作數(運算對象):參與運算的數據表達式:由操作數和操作符連接而成的有效的式子。表達式可以嵌套,例如:2+3+(5*sizeof(int))/4(1)一些概念運算符分類:(按操作數個數的多少劃分)單目運算符:一般位于操作數的前面,如:正負號(+、-)雙目運算符:運算符一般位于兩個操作數之間,如:a+b三目運算符:只有一個,即為條件運算符運算符分類:(按功能劃分)算術運算符:+(加)-(減)*(乘)/(除)%(求余)++(自加)--(自減)關系運算符:>(大于)<(小于)==(等于)>=(大于或等于)<=(小于或等于)!=(不等于邏輯運算符:&&與||或!非位運算符:<<左移>>右移等賦值運算符:=條件運算符:?:逗號運算符:,在學習運算符時要掌握幾個要點:符號:怎樣書寫功能:做什么目數:操作數的多少優先級:用來決定它在表達式中的運算次序。如計算表達式a+b*(c-d)/e時,運算次序依次為:-,*,/,+。結合性:是指表達式中出現同等優先級的操作符時,該先做哪個操作的規定從左到右:如d=a+b-c;

(大多數表達式)從右到左:如d=a=3;//C++規定,賦值號是先右后左,先做a=3,其結果再賦給d

(單目、賦值、條件運算符適用)例如:inta=3;//a是變量,所以a是左值

constintb=4;//b是常量,所以b不是左值。顯然常量不是左值,因為C語言規定常量的值一旦確定就不能更改的。右值:只能出現在賦值表達式的右邊。左值表達式也可以作為右值表達式。例如:

inta,b=6;

a=b;

//b是變量,是左值,此處作右值

a=8;

//8是常量,只能作右值,不能作左值左值和右值:

左值:是能出現在賦值表達式左邊的表達式。左值表達式具有存放數據的空間,而且存放是允許的2.5.1基本雙目運算符(5個)+,-,*:含義與數學上相同;(注:兩個數相乘時,*不能省略)/

: 對于整型數則為除法取整操作,例如,5/2得到結果2;

如果除數或被除數中有一個為負值,舍入方向不固定。例如,-5/2,有的系統中得到的結果為-2,在有的系統中則得到結果為-3。 對于浮點數則為通常意義的除法,例如,5.0/2.0得到結果為2.5 由此可見,/操作符可以對不同的數據類型進行不同的操作。2.5算術運算符與表達式%只能對整型數進行操作,其操作意義取余。例如,5%2得到結果1。可用來判斷整數的奇偶性

不允許對浮點數進行%運算,如果對浮點數操作,則會引起編譯錯誤。表達式:利用這些運算符和數學函數可以構造許多復雜的式子。例如:計算圓面積:area=3.14*r*r;已知直角三角形的兩條直角邊,求斜邊長度:

c=sqrt(a*a+b*b);2.5.2單目運算符(2個)

++、--功能:使變量的值加1或減1前綴++i、--i

:在使用i之前,先使i的值加(減)1后綴i++、i--

:在使用i之后,再使i的值加(減)1例如:intp;inti=3;p=++i;//i的值:4,p的值:4 intq;intj=3;q=j++;//j的值:4,q的值:3前綴與后綴自增(減)運算符的比較:對自增(減)的作用是相同的,均能夠增加1(減少1);對當中的取值是有影響的,涉及先取值,還后取值問題。說明:++、--只適合于變量,不能用于常量,5++、a++b、(a++b)++都是錯誤的。2.5算術運算符與表達式#include<iostream>usingnamespacestd;intmain(){ inta=10; cout<<"a="<<a<<",執行b=--a;語句后:"; intb=--a; //相當于a=a-1;b=a; cout<<"a="<<a<<",b="<<b<<endl;

cout<<"a="<<a<<",執行b=--a;語句后:"; intc=a--; //相當于a=a-1;b=a; cout<<"a="<<a<<",c="<<c<<endl; return0;}例5前綴與后綴自減運算符(--)的比較說明:若用自增、自減運算符構成表達式,則越簡單越好,最好是類似“a++”或“++a”這種表達式,以增強代碼的可讀性。2.5.3算術表達式和運算符的優先級2.5算術運算符與表達式C++語言規定了運算符的優先級和結合性。原則:在求解表達式時,先按運算符的優先級別高低次序執行,先乘除后加減。如有表達式a-b*c,b的左側為減號,右側為乘號,而乘號優先于減號,因此,相當于a-(b*c)。如果在一個運算對象兩側的運算符的優先級別相同,如a-b+c,則按規定的“結合方向”處理結合性

算術運算符的結合方向為“自左至右”,即先左后右,因此b先與減號結合,執行a-b的運算,再執行加c的運算。“自左至右的結合方向”又稱“左結合性”,即運算對象先與左面的運算符結合。賦值運算符的結合方向為“自右至左”,即右結合性。2.5.4表達式中各類數值型數據間的混合運算在表達式中常遇到不同類型數據之間進行運算,如10+'a'+1.5-0.1*'b'2.5算術運算符與表達式在進行運算時,不同類型的數據要先轉換成同一類型,然后進行運算。轉換的規則按圖所示。2.5.5強制類型轉換有兩種不同方式:隱式轉換(自動轉換):不同類型數據進行混合運算,會將兩個操作數自動作適當的類型轉換,然后進行運算。轉換的方向見右圖:2.5算術運算符與表達式charshortintlongintunsignedcharunsignedshortunsignedintunsignedlongfloatdoublelongdouble說明:+、-、*、/運算的兩個數中有一個數為float或double型,結果是double型。系統將float型數據都先轉換為double型,然后進行運算;如果int型與float或double型數據進行運算,先把int型和float型數據轉換為double型,然后進行運算,結果是double型;char型數據與int型數據進行運算,就是把字符的ASCII代碼與整型數據進行運算。顯式轉換(強制轉換):格式:類型名

(表達式)或(類型名)

表達式或(類型名)(表達式)例如:(double)a //將a轉換成double類型 (int)(x+y) //將x+y的值轉換成int型 (float)(5%3) //將5%3的值轉換成float型#include<iostream>usingnamespacestd;intmain(){floatx;inti;x=3.6;i=(int)x;cout<<"x="<<x<<",i="<<i<<endl;return0;}例6強制類型轉換說明:若用自增、自減運算符構成表達式,則越簡單越好,最好是類似“a++”或“++a”這種表達式,以增強代碼的可讀性。2.6.1賦值運算符2.6賦值運算符與表達式格式:變量=表達式功能:先計算表達式的值,再賦給左邊的變量,即:把表達式的值存入左邊變量所標識的存儲單元中例如:c=max(a,b);//將函數返回值存放到變量c標識的存儲單元說明:=是“賦值”的含義,不是數學中的“等于號”,例如:n=n+1是將n標識存儲單元的值加1后存回到該單元;左邊必須是左值,通常為變量,不能是常量,a+b=c是錯誤的。x=y執行后,改變的是x值,y值不變;=兩邊的數據類型要求相同,若不同,則在賦值前自動把右邊表達式的值轉換為與左邊類型相同的值,再賦給左邊變量。

如執行x=20/3.0時,若x為整型,則得到的x值為6(舍去小數部分);2.6.2賦值過程中的類型轉換2.6賦值運算符與表達式兩側類型一致時,直接賦值;兩側類型不一致,但都是算術類型時,自動將右側的類型轉換為左側類型后賦值,請注意以下情況:float型變量=double型值;(損失精度)int型變量=char型值;(賦字符的ASCII碼(整數值))少字節整型變量=多字節整型值;(賦低字節數值,即截斷)定義變量時要防止數據溢出。2.6.3復合賦值運算符2.6賦值運算符與表達式包括:+=、-=、*=、/=、%=等功能:把右邊表達式的值同左邊變量的值進行相應運算后,再把這個運算結果賦給左邊的變量,該復合賦值表達式的值也就是保存在左邊變量中的值; 例如: x+=y;相當于x=x+y; x-=y;相當于x=x-y; x*=y;相當于x=x*y; x/=y;相當于x=x/y; x%=y;相當于x=x%y;已知:a=6,計算表達式:a+=a-=a+a的值思路:賦值運算符結合性是從右到左①先計算表達式a+a的值,得到12(a=6);②再計算表達式a-=12(即a=a-12)值,得到a=-6,表達式值也為-6;③最后計算a+=-6(即a=a+(-6)值,得到a=-12,表達式值為-12。優點:簡潔(可讀性也不差),編譯速度快思考44已知:a=10,b=15,c=20。請說出下列表達式的值:a=b=c=3;a=5+(d=7);a=(b=6)/(c=2);cout<<(a=b);a=(a=b)=b*c;2.6.4賦值表達式2.6賦值運算符與表達式格式:變量=表達式賦值表達式除了給左邊變量賦值外,表達式本身也有值,其值為左邊變量的值,也就是說:式子x=y=0是允許的,相當于x=(y=0),即先給y賦0,再賦表達式y=0的值(也為0)給x,這樣x、y的值都賦0值;優先級:只高于逗號運算符,比其它運算符級別都低結合性:從右到左

例如:a=b=c=4123例7:編程實現:輸入華氏溫度,輸出對應的攝氏溫度。#include<iostream>usingnamespacestd;intmain(){ floatf,c; cout<<"請輸入華氏溫度:"; cin>>f; c=5.0/9*(f-32); cout<<"華氏溫度:"<<f<<",對應攝氏溫度:"<<c<<endl; return0;}思路:①程序的基本結構(預處理指令、main());②華氏溫度轉換為攝氏溫度的公式:c=5*(f-32)/9;③定義哪些變量例8:計算存款利息:有1000元,想存一年。有三種可選方案:(1)活期,年利率為r1;(2)一年定期,年利率為r2;(3)存兩次半年期,年利率為r3。問:哪一種方案更合算?#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ floatp0=1000,p1,p2,p3,r1=0.005,r2=0.035,

溫馨提示

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

評論

0/150

提交評論