第2章 基本數據類型、運算符與表達式_第1頁
第2章 基本數據類型、運算符與表達式_第2頁
第2章 基本數據類型、運算符與表達式_第3頁
第2章 基本數據類型、運算符與表達式_第4頁
第2章 基本數據類型、運算符與表達式_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章

數據類型和表達式詞法符號基本數據類型常量與變量運算符和表達式案例實戰(zhàn)2.1詞法符號計算機與信息科學學院楊衛(wèi)明2.1.1C++字符集

C++字符集是由下列字符組成的(ASCII碼字符集)26個小寫字母:a~z26個大寫字母:A~Z

10個數字:0~9其它符號:+-*/=,._:;?\"'~|!

#%&(){}[]^<>空格

每種程序設計語言都使用一組字符來構造具有特殊意義的符號----詞法符號C++語言中的種詞法符號有標識符、關鍵字、運算符、分隔符等2.1.1C++字符集

ASCII碼字符對照表規(guī)律:‘a’--97‘A’--65

往后字符ASCII碼依次增加1。小寫比大寫大32?!?’---48,‘1’--49

數字字符往后ASCII碼值依次增加1.控制字符<數字字符<大寫字母<小寫字母2.1.2標識符

C++語言中標識符的命名規(guī)則:⑴標識符是由英文字母(包括大寫和小寫)、數字和下劃線組成,并且只能以字母和下劃線開始,其后跟零個或多個字母、數字或下劃線。⑵標識符中大寫和小寫字母是有區(qū)別的。⑶標識符的長度是任意的,有的編譯系統(tǒng)僅識別前32個字符。⑷標識符不能和C++語言的關鍵字同名。標識符是程序員為命名程序中的一些實體而定義的專用單詞。2.1.3關鍵字

關鍵字是一種有特殊用途的詞法符號,是C++系統(tǒng)預定義的保留字,不能再用作其他用途。(共95個,常用的30個)C++語言中常用的關鍵字:intfloatdoubleboolstringvoidlongstructclassconstifelseswitchcasedefaultwhiledoforgotobreakcontinuenewdeleteautodefinecatchenumexternfriendinline2.1.4運算符

運算符是C++語言實現各種運算的符號。根據操作對象個數的不同,可分為單目運算符、雙目運算符和三目運算符。單目運算符又稱一元運算符,它只對一個操作數進行操作。雙目運算符又稱二元運算符,它可以對兩個操作數進行操作。三目運算符又稱三元運算符,它可以對三個操作數進行操作。(C++中只有一個三目運算符“?:”,又叫條件運算符)運算符是有優(yōu)先級的,通常單目運算符優(yōu)先級最高,接下來是雙目運算符,最后是三目運算符。2.1.5分隔符分隔符又稱標點符號,是用來分隔單詞或程序正文的。C++語言中,常用分隔符:空格符:常用來作為單詞與單詞之間的分隔符。逗號:用來作為多個變量之間的分隔符,或用來作為函數多個參數之間的分隔符。分號:用來作為for循環(huán)語句中for關鍵字后面括號中三個表達式的分隔符,或用作語句結束的標志。冒號:用來作為語句標號與語句之間的分隔符,或switch語句中關鍵字case<整型常量>與語句序列之間的分隔符。2.2基本數據類型計算機與信息科學學院楊衛(wèi)明2.2基本數據類型C++語言的數據類型可分為基本數據類型和非基本數據類型?;緮祿愋桶ㄕ?、字符型、浮點型和布爾型。非基本數據類型主要包括數組類型、結構體類型、共用體類型、指針類型和空類型等。數據類型決定了數據在內存中所占的空間大小,其表示范圍。2.2基本數據類型2.2基本數據類型整型,就是數據為整數,具體還包括基本整型,關鍵字為int.短整型,關鍵字為shortint或者short,長整型,關鍵字為:longint或者long.基本整型,短整型,長整型數據在內存中所占的存儲空間不一樣,其表示數的大小范圍不一樣。存儲空間跟機器字長有關系,用所占的字節(jié)數來衡量,一個字節(jié)為8位二進制。一般情況下,64位機器下,短整型字節(jié)數為2,整型為4,長整型為4。

