C語言程序設計項目化教程課件第2章_第1頁
C語言程序設計項目化教程課件第2章_第2頁
C語言程序設計項目化教程課件第2章_第3頁
C語言程序設計項目化教程課件第2章_第4頁
C語言程序設計項目化教程課件第2章_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章

數(shù)據(jù)類型、運算符和表達式2.1任務一項目中數(shù)據(jù)類型的定義2.2理論知識2.2.1C語言的基本數(shù)據(jù)類型2.2.2常量和變量2.2.3運算符和表達式2.2.4數(shù)據(jù)類型轉換2.3知識擴展2.3.1數(shù)值在計算機中的表示2.3.2位運算2.4本章小結§2.1任務一項目中數(shù)據(jù)類型的定義

一、任務描述實現(xiàn)簡易計算器項目中數(shù)據(jù)類型的定義。二、任務涉及知識要點

該任務涉及到數(shù)據(jù)類型、常量和變量、運算符和表達式等知識點?!?.1任務一項目中數(shù)據(jù)類型的定義

三、任務分析(任務分析和實現(xiàn)可在學習完變量之后再講解)根據(jù)項目功能描述,需要定義四個變量。(1)變量data1和data2用于存放參與運算的兩個操作數(shù),數(shù)據(jù)類型為實型(float)。(2)變量choose用于存放用戶輸入的菜單選項,因為主菜單的選項為0

4之間的數(shù)字,所以數(shù)據(jù)類型可用整型(int)或字符型(char)。該任務選用的是整型。(3)變量yes_no用于存放是否繼續(xù)的應答。因為其中將存放用戶輸入的字符“y”,“Y”或其他字符,所以數(shù)據(jù)類型選用字符型?!?.1任務一項目中數(shù)據(jù)類型的定義

四、任務實現(xiàn)項目中所用數(shù)據(jù)類型的定義及其意義如下。main(){floatdata1,data2;//存放參與運算的兩個操作數(shù)

intchoose;//存放用戶輸入的菜單選項

charyes_no;//存放是否繼續(xù)的應答

…}相關理論知識—C語言的基本數(shù)據(jù)類型一、整數(shù)類型數(shù)據(jù)類型數(shù)據(jù)類型符占用字節(jié)數(shù)取值范圍基本整型int2-32768~32767短整型short[int]2-32768~32767長整型long[int]4-215~(215-1)無符號整型unsigned[int]20~65535無符號短整型unsignedshort[int]20~65535無符號長整型unsignedlong[int]40~(232-1)相關理論知識—C語言的基本數(shù)據(jù)類型二、實數(shù)類型數(shù)據(jù)類型數(shù)據(jù)類型符占用字節(jié)數(shù)有效數(shù)字取值范圍單精度float47位-3.4×1038~3.4×1038雙精度double816位-1.7×10308~1.7×10308

三、字符類型數(shù)據(jù)類型數(shù)據(jù)類型符占用字節(jié)數(shù)取值范圍字符型char10~255

相關理論知識—常量和變量一、常量在程序執(zhí)行過程中,其值不能改變的量稱為常量。

