數(shù)據(jù)類型與表達式演示文稿_第1頁
數(shù)據(jù)類型與表達式演示文稿_第2頁
數(shù)據(jù)類型與表達式演示文稿_第3頁
數(shù)據(jù)類型與表達式演示文稿_第4頁
數(shù)據(jù)類型與表達式演示文稿_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)類型與表達式演示文稿現(xiàn)在是1頁\一共有85頁\編輯于星期五數(shù)據(jù)類型與表達式現(xiàn)在是2頁\一共有85頁\編輯于星期五本章導(dǎo)讀本章包括知識點:C語言的基本數(shù)據(jù)類型數(shù)據(jù)類型與變量、常量的關(guān)系各種常量的性質(zhì)和定義表達式中各種運算符的功能和特點及副作用數(shù)據(jù)類型的相互轉(zhuǎn)換規(guī)則

現(xiàn)在是3頁\一共有85頁\編輯于星期五2.1數(shù)學上的“數(shù)”到計算機中的“數(shù)”數(shù)學中,數(shù)是一門研究抽象的學科,數(shù)和數(shù)的運算都是抽象的,數(shù)據(jù)不分類型,其運算是絕對精確的,如果88-8=80,1/6=0.16666(循環(huán)小數(shù))。當從純數(shù)學的計算過渡到用計算機來解決問題時,數(shù)變成了一個實在的工程問題,在計算機中,數(shù)值是具體存在的,它存放在計算機的存儲器中?,F(xiàn)在是4頁\一共有85頁\編輯于星期五存儲空間是有限的每一個存儲單元存放的數(shù)據(jù)范圍都是有限的,不可能無窮大也不可能無窮小,如前面所說的1/6=0.16666(循環(huán)小數(shù))用計算機是表示不出來的,因為存儲器的空間大小是有限的,用計算機的計算不是抽象的理論值的計算,而是用工程的方法實現(xiàn)的計算,在許多情況下只能得到近似的結(jié)果,用計算機來計算1/6:得到的結(jié)果為0.166667,而不是無窮的小數(shù)位?,F(xiàn)在是5頁\一共有85頁\編輯于星期五為什么要劃分“數(shù)據(jù)類型”怎樣使計算機合理的表示現(xiàn)實生活中各種類型的數(shù)據(jù),也就是說,使計算機能夠根據(jù)數(shù)據(jù)的實際表示范圍以及數(shù)據(jù)的表示形式,為數(shù)據(jù)分配合理的存儲空間。計算機存儲器的資源是十分寶貴的,如何為存儲器做到量體裁衣?為了解決這個問題,計算機對不同種類的數(shù)據(jù)用不同的“數(shù)據(jù)類型”來表示,不同的數(shù)據(jù)類型有不同的存儲空間(所表示的數(shù)的范圍不相同)和存儲形式?!皵?shù)據(jù)類型”是學習程序設(shè)計語言時必須首先明確的問題。現(xiàn)在是6頁\一共有85頁\編輯于星期五2.2數(shù)據(jù)類型概述整型基本整型int數(shù)據(jù)類型基本類型構(gòu)造類型指針類型*空類型void實型(浮點型)字符型char枚舉類型enum數(shù)組類型[]結(jié)構(gòu)體類型struct共用體類型union單精度實型float雙精度實型double短整型short長整型long無符號整型unsigned現(xiàn)在是7頁\一共有85頁\編輯于星期五基本數(shù)據(jù)類型

int整數(shù),在目前絕大多數(shù)機器上占4個字節(jié)。在VisualC++6.0中,int型占4個字節(jié)。float單精度浮點數(shù),一般是4個字節(jié)長double雙精度浮點數(shù),一般是8個字節(jié)長

char字符,一般是1個字節(jié)長用來表示256個ASCII字符,或者0~255的整數(shù)現(xiàn)在是8頁\一共有85頁\編輯于星期五數(shù)據(jù)類型修飾符shortshortint,短整數(shù),一般2個字節(jié)長。通常簡寫為shortlonglongint,長整數(shù),一般是4個字節(jié)長。通常簡寫為longlongdouble,長雙精度(高精度)浮點數(shù),一般是10個字節(jié)長。signed用來修飾char、int、short和long,說明他們是有符的整數(shù)(正整數(shù)、0和負整數(shù))。一般缺省都是有符號的,所以這個修飾符通常省略unsigned用來修飾char、int、short和long,說明他們是無符號的整數(shù)(正整數(shù)和0)現(xiàn)在是9頁\一共有85頁\編輯于星期五

2.3常量和變量

2.3.1常量2.3.2變量2.3.3變量命名規(guī)則

