第03章 運算符和表達式_第1頁
第03章 運算符和表達式_第2頁
第03章 運算符和表達式_第3頁
第03章 運算符和表達式_第4頁
第03章 運算符和表達式_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章數(shù)據(jù)類型、運算符與表達式C的數(shù)據(jù)類型常量與變量整型數(shù)據(jù)實型數(shù)據(jù)字符型數(shù)據(jù)變量賦初值各類數(shù)據(jù)型數(shù)據(jù)間的混合運算算術運算符和算術表達式賦值運算符和賦值表達式逗號運算符和逗號表達式關系運算符和關系表達式邏輯運算符和邏輯表達式位運算符和位運算1§3.0預備知識計算機中數(shù)的表示及進制轉換數(shù)碼、基與權數(shù)碼:表示數(shù)的符號基:數(shù)碼的個數(shù)權:每一位所具有的值數(shù)制:二進制、八進制、十進制、十六進制各種進制之間的轉換非十進制(二、八、十六進制)轉換成十進制方法:按權相加十進制轉換成非十進制(二、八、十六進制)方法:除基反序取余(整數(shù)部分)2二進制與八進制之間的轉換二進制轉換成八進制:從右向左,每3位一組(不足3位左補0),轉換成八進制八進制轉換成二進制:用3位二進制數(shù)代替每一位八進制數(shù)二進制與十六進制之間的轉換二進制轉換成十六進制:從右向左,每4位一組(不足4位左補0),轉換成十六進制十六進制轉換成二進制:用4位二進制數(shù)代替每一位十六進制數(shù)3字節(jié)和位內存以字節(jié)為單元組成每個字節(jié)有一個地址一個字節(jié)一般由8個二進制位組成每個二進位的值是0或1數(shù)值的表示方法——原碼、反碼和補碼原碼:最高位為符號位,其余各位為數(shù)值本身的絕對值反碼:正數(shù):反碼與原碼相同負數(shù):符號位為1,其余位對原碼取反補碼:正數(shù):原碼、反碼、補碼相同負數(shù):最高位為1,其余位為原碼取反,再對整個數(shù)加14原碼反碼補碼數(shù)的范圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字節(jié)表示數(shù))5§3.1C語言的數(shù)據(jù)類型數(shù)據(jù)類型基本類型構造類型指針類型空類型void整型實型字符型char單精度型float數(shù)組型雙精度型double結構體類型struct共用體類型union枚舉類型enum有符號無符號基本整型int短整型short長整型long基本整型unsignedint短整型unsignedshort長整型unsignedlong自定義類型typedef數(shù)據(jù)類型決定:1.數(shù)據(jù)占內存字節(jié)數(shù)2.數(shù)據(jù)取值范圍3.其上可進行的操作6§3.2常量與變量一、標識符1、定義:可用來標識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列。2、命名規(guī)則:

①由字母、數(shù)字、下劃線組成

②以字母或下劃線打頭③區(qū)分大小寫④命名盡量做到“見名知義”⑤TurboC允許標識符最大長度32個字符,建意不超過8個字符⑥不允許和關鍵字相同7

二、常量1、常量:在程序運行過程中,值不變的量。2、直接常量:即常數(shù)。如35.1、1、2、35、‘a’。可以分為實型、整型、字符型。3、符號常量:在一個程序中指定用一個符號代表一個常量。

如在程序的開頭有如下定義:

#definePI3.1415926

則在整個程序中可用“PI”代替3.1415926進行運算8例1:#definePRICE30main(){

intnum,total; num=10; total=num*PRICE;

printf("total=%d",total);}92.3變量概念:其值可以改變的量變量名與變量值、變量地址變量定義的一般格式:

數(shù)據(jù)類型

變量1[,變量2,…,變量n];<>變量初始化:定義時賦初值例:

inta,b,c;floatdata;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標識符例:

inta=2,b,c=4;floatdata=3.67;charch=‘A’;

intx=1,y=1,z=1;

intx=y=z=1;變量的使用:先定義,后使用變量定義位置:一般放在函數(shù)開頭main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;

printf(“data=%f\n”,data);}變量定義可執(zhí)行語句main(){inta,b=2;a=1;

floatdata;data=(a+b)*1.2;

printf(“data=%f\n”,data);}語言程序設計第二章數(shù)據(jù)描述C12a變量名(符號地址)變量值存儲單元(物理地址)Eg:Inta;10

|

&a2500H |——————

2501H |----1250-----a=1250&b2502H |—————— 2503H |---------