整型2.2基本數據類型整數還要分有符號和無符號數。有符號是指帶符號的正數負數,無符號是省略符號的正數。整型的有符號和無符號數的區(qū)別是數據在內存中的二進制存儲,第一位為符號位還是數值位。整型數據有符號關鍵字為signed,無符號為unsigned,定義整型數據類型時,省略情況下為有符號類型。例如:inta;表示a是一個整型變量,里面存放的是一個有符號數整數。Unsignedinta;表示a是一個整型變量,里面存放的是一個無符號數整數。

整型2.2基本數據類型字符型關鍵字為char,存儲ASC碼字符,數據在內存所占的空間為1個字節(jié)。字符型數據是可以當成整形數據,其對應的整數值大小為-128-127。

字符型浮點型就是實型小數,包括單精度型float,雙精度型double。單精度和雙精度數據所占的內存空間字節(jié)數不一樣,取值范圍和有效數字不一樣。64位機器下,單精度float型字節(jié)數為4,雙精度double字節(jié)數為8。

浮點型C++基本數據類型的長度和取值范圍

數據類型說明長度(字節(jié))取值范圍bool布爾型true,falsechar(signedchar)字符型1-128~127unsignedchar無符號字符型10~255short(signedshort)短整型2-32768~32767unsignedshort無符號短整型20~65535int(signedint)基本整型4-2147483648~2147483647unsignedint無符號整型40~4294967295long(signedlong)長整型4-2147483648~2147483647unsignedlong無符號長整型40~4294967295float單精度型4-3.4×10-38~3.4×1038double雙精度型8-1.7×10-308~1.7×103082.2基本數據類型注意:同一種數據類型在不同的編譯系統(tǒng)中所占空間不一定相同。C++是一種強數據類型語言,不同的數據類型運算規(guī)則不一樣。求某一數據或數據類型在內存中所占的字節(jié)數。

sizeof(數據類型名稱);

sizeof(常量或者變量);

sizeof()運算符例如:inta=3;cout<<sizeof(int)<<sizeof(a)<<sizeof(3);2.3常量與變量計算機與信息科學學院楊衛(wèi)明2.3.1常量常量定義

在程序運行過程中,值不能被改變的量稱為常量。常量分類整型常量浮點型常量字符常量字符串常量邏輯常量符號常量2.3.1常量1.整型常量十進制整型常量由0~9組成,沒有前綴,不能以0開始。

例如:12,-34,45.7八進制整型常量以0為前綴,后跟由0~7組成的整型常數。例如:0134、-076為合法的八進制整型常量。十六進制整型常量以0X或0x為前綴,后跟由0~9和A~F(大小寫都可以)組成的整型常數。例如:0x2F、0xA3B4為合法的十六進制整型常量。注意:(1)整型常量中的長整型用L或l作后綴表示;

(2)整型常量中的無符號型用U或u作后綴表示。

例如:123l,123u2.3.1常量2.浮點型常量浮點型常量又稱實型常量,是由整數部分和小數部分組成的,只能用十進制表示。浮點型常量有兩種表示方法:小數表示法和科學計數法。⑴小數表示法:是由符號、數字和小數點組成。