2.3.4變量的定義現(xiàn)在是10頁\一共有85頁\編輯于星期五2.3.1常量

常量是指直接用于程序中的、不能被程序修改的、固定不變的量。C語言中的常量值是用數(shù)值或字符串表示的。C語言常量包括整數(shù)、浮點數(shù)、字符、字符串四種類型。有時為了使用方便,可用一個符號名來代表一個常量,這稱為符號常量。符號常量一般定義格式如下:#define標識符常量數(shù)據(jù)例如:#definePI3.14159一旦某標識符定義成為一個常量后,以后在程序處理時,凡是碰到了該標識符,都將替換成對應(yīng)的常量?,F(xiàn)在是11頁\一共有85頁\編輯于星期五

2.3.2變量

變量是指C語言編程中合法的標識符,是用來存取某種類型值的存儲單元,其中存儲的值可以在程序執(zhí)行的過程中被改變。變量必須先定義后使用

現(xiàn)在是12頁\一共有85頁\編輯于星期五定義變量的一般形式為:

變量類型說明符變量列表[=初值]

①變量類型說明符,確定了變量的取值范圍以及對變量所能進行的操作規(guī)范②變量列表,由一個或多個變量名組成。當要定義多個變量時,各變量之間用逗號分隔。③初值是可選項,變量可以在定義的同時賦初值,也可以先定義,在后續(xù)程序中賦初值。現(xiàn)在是13頁\一共有85頁\編輯于星期五C語言中的變量名除了符合標識符的條件之外,還必須滿足下列約定:①變量名不能與關(guān)鍵字相同。②C語言對變量名區(qū)分大小寫。③變量名應(yīng)具有一定的含義,以增加程序的可讀性。例:charesc='a';

int

i=1;

intsum=0;

floateps=1.0e-5;現(xiàn)在是14頁\一共有85頁\編輯于星期五2.3.3變量命名規(guī)則

C語言的標識符的命名規(guī)則是:1.由字母或下劃線(_)開頭,同時由字母、0~9的數(shù)字或下劃線(_)組成。2.不能與關(guān)鍵詞同名。例如:school_id,_age,es10為合法的標識符。school-id,man*,2year,class為不合法的標識符。

標識符是用來標識對象名字(包括變量、函數(shù)、數(shù)組、類型等)的有效字符序列。構(gòu)造一個標識符的名字,需要按照一定的規(guī)則。標識符不宜過短,過短的標識符會導(dǎo)致程序的可讀性變差;但也不宜過長,否則將增加錄入工作量和出錯的可能性?,F(xiàn)在是15頁\一共有85頁\編輯于星期五關(guān)鍵字(32個)關(guān)鍵字在C語言中,有其特殊的含義,不能用作一般的標識符使用,即一般的標識符(變量名、類名、方法名等)不能與其同名。ANSIC關(guān)鍵詞autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile現(xiàn)在是16頁\一共有85頁\編輯于星期五2.3.4變量的定義C語言對變量強制定義的目的是:因為只有在定義了變量的類型后,系統(tǒng)才知道如何給變量分配存儲空間。如指定變量a為整型,在編譯時就能為其分配相應(yīng)的4個字節(jié)的存儲空間,并按整數(shù)方式存儲數(shù)據(jù)。指定一個變量屬于一個特定的類型,在編譯時,能根據(jù)該類型進行運算是否合法性的檢查?,F(xiàn)在是17頁\一共有85頁\編輯于星期五變量的具體定義形式inta,b,c;//表示定義了a,b,c三個整型變量,其初值是不確定的;inta=4,b=5,c=6;//表示定義了a,b,c三個整型變量并分別賦初值4,5,6;floata=3.5,b,c;//表示定義了a,b,c三個單精度型變量,其中只有a賦初值3.5;chara,b=’A’,c;//表示定義了a,b,c三個字符型變量,其中只有變量b賦初值’A’;現(xiàn)在是18頁\一共有85頁\編輯于星期五

2.4整數(shù)類型

2.4.1整型常量2.4.2整型變量現(xiàn)在是19頁\一共有85頁\編輯于星期五

2.4.1整型常量

整數(shù)常量是不帶小數(shù)的數(shù)值,用來表示正負數(shù)。例如0x55、0x55ff、1000000都是C語言的整數(shù)常量。整數(shù)常量的取值范圍是有限的,它的大小取決于此類整型數(shù)的類型,與所使用的進制形式無關(guān)。現(xiàn)在是20頁\一共有85頁\編輯于星期五整數(shù)常量三種形式:十進制、八進制、十六進制(1)十進制整數(shù)是由不以0開頭的0~9的數(shù)字組成的數(shù)據(jù)。(2)八進制整數(shù)是由以0開頭的0~7的數(shù)字組成的數(shù)據(jù)。(3)十六進制整數(shù)是由以0x或0X開頭的0~9的數(shù)字及A~F的字母組成的數(shù)據(jù)。例如:0,63,83是十進制數(shù),00,077,0123是八進制數(shù),0x0,0X53,0x53,0X3f,是十六進制數(shù)?,F(xiàn)在是21頁\一共有85頁\編輯于星期五

