C++程序設(shè)計(jì) 第2章 數(shù)據(jù)類型及表達(dá)式_第1頁
C++程序設(shè)計(jì) 第2章 數(shù)據(jù)類型及表達(dá)式_第2頁
C++程序設(shè)計(jì) 第2章 數(shù)據(jù)類型及表達(dá)式_第3頁
C++程序設(shè)計(jì) 第2章 數(shù)據(jù)類型及表達(dá)式_第4頁
C++程序設(shè)計(jì) 第2章 數(shù)據(jù)類型及表達(dá)式_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)第 2 章 數(shù)據(jù)類型及表達(dá)式C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)主主 要要 內(nèi)內(nèi) 容容本章主要介紹本章主要介紹: :本章介紹本章介紹C C的基本數(shù)據(jù)類型和存儲類型、基本運(yùn)的基本數(shù)據(jù)類型和存儲類型、基本運(yùn)算符的運(yùn)算規(guī)則和表達(dá)式的構(gòu)成,為后續(xù)章節(jié)的算符的運(yùn)算規(guī)則和表達(dá)式的構(gòu)成,為后續(xù)章節(jié)的學(xué)習(xí)奠定一個(gè)基礎(chǔ)。學(xué)習(xí)奠定一個(gè)基礎(chǔ)。復(fù)雜的數(shù)據(jù)類型指針和結(jié)構(gòu)體類型等將在第復(fù)雜的數(shù)據(jù)類型指針和結(jié)構(gòu)體類型等將在第6 6,7 7章節(jié)中介紹。章節(jié)中介紹。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.1 C2.1 C語言的數(shù)據(jù)類型語言的數(shù)據(jù)類型 使用高級語言編寫程序,主要工作有兩項(xiàng):使用高級語言編寫

2、程序,主要工作有兩項(xiàng): 一是描述數(shù)據(jù),二是描述數(shù)據(jù)加工的方法。一是描述數(shù)據(jù),二是描述數(shù)據(jù)加工的方法。 前者是通過數(shù)據(jù)類型定義語句實(shí)現(xiàn)的,后者是通前者是通過數(shù)據(jù)類型定義語句實(shí)現(xiàn)的,后者是通過若干條執(zhí)行語句,包括用各種運(yùn)算構(gòu)成的表達(dá)過若干條執(zhí)行語句,包括用各種運(yùn)算構(gòu)成的表達(dá)式來實(shí)現(xiàn)。式來實(shí)現(xiàn)。 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì) 程序中的每一個(gè)數(shù)據(jù)都屬于一定的數(shù)據(jù)類型,不存在程序中的每一個(gè)數(shù)據(jù)都屬于一定的數(shù)據(jù)類型,不存在不屬于某種數(shù)據(jù)類型的數(shù)據(jù)。不屬于某種數(shù)據(jù)類型的數(shù)據(jù)。 數(shù)據(jù)類型是根據(jù)它們的取值的不同來區(qū)分的,如整型數(shù)據(jù)類型是根據(jù)它們的取值的不同來區(qū)分的,如整型、實(shí)型、字符型等。每種類型的數(shù)據(jù)可以

3、是常量或變、實(shí)型、字符型等。每種類型的數(shù)據(jù)可以是常量或變量。量。C/C+C/C+都提供一組基本的數(shù)據(jù)類型及針對它們的都提供一組基本的數(shù)據(jù)類型及針對它們的有關(guān)操作。有關(guān)操作。C/C+C/C+語言還具有構(gòu)造類型的能力,即可語言還具有構(gòu)造類型的能力,即可以通過將基本數(shù)據(jù)類型加以組合,構(gòu)造出更復(fù)雜的類以通過將基本數(shù)據(jù)類型加以組合,構(gòu)造出更復(fù)雜的類型型。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.12.1 C C語言的數(shù)據(jù)類型語言的數(shù)據(jù)類型 數(shù)據(jù)類型空類型指針型枚舉型構(gòu)造類型數(shù)組型結(jié)構(gòu)型共用型基本類型字符型實(shí)型單精度型雙精度型整型帶符號整型無符號整型無符號整型無符號短整型無符號長整型帶符號整型(整型)帶符號短整