1.整型常量表達方式意義十進制值123十進制1230123(數(shù)字字符0開頭)八進制830x123(0x開頭)十六進制291相關理論知識—常量和變量2.實型常量(1)十進制形式由數(shù)字和小數(shù)點組成,如3.141。(2)指數(shù)形式又稱科學記數(shù)法,由小數(shù)和指數(shù)兩部分組成,指數(shù)部分的底數(shù)用字母e或E表示,如123.45e2和123.45E2都表示123.45×102。注意:在使用指數(shù)形式時,一定要注意在字母e或E之前必須要有數(shù)字,且字母e或E之后的指數(shù)必須為整數(shù)。如e6、.e5、-2.4E0.5、5.2e(3+6)等都是不合法的指數(shù)形式。相關理論知識—常量和變量3.字符常量(1)普通字符字符常量是用一對單引號括起來的單個字符,如'A'、'5'、'+'等。(2)轉義字符以"\"開頭的字符序列,稱為“轉義序列”,“\”使其后面的字符變?yōu)榱硗獾囊饬x。見下表。相關理論知識—常量和變量字符形式功能\n換行符\t橫向跳格:跳到下一個輸出區(qū)(8個字符)\v豎向跳格\b退格\r回車(回到本行起始字符位置)\f走紙換頁\\反斜杠字符\\'單引號(撇號)'\ddd1~3位八進制數(shù)所代表的字符。如\101表示'A'\xhh1~2位十六進制數(shù)所代表的字符。如\x41表示'A'相關理論知識—常量和變量4.字符串常量字符串常量是用一對雙引號括起來的零個或多個字符,其中雙引號僅起定界作用,本身并不是字符串中的內容。如“”、“Helloworld”、“123”等。字符常量與字符串常量的主要區(qū)別是:①定界符不同:字符常量使用單引號,而字符串常量使用雙引號。②長度不同:字符常量只能是單個字符,字符串常量則可以包含一個或多個字符。③占用內存大小不同:字符常量占一個字節(jié),而字符串常量除了要存儲有效的字符外,還要存儲一個結束標志'\0'。相關理論知識—常量和變量5.符號常量符號常量是指用符號表示的常量。符號常量在使用之前必須先定義。其定義的一般格式為:#define標識符常量其中標識符是以字母或下劃線開頭,并且只能是由字母、數(shù)字和下劃線組成的字符序列。標識符通常作為變量、符號常量、函數(shù)及用戶定義對象的名稱。其有效長度為1至32個字符,但為了便于程序閱讀,建議不超過8個字符。相關理論知識—常量和變量【例2.1】符號常量的使用。#definePI3.1416926//定義符號常量PI,表示圓周率main(){ floatr,area;//定義變量r表示圓的半徑,area表示圓的面積

r=5.0;area=PI*r*r;printf("area=%f\n",area);}程序運行結果如下:area=78.542315作用:1、修改程序方便2、見名知意相關理論知識—常量和變量二、變量變量是指在程序執(zhí)行過程中其值可以被改變的量。在使用變量之前,必須先對其進行定義。1.變量定義變量定義的格式是:類型說明符變量1,變量2,…,變量n;例如:intyear,month,day;charch;floatr,area;相關理論知識—常量和變量2.變量賦初值(1)在定義變量時賦值。例如:floatdata1=1.5,data2=2.6;intchoose=1;charyes_no='y';(2)先定義后賦值。例如:floatdata1,data2;//變量定義部分data1=1.5;data2=2.6;//變量賦初值使用變量時需要注意:在C語言中,變量定義不是可執(zhí)行語句,必須出現(xiàn)在可執(zhí)行語句之前。同一變量只能定義一次,不能重復。變量名不能是C語言的關鍵字,要見名知意,并盡可能簡短。變量的類型應該根據(jù)變量的取值范圍來選擇,以占用內存少,操作簡便為優(yōu)。C語言沒有提供字符串類型,字符串是用字符數(shù)組或指針來處理的。相關理論知識—運算符和表達式一、算術運算符及其表達式算術表達式也稱為數(shù)值型表達式,由算術運算符、數(shù)值型常量、變量、函數(shù)和圓括號組成,其運算結果為數(shù)值。算術運算符分為單目運算符和雙目運算符。1、雙目運算符需要兩個操作數(shù)參與,得出一個結果。 有+、-、*、/、%五種。(1)除運算

10/3=310.0/3=3.333333-5/3=-1“向零取整”原則(2)取余運算

5%2=1算術表達式在書寫時跟數(shù)學公式有差異,例如b2-4ac應寫為b*b-4*a*c的形式。2、單目運算符可以和一個變量構成一個表達式;常見的有自增++、自減--。自增使單個變量的值增1,自減使單個變量的值減1。有兩種用法。相關理論知識—運算符和表達式(1)前置運算:先增減,后運算。 例:inti=3,j; j=++i;結果i=4,j=4 j=--I;結果i=2,j=2(2)后置運算:先運算,后增減。 例:inti=3,j; j=i++;結果i=4,j=3 j=i--;結果i=2,j=3相關理論知識—運算符和表達式++i;/*在使用i之前使i加1*/--i;/*在使用i之前使i減1*/i++;/*在使用i之后使i加1*/i--;/*在使用i之后使i減1*/相關理論知識—運算符和表達式注意:(1)++和--只能用于變量,不能用于常量和表達式。例:5++;(a+b)++;#defineONE1;ONE++;相關理論知識—運算符和表達式有關表達式使用中的問題說明1.在表達式中使用++或--,容易出錯。

i=3;k=(i++)+(i++)+(i++)k值等于9。i++:先使用i,再加1。