2.4.2整型變量

整型變量類型有short、int、long、unsigned四種說明符?,F(xiàn)在是22頁\一共有85頁\編輯于星期五數(shù)據(jù)在存儲器中的存儲形式inta=5;//表示定義了一個基本類型的int變量,VisualC++6.0的編譯系統(tǒng)為其分配4個字節(jié)的存儲空間,每個字節(jié)8位,共32位。數(shù)在內(nèi)存中是以二進制形式表示的,因此,整數(shù)5在內(nèi)存中的表示如下所示:00000000000000000000000000000101整數(shù)在存儲單元的存放形式是用其補碼(complement)的形式存放。現(xiàn)在是23頁\一共有85頁\編輯于星期五整數(shù)類型的取值范圍類型TurboC2.0VisualC++6.0寬度取值范圍寬度取值范圍[signed]int16-32768~3276732-2147483648~2147483647[unsigned]int160~65535320~4294967295[signed]short16-32768~3276716-32768~32767[unsigned]short160~65535160~65535long32-2147483648~214748364732-2147483648~2147483647[unsigned]long320~4294967295320~4294967295現(xiàn)在是24頁\一共有85頁\編輯于星期五

2.5實數(shù)類型

實數(shù)類型的數(shù)據(jù)即實型數(shù)據(jù),在C語言中實型數(shù)據(jù)又稱為浮點數(shù)。浮點數(shù)是帶有小數(shù)的十進制數(shù),可用十進制數(shù)形式或指數(shù)形式表示。C語言的浮點數(shù)常量在機器中有單精度和雙精度之分。單精度以32位形式存放,雙精度則以64位形式存放?,F(xiàn)在是25頁\一共有85頁\編輯于星期五2.5.1實型常量表示形式:(1)十進制數(shù)形式:十進制整數(shù)+小數(shù)點+十進制小數(shù)。(2)指數(shù)形式:十進制整數(shù)+小數(shù)點+十進制小數(shù)+E(或e)+正負號+指數(shù)。例如:

3.14159,0.567,9777.12是十進制數(shù)形式,1.234e5,4.90867e-2是指數(shù)形式?,F(xiàn)在是26頁\一共有85頁\編輯于星期五

2.5.2實型變量

(1)float類型float類型是一個位數(shù)為32位的單精度浮點數(shù)。它具有運行速度較快,占用空間較少的特點。(2)double類型double類型是一個位數(shù)為64位的雙精度浮點數(shù)。雙精度數(shù)在某些具有優(yōu)化和高速運算能力的現(xiàn)代處理機上運算比單精度數(shù)快。雙精度類型double比單精度類型float具有更高的精度和更大表示范圍,常常使用。現(xiàn)在是27頁\一共有85頁\編輯于星期五

2.6字符類型

計算機中,字符是按其代碼來存放的(ASCII碼),例如小寫字母’a’,其代碼為97,在存儲時,按整數(shù)97進行存取,只是它只占一個字節(jié)的存儲空間,因此字符型數(shù)據(jù)實際上是整數(shù)類型的一種。但是,字符數(shù)據(jù)在使用上有自己的特點,因此,將其作為一種數(shù)據(jù)類型來介紹?,F(xiàn)在是28頁\一共有85頁\編輯于星期五2.6.1字符型常量(1)用單引號括起來的一個字符;如:‘A’、‘1’、’?’等。(2)用單引號括起來的由反斜杠(\)引導(dǎo)的轉(zhuǎn)義字符。如:‘\n’、‘\t’、’\x41’、’\101’等?,F(xiàn)在是29頁\一共有85頁\編輯于星期五轉(zhuǎn)義字符表功能字符形式功能字符形式回車\r單引號\’換行\(zhòng)n雙引號\"水平制表\t八進制位模式\ddd退格\b十六進制模式\xdddd換頁\f反斜線\\現(xiàn)在是30頁\一共有85頁\編輯于星期五【例2.1】轉(zhuǎn)義字符的輸出#include<stdio.h>voidmain(){ charch; ch='\141'; printf("%c\n%c",ch,ch-32);}現(xiàn)在是31頁\一共有85頁\編輯于星期五