4、型(短整型)帶符號長整型(長整型)C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.2 2.2 常量常量常量是程序運(yùn)行過程中其值不發(fā)生變化的數(shù)據(jù)。 表表2.1 整型數(shù)據(jù)的表示方式整型數(shù)據(jù)的表示方式進(jìn)制數(shù)進(jìn)制數(shù)表示方式表示方式舉例舉例八制數(shù)整數(shù)八制數(shù)整數(shù)十制數(shù)整數(shù)十制數(shù)整數(shù)十六制數(shù)整數(shù)十六制數(shù)整數(shù)由數(shù)字由數(shù)字0開頭開頭034,065,057如同數(shù)學(xué)中的數(shù)字如同數(shù)學(xué)中的數(shù)字123,-78.90由數(shù)字由數(shù)字0 x開頭開頭0 x23,0 xff,0 xac2.2.1 2.2.1 整型常量整型常量C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.2.2 實(shí)型常量 3.14、.9999、-3.14159、834.、0.666 、6.

5、89E-5 2.2.3 字符常量字符常量 用成對的單引號括起來的一個(gè)字符,用成對的單引號括起來的一個(gè)字符,舉例:舉例: x,a,A,b,$,# 等等,n,t等轉(zhuǎn)義字等轉(zhuǎn)義字符符C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)例2.1 求一個(gè)圓柱體體積,用符號常量代替。 #include #define PI 3.14159 /定義PI為符號常量 void main() float r,h,v; scanf(%f,%f,&r,&h); v=PI*r*r*h; printf(Volume=%f,v); 運(yùn)行時(shí)輸入運(yùn)行時(shí)輸入:3,2 Volume=56.5486182.2.4 符號常量符號常量 #d

6、efine 符號常量符號常量 字符串字符串v=3.14159*r*r*h; /編譯前替換編譯前替換C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)C+中用常變量替代預(yù)處理命令 #include using namespace std; const float PI=3.14159; /定義常變量PI等于3.14159 int main() float r,h,v; cinrh; v=PI*r*r*h; coutVolume=vendl; return 0;C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.2.5 字符串常量注意:1. 0和0不同,0是編碼為0的字符,而0則是數(shù)字0,其編碼為48。 2. 再有x和x也是不同的

7、,前者是字符常量,它是單獨(dú)一個(gè)字符x,其長度為1。 3. 而x在機(jī)器中占2個(gè)字節(jié)存儲,其中,一個(gè)字節(jié)存x,另一個(gè)存結(jié)尾符0。 舉例舉例 tabrcdnefg I am a student 、x、 用一對雙引號用一對雙引號括起來的零個(gè)或多個(gè)字符序列。括起來的零個(gè)或多個(gè)字符序列。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.3 變量 在程序運(yùn)行過程中其值可以發(fā)生變化的量。2.3.1 變量的數(shù)據(jù)類型及其定義變量的數(shù)據(jù)類型及其定義變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)表表2.2 整型數(shù)據(jù)所占內(nèi)存長度和數(shù)據(jù)整型數(shù)據(jù)所占內(nèi)存長度和數(shù)據(jù)數(shù)據(jù)類型數(shù)據(jù)類型 二進(jìn)制位二進(jìn)制位數(shù)據(jù)范圍數(shù)據(jù)范圍 int

8、16 -215215-1即即-32768 32767 32 -231231-1short 16 long 32 unsigned int 16/32 0 216-1(0 65535) unsigned short 16 unsigned long 32 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)表表2.3 實(shí)型數(shù)據(jù)所占內(nèi)存長度、數(shù)據(jù)范圍及有效數(shù)字實(shí)型數(shù)據(jù)所占內(nèi)存長度、數(shù)據(jù)范圍及有效數(shù)字?jǐn)?shù)據(jù)類型數(shù)據(jù)類型二進(jìn)制位二進(jìn)制位有效數(shù)字有效數(shù)字?jǐn)?shù)據(jù)范圍數(shù)據(jù)范圍 float(單精度單精度)double(雙精度雙精度) long double3264128715 1618 1910-38 103810-308 1030