執(zhí)行后:k=3+3+3=9。

i=6。k=(++i)+(++i)+(++i)k值等于18。++i:先加1,再使用i。連續(xù)3次使i加1后,i的值等于6.k=6+6+6=18;2.調用函數(shù)時,實際參數(shù)的處理順序是從右到左(稱為C調用約定。)例:i=3;printf("%d,%d",i,i++);先右:i++,先使用i(3),再使i加1。后左:i(現(xiàn)在值為4)。因此,輸出結果:4,3有關表達式使用中的問題說明二、賦值運算符及其表達式1.簡單賦值運算符:=作用:將一個表達式的值賦給變量。一般形式:<變量><賦值運算符><表達式>例a=3;/*常數(shù)3賦給變量a。常數(shù)是特殊的表達式*/a=b+c+1;相關理論知識—運算符和表達式復合賦值運算符例子語句等價語句+=a+=3;a=a+3;*=x*=y+8;x=x*(y+8)%=x%=3;x=x%3;2.復合賦值運算符:相關理論知識—運算符和表達式三、關系運算符及其表達式關系運算符用于比較兩個操作數(shù)之間的關系,若成立,返回一個邏輯真值,否則,返回一個邏輯假值。用“1”表示邏輯真值,“0”表示邏輯假值。在判斷一個量是否為真時,0表示假,非0表示真。關系運算符六種:>、<、>=、<=、==、!=屬于雙目運算符,前四種的優(yōu)先級高于后兩種。==與=的區(qū)別。常用表達式i%2==0判斷i的奇偶性。相關理論知識—運算符和表達式四、邏輯運算符及其表達式邏輯表達式是用邏輯運算符將一個或多個表達式連接起來的式子。返回值也是邏輯真或邏輯假。三種:!&&||

(1)?。?)&&

(3)||

例:choose>=1&&choose<=4來判斷輸入是否在1~4之間。

P20:注意。相關理論知識—運算符和表達式五、條件運算符及其表達式?:三元運算符,唯一一個表達式1?表達式2:表達式3

如果1的值非0,運算結果為表達式2的值。否則,結果為表達式3的值。例:min=(a<b)?a:b

若a<b,min=a;若a>b,min=b.

優(yōu)先級較低,僅高于賦值和逗號運算符,方向是從右向左結合。相關理論知識—運算符和表達式六、逗號運算符及其表達式由逗號把若干個表達式連接起來的式子,成為逗號表達式,優(yōu)先級最低。表達式1,表達式2,…表達式n

求解過程是自左至右一次計算各表達式的值,表達式n的值即為整個逗號表達式的值。例,已知長方體的長寬高,求體積。

a=3,b=4,c=5,v=a*b*c

則整個逗號表達式的值為60.相關理論知識—運算符和表達式相關理論知識—運算符和表達式七、sizeof運算符單目運算符,返回變量,常量或類型在內存中占有的字節(jié)數(shù)。一般形式:sizeof(類型名或表達式)例:

sizeof(int)//獲取整型數(shù)據(jù)所占內存空間的字節(jié)數(shù),值為2sizeof(float)//值為4sizeof(“Hello”)//值為6

同一種數(shù)據(jù)類型在不同的編譯系統(tǒng)中所占空間不一定相同。例如,在基于16位的編譯系統(tǒng)中(如TurboC2.0),int型數(shù)據(jù)占用2個字節(jié),但在基于32位的編譯系統(tǒng)中(如VC++6.0),int型數(shù)據(jù)要占用4個字節(jié)。因此為了便于移植程序,最好用sizeof運算符計算數(shù)據(jù)類型長度。相關理論知識—運算符和表達式相關理論知識—數(shù)據(jù)類型轉換

不同類型的數(shù)據(jù)進行混合運算時,必須先轉換成同一類型,然后再進行運算。數(shù)據(jù)類型轉換分為自動類型轉換和強制類型轉換。一、自動類型轉換自動類型轉換又稱隱式類型轉換,是由系統(tǒng)按類型轉換規(guī)則自動完成的。其轉換規(guī)則如圖2-2所示。相關理論知識—數(shù)據(jù)類型轉換(1)橫向向左的箭頭,表示無條件的轉換。如char和short型無條件自動轉換成int型,float型則無條件自動轉換成double型。(2)縱向向上的箭頭,表示不同類型的轉換方向。如int型與double型數(shù)據(jù)進行運算,先將int型數(shù)據(jù)轉換成double型,然后在兩個同類型數(shù)據(jù)間進行運算,其結果為double型相關理論知識—數(shù)據(jù)類型轉換