例如:9.55、.25等。⑵科學計數法:是用指數形式來表示浮點型常量,即在小數表示法后面加上E或e表示指數(小數表示浮點數的精度,指數表示數的大?。?/p>

例如:3.2E-5,7e10,-34.5e2等。注意:(1)小數表示法必須有小數點;(2)科學計數法,E或者e前面必須有數字,可以是整數或小數,整數可以看成

定點小數,指數為整數。2.3.1常量3.字符常量C++中有兩種字符常量,即一般字符常量和轉義字符常量。⑴一般字符常量一般字符常量是用一對單引號括起來的一個字符,其值為ASCII碼值,用整數表示,存儲占據一個字節(jié)。

例如:’a’,ASCII碼值97;’2’,ASCII碼值50。注意:字符常量區(qū)分大小寫。‘a’與’A’是兩個不同字符。一個字符常量只能包含一個字符。例如,‘ab’錯誤的。單引號是字符常量的定界符,不是字符的一部分,在輸入輸出時不加單引號。2.3.1常量3.字符常量C++中有兩種字符常量,即一般字符常量和轉義字符常量。⑴一般字符常量⑵轉義字符

轉義字符是一個以“\”開頭的特定字符,表示其后的字符具有特殊意義。

例如,‘\n’中的n不是代表字符n,而是代表回車換行。注意:(1)回車符是回到這一行的開頭,換行符是跳到下一行的開頭。(2)轉義字符代表一個字符。例如,‘\n’表示換行;’\101’表示’A’。(3)單引號、反斜杠和雙引號必須用轉義字符表示。因為單引號(‘)是字符常量界定符,反斜杠(\)表示轉義字符,雙引號(“)表示字符常量。2.3.1常量3.字符常量⑵常見轉義字符

\a:響鈴符\n:換行

\t

:制表符tab鍵

\r

:回車符

\\

:表示\

\’:表示單引號

\":表示雙引號\ddd?1~3位?進制數ddd為碼值所對應的字符(ddd?進制)\xhh?1、2位?六進制hh為碼符所對應的字符(hh十六進制)

\0:表示空字符NULL

注意:轉義字符只是代表一個字符。2.3.1常量4.字符串常量字符串常量是用一對雙引號括起來的字符序列。

例如:“Abrt124\n”,“A”在內存中連續(xù)存儲,并在最后加上字符'\0'作為字符串結束的標志。字符串的長度是指字符個數,存儲空間字節(jié)數等于長度加上1?!癆BC”,字符串長度為3,存儲空間為4.注意:在C++語言中,字符串常量和字符常量是不同的。

例如:"x"和'x'是不同的。不能將一個字符串常量賦給字符常量。

例如:charc;c=“A”;錯誤。2.3.1常量5.布爾型常量布爾型常量只有兩個,即true(真)和false(假),主要用語表示表達式的計算結果。在C++程序設計把布爾型常量當做整型數據,將true當成1,false當成0。在邏輯運算中,非0數據當成true,0當成false,即0為假,非0為真。注意:true,false只能是小寫,不能把true,false寫TRUE,FALSE2.3.1常量6.符號常量指用一個標識符來表示一個常數。定義符號常量的兩種方法:⑴用const語句定義符號常量格式:const數據類型

符號常量=表達式;例如:constdoublePI=3.1415926;注意:在定義符號常量時必須進行初始化,否則將出現編譯錯誤。

在后面的運算中不能更改符號常量的值。2.3.1常量6.符號常量⑵用#define語句定義符號常量格式:#define

常量名常量值例如:#definePI3.1415926

注意:(1)#define語句的最后不允許加分號“;”。(2)#define定義常量屬于預處理命令,一般放在程序的開頭,函數的外部.(3)符號常量一般為大寫,因為變量一般為小寫,便于區(qū)分。2.3.2變量1.變量的命名規(guī)則⑴系統(tǒng)使用的關鍵字不能再作為變量名。⑵第一個字符必須是字母或下劃線,后跟字母、數字或下劃線,中間不能有空格。⑶命名變量應盡量做到“見名知意”,這樣有助于記憶,增加可讀性。⑷在命名變量時,大小寫字母是不一樣的,習慣上用小寫字母命名變量。變量是指在程序運行過程中其值可以改變的量。變量是有變量名、變量值、變量地址和數據類型幾個屬性,在內存中占據一定的存儲單元。2.3.2變量2.變量的定義

格式為:數據類型變量1,變量2,……;其中數據類型可以是前面講過的各種數據類型。例如:intx,y,z;//定義了3個整型變量x、y、zfloata,b,c;//定義了3個實型變量a、b、c注意:變量必須先定義,后使用。2.3.2變量3.變量與初始化

為變量賦值有兩種方法:初始化和賦初值(1)初始化:定義變量的同時進行賦值。

格式:數據類型變量名=初始化值;

//intx=10,y=x+5;初始值可以是一個常量,也可以是一個表達式。(2)賦初值:先定義變量,后賦值。

格式:數據類型變量名;

變量名=初始化值;

例如:intx1;x1=10;注意:⑴

在一個語句中可以定義同一類型的多個變量;不能在一個語句中同時賦值多個變量。

例如,inta=b=3;錯誤。inta=3,b=3;正確⑵

在同一個程序塊中,不能有兩個相同的變量名。⑶變量賦值時,等號左邊的變量類型要和等號右邊值的類型匹配。2.4運算符和表達式計算機與信息科學學院楊衛(wèi)明單目運算符又稱一元運算符,它只對一個操作數進行操作。雙目運算符又稱二元運算符,它可以對兩個操作數進行操作。三目運算符又稱三元運算符,它可以對三個操作數進行操作。C++語言中只有一個三目運算符,就是條件運算符?:。2.4運算符和表達式運算符是C++語言實現各種運算的符號。根據操作對象個數的不同,可分為單目運算符、雙目運算符和三目運算符。表達式是由運算符和各種運算對象組合而成的式子。C++語言定義了豐富的運算符。運算符給出運算的類型和參與運算的操作數的個數。運算符分為算術運算符、關系運算符和邏輯運算符等。使用運算符時,要注意以下幾點:2.4運算符和表達式⑴運算符的功能。如加、減、乘、除等。⑵與操作數的關系,注意操作數的個數和類型。⑶運算符的優(yōu)先級別。⑷運算符的結合性。2.4.1算術運算符與算術表達式2.4.1算術運算符與算術表達式算術表達式:用算術運算符和括號將操作數連接起來的式子。優(yōu)先級:與數學相同。結合方向:自“自左至右”。

基本算術運算符號+(加法運算符,或正值運算符。)-(減法運算符,或負值運算符。)*(乘法運算符)/(除法運算符)%(模運算符,要求%兩側均為整型數)2.4.1算術運算符與算術表達式+(取正),-(取負)是單目運算符,其余是雙目運算符。

例如:+3,2,-4“/”運算符,當兩個操作數為整數時,表示整除。

例如:5/2-->2“/”要表示通常意義上的除法,其中至少一個操作數不為整型。例如:5.0/2-->2.500000“%”兩個操作數必須是整數或字符型數據。例如:5%3--->23%8--->3注意:2.4.1算術運算符與算術表達式//程序舉例:#include<iostream>usingnamespacestd;intmain(){

inti=4,j=5,k=6;intx;x=(i+j)*k/53;cout<<"x="<<x<<endl;x=25*4/2%k;cout<<"x="<<x<<endl;return1;}運行結果:x=1x=22.自增、自減運算符及表達式自增自減運算符++,--都是單目運算符。有前置和后置兩種形式