2.6.2字符型變量

字符型變量的類型說明符為char,它在機器中占8位,其范圍為0~255。注意:字符型變量只能存放一個字符,不能存放多個字符,例如:chara='am';這樣定義賦值是錯誤的?,F(xiàn)在是32頁\一共有85頁\編輯于星期五

字符串常量

用一對雙引號括起來的字符序列。注意:每個字符串的后面都有一個‘\0’結(jié)束符。

如:“SHANGHAI”,“AbcdeFGHijk”,“Howareyou”?!甛’‘√‘\\‘√‘’‘‘\‘‘a(chǎn)’與“a”的區(qū)別。注意現(xiàn)在是33頁\一共有85頁\編輯于星期五2.6.3字符數(shù)據(jù)在內(nèi)存中的存儲形式字符數(shù)據(jù)在內(nèi)存中是以其ASCII碼形式存取的。字符數(shù)據(jù)并不是直接將字符本身放到內(nèi)存單元的,而是將該字符的ASCII碼存放到內(nèi)存單元,如字符A的ASCII碼值為65;其內(nèi)存的具體存儲形式為:01000001

在一定條件下,字符型數(shù)據(jù)和整形數(shù)據(jù)是通用的。需注意的是,字符型數(shù)據(jù)只占一個字節(jié),只能存取0~255范圍內(nèi)的整數(shù)?,F(xiàn)在是34頁\一共有85頁\編輯于星期五【例2.2】字符數(shù)據(jù)的定義、賦值及存取#include<stdio.h>voidmain(){ chara,b;//定義ab兩個字符變量; inti,j;//定義ij兩個整形變量; a='A';//為字符變量a賦值'A'; i=66;//為整形變量i賦值65; b=i;//將整形變量i的值賦給字符變量b; j=a;//將字符變量a的值賦給整形變量j; printf("i=%d,j=%d,i=%c,j=%c\n",i,j,i,j); printf("a=%d,b=%d,a=%c,b=%c\n",a,b,a,b);}現(xiàn)在是35頁\一共有85頁\編輯于星期五字符數(shù)據(jù)注意事項字符型常量區(qū)分大小寫,'a'和'A'是兩個不同的字符常量;字符型常量只包含一個字符,如’ab’不是字符常量;'a'中,單撇號是定界符,而不屬于字符常量的一部分。注意字符’0’和數(shù)字0的區(qū)別。字符’0’表示輸出一個形狀為0的字符,保存字符’0’只占用內(nèi)存一個字節(jié),ASCII碼值為48。而數(shù)字0是以整數(shù)存儲方式存儲,如果定義它為前面所講的基本int型的話,它占用內(nèi)存4個字節(jié)來保存。請讀者仔細體會。如:printf(“%c”,’0’+’0’);printf(“%d”,0+0);上機試試,輸出結(jié)果分別是什么?現(xiàn)在是36頁\一共有85頁\編輯于星期五

2.7不同數(shù)據(jù)類型之間的轉(zhuǎn)換

不同類型的數(shù)據(jù)之間的運算稱為混合運算。在混合運算中,將會碰到類型轉(zhuǎn)換的情況。類型轉(zhuǎn)換可分為自動類型轉(zhuǎn)換、強制類型轉(zhuǎn)換兩種?,F(xiàn)在是37頁\一共有85頁\編輯于星期五

2.7.1自動類型轉(zhuǎn)換

轉(zhuǎn)換從低級到高級。各類型從低級到高級的順序為:char→int→long→float→double?,F(xiàn)在是38頁\一共有85頁\編輯于星期五例如:charch=’A’;inti=28;floatx=2.36;doubley=6.258e+6;若表達式為i+ch+x*y轉(zhuǎn)換過程:先將ch轉(zhuǎn)換成int型,計算i+ch,由于ch=’A’,而’A’的ASCⅡ碼值為65,故計算結(jié)果為93,類型為int型。再將x轉(zhuǎn)換成double型,計算x*y,結(jié)果為double類型。最后將i+ch的值93轉(zhuǎn)換成double型,表達式的值最后為double類型?,F(xiàn)在是39頁\一共有85頁\編輯于星期五

2.7.2強制類型轉(zhuǎn)換