9、810-4931 104932C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)說明:1、任何類型的數(shù)據(jù)在計(jì)算機(jī)內(nèi)部都是以二任何類型的數(shù)據(jù)在計(jì)算機(jī)內(nèi)部都是以二進(jìn)制的形式來存放的。進(jìn)制的形式來存放的。2 2、使用數(shù)據(jù)時(shí)要考慮其范圍。、使用數(shù)據(jù)時(shí)要考慮其范圍。 (1)C語言存儲基本整型和短整型數(shù)據(jù)占用語言存儲基本整型和短整型數(shù)據(jù)占用2個(gè)字節(jié),范圍個(gè)字節(jié),范圍是是 -3276832767。 C+語言中存儲基本整型占用語言中存儲基本整型占用4個(gè)字節(jié),范圍和個(gè)字節(jié),范圍和C語言中語言中長整型一樣:長整型一樣:-21474836482147483647。 (2)長整型:)長整型:0L, -11L,0 x15L。其中,。其中

10、,0L為八進(jìn)制、為八進(jìn)制、-11L為十進(jìn)制、為十進(jìn)制、0X15L 為十六進(jìn)制整數(shù)。為十六進(jìn)制整數(shù)。 (3)無符號整型數(shù)沒有符號位,只能表示正數(shù)。范圍是)無符號整型數(shù)沒有符號位,只能表示正數(shù)。范圍是 065535(C語言和短整型)、語言和短整型)、c+(04294967295 即0(232-1))。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)說明: (4)單精度實(shí)型數(shù)據(jù)用4個(gè)字節(jié)存儲,范圍是 10-381038。 (5)雙精度實(shí)型數(shù)據(jù)用8個(gè)字節(jié)存儲,10-30810308。 (6)字符型數(shù)據(jù)用一個(gè)字節(jié)存儲。基本ASCII:0127C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2. 變量的數(shù)據(jù)類型定義 數(shù)據(jù)類型符數(shù)據(jù)類型符

11、 變量列表;變量列表; int a, b, c; char ch, str; double f_1, f_2; float x, y, z, _w1, _w2;unsigned int u_1, u_2; /int 可以省略可以省略 long int g1, g2; /int 可以省略可以省略C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)變量定義可以出現(xiàn)在程序的3個(gè)地方,同時(shí),變量定義的位置決定變量作用范圍,又稱為“作用域”。 在函數(shù)的內(nèi)部。在函數(shù)的內(nèi)部(包括復(fù)合語句內(nèi)部)定義的變量稱為局部變量。它的作用域是從定義處開始直到此函數(shù)(復(fù)合語句)結(jié)束。 在函數(shù)的參數(shù)中。在函數(shù)的參數(shù)中(在函數(shù)名后括號中)定義的變

12、量稱為局部變量。它的作用域是從定義處開始直到此函數(shù)結(jié)束。 在所有函數(shù)的外部。在所有函數(shù)的外部定義的變量稱為全局變量。它的作用域是從開始處直到程序結(jié)束。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.3.2 變量的存儲類型及其定義1. 變量的存儲類型CPU寄存器:CPU寄存器中存儲數(shù)據(jù)的是動態(tài)存儲類型,不能長期占用。內(nèi)存:內(nèi)存中又分為兩個(gè)區(qū)域,即為靜態(tài)存儲區(qū)(存儲靜態(tài)變量)和動態(tài)存儲區(qū)(存儲動態(tài)變量)。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)表表2.4 數(shù)據(jù)的存儲類型及存儲地點(diǎn)數(shù)據(jù)的存儲類型及存儲地點(diǎn)存儲類型存儲類型存儲類型符存儲類型符存儲地點(diǎn)存儲地點(diǎn) 自動型自動型寄存器型寄存器型靜態(tài)型靜態(tài)型autoregiste

