




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)類型運算符和表達式演示文稿當(dāng)前1頁,總共104頁。內(nèi)容提要基本數(shù)據(jù)類型;常量和變量;標(biāo)識符命名;常用運算符和表達式;運算符的優(yōu)先級與結(jié)合性當(dāng)前2頁,總共104頁。Hello,World#include<stdio.h>main(){ printf("hello,world\n");}超級無敵考考你:
如何把“hello”和“world”分別打印在兩行?hello.c當(dāng)前3頁,總共104頁。例2.1:一個簡單的C程序例子#include<stdio.h>/*函數(shù)功能:計算兩個整數(shù)相加之和
入口參數(shù):整型數(shù)據(jù)a和b
返回值:整型數(shù)a和b之和*/intAdd(inta,intb){ return(a+b);}/*主函數(shù)*/main(){ intx,y,sum=0; printf("Inputtwointegers:"); scanf("%d%d",&x,&y);/*輸入兩個整型數(shù)x和y*/ sum=Add(x,y);/*調(diào)用函數(shù)Add計算x和y相加之和*/ printf("sum=%d\n",sum);/*輸出x和y相加之和*/}并列的兩個函數(shù)其中一個是程序的入口程序注釋當(dāng)前4頁,總共104頁。C程序常見符號分類關(guān)鍵字(Keyword)又稱為保留字,C語言中預(yù)先規(guī)定的具有固定含義的一些單詞數(shù)據(jù)類型修飾符int,控制語句return等標(biāo)識符(Identifier)系統(tǒng)預(yù)定義標(biāo)識符,main,printf等
用戶自定義標(biāo)識符,Add,x,y
等運算符(Operator)34種,詳見附錄2
分隔符(Separator)空格、回車/換行、逗號等其它符號大花括號“{”和“}”通常用于標(biāo)識函數(shù)體或者一個語句塊“/*”和“*/”是程序注釋所需的定界符數(shù)據(jù)(Data)變量(Variable)常量(Constant)當(dāng)前5頁,總共104頁。標(biāo)識符命名作用是用來給變量、函數(shù)、類型等起名字的,以便于區(qū)分。定義是以字母或下劃線開頭,后跟若干字母、下劃線或數(shù)字。大小寫敏感正確:abc_abca11a12_a12ABC_23AbcA_2不正確:232ANo.A-2當(dāng)前6頁,總共104頁。標(biāo)識符命名直觀,見名知意,便于記憶和閱讀SUM、MAX、NODE最好使用英文單詞或其組合切忌使用漢語拼音下劃線和大小寫通常用來增強可讀性variablenamevariable_namevariableName不允許使用關(guān)鍵字作為標(biāo)識符的名字
int,float,for,while,if等某些功能的變量采用習(xí)慣命名如:for語句所采用的循環(huán)變量習(xí)慣用i,j,kWindows風(fēng)格UNIX風(fēng)格P43,2.1當(dāng)前7頁,總共104頁?;緮?shù)據(jù)類型數(shù)據(jù)為什么有類型之分?在程序中要處理大量的數(shù)據(jù),對于數(shù)據(jù)來說,它們有著某些相同的屬性,處理規(guī)律相同,存儲格式、取值范圍也相同。我們將具有相同屬性的數(shù)據(jù)稱為一類,即數(shù)據(jù)類型,符合計算機中數(shù)據(jù)的存儲方式。學(xué)習(xí)任何語言,首先要學(xué)習(xí)其數(shù)據(jù)類型.C語言有豐富的數(shù)據(jù)類型,可以表達復(fù)雜的數(shù)據(jù)結(jié)構(gòu)當(dāng)前8頁,總共104頁。數(shù)據(jù)類型(DataType)數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型整型實型(浮點型)字符型枚舉類型數(shù)組類型結(jié)構(gòu)體類型共用體類型單精度實型雙精度實型基本整型長整型短整型無符號整型當(dāng)前9頁,總共104頁。b,B,KB,MB,GB,TB如何衡量數(shù)據(jù)類型所占空間大小?bit,中文叫法:位Byte,中文叫法:字節(jié)Kilobyte(KB),中文叫法:KMegabyte(MB),中文叫法:兆Gigabyte(GB),中文叫法:GTerabyte(TB),中文叫法:T1TB==1,024GB1GB==1,024MB1MB==1,024KB1KB==1,024B1B==8b當(dāng)前10頁,總共104頁。b,B,KB,MB,GB,TB一個位有多大?只能是“0”或者“1”,這叫二進制一個字節(jié)有多大?保存一個字符(英文字母、數(shù)字、符號)ASCII(美國標(biāo)準(zhǔn)信息交換碼)編碼見P427附錄D,常用字符與ASCII碼對照表兩個字節(jié)保存一個漢字GB編碼可以表示0~255之間的整數(shù)當(dāng)前11頁,總共104頁?;緮?shù)據(jù)類型int整數(shù),在目前絕大多數(shù)機器上占4個字節(jié)。TC2中是2個字節(jié)VC中是4個字節(jié)float單精度浮點數(shù),一般是4個字節(jié)長double雙精度浮點數(shù),一般是8個字節(jié)長char字符,一般是1個字節(jié)長用來表示256個ASCII字符,或者0~255的整數(shù)當(dāng)前12頁,總共104頁。數(shù)據(jù)類型修飾符shortshortint,短整數(shù),一般2個字節(jié)長。通常簡寫為shortlonglongint,長整數(shù),一般是4個字節(jié)長。通常簡寫為longlongdouble,長雙精度(高精度)浮點數(shù),一般是10個字節(jié)長。signed用來修飾char、int、short和long,說明他們是有符號的整數(shù)(正整數(shù)、0和負(fù)整數(shù))。一般缺省都是有符號的,所以這個修飾符通常省略unsigned用來修飾char、int、short和long,說明他們是無符號的整數(shù)(正整數(shù)和0)當(dāng)前13頁,總共104頁。何謂類型溢出(Overflow)?C語言直接提供的任何類型都有取值范圍。當(dāng)向其賦超過此范圍的數(shù)值,就會產(chǎn)生數(shù)值溢出,得到一個不正確的結(jié)果。vc中int的范圍是-2^31~2^31-1如果超出取值范圍,給它一個小于-2^31或者大于2^31的數(shù)會如何呢?小蛇能吞下大象嗎?P292-7.c當(dāng)前14頁,總共104頁。溢出(Overflow)造成的危害一臺安裝了Windows95/98的機器,如果連續(xù)運行49.7天沒有重新啟動,可能死機原因:Windows自啟動時刻起,有一個計數(shù)器,記錄系統(tǒng)已經(jīng)運行了多少毫秒。這個計數(shù)器是個unsigned
long類型的變量unsigned
long的最大值是:4294967295一天有24*60*60*1000=86400000毫秒4294967295/86400000=49.71026961805……當(dāng)49.7天的時候,此計數(shù)器會溢出,引起死機當(dāng)前15頁,總共104頁。何謂類型溢出(Overflow)?生活中的例子:身份證號碼中的出生年阿利亞娜號火箭發(fā)射失敗現(xiàn)象與危害:溢出后的數(shù)值是可預(yù)料的,但不同平臺會有所不同。當(dāng)程序從高位計算機向低位計算機移植(比如從64位系統(tǒng)移植到32位系統(tǒng))時,以前從不出現(xiàn)的溢出問題可能出現(xiàn)。當(dāng)前16頁,總共104頁。類型溢出的解決方案?解決方案:預(yù)先估算運算結(jié)果的可能范圍,采用取值范圍更大的類型。1+2+3+…1!+2!+3!+…13+23+33+…如果不需要處理負(fù)數(shù),則采用無符號類型。在運算還沒開始之前就判斷運算數(shù)是否在合理的取值范圍內(nèi)。如果超出,則停止運算,轉(zhuǎn)錯誤處理。當(dāng)前17頁,總共104頁?;緮?shù)據(jù)類型常量變量
在計算機中存儲的數(shù)據(jù),按存儲的性質(zhì)分,可分為:當(dāng)前18頁,總共104頁。常量(Constant)整型常量18、-31longint型常量123l、123L、123456l、123456Lunsignedint型常量123u、123U浮點常量十進制小數(shù)形式123.45、456.78指數(shù)形式1e-2、4.5e3float型常量123.45f、456.78F、1e-2f、4.5e3Flongdouble型常量123.45l、456.78L、4.5e3L缺省為double因為字母l和數(shù)字1容易混淆,所以當(dāng)用l做后綴時,常使用大寫形式當(dāng)前19頁,總共104頁。八進制與十六進制常量以數(shù)字“0”開始的整型常數(shù)是八進制數(shù)022、-037010和10大小不一樣因為八進制并不常用,所以此種表示法比較少見以“0x”或者“0X”開始的整型常數(shù)是十六進制A~F和a~f用來表示十進制的10~15十六進制的形式比較常用0x12、-0x1F,-0x1f當(dāng)前20頁,總共104頁。TC.EXE中的一段16進制代碼當(dāng)前21頁,總共104頁。字符(Character)常量字符常量的表示方法’a’,’A’,’5’,’%’,’$’……單引號內(nèi)只能有一個字符,除非用“\”開頭就是一個普通整數(shù),也可以參與各種數(shù)學(xué)運算每個字符具有一個0~255之間的數(shù)值,可從ASCII表查出注意:’5’和整數(shù)5的區(qū)別字符的數(shù)學(xué)運算在密碼學(xué)內(nèi)用得比較多用“\”開頭的字符為轉(zhuǎn)義字符例如,"\n",代表1個字符當(dāng)前22頁,總共104頁。TheASCIIlettercodesLetterCodeLetterCodeLetterCodeLetterCodea01100001n01101110A01000001N01001110b01100010o01101111B01000010001001111c01100011p01110000C01000011P01010000d01100100q01110001D01000100Q01010001e01100101r01110010E01000101R01010010f01100110s01110011F01000110S01010011g01100111t01110100G01000111T01010100h01101000u01110101H01001000U01010101i01101001v01110110I01001001V01010110j01101010w01110111J01001010w01010111k01101011x01111000K01001011X01011000101101100y01111001L01001100Y01011001m01101101z01111010M01001101Z01011010當(dāng)前23頁,總共104頁。字符常量轉(zhuǎn)義字符一些特殊字符(無法從鍵盤輸入或者另有它用)用轉(zhuǎn)義字符表示當(dāng)前24頁,總共104頁。字符串(String)常量用雙引號括住的由0個或多個字符組成的字符序列"Iamastring"""表示空字符串轉(zhuǎn)義字符也可以在字符串中使用引號只作為字符串開始和結(jié)束的標(biāo)志C語言內(nèi)部用’\0’表示字符串的結(jié)束除注釋外,是唯一可以出現(xiàn)中文的地方"x"和’x’是不同的<string.h>里定義了一系列專門的字符串處理函數(shù)當(dāng)前25頁,總共104頁。字符串在內(nèi)存中的存放方式在內(nèi)存中每個字符按順序存放字符串結(jié)尾有一個空字符(ASCII=0,'\0')作為字符串結(jié)束標(biāo)志字符串結(jié)束標(biāo)志'\0'是不能顯示的,在字符串常量中,也不用顯式寫出來舉例"TEST""""a"'T''E''S''T'\08469838400\0'a'\0009700由系統(tǒng)在字符串的末尾自動加一個‘\0’作為字符串的結(jié)束標(biāo)志當(dāng)前26頁,總共104頁。字符常量與字符串常量的區(qū)別字符常量和字符串常量是不同類型的數(shù)據(jù)定界符不同:字符常量使用單引號,而字符串常量使用雙引號'a'與"a"是不同的字符常量只能是單個字符,字符串常量則可以含一個或多個字符不能把一個字符串賦值給一個字符型變量
chara,c;
a=‘A’; c=“A”;/*語句非法*/a\0a當(dāng)前27頁,總共104頁。宏常量宏常量也稱符號常量一般采用全大寫字母表示#define
標(biāo)識符字符串不是語句,而是一種編譯預(yù)處理命令宏替換(MacroSubstitulition)P222.2當(dāng)前28頁,總共104頁。為什么需要常量?要避免使用幻數(shù)直接使用的常數(shù)叫幻數(shù)。現(xiàn)象與危害:當(dāng)常數(shù)需要改變時,要修改所有使用它的代碼,工作量巨大,還可能有遺漏。解決方案:把幻數(shù)定義為宏、const常量,或者枚舉常量。建議使用后兩者。#defineARRAY_SIZE10constintARRAY_SIZE=10;enum{ARRAY_SIZE=10};當(dāng)前29頁,總共104頁。例2.2:計算圓的周長和面積#include<stdio.h>#definePI3.14159#defineR5.3main(){ printf("area=%f\n",PI*R*R); printf("circumference=%f\n",2*PI*R);}area=88.247263circumference=33.300854相當(dāng)于執(zhí)行#include<stdio.h>main(){ printf("area=%f\n",3.14159*5.3*5.3); printf("circumference=%f\n",2*3.14159*5.3);}當(dāng)前30頁,總共104頁。例2.2:計算圓的周長和面積#include<stdio.h>#definePI3.14159;#defineR5.3;main(){ printf("area=%f\n",PI*R*R); printf("circumference=%f\n",2*PI*R);}相當(dāng)于執(zhí)行#include<stdio.h>main(){ printf("area=%f\n",3.14159;*5.3;*5.3;); printf("circumference=%f\n",2*3.14159;*5.3;);}語法錯誤當(dāng)前31頁,總共104頁。const常量用const修飾定義的變量為常量constfloatpi=3.1425926;
const常量與宏常量相比的優(yōu)點是什么?const常量有數(shù)據(jù)類型某些集成化調(diào)試工具可以對const常量進行調(diào)試當(dāng)前32頁,總共104頁。枚舉(Enumeration)常量一個被遺忘的角色從程序來窺其一斑enumweeks{SUN,MON,TUE,WED,THU,FRI,SAT};enumweekstoday;enumresponse{no,yes,none};enumresponseanswer;today=TUE;answer=yes;
if(answer==yes)printf("TodayisTuesday.\n");elseprintf("TodayisNOTTuesday.\n");當(dāng)前33頁,總共104頁。變量定義變量就是在程序執(zhí)行過程中,其值可以改變的量。變量用來臨時保存程序運行過程中的中間結(jié)果。當(dāng)前34頁,總共104頁。變量
在程序中對變量的訪問(存入,讀取)都是通過變量名進行的。變量在內(nèi)存占據(jù)存儲空間,因此對變量也可以通過它在內(nèi)存中的地址,即指向變量的指針進行。
7
abcdec=7x=c當(dāng)前35頁,總共104頁。變量類型變量是存放常量值(數(shù)據(jù))的,常量(數(shù)據(jù))有類型之分,因而變量也有類型之分,變量類型是來確定其變量存儲空間的長度和存儲格式。原因當(dāng)前36頁,總共104頁。變量類型類型說明一般格式:類型名變量名表;舉例:
inti,j,I,count;shorta=‘y’,b;longl1,l2;unsignedn1,n2;charc1,c2,c3;floatx1,x2;doublew,y,z1,z2;當(dāng)前37頁,總共104頁。變量類型注明變量必需先定義,后使用。變量分類整形變量浮點變量字符變量當(dāng)前38頁,總共104頁。變量聲明使用變量的基本原則變量必須先定義,后使用所有變量必須在第一條可執(zhí)行語句前定義聲明的順序無關(guān)緊要一條聲明語句可聲明若干個同類型的變量聲明變量,是初始化變量的最好時機不被初始化的變量,其值為危險的隨機數(shù) charesc='a'; inti=1; intsum=0; floateps=1.0e-5;當(dāng)前39頁,總共104頁。定義變量的兩個主要作用變量名標(biāo)明數(shù)據(jù)在內(nèi)存中的地址,在對程序進行編譯連接時系統(tǒng)為每個變量名分配一個內(nèi)存地址。聲明類型的目的是告訴系統(tǒng)變量需要占用的存儲單元數(shù)據(jù),以便系統(tǒng)為變量分配存儲單元。當(dāng)前40頁,總共104頁。Definingtheintegervariablenamedtotal當(dāng)前41頁,總共104頁。變量的值可以在定義變量時獲得,也可以在程序執(zhí)行的過程中獲得變量賦值的一般格式如下:變量名=表達式例如:y=x+6.9;注意:“=”并非指兩側(cè)相等,而是包含了計算和賦值兩個過程。當(dāng)前42頁,總共104頁。若沒有定義變量直接在程序中使用變量:
student_num=30;則編譯時會指出未定義錯誤。若程序中有:intstudent_num;/*變量定義*/::student_num=30;/*給變量賦值*/
則student_num變量是合法的。說明當(dāng)前43頁,總共104頁。整形變量存儲形式符號位數(shù)值部分整形變量分類標(biāo)準(zhǔn)整形(int)短整形(short)長整形(long)(與int相同)無符號整形(unsigned)當(dāng)前44頁,總共104頁。整形(=長整形)定義格式定義舉例int變量名表;longint變量名表;longinti,j,k;longn;當(dāng)前45頁,總共104頁。整形(=長整形)取值范圍當(dāng)n=5時:當(dāng)n=-5時:32位:-2^31~2^31-1inti=2147483647;當(dāng)前46頁,總共104頁。實型變量定義格式定義舉例變量性質(zhì)float變量名表;double變量名表;floatc1,c2,c3;doublec4;類型比特數(shù)有效數(shù)字?jǐn)?shù)值范圍float326-7-3.4x10+38
~3.4x10+38double6415-16-1.7x10+308
~1.7x10+308當(dāng)前47頁,總共104頁。浮點數(shù)據(jù)的機內(nèi)表示:
階碼是整數(shù),階符和階碼的位數(shù)合起來反映浮點數(shù)的表數(shù)范圍——表數(shù)范圍,小數(shù)點的實際位置;尾數(shù)是小數(shù),其位數(shù)反映了浮點數(shù)的精度——表數(shù)精度,尾數(shù)的符號代表浮點數(shù)的正負(fù)。
N=
S*10j浮點數(shù)分類單精度浮點數(shù)雙精度浮點數(shù)當(dāng)前48頁,總共104頁。實型數(shù)據(jù)提供的有效數(shù)字位數(shù)
p28例2.6#include<stdio.h>main(){ floata;
doubleb; a=123456.789e4; b=123456.789e4; printf("%f\n%f\n",a,b);}1234567936.0000001234567890.000000
float型數(shù)據(jù)提供7位有效數(shù)字double型數(shù)據(jù)提供16位有效數(shù)字使用不當(dāng)導(dǎo)致舍入誤差當(dāng)前49頁,總共104頁。結(jié)論:由于實數(shù)存在舍入誤差,使用時要注意:不要試圖用一個實數(shù)精確表示一個大整數(shù),記住:浮點數(shù)是不精確的。實數(shù)一般不判斷“相等”,而是判斷接近或近似。避免直接將一個很大的實數(shù)與一個很小的實數(shù)相加、相減,否則會“丟失”小的數(shù)。根據(jù)要求選擇單精度、雙精度。當(dāng)前50頁,總共104頁。字符變量定義格式定義舉例變量性質(zhì)char變量名表;charc1,c2,c3;charc4;一個字符變量在內(nèi)存中占一個字節(jié)。字符變量只能存放一個字符。字符在內(nèi)存中以ASCII碼值的形式存儲,因此可以象整數(shù)一樣運算。注明不能把字符串常量賦給字符變量。charc1=‘a(chǎn)’;charc1="abcd";當(dāng)前51頁,總共104頁。char型與int型之間的關(guān)系例2.5:小寫字母轉(zhuǎn)換為大寫字母#include<stdio.h>main(){ charch='b';printf("%c,%d\n",ch,ch); ch='b'-32;
printf("%c,%d\n",ch,ch);}#include<stdio.h>main(){ charch='b';printf("%c,%d\n",ch,ch);
ch='b'-('a'-'A')
;
printf("%c,%d\n",ch,ch);}b,98B,66
b,98B,66
當(dāng)前52頁,總共104頁。使用變量要注意不要對變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然用sizeof獲得變量或者數(shù)據(jù)類型的長度注意!當(dāng)前53頁,總共104頁。sizeof到底是什么?它是一個C語言的關(guān)鍵字,并不是函數(shù)可以用兩種形式使用sizeof(表達式)一般都使用sizeof(變量名)sizeof(類型)求出的結(jié)果為表達式值所屬類型或者類型占用的字節(jié)數(shù)現(xiàn)場演示程序例2.3P25,例2.3當(dāng)前54頁,總共104頁。例2.3#include<stdio.h>main(){ printf("DatatypeNumberofbytes\n"); printf("---------------------------------\n"); printf("char%d\n",sizeof(char)); printf("int%d\n",sizeof(int)); printf("shortint%d\n",sizeof(short)); printf("longint%d\n",sizeof(long)); printf("float%d\n",sizeof(float));
printf("double%d\n",sizeof(double));}P25,例2.3當(dāng)前55頁,總共104頁。為什么要用sizeof獲得類型或變量的字長?因為同種類型在不同的平臺其占字節(jié)數(shù)不盡相同。比如int在16位、32位和64位系統(tǒng)分別占2、4和8個字節(jié)?,F(xiàn)象與危害:在平臺間移植時會出現(xiàn)問題,導(dǎo)致數(shù)據(jù)丟失或者溢出。解決方案:用,并且只用sizeof獲得字長。當(dāng)前56頁,總共104頁。C語言中的運算計算機只會計算任何事物都要被表示成數(shù)字和公式的形式后,才能被計算機計算(被計算機處理)事物到數(shù)字和公式的轉(zhuǎn)換過程叫數(shù)學(xué)建模因為:事物在計算機內(nèi)的處理都是一種計算又因為:計算就要有操作數(shù)、運算法則和計算結(jié)果所以:事物在計算機內(nèi)的處理都有操作數(shù)、運算法則和計算結(jié)果計算結(jié)果你可以留用,也可以忽略當(dāng)前57頁,總共104頁。算術(shù)運算符+,-,*,/加、減、乘、除運算四則混合運算中,先算乘除,后算加減,
按從左向右的順序計算,左結(jié)合%求余運算常用的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)函數(shù)名功能函數(shù)名功能sqrt(x)計算x的平方根,x應(yīng)大于等于0exp(x)計算ex的值fabs(x)計算x的絕對值pow(x,y)計算xy的值log(x)計算lnx的值sin(x)計算sinx的值,x為弧度值log10(x)計算lgx的值cos(x)計算cosx的值,x為弧度值
以下函數(shù)的返回值均為雙精度類型。當(dāng)前58頁,總共104頁。算術(shù)運算的運算規(guī)則(1)0.負(fù)值運算符優(yōu)先級高,結(jié)合性從右往左1.運算的優(yōu)先順序為先*、/、%,后+、-,同等優(yōu)先級從左到右運算。舉例:18*5/9
5/9*182.5*8.02.兩個類型相同的操作數(shù),運算結(jié)果類型也相同?!愋推ヅ涞脑瓌t?。。‘?dāng)前59頁,總共104頁。算術(shù)運算的運算規(guī)則(2)3.兩個類型不同的操作數(shù),運算結(jié)果類型與其中類型較高的類型相同。舉例:5.0/9*18
2.5*84.求余運算的運算結(jié)果其值為相除所得余數(shù),而符號與被除數(shù)的符號相同。舉例:-13%5=-313%(-5)=3當(dāng)前60頁,總共104頁。算術(shù)表達式定義用算術(shù)運算符將運算對象連接起來的式子。其中:運算對象包括常量、變量、函數(shù)等。舉例a+bc+da+b/c+d(a+b)/(c+d)a+b2c(a+b)/2c(a+b)/2*c(a+b)/(2*c)cos45°+2ex
cos(45)+2*exp(x)cos(3.14*45/180)+2*exp(x)當(dāng)前61頁,總共104頁。算術(shù)表達式的舉例(lgx-lnx)121/2*[lg(x)-ln(x)]1/2*(lg(x)-ln(x))1.0/2*(log10(x)-log(x))0.5*(log10(x)-log(x))(log10(x)-log(x))/21.所有表達式必須以線性形式寫出。2.只能使用合法的標(biāo)識符3.乘號只能用*4.函數(shù)自變量可以是表達式且其必須寫在括號內(nèi),三角函數(shù)的參數(shù)以弧度表示5.為指明正確的運算順序,可以使用“()”,不能使用“[]”或“{}”。說明:1.0/2*(lg(x)-ln(x))當(dāng)前62頁,總共104頁。賦值運算符(AssignmentOperators)賦值運算符=把右側(cè)表達式的值賦給左側(cè)的變量一般情況下,賦值運算符左側(cè)只能是變量賦值運算符的優(yōu)先級較低,“自右向左”結(jié)合運算符兩側(cè)類型不一致時,要進行類型轉(zhuǎn)換轉(zhuǎn)換原則是:先將賦值號右邊表達式類型轉(zhuǎn)換為左邊變量的類型,然后賦值。當(dāng)前63頁,總共104頁。賦值運算符(AssignmentOperators)賦值表達式的求解過程:先計算賦值運算符右側(cè)的表達式的值將賦值運算符右側(cè)的表達式的值賦給左側(cè)的變量整個賦值表達式的值就是剛才所賦的值。賦值的含義:將賦值運算符右邊的表達式的值存放到左邊變量名標(biāo)識的存儲單元中。注意“賦值”與“等于”的區(qū)別:賦值符號“=”不同于數(shù)學(xué)的等號,它沒有相等的含義。(“==”相等)例i=i+2;當(dāng)前64頁,總共104頁。賦值運算符:=賦值表達式一般形式:
變量=表達式例:a=5;/*表達式的值為5*/a=b=3;/*a=(b=3)*/a=b=c=1;/*a=(b=(c=1))*/a=(b=4)+(c=3);/*b=4,c=3,a=7*/注意:賦值運算符按自右而左的結(jié)合順序當(dāng)前65頁,總共104頁。復(fù)合賦值運算符=前加上算術(shù)運算符或位運算符如+=,-=,*=,/=,%=……復(fù)合賦值表達式一般形式:
<變量><雙目運算符>=<表達式>
等價于:<變量>=<變量><雙目運算符><表達式>舉例,z*=x+y; /*z=z*(x+y);*/n+=1等價于n=n+1x*=y+1等價于x=x*(y+1)注意:賦值運算符、復(fù)合賦值運算符的優(yōu)先級比算術(shù)運算符低。設(shè)有:floata=2.;問:a/=3*5.;等價于a=a/(3*5.);等價于a=a/3*5.嗎?;P43,2.2(7)當(dāng)前66頁,總共104頁。main(){inta=12,n=5;/*2-10.c*/a+=a;printf("a+=a:a=%d\n",a);/*a=24*/a-=a-2;printf("a-=a-2:a=%d\n",a);/*a=2*/a*=3+2;printf("a*=3+2:a=%d\n",a);/*a=10*/a/=a+a;printf("a/=a+a:a=%d\n",a);/*a=0*/a%=n%=2;printf("a%%=n%%=2:a=%d\n",a);/*a=0*/a+=a-=a*=a;printf("a+=a-=a*=a:a=%d\n",a);/*a=0*/}當(dāng)前67頁,總共104頁。關(guān)系運算符>,>=,<,<=,==,!=大于,大于等于,小于,小于等于,等于,不等于關(guān)系運算符運算出的結(jié)果為0和非00,表示假,即該關(guān)系不成立非0,表示真,即該關(guān)系成立在所有涉及到真假判斷的地方,0表示假,非0表示真當(dāng)前68頁,總共104頁。關(guān)系運算符(RelationalOperators)運算符名稱舉例優(yōu)先級(算術(shù)運算符)<小于i<100高<=小于等于a<=MAX>大于f>3.14>=大于等于c>='a'==等于a==b低!=不等于x!=0(賦值運算符)注意:在C語言中,“等于”關(guān)系運算符是雙等號“==”,而不是單等號“=”(賦值運算符)當(dāng)前69頁,總共104頁。找別扭inta=1;
if(a==0)
printf("OK");inta=0;
if(a==0)
printf("OK");inta=1;
if(a=0)
printf("OK");inta=0;
if(a=0)
printf("OK");當(dāng)前70頁,總共104頁。==和=inta;
a=0;
a==1;inta;
a==0;
a=1;一定要分清==和=下面用法能起點小作用:inta=0;
if(0==a)
printf("OK");inta=0;
if(0=a)
printf("OK");編譯出錯當(dāng)前71頁,總共104頁。
例如,假設(shè)num1=3,num2=4,num3=5,則:(1)num1>num2的值=0。(2)(num1>num2)!=num3的值=1。(3)num1<num2<num3的值=1。思考題:任意改變num1或num2的值,會影響整個表達式的值嗎?為什么?(4)(num1<num2)+num3的值=6,因為num1<num2的值=1,1+5=6。再次強調(diào):C語言用整數(shù)“1”表示“邏輯真”,用整數(shù)“0”表示“邏輯假”。所以,關(guān)系表達式的值,還可以參與其它種類的運算,例如算術(shù)運算、邏輯運算等。當(dāng)前72頁,總共104頁。例若a=0;b=0.5;x=0.3;
則a<=x<=b的值為0例5>2>7>8在C中是允許的,值為0例inti=1,j=7,a;a=i+(j%4!=0);
則a=2例‘a(chǎn)’>0結(jié)果為‘A’>100結(jié)果為10當(dāng)前73頁,總共104頁。邏輯運算符邏輯運算也被稱為布爾(Boolean)運算與運算&&a&&b當(dāng)且僅當(dāng)兩者都為真,則結(jié)果為真(a>b&&b>c);a大于b,并且b大于c或運算||a||b只要兩者中有一個為真,結(jié)果就為真(a>b||b>c);a大于b,或者b大于c求反!(!a);如果a是0,結(jié)果非0;如果a是非0,結(jié)果是0并不改變a的值當(dāng)前74頁,總共104頁。邏輯運算符(LogicalOperators)運算符名稱舉例優(yōu)先級!邏輯非!(a>b)(算術(shù)運算符)(關(guān)系運算符)&&邏輯與(x>y)&&(y>z)||邏輯或(x>3)||(x<-3)(賦值運算符)當(dāng)前75頁,總共104頁。實例ch是英文大寫字母(ch>='A')&&(ch<='Z')判斷某一年year是否是閏年的條件是滿足下列兩個條件之一:能被4整除,但不能被100整除;能被400整除;((year%4==0)&&(year%100!=0))||(year%400==0)當(dāng)前76頁,總共104頁。邏輯表達式求值特點邏輯表達式中的運算符,只有會影響表達式求值時,才會執(zhí)行a&&b&&c只有a為非0時才計算b的值;只有a和b都為非0時才計算c的值;
a||b||c只有a為非0時就不必計算b和c;只有a為0時才計算b的值;只有a和b都為0時才計算c的值例,intx,y,z;x=y=z=0;x++&&++y||z++;例,intx,y,z;x=y=z=-1;++x||y++&&++z;當(dāng)前77頁,總共104頁。增一和減一運算符n++,n--,++n,--n++讓參與運算的變量加1,--讓參與運算的變量減1作為后綴運算符時,先取n的值,然后加/減1作為前綴運算符時,先加/減1,然后取n的值n=n++;n=n;n++;當(dāng)前78頁,總共104頁。增一和減一運算符n++,n--,++n,--n++讓參與運算的變量加1,--讓參與運算的變量減1作為后綴運算符時,先取n的值,然后加/減1作為前綴運算符時,先加/減1,然后取n的值n=++n;n++;m=n;當(dāng)前79頁,總共104頁。自增、自減運算符舉例inti=3,j,a,b=1,c=2;j=++i; /*i=i+1,j=i,i=4,j=4*/j=i++; /*j=i,i=i+1,i=5,j=4*/j=-i++; /*-(i++),i=6,j=-5*/j=i++*2; /*(i++)*2,i=7,j=12*/a=(b+c)++; /*非法!!!
*/a=34++; /*非法!!!
*/j=++i++; /*非法!!!
*/當(dāng)前80頁,總共104頁。增一和減一運算符良好的程序設(shè)計風(fēng)格提倡:在一行語句中,一個變量只能出現(xiàn)一次加1或者減1運算過多的加1和減1運算混合,不僅可讀性差,而且因為編譯器實現(xiàn)的方法不同,導(dǎo)致不同編譯器產(chǎn)生不同的運行結(jié)果當(dāng)前81頁,總共104頁。自動類型轉(zhuǎn)換同種數(shù)據(jù)類型的運算結(jié)果,還是該類型不同種數(shù)據(jù)類型的運算結(jié)果,是兩種類型中取值范圍更大的那種longdouble>double>float>long>int>short>chardoublefloatlongunsignedintchar,short精度低精度高當(dāng)前82頁,總共104頁。自動類型轉(zhuǎn)換在進行賦值操作時,會發(fā)生類型轉(zhuǎn)換將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事但是,浮點數(shù)轉(zhuǎn)為整數(shù),會丟失小數(shù)部分,非四舍五入反之,轉(zhuǎn)換后的結(jié)果必然是錯誤的,具體結(jié)果與機器和實現(xiàn)方式有關(guān)。避免如此使用,好的編譯器會發(fā)出警告當(dāng)前83頁,總共104頁。類型強轉(zhuǎn)(Casting)消除從大到小的警告l=(long)i;可以通過“(類型)表達式”的方式把表達式的值轉(zhuǎn)為任意類型強轉(zhuǎn)時,你必須知道你在做什么強轉(zhuǎn)與指針,并稱C語言兩大神器,用好了可以呼風(fēng)喚雨,用壞了就損兵折將屠龍
刀倚天劍當(dāng)前84頁,總共104頁。例2.7
#include<stdio.h>main(){
intm=5;printf("m/2=%d\n",m/2);printf("(float)(m/2)=%f\n",(float)(m/2));printf("(float)m/2=%f\n",(float)m/2);printf("m=%d\n",m);}m/2=2(float)(m/2)=2.000000(float)m/2=2.500000m=5兩個整數(shù)運算的結(jié)果還是整數(shù),不是浮點數(shù)當(dāng)前85頁,總共104頁。位運算數(shù)的三種表示形式位式運算當(dāng)前86頁,總共104頁。數(shù)的三種表示形式原碼反碼補碼
符號位為0表示正數(shù),符號位為1表示負(fù)數(shù),數(shù)值位是其值的絕對值。正數(shù):負(fù)數(shù):
一個數(shù)如果值為正數(shù),則它的反碼與原碼相同;一個數(shù)如果值為負(fù),則符號位為1,其余各位是對原碼取反。
正數(shù):負(fù)數(shù):
一個數(shù)如果值為正數(shù),則它的補碼與原碼相同;一個數(shù)如果值為負(fù),則符號位為1,其余各位是對原碼取反,末位加1。
正數(shù):負(fù)數(shù):為簡化運算部件設(shè)計計算機中大部分?jǐn)?shù)據(jù)要用補碼表示當(dāng)前87頁,總共104頁。位式運算運算要求參加運算的操作數(shù)必須為整數(shù)或字符型。運算過程按照整數(shù)中的二進制位為單位進行運算。運算結(jié)果計算結(jié)果為整數(shù)。運算符號&(與)|(或)^(異或)~(反,一元)<<(左移)>>(右移)當(dāng)前88頁,總共104頁。位式運算的運算規(guī)則&位式與:對a&b,僅當(dāng)a、b的對應(yīng)位均為1,結(jié)果該位為1,否則該位為0。舉例:3&5=0011&0101=0001=1當(dāng)前89頁,總共104頁。位式運算的運算規(guī)則|位式或:對a|b,只要a、b的對應(yīng)位有一個為1,結(jié)果該位為1,否則該位為0。舉例:3|5=0011|0101=0111=7當(dāng)前90頁,總共104頁。位式運算的運算規(guī)則^位式異或:對a^b,僅當(dāng)a、b的對應(yīng)位相反時,結(jié)果該位為1,否則該位為0。舉例:3^5=0011^0101=0110=6當(dāng)前91頁,總共104頁。位式運算的運算規(guī)則位式與:對a&b,僅當(dāng)a、b的對應(yīng)位均為1,結(jié)果該位為1,否則該位為0。舉例:3&5=0011&0101=0001=1位式或:對a|b,只要a、b的對應(yīng)位有一個為1,結(jié)果該位為1,否則該位為0。舉例:3|5=0011|0101=0111=7位式異或:對a^b,僅當(dāng)a、b的對應(yīng)位相反時,結(jié)果該位為1,否則該位為0。舉例:3^5=0011^0101=0110=6~位式取反:對應(yīng)操作數(shù)每位上的0,結(jié)果該位為1,否則該位為0。舉例:~5=~000001
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 古建彩繪采購合同范本
- 公司出租地合同范本
- 合伙人結(jié)算合同范本
- 個人住房借款合同范本
- 臺州網(wǎng)絡(luò)推廣合同范本
- 校園超市承包合同范本
- 廚藝加盟合同范本
- 單位資產(chǎn)轉(zhuǎn)讓合同范本
- 發(fā)電機維修合同范本
- 合同范本模板學(xué)校
- 電力各種材料重量表總
- 腸道健康講座活動策劃
- 醫(yī)療器械(耗材)項目投標(biāo)服務(wù)投標(biāo)方案(技術(shù)方案)
- 小學(xué)三年級下冊數(shù)學(xué)教案3篇
- pci術(shù)后術(shù)肢腫脹處理流程
- 遼寧省營口市2023-2024學(xué)年七年級上學(xué)期期末英語試題
- 大數(shù)據(jù)平臺部署與運維高職全套教學(xué)課件
- 《大數(shù)據(jù)平臺部署與運維》課程教學(xué)大綱
- 新版現(xiàn)代西班牙語學(xué)生用書第一冊課后習(xí)題答案
- 科技成果查新檢索基本情況表
- 新媒體藝術(shù)設(shè)計交互融合元宇宙
評論
0/150
提交評論