高級數(shù)據(jù)要轉(zhuǎn)換成低級數(shù)據(jù),需用使用強制類型轉(zhuǎn)換。這種使用可能會導(dǎo)致溢出或精度的下降,最好不要使用。強制類型轉(zhuǎn)換的格式為:(type)變量;其中:type為要轉(zhuǎn)換成的變量類型。例如:(int)(a+b)(強制將a+b的值轉(zhuǎn)換成整型)現(xiàn)在是40頁\一共有85頁\編輯于星期五【例2.3】數(shù)據(jù)類型轉(zhuǎn)換的例子#include<stdio.h>voidmain(){floatx;inti;x=3.5;i=(int)x;printf("x=%f",x);printf("i=%d",i);}運行結(jié)果為:x=3.500000i=3現(xiàn)在是41頁\一共有85頁\編輯于星期五數(shù)據(jù)類型轉(zhuǎn)換注意事項注意總結(jié)不同類型的數(shù)據(jù)之間賦值的規(guī)律:對于整型數(shù)據(jù)(含字符型)之間的賦值是按內(nèi)存單元的存儲形式直接傳送,實型數(shù)據(jù)之間以及整數(shù)與實數(shù)之間是先轉(zhuǎn)換后賦值。注意在類型轉(zhuǎn)換過程中出現(xiàn)的錯誤,如:inta=32767;shortb=a+1;上機運行可以發(fā)現(xiàn),得到b的結(jié)果不是32768,因為它超出了短整型數(shù)的表示范圍?,F(xiàn)在是42頁\一共有85頁\編輯于星期五2.8運算符與表達式

數(shù)據(jù)是需要用來加工的,如對數(shù)據(jù)的加減乘除運算,大小比較等等,這些都是編寫程序必須的,否則程序就沒有意義了。為解決這個問題,C語言提供了豐富的運算符,使得C的運算十分靈活方便?,F(xiàn)在是43頁\一共有85頁\編輯于星期五

2.8運算符與表達式

2.8.1算術(shù)運算符與算術(shù)表達式2.8.2賦值運算符與賦值表達式2.8.3關(guān)系運算符與關(guān)系表達式2.8.4邏輯運算符與邏輯表達式2.8.5條件運算符與條件表達式2.8.6逗號運算符與逗號表達式現(xiàn)在是44頁\一共有85頁\編輯于星期五2.8.1算術(shù)運算符與算術(shù)表達式算術(shù)運算符用于算術(shù)運算,其操作數(shù)為數(shù)字類型或字符類型。算術(shù)運算符表運算符名稱使用方式說明+加a+ba加b-減a-ba減b*乘a*ba乘b/除a/ba除b%取模a%ba取模b(返回除數(shù)的余數(shù))++自增++a,a++自增--自減--a,a--自減現(xiàn)在是45頁\一共有85頁\編輯于星期五例:合法的C語言算術(shù)表達式。

a*b/c-1.5+’a’+fabs(-5)

fabs(-5)是求-5的絕對值的庫函數(shù)?!?+”、“--”

前綴方式是先將操作數(shù)加(或減)1,再將操作數(shù)的值作為算術(shù)表達式的值;后綴方式是先將操作數(shù)的值作為算術(shù)表達式的值,再將其加(或減)1?,F(xiàn)在是46頁\一共有85頁\編輯于星期五例如:a的值為5,

++a為前綴方式,首先將a的值加1,再得到表達式的值為6;

a++為后綴方式,首先得到表達式的值為5,再將a的值加1。自增運算符和自減運算符運算對象只能是變量,不能是常量或表達式。形式3++或++(i+j)都是非法的表達式?,F(xiàn)在是47頁\一共有85頁\編輯于星期五算術(shù)運算符使用說明運算符“/”有以下規(guī)定:兩個整數(shù)相除的結(jié)果為整數(shù),如4/3的結(jié)果值為1,舍去小數(shù)部分。運算符“%”,稱之為取模,也就是通常所說的求余數(shù),其兩個操作數(shù)都必須為整數(shù),如“5%3=2”。前面的運算符稱為雙目運算符,所謂雙目就是有兩個操作數(shù),僅有一個操作數(shù)的運算符稱為單目運算符。現(xiàn)在是48頁\一共有85頁\編輯于星期五算術(shù)運算符使用說明

單目算術(shù)運算符“++”、“--”的前綴與后綴方式,對操作數(shù)本身的值的影響是相同的,但其對表達式的值的影響是不同的。前綴方式是先將操作數(shù)加(或減)1,再將操作數(shù)的值作為算術(shù)表達式的值;后綴方式是先將操作數(shù)的值作為算術(shù)表達式的值,再將其加(或減)1。(設(shè)a=5)(1)b=++a為前綴方式,結(jié)果為b=6,a=6;(2)b=a++為后綴方式,結(jié)果為b=5,a=6?,F(xiàn)在是49頁\一共有85頁\編輯于星期五運算符的優(yōu)先級和結(jié)合性為什么要規(guī)定運算符的優(yōu)先級和結(jié)合性?