13、rstatic內(nèi)存動態(tài)存儲區(qū)內(nèi)存動態(tài)存儲區(qū)CPU寄存器寄存器靜態(tài)存儲區(qū)靜態(tài)存儲區(qū)外部變量外部變量extern靜態(tài)存儲區(qū)靜態(tài)存儲區(qū)C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2. 變量的存儲類型的定義存儲類型存儲類型 數(shù)據(jù)類型數(shù)據(jù)類型 變量列表變量列表(1)自動變量自動變量 【例【例2.2】定義自動整型和字符型變量?!慷x自動整型和字符型變量。 #include using namespace std; void main() auto char c1,c2; auto int i1,i2; scanf(%d,%d,&i1,&i2); c1=i1; c2=i2; printf(%c,%cn,

14、c1,c2); printf(%d,%dn,c1,c2); 1c1kc235 i1467802i20097a,b97,98 9700989897,98_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)(2) 寄存器變量 【例2.3】函數(shù)內(nèi)部定義寄存器變量。 #include using namespace std; void main() register int b; / 定義變量b為寄存器型變量 b=3; coutb=bendl; C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)(3) 靜態(tài)變量靜態(tài)變量存放在靜態(tài)內(nèi)存數(shù)據(jù)區(qū)中。靜態(tài)變量在變量定義時(shí)就分配了固定的內(nèi)存單元并根據(jù)所定義的數(shù)據(jù)類型存入默認(rèn)值,在程序運(yùn)行中一直占用

15、內(nèi)存單元不釋放,直到程序運(yùn)行結(jié)束后。靜態(tài)變量又分為靜態(tài)局部變量和靜態(tài)全局變量。 靜態(tài)局部變量在函數(shù)或復(fù)合語句中用static定義的變量為靜態(tài)變量,稱為靜態(tài)局部變量,該變量在其函數(shù)中或復(fù)合語句中有效。 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)【例2.4】函數(shù)f()中有靜態(tài)局部變量和自動變量,要理解在多次調(diào)用函數(shù)f過程中,兩種變量值的變化。.int f() static int a=1; / a 是靜態(tài)局部變量,在此函數(shù)中有效是靜態(tài)局部變量,在此函數(shù)中有效 auto int b=0; / b 動態(tài)局部變量,在此函數(shù)中有效動態(tài)局部變量,在此函數(shù)中有效 a=a+2; b=b+1; .1a0b3151靜態(tài)局部變

16、量生存期:靜態(tài)局部變量生存期:第一次調(diào)用時(shí)分配內(nèi)存,第一次調(diào)用時(shí)分配內(nèi)存,程序結(jié)束釋放變量程序結(jié)束釋放變量靜態(tài)局部變量作用域:靜態(tài)局部變量作用域:從定義處到本函數(shù)結(jié)束從定義處到本函數(shù)結(jié)束C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)靜態(tài)全局變量【例【例2.5】觀察程序中靜態(tài)全局變量和存在形式?!坑^察程序中靜態(tài)全局變量和存在形式。#include using namespace std; static int a=1; void main() auto int b=0; a=a+1; b=b+1; couta=a,b=bendl;1a0b12 a=2,b=1 _全局變量生存期:編譯時(shí)分全局變量生存期:編譯時(shí)分

17、配內(nèi)存,程序結(jié)束釋放變量配內(nèi)存,程序結(jié)束釋放變量靜態(tài)全局作用域:從定義處靜態(tài)全局作用域:從定義處開始到本文件結(jié)束開始到本文件結(jié)束C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)(4) 外部變量 將一個(gè)源文件程序清單分放在若干個(gè)程序文件中采用分塊將一個(gè)源文件程序清單分放在若干個(gè)程序文件中采用分塊編譯方法編譯生成一個(gè)目標(biāo)程序(編譯方法編譯生成一個(gè)目標(biāo)程序(.obj.obj文件)。文件)。 其中每個(gè)程序稱為一個(gè)其中每個(gè)程序稱為一個(gè)“編譯單位編譯單位”,最后,將它們連接,最后,將它們連接在一起生成在一起生成.exe.exe文件,提高編譯速度和便于管理大型軟件文件,提高編譯速度和便于管理大型軟件工程。工程。 C C語言