2504H |----123.67-----b=123.67 2505H |----------

2506H |——————

變量名、變量值、變量地址間的關系地址、變量名和變量值區(qū)別舉例如:

shortinta=1250;floatb=123.67;1250a變量名(符號地址)變量值存儲單元(物理地址)變量的屬性:11

一、整型常量:有三種表示形式1、十進數(shù)形式:1、98、3452、八進數(shù)形式:以0開頭的數(shù)字。01、0763、十六進數(shù)形式:以0x開頭的數(shù)字。0x3F、0x765§3.3整型數(shù)據(jù)12

整數(shù)的不同進制數(shù)表示及轉換。main(){

printf("%d%x%o\n",125,125,125);

printf("%d%x%o\n",045,045,045);

printf("%d%x%o\n",0x32,0x32,0x32);}執(zhí)行結果:1257d17537254550326213二、整型變量:(有符號和無符號)類型有符號無符號基本型(簡稱整型)[signed]

intunsignedint

短整型short或shortintunsignedshort

長整型long或longintunsignedlong說明:無符號型加unsigned修飾符表示,只表示正數(shù),無符號位。各類型數(shù)據(jù)所占寬度和范圍見書43頁表3.114三、整型變量的定義:1、變量的定義一般在函數(shù)的開頭部分;2、一條定義語句可定義多個同種類型的變量,各變量之間用逗號分隔。

3、變量類型符與其后所定義變量之間用空格分隔。

如:

inta;unsignedshortb,c;longd;15一、實型常量:實數(shù)又稱為浮點數(shù),有兩種表示形式1、十進制數(shù)形式:由數(shù)字和小數(shù)點組成(必須有小數(shù)點)

如:43.2、89.、.862、指數(shù)形式:即科學計數(shù)法。如:45e2相當于45×102、34e5相當于34×105。字母e前必須有數(shù)字,字母e后必須是整數(shù)?!耙?guī)范化指數(shù)形式”:在指數(shù)形式中,小數(shù)部分中的小數(shù)點前有且只有一位非零數(shù)字?!?.4實型數(shù)據(jù)16二、實型變量(分為三種類型)1、單精度型(float):字節(jié)數(shù):4,有效位72、雙精度型(double):字節(jié)數(shù):8,有效位153、長雙精度型(longdouble):字節(jié)數(shù):8,有效位18

實型常量不分單、雙精度??扇我赓x值,但有效數(shù)位不同。三、實型數(shù)據(jù)的舍入誤差四、存儲方式:按指數(shù)形式,eg7.45623在內存中的存放形式+(數(shù)符).745623+(指數(shù)數(shù)符)117§3.5字符型數(shù)據(jù)一、字符型常量:用一對單引號括起來的一個字符。

二、字符常量的分類:1、普通字符:如:‘1’、‘a’、‘A’、‘*’2、轉義字符:也稱控制字符,如’\n’。說明:.用反斜杠開頭后面跟一個字母代表一個控制字符。.反斜杠后面的字符失去原來的含義18字符形式功能\n回車換行符

\t橫向跳格:跳到下一個輸出區(qū)(每一輸出區(qū)為8個字符位置)\b退格

\r回車不換行(回到本行起始字符位置)\f走紙換頁

\\反斜杠字符\\'單引號(撇號)'\ddd1~3位八進制數(shù)所代表的字符。如\101表示'A'\xhh1~2位十六進制數(shù)所代表的字符。如\x40表示'A'常用轉義字符形式及功能見書P4019

3、字符常量定義:用單引號括起來的單個普通字符或轉義字符.

字符常量的值:該字符的ASCII碼值例:‘A’-------’\101’-------’\x41’--------65<如‘A’——65,‘a’——97,‘0’——48,‘\n’——10如‘a’‘A’‘?’‘\n’‘\101’轉義字符:反斜線后面跟一個字符或一個代碼值表示例轉義字符舉例(ch2_001.c,ch2_004.c)