如:有合法的C語言表達式:a*b-1.5/c但上面的表達式C語言的編譯系統(tǒng)怎樣來解釋?是按((a*b)-(1.5/c))還是(((a*b)-1.5)/c)來計算?現(xiàn)在是50頁\一共有85頁\編輯于星期五僅有運算符,表達式的解析會出現(xiàn)二義性,為避免表達式計算的二義性,C++語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。

算術(shù)運算符的優(yōu)先級是:(1)++、--優(yōu)先級最高(2)然后是*、/、%(3)最后是+-。算術(shù)運算符的結(jié)合性是:“自左至右的結(jié)合方向”又稱“左結(jié)合性”,即運算對象先與左面的運算符優(yōu)先結(jié)合?,F(xiàn)在是51頁\一共有85頁\編輯于星期五表達式a-b*c,b的左側(cè)為減號,右側(cè)為乘號,而乘號優(yōu)先于減號,等價于a-(b*c)。如果在一個運算對象兩側(cè)的運算符的優(yōu)先級別相同,如a-b+c,則按規(guī)定的“結(jié)合方向”處理,等價于(a-b)+c。顯然,表達式a*b-1.5/c是按((a*b)-(1.5/c))來處理,這樣就避免了二義性的問題?,F(xiàn)在是52頁\一共有85頁\編輯于星期五

2.8.2賦值運算符與賦值表達式

賦值運算符“=”就是把右邊操作數(shù)的值賦給左邊操作數(shù)。賦值運算符左邊操作數(shù)必須是一個變量,右邊操作數(shù)可以是常量、變量、表達式。例如:表達式b=a+3在賦值運算符兩邊的操作數(shù)的數(shù)據(jù)類型如果一致,就直接將右邊的數(shù)據(jù)賦給左邊;如果不一致,就需要進行數(shù)據(jù)類型自動或強制轉(zhuǎn)換,將右邊的數(shù)據(jù)類型轉(zhuǎn)換成左邊的數(shù)據(jù)類型后,再將右邊的數(shù)據(jù)賦給左邊變量?,F(xiàn)在是53頁\一共有85頁\編輯于星期五復(fù)合運算符運算符名稱使用方式說明+=相加賦值a+=b加并賦值,a=a+b-=相減賦值a-=b減并賦值,a=a-b*=相乘賦值a*=b乘并賦值,a=a*b/=相除賦值a/=b除并賦值,a=a/b%=取模賦值a%=b取模并賦值,a=a%b練習:設(shè)a=12,計算表達式a+=a-=a*12和a+=a-=a*=12的值現(xiàn)在是54頁\一共有85頁\編輯于星期五賦值表達式分析

a=b=c=9正確(賦值表達式值為9,a,b,c值均為9)

a=18+(c=27)正確(表達式值為45,a值為45,c值為27)

(a*b)=c=9錯誤(a*b)不是左值a+=a-=a*a正確,假設(shè)a的初值為5,表達式值為-40,a的最終值為-40現(xiàn)在是55頁\一共有85頁\編輯于星期五賦值運算符的優(yōu)先級和結(jié)合性

賦值運算符“=”及復(fù)合賦值運算符的優(yōu)先級為同一級別,結(jié)合方向為“自右向左”現(xiàn)在是56頁\一共有85頁\編輯于星期五

2.8.3關(guān)系運算符與關(guān)系表達式