18、規(guī)定在某一個(gè)源程序中定義的全局變量,其它的多個(gè)語言規(guī)定在某一個(gè)源程序中定義的全局變量,其它的多個(gè)文件可以使用,實(shí)現(xiàn)程序間的數(shù)據(jù)交流文件可以使用,實(shí)現(xiàn)程序間的數(shù)據(jù)交流, ,稱為外部變量。稱為外部變量。 使用關(guān)鍵字使用關(guān)鍵字“extern”extern”定義的變量稱為外部變量(系統(tǒng)默定義的變量稱為外部變量(系統(tǒng)默認(rèn))。全局變量如果不加認(rèn))。全局變量如果不加“static”static”限制,都是外部變量限制,都是外部變量。 外部變量如果與局部變量同名,在局部范圍內(nèi)局部變量優(yōu)外部變量如果與局部變量同名,在局部范圍內(nèi)局部變量優(yōu)先(具體應(yīng)用見第先(具體應(yīng)用見第.4節(jié))。節(jié))。C/C+C/

19、C+程序設(shè)計(jì)程序設(shè)計(jì)2.3.3 變量的初始化 存儲類型符 數(shù)據(jù)類型符 變量1=初值1,變量2=初值2 ; static int a=1; /將變量a定義為靜態(tài)局部變量,并賦初值1 auto int a=0,b=-3; /變量a,b定義為自動變量,并分別賦初值0,-3 char c1=x,c2=y; /將變量c1,c2定義為自動變量,并分別賦字符x,y C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)【例【例2.6】內(nèi)存單元中同一個(gè)數(shù)據(jù)按有符號和無符號格】內(nèi)存單元中同一個(gè)數(shù)據(jù)按有符號和無符號格式輸出的情況。式輸出的情況。#include void main() unsigned short a=65535; s

20、hort int b=a; printf(a=%un,a); printf(b=%dn,b); printf(a=%d,%o,%x,%un,a,a,a,a);2.3.4 基本數(shù)據(jù)類型的使用1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1a1. 整型變量整型變量1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ba=65535_b=-1有符號數(shù)在內(nèi)存中存放的是補(bǔ)碼。有符號數(shù)在內(nèi)存中存放的是補(bǔ)碼。正數(shù)的補(bǔ)碼與原碼相同正數(shù)的補(bǔ)碼與原碼相同負(fù)數(shù)的補(bǔ)碼是該數(shù)絕對值的二進(jìn)制形式按位求反加負(fù)數(shù)的補(bǔ)碼是該數(shù)絕對值的二進(jìn)制形式按位求反加11 1 1 1 1 1 1 1 1 1 1 1

21、1 1 1 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1a=65535,177777,ffff,66635減減1取反取反a用用%d格式輸出時(shí)由格式輸出時(shí)由unsigned short轉(zhuǎn)換成轉(zhuǎn)換成int型。型。VC中中int 型型4個(gè)字節(jié)個(gè)字節(jié)(-21474836482147483647),所,所以輸出以輸出a=65535 ,如果在如果在C語言環(huán)境下是:語言環(huán)境下是:-1 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)#include using namespace std;void main() short int a,b; a=32767; b=a+1; couta”,” bendl;

22、 int a,b;【例2.7】觀察超出短整型數(shù)據(jù)最大允許值的情況1 0 1 1 1 0 0 0 1 0 0 1 1 0 1 1VC+環(huán)境環(huán)境int 型型4個(gè)字節(jié),可用數(shù)據(jù)范圍個(gè)字節(jié),可用數(shù)據(jù)范圍-21474836482147483647 0 1 0 0 0 0 1 01 1 0 0 1 0 01 0 0 1 0 1 0 1 0ab0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 032767,-32768修改程序修改程序重新運(yùn)行重新運(yùn)行觀察結(jié)果觀察結(jié)果1 0 .1 0 1 1 1 1 1 1 .1 1 1 1 1 11 0

23、 .0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ab0 0 .0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 032767, 327680 0 .0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 char a,b;1 0 1 1 0 1 0 01 1 1 1 1 1 1 10 0 0 0 0 0 0 0ab, _C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)同樣,也要注意使用的數(shù)據(jù)超出最小允許值的情況。下例觀察超出最小取值范圍的情況。 #include using namespace std; void main() short int a,b; a=