總之,如果兩個操作對象有一個是float型或double型,則另一個要先轉換為double型,運算結果為double型;如果參加運算的兩個數(shù)據(jù)中最高級別為long,則另一個數(shù)據(jù)先轉換成long型,運算結果為long型。不要理解為什么類型的運算都轉換成double型,也不要理解為轉換是一級一級完成的。如int轉換成double的過程,不是int->unsigned->long->double,而是直接將int型轉成double型。相關理論知識—數(shù)據(jù)類型轉換相關理論知識—強制類型轉換

強制類型轉換又稱顯式類型轉換,是由程序員在程序中用類型轉換運算符明確指明的轉換操作。通常,當使用隱式類型轉換不能滿足要求時,就需要在程序中用強制類型轉換。其一般形式為:(類型名)(表達式)功能:把表達式結果的類型轉換為第一個圓括號中的數(shù)據(jù)類型。當被轉換的表達式是一個簡單表達式時,其外面的一對原括號可以省略。例如:(double)a//將變量a的值轉換成double型,等價于(double)(a)(int)(x+y)//將x+y的結果轉換成int型(float)5/2//將5轉換成實型后除以2,等價于(float)(5)/2,結果為2.5(float)(5/2)//將5整除2的結果轉換成實型,結果為2.0注意:無論是自動數(shù)據(jù)類型轉換還是強制數(shù)據(jù)類型轉換都是臨時性的,它們都不能改變各個變量原有的數(shù)據(jù)類型和取值的大小。相關理論知識—強制類型轉換知識擴展數(shù)值在計算機中的表示1.二進制位與字節(jié)計算機系統(tǒng)的內存儲器由許多稱為字節(jié)的單元組成,1個字節(jié)由8個二進制位(bit)構成,每位的取值為0或1。最右端的1位稱為“最低位”,最左端的1位稱為“最高位”,一般用1字節(jié),2字節(jié),4字節(jié),8字節(jié)表示一個信息。例如,用1字節(jié)表示一個英文字符,2字節(jié)表示一個漢字字符,4字節(jié)表示一個實數(shù)。2.數(shù)值的原碼表示數(shù)值的原碼表示是指將最高位用作符號位(0表示正數(shù),1表示負數(shù)),其余各位代表數(shù)值本身的絕對值(以二進制形式表示)的表示形式。為了便于描述,本節(jié)和下一節(jié)約定用1個字節(jié)表示1個整數(shù)。例如,十進制數(shù)+9的原碼是00001001∟符號位上的0表示正數(shù)十進制數(shù)-9的原碼是10001001∟符號位上的1表示負數(shù)知識擴展3.數(shù)值的反碼表示數(shù)值的反碼表示分兩種情況:(1)正數(shù)的反碼:與原碼相同。例如,+9的反碼是00001001。(2)負數(shù)的反碼:符號位為1,其余各位為該數(shù)絕對值的原碼按位取反(1變?yōu)?、0變?yōu)?)。例如,-9的反碼是11110110。知識擴展4.數(shù)值的補碼表示數(shù)值的補碼表示分兩種情況:(1)正數(shù)的補碼:與原碼相同。例如,+9的補碼是00001001。(2)負數(shù)的補碼:符號位為1,其余位為該數(shù)絕對值的原碼按位取反,然后整個數(shù)加1。例如,-9的補碼:因為是負數(shù),則符號位為“1”;其余7位為-9的絕對值+9的原碼0001001按位取反為1110110;再加1,所以-9的補碼是11110111。知識擴展5.由補碼求原碼的操作(1)如果補碼的符號位為“0”,表示是一個正數(shù),所以補碼就是該數(shù)的原碼。(2)如果補碼的符號位為“1”,表示是一個負數(shù),求原碼的操作是:符號位不變,其余各位取反,然后再整個數(shù)加1。例如,已知一個補碼為11110111,則原碼是10001001(-9)。因為符號位為“1”,表示是一個負數(shù),所以該位不變,仍為“1”;其余7位1110111取反后為0001000;再加1,包括符號位,就是10001001。知識擴展在計算機系統(tǒng)中,數(shù)值通常用補碼表示(存儲),原因在于:使用補碼,可以將符號位和其他位統(tǒng)一處理;同時,減法也可按加法來處理。另外,兩個用補碼表示的數(shù)相加時,如果最高位(符號位)有進位,則進位被舍棄知識擴展知識擴展――位運算位運算是指進行二進制位的運算,可以對操作數(shù)以二進制位為單位進行數(shù)據(jù)處理。位運算經(jīng)常應用于設備驅動程序以及檢測和控制領域中。例如,在調制解調器驅動程序中用于屏蔽某些位,實現(xiàn)奇偶校驗等。位運算要求參與運算的操作數(shù)必須是整型或字符型的數(shù)據(jù),而不允許為實型或結構體類型的數(shù)據(jù)。C語言提供了六種位運算符,如表2-6所示。1.按位“與”運算符(&)參加運算的兩個數(shù)據(jù),按二進制位進行“與”運算。運算規(guī)則:0&0=0;0&1=0;1&0=0;1&1=1。即兩個相應位同時為1,結果才為1,否則為0。例如,求3&6的值。應先把3和6以補碼表示,再進行按位“與”運算。3=00000011(&)6=0000011000000010