關(guān)系運算符用來對兩個操作數(shù)進行比較。關(guān)系表達式就是用關(guān)系運算符將兩個表達式連接起來的式子,其運算結(jié)果為布爾邏輯值。如果關(guān)系表達式成立結(jié)果為真(true),否則為假(false)。由于C語言沒有邏輯型數(shù)據(jù),就用1代表“真”,0代表“假”?,F(xiàn)在是57頁\一共有85頁\編輯于星期五關(guān)系運算符運算符名稱使用方法說明==等于A==b如果a等于b返回真,否則為假!=不等于A!=b如果a不等于b返回真,否則為假>大于A>b如果a大于b返回真,否則為假<小于A<b如果a小于b返回真,否則為假<=小于或等于A<=b如果a小于或等于b返回真,否則為假>=大于或等于a>=b如果a大于或等于b返回真,否則為假現(xiàn)在是58頁\一共有85頁\編輯于星期五關(guān)系運算符的優(yōu)先級和結(jié)合性(1)“<”、“<=”、“>”和“>=”為同一級,“==”和“!=”為同一級。前者優(yōu)先級高于后者。(2)關(guān)系運算符優(yōu)先級低于算術(shù)運算符,高于賦值運算符和逗號運算符。(3)關(guān)系運算符的結(jié)合性為自左向右?,F(xiàn)在是59頁\一共有85頁\編輯于星期五【例2.4】關(guān)系表達式的運用#include<stdio.h>voidmain(){charch=’w’;inta=2,b=3,c=1,d,x=10;printf(“%d”,a>b==c);printf(“%d”,d=a>b);printf(“%d”,ch>’a’+1);printf(“%d”,d=a+b>c);printf(“%d”,b-1==a!=c);printf(“%d\n”,3<=x<=5);}運行結(jié)果為001101程序輸出了6個表達式的值,其中有兩個是賦值表達式,請讀者根據(jù)運算符的優(yōu)先級作出判斷?,F(xiàn)在是60頁\一共有85頁\編輯于星期五關(guān)系表達式注意事項關(guān)系表達式3<=x<=5等價于關(guān)系表達式(3<=x)<=5當x=10時,3<=x的值是1,再計算1<=5,得到1。其實,無論x去何值,關(guān)系表達式3<=x的值不是1就是0,都小于5,即3<=x<=5的值恒為1。由此看出關(guān)系表達式3<=x<=5無法正確表示數(shù)學上的代數(shù)式3≤x≤5?,F(xiàn)在是61頁\一共有85頁\編輯于星期五關(guān)系表達式注意事項b=a;這是一個賦值表達式,將變量a的內(nèi)容賦值給變量b;最終變量b單元的內(nèi)容被變量a單元的內(nèi)容覆蓋。b==a;這個一個關(guān)系表達式,一般用在程序的條件判斷中。如if(b==a),判斷變量a和變量b單元的內(nèi)容是否相等,如相等,此條件表達式的結(jié)果為1,否則為0。最終變量b單元的內(nèi)容和變量a單元的內(nèi)容保持各自原值,變量b單元的內(nèi)容不會被變量a單元的內(nèi)容覆蓋現(xiàn)在是62頁\一共有85頁\編輯于星期五2.8.4邏輯運算符與邏輯表達式C語言如何表示數(shù)學上的(3≤x≤5)?某城市規(guī)定,去公園可免門票的條件為:年齡10歲以下(含10歲)的兒童或者年齡70歲以上(含70歲)的老人。C語言如何表示這個條件?現(xiàn)在是63頁\一共有85頁\編輯于星期五

2.8.4邏輯運算符與邏輯表達式

邏輯運算符用來對關(guān)系表達式進行運算。邏輯表達式就是用邏輯運算符將關(guān)系表達式連接起來的式子,其運算結(jié)果為布爾邏輯值。邏輯運算符運算符名稱&&邏輯與||邏輯或!邏輯非現(xiàn)在是64頁\一共有85頁\編輯于星期五與、或、非運算規(guī)則表達式A表達式BA&&BA||B!A假假假假真假真假真真真假假真假真真真真假現(xiàn)在是65頁\一共有85頁\編輯于星期五邏輯運算符的優(yōu)先次序(1)!→&&→||(2)!高于算術(shù)運算符,&&、||低于關(guān)系運算符。例如:a||b&&c等價于a||(b&&c)。!a&&b等價于(!A)&&b。!x==2等價于(!x)==2。a||3*8&&2等價于a||((3*8)&&2)?,F(xiàn)在是66頁\一共有85頁\編輯于星期五【例2.5】邏輯表達式的運用#include<stdio.h>voidmain(){inta=2,b=0,c=0;printf(“%d”,a&&b);printf(“%d”,a||b&&c);printf(“%d”,!a&&b);printf(“%d”,a||3+10&&2);}運行結(jié)果為0101現(xiàn)在是67頁\一共有85頁\編輯于星期五邏輯表達式的求解規(guī)則求解C語言邏輯表達式時,按從左到右的順序計算運算符兩側(cè)的操作數(shù),一旦得到表達式的結(jié)果,就停止計算。求解邏輯表達式exp1&&exp2時,先計算exp1,若其值為0,則exp1&&exp2值一定為0。此時,沒有必要計算exp2的值。例2.5中,計算表達式!a&&b時,先算!a,由于a的值是2,!a就是0,該邏輯表達式的值一定是0,不必再計算b?,F(xiàn)在是68頁\一共有85頁\編輯于星期五邏輯表達式的求解規(guī)則求解邏輯表達式exp1||exp2時,先計算exp1,若其值為非0,則exp1||exp2值一定為1。此時,沒有必要計算exp2的值。例2.3中,計算表達式a||3+10&&2時,先算a,由于a的值是2,該邏輯表達式的值一定是1,不必再計算3+10&&2。通常,關(guān)系運算符和邏輯運算符在一起使用,用于流程控制語句的判斷條件?,F(xiàn)在是69頁\一共有85頁\編輯于星期五邏輯運算符應(yīng)用實例如何表示數(shù)學上的(3≤x≤5)?用一個邏輯運算符&&就可以解決問題了:(x>=3)&&(x<=5)。用一個邏輯運算符&&來連接兩個關(guān)系表達式,表示這兩個條件必須同時為真,表達式的值才為真。如何表示去公園可免門票的條件?用一個邏輯運算符||就可以解決問題了:(age<=10)||(age>=70)。用一個邏輯運算符||來連接兩個關(guān)系表達式,表示這兩個條件只要有一個為真,整個表達式的結(jié)果為真?,F(xiàn)在是70頁\一共有85頁\編輯于星期五