24、-32768; /a 取最小值 b=a-1; /b的值超出最小值范圍 couta”,”bendl; -32768,32767short int 變化范圍:變化范圍:-32768-+32767_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2. 2. 實(shí)型變量實(shí)型變量3.33333e+012【例【例2.8】輸出實(shí)型雙精度數(shù)據(jù)?!枯敵鰧?shí)型雙精度數(shù)據(jù)。#include using namespace std;void main() double x,y; x=1111111111111.111111111; y=2222222222222.222222222; coutx+yendl;5876543.201571

25、231x 1111111111111.13.578944536776785y 2222222222222.2_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)3. 字符型變量 字符型變量在計(jì)算機(jī)內(nèi)存儲的是其字符對應(yīng)的ASCII值,也可以看作一個(gè)字節(jié)的整數(shù)。 例如,char c1=A;C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)#include using namespace std;void main() char c1,c2; c1=getchar( ); putchar(c1); c2=c1+32;/*ASCII在相加在相加*/ putchar(c2); printf(n%d,%dn,c1,c2); /*輸出輸出AS

26、CII*/【例【例2.92.9】輸入英文字母】輸入英文字母AA,轉(zhuǎn)換成小寫字母輸出。,轉(zhuǎn)換成小寫字母輸出。0 1 0 0 0 0 1 0 c11 0 1 1 0 1 0 00 1 0 0 0 0 0 1 c2A_A_0 1 1 0 0 0 0 1a _65,97_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)4 4常變量常變量 C+中定義變量時(shí),加上關(guān)鍵字const,則變量稱為常變量。常變量的值在程序運(yùn)行期間不能改變, 常變量的初值要通過初始化方式給出。 例如, const int a=3; a=a+2; /錯(cuò)誤C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.4 運(yùn)算符及表達(dá)式C C語言運(yùn)算符語言運(yùn)算符基本運(yùn)算符基本運(yùn)

27、算符條件運(yùn)算符條件運(yùn)算符(?:)(?:)基本算術(shù)運(yùn)算符基本算術(shù)運(yùn)算符+-+-* */%/%基本賦值運(yùn)算符基本賦值運(yùn)算符= =關(guān)系運(yùn)算符關(guān)系運(yùn)算符( ,=,=,-賦值運(yùn)算符賦值運(yùn)算符逗號運(yùn)算符逗號運(yùn)算符(,)(,)專用運(yùn)算符專用運(yùn)算符成員運(yùn)算符成員運(yùn)算符. .強(qiáng)制運(yùn)算符強(qiáng)制運(yùn)算符下標(biāo)運(yùn)算符下標(biāo)運(yùn)算符數(shù)據(jù)長度運(yùn)算符數(shù)據(jù)長度運(yùn)算符( sizeof )位運(yùn)算符位運(yùn)算符算術(shù)運(yùn)算符算術(shù)運(yùn)算符位移位運(yùn)算符位移位運(yùn)算符位自反賦值運(yùn)算符位自反賦值運(yùn)算符增增1 1減減1 1運(yùn)算符運(yùn)算符+,-+,-C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.4.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式優(yōu)先級優(yōu)先級 高高低低模運(yùn)算模運(yùn)算(整數(shù)取余整數(shù)取余

28、)整數(shù)整數(shù)(除數(shù)和被除數(shù)都是整數(shù)除數(shù)和被除數(shù)都是整數(shù))非整數(shù)非整數(shù)(除數(shù)和被除數(shù)至少有一個(gè)不是整數(shù)除數(shù)和被除數(shù)至少有一個(gè)不是整數(shù))-(負(fù)號負(fù)號) (* / %) (+ -) int a=3,b=4; a/b結(jié)果為結(jié)果為0 float c=3.0; int d=4; c/d結(jié)果為結(jié)果為0.75 算術(shù)運(yùn)算符算術(shù)運(yùn)算符float c=3.0; int d=4; c%d錯(cuò)誤錯(cuò)誤 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì) #include using namespace std; void main() cout7%3, 7%(-3) , -7%3, -7%(-3)endl; 1,1,-1,-1 模運(yùn)算在判斷一