例如

前置運算:++i;--i

后置運算:i--;i++;

自增自減運算符都是自己+1或者減1.單獨運算時,前置和后置沒有區(qū)別。例如i++和++i,等價于i=i+1;混合運算時,前置運算++,--在前面的,變量先自身加減1,然后再參與運算。

例如:inti=3,j;j=++i;等價于i=i+1;j=i;混合運算時,后置運算++,--在后面的,變量再參與運算,然后自身才加減1例如:inti=3,j;j=i--;等價于j=i;i=i-1;由此可見,自增自減運算符可以是式子更加簡單。2.4.1算術運算符與算術表達式注意:⑴自增、自減運算符只能用于變量。++5是錯誤的⑵自增、自減運算符的結合方向是自右向左。⑶自增、自減運算符在有些情況下的使用可能會出現歧義,從而產生意想不到的結果。例如:inti=3,j=4,k;

k=i+++j;

k=(i++)+j;2.4.1算術運算符與算術表達式【例2.2】自增自減的運用#include<iostream>usingnamespacestd;intmain(){ inti=10,a; a=i++; cout<<"a="<<a<<'\t'<<"i="<<i<<endl; intj=20,b; b=--j; cout<<"b="<<b<<'\t'<<"j="<<j<<endl; return1;}2.4.1算術運算符與算術表達式程序運行結果:a=10i=11b=19j=192.4.2關系運算符與關系表達式關系運算符與表達式關系運算符用于對兩個數值或變量進行比較,其結果是一個邏輯值(“真”或“假”)。運算符運算范例結果==相等于4==30!=不等于4!=31<