main(){printf("\101\x42C\n");

printf("Isay:\"Howareyou?\"\n");

printf("\\CProgram\\\n");

printf("Turbo\'C\'");}運行結果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}運行結果:屏幕顯示:=打印機輸出:¥字符常量、整型常量可通用;main(){charc1,c2;/*定義兩個字符型變量*/c1=‘a’;c2=‘b’;/*賦字符型常量*/c1=c1-32;c2=c2-32;/*分別減去32*/

printf(“%c%d”,c1,c2);/*輸出兩個字符型數(shù)據(jù)*/}輸出:A66輸出:A6620一、賦值:向變量所代表的存儲單元傳送數(shù)據(jù)的操作,用“=”表示二、賦值的一般形式:變量=表達式;三、可以先定義變量,后賦值;也可以在定義變量時直接賦值四、對幾個變量同時賦值:1、inta,b,c=5;2、inta=3,b=3,c=3;3、inta;a=3;4、inta,b,c;c=5;§3.6變量賦初值2、inta=b=c=3;21§3.7各類型數(shù)值數(shù)據(jù)間的混合運算一、轉換原因:不同類型之間進行運算,必須先轉換為同一類型二、轉換的類型:實型、整型、字符型三、轉換規(guī)則:見下頁22doublefloatlongunsignedintchar,short低高說明:必定的轉換運算對象類型不同時轉換例charch;

inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例inti;floatf;doubled;longl;<>23§3.8算術運算符和算術表達式(一)按功能劃分:1、算術運算符:+、-、*、/、%2、關系運算符:>、<、==、>=、<=、!=3、邏輯運算符:!、&&、||4、位運算符:<<、>>、~、^、|、&5、賦值運算符:=、+=、-=、*=、/=6、條件運算符:?,:

7、逗號運算符:,8、指針運算符:*、&

9、求字節(jié)數(shù)運算符:sizeof10、強制類型轉換運算符:(類型名)11、分量運算符:·、->

12、下標運算符:[]13、其它:函數(shù)運算符一、C運算符分類(見附錄D,P378)24(二)按所需操作數(shù)個數(shù)劃分1、單目運算符

2、雙目運算符

3、三目運算符學習運算符應注意:運算符功能與運算量關系要求運算量個數(shù)要求運算量類型運算符優(yōu)先級別結合方向(解釋見下頁)結果的類型25運算符的優(yōu)先級與結合性C語言規(guī)定了運算符的優(yōu)先級和結合性。結合性:當一個操作數(shù)兩側的運算符具有相同的優(yōu)先級時,該操作數(shù)是先與左邊的運算符結合,還是先與右邊的運算符結合。

自左至右的結合方向,稱為左結合性。反之,稱為右結合性。除單目運算符、賦值運算符和條件運算符是右結合性外,其它運算符都是左結合性。26二、算術運算符和表達式(書P53)1、基本算術運算符:+

-

*/%結合方向:從左向右優(yōu)先級:-

+(單目)---->*/%----->+-

(2)(3)(4)

說明:“-”和“+”可為單目運算符時,右結合性兩整數(shù)相除,結果為整數(shù)%要求兩側均為整型數(shù)據(jù)例5/2=-5/2.0=例5%2=-5%2=1%10=

5%1=5.5%2例5/2=2

-5/2.0=-2.5例5%2=1

-5%2=-11%10=

1

5%1=

05.5%2

()272、強制類型轉換(顯式轉換)一般形式:(類型名)(表達式)例

(int)(x+y)(int)x+y(double)(3/2)(int)3.6說明:強制轉換得到所需類型的中間變量,原變量類型不變28例:

main(){floatx;

inti;x=3.6;i=(int)x;

printf(“x=%f,i=%d”,x,i);}運行結果如下:x=3.600000,i=3精度損失問題293、自增、自減運算符++--作用:使變量值加1或減1,常用于循環(huán)控制變量加(或減)1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4303、自增、自減運算符++--作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)說明:++--不能用于常量和表達式,如5++,(a+b)++++--結合方向:自右向左優(yōu)先級:--++-------->*/%----->+-

(2)(3)(4)例-i++-(i++)i=3;printf(“%d”,-i++);//-3例-i++i=3;printf(“%d”,-i++);31

(1)避免連續(xù)使用一變量進行自增或自減運算

如:i=3;k=(i++)+(i++)+(i++)k值等于9。

k=(++i)+(++i)+(++i)k值等于18。

(2)出現(xiàn)多個運算符時,編譯器在處理時盡可能多的(從左到右)將若干個字符組合成一個運算符。

如:i+++j;(i++)+ji+(++j)

(3)TurboC中,調用函數(shù)時,實際參數(shù)的處理順序是從右到左。

如:i=3;

printf(“%d,%d”,i,i++);輸出結果:4,3VC++6.0里結果是:3,3注意:32§3.9賦值運算符和表達式簡單賦值運算符符號:=格式:變量標識符=表達式作用:將一個數(shù)據(jù)(常量或表達式)賦給一個變量復合賦值運算符種類:+=-=*=/=%=《=》=&=^=|=含義:exp1op=exp2

exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例a=3;d=func();c=d+2;33說明:結合方向:自右向左優(yōu)先級:14左側必須是變量,不能是常量或表達式賦值表達式的值與變量值相等,且可嵌套賦值轉換規(guī)則:使賦值號右邊表達式值自動轉換成其左邊變量的類型例3=x-2*y;a+b=3;例

floatf;

inti;i=10;f=i;則

f=10.0例inti;i=2.56;//結果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//表達式值為5,a,b,c值為5//b=5;a=5//表達式值11,c=6,a=11//表達式值10,a=10,b=4,c=6//表達式值5,a=5,b=10,c=234說明:結合方向:自右向左優(yōu)先級:12左側必須是變量,不能是常量或表達式賦值表達式的值與變量值相等,且可嵌套賦值轉換規(guī)則:使賦值號右邊表達式值自動轉換成其左邊變量的類型例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=-264等價于a=a+(a=a-(a*a))//a=0等價于a=a+(a=a*(a=a-(a=a*3)))35左(變量)右(表達式)結果int

float、double舍棄小數(shù)(截斷)

float、double

int

值不變

int(2字節(jié))

unsignedchar賦給int的低8位,

高8位補0

signedchar賦給int的低8位,高8位補符號charint、short、long取低8位longint

int符號擴展intlongint截斷(取低16位)longint

unsignedint

高位補0賦值時的類型轉換當賦值運算符兩側的類型不同時,在賦值前要進行類型轉換。轉換規(guī)則如下表:36§3.10逗號運算符和表達式(補充)形式:表達式1,表達式2,……表達式n結合性:從左向右優(yōu)先級:15逗號表達式的值:等于表達式n的值用途:常用于循環(huán)for語句中例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;

printf(“%d,%d,%d”,a,b,c);

printf(“%d,%d,%d”,(a,b,c),b,c);//賦值表達式,表達式值18,x=18//逗號表達式,表達式值18,x=3//1,2,3//3,2,3逗號作為分隔符37逗號運算符和表達式形式:表達式1,表達式2,……表達式n結合性:從左向右優(yōu)先級:15逗號表達式的值:等于表達式n的值用途:常用于循環(huán)for語句中例:#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);

printf("x=%d\n",x);}運行結果:x=338§3.11關系運算符和表達式(書P91)關系運算符種類:<<===>=>!=結合方向:自左向右優(yōu)先級別:<<=>>===!=優(yōu)先級6(高)優(yōu)先級7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)關系表達式的值:是邏輯值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//表達式值1//表達式值1//表達式值0//d=1//f=0低于算術運算符,但高于賦值運算符。39關系運算注意:例若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’>0結果為‘A’>100結果為1040ab!a!ba&&ba||b真假真假假假真真§3.12邏輯運算符和表達式(書P92)邏輯運算符種類:!&&||邏輯運算真值表C語言中,運算量:

0表示“假”,非0表示“真”,

運算結果:0表示“假”,1表示“真”,真假假假假假真真假假真真真假真真41例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b優(yōu)先級:結合方向:!:從右向左&&:從左向右||:從左向右//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)!(2)&&(11)||(12)高低!→算術運算→關系運算→&&→||→賦值運算42例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’值為1值為0值為1值為1值為1值為1//(5>3)&&2||(8<(4-(!0)))值為1!(2)&&(11)||(12)高低優(yōu)先級:結合方向:!:從右向左&&:從左向右||:從左向右判斷一個年份是否是閏年可用如下邏輯表達式:(year%4==0)&&(year%100!=0)||(year%400==0)43短路特性:邏輯表達式求解時,并非所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,才執(zhí)行該運算符(書P95)<>例a&&b&&c//只在a為真時,才判別b的值;只在a、b都為真時,才判別c的值例a||b||c//只在a為假時,才判別b的值;只在a、b都為假時,才判別c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//結果m=0,n=1!(2)&&(11)||(12)高低優(yōu)先級:結合方向:!:從右向左&&:從左向右||:從左向右44(補充)位運算符及位運算1.按位與──&

(1)格式:x&y

(2)規(guī)則:對應位均為1時才為1,否則為0。例如,3&9=1:0011&1001 0001=(1)10

(3)主要用途:①清零。如5&0=0②取(或保留)一個數(shù)的某(些)指定位。構造一個數(shù)與之按位與,將要取的位置1,其余位置0。45

特有的位運

溫馨提示

  • 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

提交評論