29、個(gè)整數(shù)能否被另一個(gè)整數(shù)整除時(shí)很模運(yùn)算在判斷一個(gè)整數(shù)能否被另一個(gè)整數(shù)整除時(shí)很方便,例如方便,例如,判斷判斷n是否能被是否能被2 整除,可使用(整除,可使用(n%2=0)來判斷來判斷 。結(jié)果模運(yùn)算與除數(shù)的符號無關(guān),與被除數(shù)相同。結(jié)果模運(yùn)算與除數(shù)的符號無關(guān),與被除數(shù)相同 【例【例2.102.10】求兩個(gè)整數(shù)相除的余數(shù)。】求兩個(gè)整數(shù)相除的余數(shù)。同7%33*2+1=7取負(fù)7%3的結(jié)果同-7%3_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.4.2 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 (小于) (大于) =(大于或等于) =(等于) !=(不等于) 關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符。 前4種關(guān)系運(yùn)算符(、=)的優(yōu)先級相同,后2

30、種(=,!=)也相同。且前4種的優(yōu)先級高于后2種。 見附錄B 關(guān)系運(yùn)算的結(jié)果是一個(gè)邏輯值,即“真”或“假”,如果結(jié)果為真,用數(shù)字1表示,結(jié)果為假,用數(shù)字0表示。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì) (1)5=3 (關(guān)系表達(dá)式的值為“假”值,用0表示) (2)x3 (當(dāng)x3時(shí),表達(dá)式的值為“真”值,用1表示) (3)35=6b+c (a+b為7 b+c為9 79 結(jié)果:假(用0表示)) (5)a=bc ( bb&c4&8b&cd0 cb&(c=d%a)0 c的值不變C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)3邏輯或表達(dá)式 (表達(dá)式1)|(表達(dá)式2) 邏輯或運(yùn)算規(guī)則是,如果兩個(gè)表

31、達(dá)式有一個(gè)非0 時(shí),結(jié)果為1 ,否則結(jié)果為0。 邏輯或運(yùn)算優(yōu)先級低于邏輯與運(yùn)算 例如, int a=0,b=4,c=8,d=6,x=2,y=2; a|b 0|4 x+y|a*b/c 2+2 | 0*4/8 c|d 99 |100 ab|c4|8=-10&a10 對應(yīng)的C 語言表達(dá)式是:a10。 或 !(a=-10&a=,=,&=,=,|=,這5個(gè)二進(jìn)制 運(yùn)算符,不作講解。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì) 2賦值表達(dá)式 (1)使用“=”給變量賦值,使變量得到一個(gè)值,賦值表達(dá)式的格式是:= 例如:a=1 /賦值表達(dá)式的運(yùn)算從右向左 b=5*PI c=a (a=1)+(b=3

32、)*4-(c=5) /賦值表達(dá)式也可出現(xiàn)在其他表達(dá)式中賦值運(yùn)算的優(yōu)先級在所有運(yùn)算中倒數(shù)第二,只比逗號運(yùn)算高一級C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)(2)復(fù)合賦值運(yùn)算符 = a-=b-5 相當(dāng)于a=a-(b-5) a*=b+c 相當(dāng)于a=a*(b+c)C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.4.5 逗號運(yùn)算符和逗號表達(dá)式 表達(dá)式1,表達(dá)式2,表達(dá)式n 逗號運(yùn)算符是一個(gè)求值運(yùn)算符。計(jì)算時(shí)順序?yàn)榉謩e求解每一個(gè)表達(dá)式,整個(gè)表達(dá)式的值是最右邊表達(dá)式的值。 逗號運(yùn)算符的優(yōu)先級最低 a=8+4,a/2 /相當(dāng)于a=12,6 x=(y=5,y*2) /相當(dāng)于x=(5,10)C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.4.6

33、變量的自增,自減(+,-)運(yùn)算符 變量+ 、 +變量 、變量- 、 -變量 說明:“+”和“-”運(yùn)算符位于變量的前或后,其運(yùn)算規(guī)則是不同的。運(yùn)算符號在變量前表示先進(jìn)行自增(減)運(yùn)算,后使用變量,運(yùn)算符號在后表示先使用變量,后進(jìn)行自增(減)運(yùn)算。例如: x=1; y=+x; x=1; y=x+; x=x+1;y=x; (x2, y 2)y=x; x=x+1; (y 1, x 2)C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)#include using namespace std;void main()int x=10;coutx+endl; /x是是10,輸出,輸出x值后自增值后自增1 coutxendl;