小于4<30>

大于4>31<=小于等于4<=30>=大于等于4>=31不要把關系運算符“==”誤用為賦值運算符“=”。不要將不等于運算符“!=”寫成其他語言中的“<>”。'a'>=60的意思是'a'的ASCII碼值與60比較大小。對數學中關系式5≤x≤20,在C++中不能寫成5<=x<=20形式,這是錯誤的。正確的表達式應該是:5<=x&&x<=20。2.4.2關系運算符與關系表達式應用注意【程序舉例】#include<iostream>usingnamespacestd;intmain(){ inti=10,j=20; cout<<(i<j)<<endl; cout<<(i<=j)<<endl; cout<<(i>j)<<endl; cout<<(i>=j)<<endl; cout<<(i==j)<<endl; cout<<(i!=j)<<endl; cout<<(i+10>j==0)<<endl; return1;}2.4.2關系運算符與關系表達式運行結果:1100011【程序舉例】#include<iostream>usingnamespacestd;intmain(){ inti=10,j=20; cout<<(i<j)<<""<<(i<=j)<<endl; cout<<(i>j)<<""<<(i>=j)<<endl; cout<<(i==j)<<""<<(i!=j)<<endl; cout<<(15<j<20)<<""<<(i+10>j==0)<<endl; return1;}2.4.2關系運算符與關系表達式運行結果:110001112.4.3邏輯運算符與邏輯表達式2.4.3邏輯運算符與邏輯表達式運算符運算范例結果!非!a如果a為假,則!a為真如果a為真,則!a為假&&與a&&b如果a和b都為真,則結果為真否則為假||或a||b如果a和b有一個或一個以上為真,則結果為真,二者都為假,結果為假邏輯運算符用于判斷數據的真假,其結果仍為“真”或“假”。2.4.3邏輯運算符與邏輯表達式

舉例:請問z1,z2,z3的值為多少?

intx=3,y=5,z1,z2,z3;

z1=(x>0)||(y<10);z2=(x==0)&&(y<10);

z3=!(x==3);【程序舉例】#include<iostream>usingnamespacestd;intmain(){intx=12,y=9,z1,z2,z3;z1=(x>0)||(y<10);z2=(x==0)&&(y<10);z3=!(x==3);cout<<"z1="<<z1<<endl;cout<<"z2="<<z2<<endl;cout<<"z3="<<z3<<endl;return1;}2.4.3邏輯運算符與邏輯表達式程序運行結果:z1=1z2=0z3=12.4.4賦值運算符與賦值表達式C++中的賦值運算符分為兩種:簡單賦值運算符和復合賦值運算符。1.簡單賦值運算符“=”

表達式形式:變量=表達式

例如x=3/2;2.復合賦值運算符由一個數值型運算符和基本賦值運算符組合而成。共10個:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。

復合賦值表達式形式:變量#=表達式