2.7.5條件運算符與條件表達式

條件運算符是一個三目運算符。一般形式為:

表達式1?表達式2:表達式3其中表達式1是一個關(guān)系表達式或邏輯表達式。執(zhí)行過程:先求解表達式1的值,若表達式1的值為真,則求解表達式2的值,且作為整個條件表達式的結(jié)果;若表達式1的值為假,則求解表達式3的值,且作為整個條件表達式的結(jié)果?,F(xiàn)在是71頁\一共有85頁\編輯于星期五賦值表達式

max=(a>b)?a:b執(zhí)行結(jié)果就是將條件表達式的值賦給max,也就是將a和b二者中大者賦給max。條件運算符的優(yōu)先級較低,只比賦值運算符高。它的結(jié)合方向是自右向左。例如:①(a>b)?a:b+1

等價于a>b?a:(b+1)。②a>b?a:c>d?c:d

等價于a>b?a:(c>d?c:d)?,F(xiàn)在是72頁\一共有85頁\編輯于星期五

2.7.6逗號運算符與逗號表達式

逗號表達式的一般形式為

表達式1,表達式2逗號表達式的求解過程是:先求解表達式1,再求解表達式2。整個逗號表達式的值是表達式2的值。例如:x=(y=6,y*3)首先將6賦給y,然后執(zhí)行y*3的運算,將整個結(jié)果賦給x?,F(xiàn)在是73頁\一共有85頁\編輯于星期五一個逗號表達式又可以與另一個逗號表達式組成一個新的逗號表達式,例如:(a=3*5,a+4),a+5先計算出a的值為3*5,等于15,再進行a*4的運算為60,再進行a+5的運算得20,即整個表達式的值為20?,F(xiàn)在是74頁\一共有85頁\編輯于星期五逗號表達式的一般形式可以擴展為:

表達式1,表達式2,表達式3,…,表達式n它的值為表達式n的值。現(xiàn)在是75頁\一共有85頁\編輯于星期五2.9運算符與表達式的綜合練習前面學習了6種類型運算符和表達式,學習運算符和表達式的目的重在應(yīng)用,能夠根據(jù)實際問題的需求寫出對應(yīng)的表達式,或者能夠正確的將數(shù)學表達式轉(zhuǎn)換為C表達式,這是學習C語言編程的第一步?,F(xiàn)在是76頁\一共有85頁\編輯于星期五【例2.6】判斷是否為閏年的條件是:能被4整除且不能被100整除或者是能被400整除,寫出符合上述條件的表達式(定義變量intyear表示年)。問題分析:(1)首先,從整體來看,這個判斷條件由兩部分組成,兩個條件之間是一個或的關(guān)系,用運算符邏輯||來連接這兩個條件;(2)其次,條件1“能被4整除且不能被100整除”這又是一個復(fù)合條件,兩個條件之間是且(邏輯與)的關(guān)系,由“&&”運算符來連接兩個表達式:year%4==0&&year%100!=0;(3)完整的表達式是:

(year%4==0&&year%100!=0)||(year%400==0);現(xiàn)在是77頁\一共有85頁\編輯于星期五【例2.7】寫出判斷輸入字符是否為字母的表達式(定義變量charch表示所輸入的字符)。問題分析:(1)ch為大寫字母的條件是ch>=’A’&&ch<=’Z’;(2)ch為小寫字母的條件是ch>=’a’&&ch<=’z’;(3)顯然,ch滿足條件1或條件2都符合本題的要求,二者是或的關(guān)系,完整的表達式為:

(ch>=’A’&&ch<=’Z’)||(ch>=’a’&&ch<=’z’)?,F(xiàn)在是78頁\一共有85頁\編輯于星期五【例2.8】求3個數(shù)中最大的數(shù)#include<stdio.h>voidmain(){inta=2,b=200,c=-8;intmax;max=(a>b)?a:b;max=(max>c)?max:c;

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論