34、 /x使用過后在使用過后在10的基礎(chǔ)上自增的基礎(chǔ)上自增1 【例【例2.112.11】 變量的自增自減運(yùn)算舉例變量的自增自減運(yùn)算舉例。10 x_1111使用使用“+”和和“-”運(yùn)算時(shí)需要注意以下問題:運(yùn)算時(shí)需要注意以下問題:(1)+和和-只能用于變量,不能用于常量和表達(dá)式。只能用于變量,不能用于常量和表達(dá)式。(2)+和和-是單目運(yùn)算符,使用時(shí)考慮前綴或后綴運(yùn)算。是單目運(yùn)算符,使用時(shí)考慮前綴或后綴運(yùn)算。 -10_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)使用“+”和“-”運(yùn)算時(shí)需要注意以下問題:(3)在表達(dá)式中包含)在表達(dá)式中包含+或或運(yùn)算時(shí)很容易出錯(cuò),例如運(yùn)算時(shí)很容易出錯(cuò),例如 i+j 應(yīng)該寫成:應(yīng)該寫成

35、:(i+)+(+j) 。 i+j 應(yīng)寫成:應(yīng)寫成: (i+)+j。(4)C/C+中規(guī)定函數(shù)的實(shí)參求值順序是自右向左。中規(guī)定函數(shù)的實(shí)參求值順序是自右向左。 例如,例如,i 的值為的值為3;則執(zhí)行:則執(zhí)行: coutii+; 3 i4 3 4C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)【例【例2.122.12】觀察中間變量】觀察中間變量j j的值。的值。#include using namespace std;void main() int i,j; i=3; j=i+; /j=i,i=i+1 couti=i,j=jendl; 18 i333 j334i=4,j=3_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.4.7

36、 長度運(yùn)算符 長度運(yùn)算符sizeof計(jì)算數(shù)據(jù)類型或變量占內(nèi)存字節(jié)的長度 sizeof(類型說明符)或 sizeof (表達(dá)式) 例如, 在C語言中int類型變量占2個(gè)字節(jié),而C+中int類型變量占4個(gè)字節(jié),可通過下列語句檢測出來: int n; n=sizeof(int); C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì) void main() int i; short s; unsigned u; long int l; float f; char ch; double d; coutsizeof(i) ,sizeof(s) ,“sizeof(u) ,sizeof(l),sizeof(f),“ sizeo

37、f(ch) ,sizeof(d)endl; 4,2,4,4,4,1,8 【例2.13】長度運(yùn)算符的使用。_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2.4.8 2.4.8 混合運(yùn)算和類型轉(zhuǎn)換混合運(yùn)算和類型轉(zhuǎn)換C /C+語言數(shù)據(jù)類型很復(fù)雜,不同類型的數(shù)據(jù)可混合運(yùn)算,在運(yùn)算時(shí),不同類型的數(shù)據(jù)首先要轉(zhuǎn)換成同類型,且轉(zhuǎn)換成最長的數(shù)據(jù)類型,然后再進(jìn)行運(yùn)算。 數(shù)據(jù)類型轉(zhuǎn)換有兩種方式, 即自動類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。 1.自動類型轉(zhuǎn)換2.10+a+1.5-5678.444*b的運(yùn)算結(jié)果為double 型,3.常數(shù)整數(shù)默認(rèn)為int型,常數(shù)實(shí)數(shù)默認(rèn)為double型 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)C+ 不可以自動轉(zhuǎn)換 double 圖 2.6 不 同 類 型 數(shù) 據(jù) 的 轉(zhuǎn) 換 long int unsigned char,short float 高 低 注意:注意:C+類型轉(zhuǎn)換類型轉(zhuǎn)換C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2. 強(qiáng)制類型轉(zhuǎn)換 (類型)表達(dá)式 x=3.6; y=(int)x ;3.6 x y33C/C+C/C+程序設(shè)計(jì)程序

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論