其中,‘#’表示數值型運算符。例如:x%=5-2;等價于x=x%(5-2)2.4.4賦值運算符與賦值表達式【例2.3】復合賦值運算符的運用#include<iostream>usingnamespacestd;intmain(){ inti=10,j=20; cout<<(i<j)<<endl; cout<<(i<=j)<<endl; cout<<(i>j)<<endl; cout<<(i>=j)<<endl; cout<<(i==j)<<endl; cout<<(i!=j)<<endl; cout<<(i+10>j==0)<<endl; return1;}2.4.4賦值運算符與賦值表達式程序運行結果:11000112.4.4賦值運算符與賦值表達式【例2.5】賦值表達式的應用。#include<iostream>usingnamespacestd;intmain()v{intm=3,n=4,k;k=m++---n;cout<<"k="<<k<<endl;charx='m',y='n';intz;z=y<x;cout<<"z="<<z<<endl;z=(y==x+1);cout<<"z="<<z<<endl;z=('y'!='Y');cout<<"z="<<z<<endl;inta=1,b=3,c=5;a+=b*=c-=2;cout<<"a="<<a<<','<<"b="<<b<<','<<"c="<<c<<endl;return0;}運行結果:k=0z=0z=1z=1a=10,b=9,c=32.4.5位運算符C++有6個位運算符:~(按位求反)、&(按位與)、|(按位或)、^(按位異或)、>>(右移位)、<<(左移位)。注意:位運算操作數只能是整型或字符型的數據,不能為實型數據。操作數轉換成二進制位進行運算,運算規(guī)則同邏輯運算符。移位運算的結果就是位運算表達式的值,參與運算的兩個操作數的值并沒有發(fā)生變化。2.4.5位運算符inta=25,b=18,m;m=a&b;cout<<"m="<<m<<endl;先a的值25,b的值18轉換成二進制,然后按位進行邏輯與運算25-->1100118-->1001011001&10010————1000010000二進制轉換成十進制等于16,所以m=162.4.5位運算符inta=25,b=18,m;

m=a^b;cout<<"m="<<m<<endl;先a的值25,b的值18轉換成二進制,然后按位進行邏輯異或運算異或運算規(guī)則是:二進制位相同為0,相異為1,即同0異1.25-->1100118-->1001011001^10010————0101101011二進制轉換成十進制等于11,所以m=112.4.5位運算符2.4.5位運算符【程序舉例】位運算符的應用。#include<iostream>usingnamespacestd;intmain(){

inta=25,b=18,m,n,i,j,k;m=a&b;cout<<"m="<<m<<endl;n=a|b;cout<<"n="<<n<<endl;i=a^b;cout<<"i="<<i<<endl;j=a<<1;cout<<"j="<<j<<endl;k=a>>1;cout<<"k="<<k<<endl;return0;}運行結果為:m=16n=27i=11j=50k=122.4.6其他運算符1.條件運算符2.4.6其他運算符三目運算符,形式為:表達式1?表達式2:表達式3執(zhí)行過程:先分析表達式1,其值為真時,則表達式2的值為條件表達式的值;否則表達式3的值為條件表達式的值。優(yōu)先級低于算術運算符、關系運算符和邏輯運算符,高于賦值運算符。結合性為“從右到左”。

2.逗號運算符2.4.6其他運算符逗號做運算符時,其表達式形式如下:表達式1,表達式2,表達式3,--,表達式n執(zhí)行過程:從左往右進行運算,先計算表達式1,再計算表達式2,最后計算表達式n。最后一個表達式的值為整個逗號表達式的值。注意,在C++語言運算符中,逗號運算符的運算優(yōu)先級最低。例如: inta=3,b=5,c=6;//逗號為間隔符cout<<(a+=b,b*=a,c-=a+b);//逗號為運算符

2.4.7表達式中數據類型的轉換1.

隱含轉換隱含轉換是由編譯系統(tǒng)自動完成的,計算完成后,操作數仍保持原有的數據類型。當操作數的類型不一致時,表達式的類型就取決于操作數中類型最高的操作數類型。轉換規(guī)則:

注意:

橫向,自動轉換;縱向,混合運算時向最高的數據類型轉換。2.4.7表達式中數據類型的轉換例如:

inti;floatf;doubled;longe;

則:

10+‘a’+i*f-d/e的結果為double型2.強制轉換作用是將表達式的類型強制轉換成指定的數據類型。一般形式:數據類型(表達式)或(數據類型)表達式例如:

(int)a/3//將a強制轉換成int型,再除以3。float(5%3)//將5%3的結果轉換成float型注意:如果將高類型轉換成低類型,會造成數據精度的損失,

溫馨提示

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

評論

0/150

提交評論