3=00000011(&)6=0000011000000010知識擴展――位運算結果為2的補碼,因此,3&6的值為2。按位“與”運算通常有兩種特殊的用途。(1)清零如果要將一個存儲單元清零,即使其全部二進制位為0,只要和一個各位都為零的數(shù)相與,則其結果為零。如:知識擴展――位運算

3=00000011(&)0=0000000000000000(2)取一個數(shù)中指定位如果要將一個數(shù)x中的某些位保留下來(即屏蔽其他位),只要找一個新數(shù),在x想保留的那些位上,新數(shù)相應位取值1,其他位取值0,然后將兩數(shù)進行與運算。例如,設x=01101101,取x的低4位。知識擴展――位運算X=01101101(&)0000111100001101若取x的右起(從低位起)第3,4,6位,則為: X=01101101(&)0010110000101100這種取一個數(shù)中某幾位的辦法也稱為“屏蔽法”,即用0屏蔽掉不需要的位,而用1保留需要的位,為此找的新數(shù)也稱為“屏蔽字”。知識擴展――位運算2.按位“或”運算符(|)參加運算的兩個數(shù)據(jù),按二進制位進行“或”運算。運算規(guī)則:0|0=0;0|1=1;1|0=1;1|1=1。即兩個相應位只要有一個為1,結果為1,兩個相應位全為0,結果才為0。例如,求3|6的值。知識擴展――位運算

3=00000011(|)6=0000011000000111知識擴展――位運算結果為7的補碼,因此,3|6的值為7。用途:通常用來將一個數(shù)據(jù)的某些特定位置1。方法:將希望置1的位與1進行“或”運算,保持不變的位與0進行“或”運算。例如,將x=01101010的低4位置1,高4位不變。知識擴展――位運算

X=01101010(|)0000111101101111知識擴展――位運算3.按位“異或”運算符(^)參加運算的兩個數(shù)據(jù),按二進制位進行“異或”運算。運算規(guī)則:0^0=0;0^1=1;1^0=1;1^1=0。即兩個相應位的值不同,結果為1,否則為0。例如,求3^6的值。知識擴展――位運算結果為5的補碼,因此,3^6的值為5?!爱惢颉边\算的用途如下:

3=00000011(^)6=0000011000000101知識擴展――位運算(1)與0相“異或”,保留原值例如,將x=00010011與0相“異或”。 x=00010011(^)0=0000000000010011知識擴展――位運算(2)使特定的位翻轉如果要使一個數(shù)x中某些指定位翻轉,只要找一個新數(shù),在x需要翻轉的位上新數(shù)相應位取值1,在x需要保持不變的位上新數(shù)相應位取值0,然后將兩數(shù)進行“異或”運算。例如,設x=01010011,將x的低4位翻轉,高4位不變。

x=00010011(^)0000111100011100知識擴展――位運算在交互式圖形程序設計中,常用“異或”運算使像素翻轉,而且對一個像素連續(xù)翻轉兩次即可恢復原態(tài)。因此,利用“異或”運算可以產(chǎn)生動畫效果知識擴展――位運算4.按位取反運算符(~)參加運算的一個數(shù)據(jù),按二進制位進行取反運算。運算規(guī)則:~1=0;~0=

溫馨提示

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

評論

0/150

提交評論