第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第1頁
第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第2頁
第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第3頁
第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第4頁
第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2023/2/31中國石油大學(xué)計(jì)算機(jī)科學(xué)系C語言課件23.1C語言的字符集3.2C語言的數(shù)據(jù)類型3.3常量與變量3.4變量的定義與賦值3.5符號(hào)常量3.6運(yùn)算符與表達(dá)式3.7各類型數(shù)據(jù)的混合運(yùn)算3.8

不同類型賦值的結(jié)果

第3章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式

33.1

C語言的字符集3.1.1C語言字符集:1、字母:小寫字母a~z、大寫字母A~Z。2、數(shù)字:0~9共10個(gè)。3、空白符:空格符、制表符、換行符等。4、標(biāo)點(diǎn)和特殊字符。5、字符常量,字符串常量和注釋中還可以使用漢字或其它可表示的圖形符號(hào)。字符是組成語言的最基本的元素。43.1.2

C語言詞匯(六類)1、標(biāo)識(shí)符:變量名、函數(shù)名、標(biāo)號(hào)等。2、關(guān)鍵字:

關(guān)鍵字是由C語言規(guī)定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標(biāo)識(shí)符不應(yīng)與關(guān)鍵字相同。P365

(1)類型說明符:用于定義、說明變量、函數(shù)或其它數(shù)據(jù)結(jié)構(gòu)的類型。

(2)語句定義符:用于表示一個(gè)語句的功能。

(3)預(yù)處理命令字:用于表示一個(gè)預(yù)處理命令。

標(biāo)識(shí)符:由英文字母、數(shù)字和下劃線這三種字符組成且第一個(gè)字符必須為字母或下劃線。

作用:用來給變量、函數(shù)等命名

注意:

1.區(qū)分大小寫英文字母

2.關(guān)鍵字(保留字)不能作標(biāo)識(shí)符

例:book、Book、int1、Int、printf、_a12都可作標(biāo)識(shí)符

5a、$、p#、int、x+y都不可作標(biāo)識(shí)符函數(shù)名不是保留字保留字I大寫3、運(yùn)算符:運(yùn)算符與變量,函數(shù)一起組成表達(dá)式,表示各種運(yùn)算功能。運(yùn)算符由一個(gè)或多個(gè)字符組成。4、分隔符

在C語言中采用的分隔符有逗號(hào)和空格兩種。5、常量:

在后面章節(jié)中將專門給予介紹。6、注釋符:

C語言的注釋符是以“/*”開頭并以“*/”結(jié)尾的串。在“/*”和“*/”之間的即為注釋。程序編譯時(shí),不對注釋作任何處理。注釋可出現(xiàn)在程序中的任何位置。注釋用來向用戶提示或解釋程序的意義。7其值不可以再分解為其它類型。用來表示某個(gè)變量在內(nèi)存儲(chǔ)器中的地址根據(jù)已定義的一個(gè)或多個(gè)數(shù)據(jù)類型用構(gòu)造的方法來定義的。構(gòu)造類型的值可以分解成若干個(gè)“成員”或“元素”。每個(gè)“成員”都是一個(gè)基本數(shù)據(jù)類型或又是一個(gè)構(gòu)造類型。3.2

C語言的數(shù)據(jù)類型8在調(diào)用函數(shù)值時(shí),通常返回一個(gè)函數(shù)值,這個(gè)函數(shù)值是具有一定的數(shù)據(jù)類型的,應(yīng)在函數(shù)定義及函數(shù)說明中給以說明。但是,也有一類函數(shù),調(diào)用后并不需要向調(diào)用者返回函數(shù)值,這種函數(shù)可以定義為“空類型”。其類型說明符為void。9

基本數(shù)據(jù)類型分為:

1、常量:在程序執(zhí)行過程中,其值不發(fā)生改變的量

2、變量:其值可變的量稱為變量。

在程序中,常量是可以不經(jīng)說明而直接引用的,而變量則必須先定義后使用。3.3

常量與變量10直接常量(字面常量):n

整型常量:12、0、-3;n

實(shí)型常量:4.6、-1.23;n

字符常量:‘a(chǎn)’、‘b’。n

字符串常量:“ABC”、“123”。標(biāo)識(shí)符:用來標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列。符號(hào)常量:用標(biāo)示符代表一個(gè)常量。在C語言中,可以用一個(gè)標(biāo)識(shí)符來表示一個(gè)常量,稱之為符號(hào)常量。在使用之前必須先定義,#define

3.3.1

常量11一、整型常量:

1.十進(jìn)制整數(shù):123、-76、02.八進(jìn)制整數(shù):076、-0253076轉(zhuǎn)換成十進(jìn)制:7*8+63.十六制整數(shù):0xa、0x20、0xf40xf4轉(zhuǎn)換成十進(jìn)制:15*16+4程序執(zhí)行過程中值不發(fā)生改變的量

只有整數(shù)標(biāo)識(shí)符號(hào)

常量12整型數(shù)據(jù)在內(nèi)存中的存放形式:如果定義了一個(gè)整型變量i:

inti;i=10;十進(jìn)制數(shù)10是以二進(jìn)制形式表示的:1010,每一個(gè)整形變量在內(nèi)存中占內(nèi)2字節(jié),存放示意圖為:

事實(shí)上,數(shù)值是以補(bǔ)碼表示的:

n

正數(shù)的補(bǔ)碼和原碼相同;

n

負(fù)數(shù)的補(bǔ)碼:將該數(shù)的絕對值的二進(jìn)制形式按位取反再加1。00000000000010101310的原碼:取反:再加1,得-10的補(bǔ)碼:由此可知,左面的第一位是表示符號(hào)的。000000000000101011111111111101011111111111110110例如:求-10的補(bǔ)碼14二、實(shí)型常量(浮點(diǎn)型):也稱為實(shí)數(shù)或者浮點(diǎn)數(shù)。實(shí)數(shù)只采用十進(jìn)制,有二種形式:小數(shù)形式指數(shù)形式由數(shù)碼0~9和小數(shù)點(diǎn)組成。小數(shù)形式必須有小數(shù)點(diǎn)。由十進(jìn)制數(shù)、加階碼標(biāo)志“e”或“E”、階碼(只能為整數(shù),可以帶符號(hào))組成。其一般形式為:aEn(a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù))其值為:

a*10n。

實(shí)型常數(shù)在內(nèi)存中的存放形式15實(shí)型常量實(shí)例:

小數(shù)形式:12.、–.71、–0.71、3.14

指數(shù)形式:6.945e-8

注意:指數(shù)形式(科學(xué)表示法)中,尾數(shù)和階碼都不能省略、階碼只能為整型常量、只有十進(jìn)制形式

6.945e–8尾數(shù)階碼6.945*10-8小數(shù)點(diǎn)不能省略

注:任一字符都可用’\ddd’或’\xhh’表示,其中ddd為該字符的ASCII碼八進(jìn)制形式、hh為該字符的ASCII碼十六進(jìn)制形式

例:’A’

、’\101’

、’\x41’均表示A

三、字符常量(一個(gè)字符)

兩種表示方式:

1.在字符前后加單撇號(hào):’y’

、’3’

、‘$’

2.用轉(zhuǎn)義字符表示(P48表3.3):’\n’→換行’\r’→回車’\\’→\’\’’→’’\”’

表示”’\12’→換行’\15’→回車’\xa’→換行’\134’→\’\xd’→回車’\x5c’→\0-70-9a-f整型常量與轉(zhuǎn)義字符不能混淆四、字符串常量:由兩個(gè)雙撇號(hào)括起來一串字符,其中字符個(gè)數(shù)>=0個(gè)字符串常量和字符常量區(qū)別:1)字符常量由單引號(hào)括起來,字符串常量由雙引號(hào)括起來。字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符。2)可以把一個(gè)字符常量賦予一個(gè)字符變量,不能把一個(gè)字符串常量賦予一個(gè)字符變量。3)字符常量占一個(gè)字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1。增加的一個(gè)字節(jié)中存放字符"\0"(ASCII碼為0)。這是字符串結(jié)束的標(biāo)志。18常量總結(jié)一、整型常量:二、實(shí)型常量:三、字符常量:四、字符串常量:十進(jìn)制整數(shù):10八進(jìn)制整數(shù):012十六制整數(shù):0xa小數(shù)形式:0.123456指數(shù)形式:1.23456e-1ASCII碼十進(jìn)制:’\n’

’A’ASCII碼八進(jìn)制:’\12’

’\101’ASCII碼十六制:’\xa’

’\x41’

以‘\0’結(jié)束。19字符串

“Cprogram”

在內(nèi)存中所占的字節(jié)為:字符常量‘a(chǎn)’和字符串常量“a”在內(nèi)存中的區(qū)別:‘a(chǎn)’在內(nèi)存中占一個(gè)字節(jié),可表示為:"a"在內(nèi)存中占二個(gè)字節(jié),可表示為:

Cprogram\0aa\001100001203:‘3’

“3”:-3:0000000000000011001100110000000000000011001100111111111111111101?\01111111111111100ASCII碼值為(51)10→(110011)2例:-3、3、‘3’、“3”在內(nèi)存中的存放形式‘3’是字符非數(shù)字1、計(jì)算字符串長度(其中字符個(gè)數(shù))時(shí)要認(rèn)真區(qū)分轉(zhuǎn)義字符與一般字符如:”\x18\18qw+\168\1676”

中字符個(gè)數(shù)為?2、字符串存儲(chǔ)到內(nèi)存中所占的字節(jié)數(shù)為:字符個(gè)數(shù)+1

字符串常量可用轉(zhuǎn)義字符表示

例:“ThisisaCprogram\n”

是字符串常量,它也可表示為:

”Thisisa\103\x20program\n”*若把字符串存儲(chǔ)到內(nèi)存中,系統(tǒng)會(huì)自動(dòng)在其末尾加一個(gè)’\0’8*8+3=672*16=3210八進(jìn)制0-722例1.main(){printf(”ab\tt\tpractice\tbook\n”);}結(jié)果ab

t

practice

book

’\n’——換行、’\r’——回車、

’\t’——水平跳到下一個(gè)tab位置

’\b’——退格、’\f’——換頁8個(gè)字符91733*轉(zhuǎn)義字符的使用例子

23例.voidmain()

{printf(”pencil\b\b\bxxx\n”);}

先顯示pencil再退三格用xxx覆蓋cil先打印pencil再重復(fù)打印xxx覆蓋cil退格顯示結(jié)果:penxxx打印結(jié)果:pencilxxx24

例.voidmain(){printf(”room”);printf(”pencil\n1234567890\r0\t1”);}顯示結(jié)果:roompencil

0

10打印結(jié)果:roompencil

1234567890換行回車水平跳到下一個(gè)Tab位01先顯示123456789025用標(biāo)識(shí)符命名,習(xí)慣用小寫

1、整型變量類型:

(1)[signed]int

(2)[signed]shortint(3)[signed]longint(4)unsigned[int](5)unsignedshort[int](6)unsignedlong[int]區(qū)別:①每個(gè)變量在內(nèi)存中所占字節(jié)數(shù)②所能存放的數(shù)值范圍3.3.2變量2字節(jié)16位4字節(jié)32位P43表3.1-32768~327670~65535各類整型量所分配的內(nèi)存字節(jié)數(shù)及數(shù)的表示范圍

以13為例:int型:shortint型:longint型:unsignedint型:unsignedshortint型:unsignedlongint型:0000000000001101000000000000110100000000000011010000000000001101000000000000000000000000000011010000000000000000000000000000110127整型數(shù)據(jù)的溢出voidmain(){inta,b;a=32767;b=a+1;printf("%d,%d\n",a,b);}32767:

01111111111111111000000000000000運(yùn)行結(jié)果:32767,-32768-32768:

282、字符型變量類型:

*字符型變量是用來存放單個(gè)字符常量的ASCII碼,不是字符本身。整型變量與字符型變量可混淆使用。例如:

chara,b;

(1)char

(2)unsignedchar區(qū)別:對變量值A(chǔ)SCII碼的理解

char——

一個(gè)數(shù)的補(bǔ)碼

unsignedchar——一個(gè)不帶正負(fù)號(hào)的整數(shù)字符變量的類型說明符

字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及使用方法

每個(gè)字符變量分配一個(gè)字節(jié)的內(nèi)存空間,因此只能存放一個(gè)字符。字符值以ASCII碼的形式存放。如:x的十進(jìn)制ASCII碼是120y的十進(jìn)制ASCII碼是121x:y:

允許對整型變量賦以字符值,或?qū)ψ址兞抠x以整型值。允許把字符變量按整型量輸出,或把整型量按字符量輸出。

整型量為二字節(jié)量,字符量為單字節(jié)量,當(dāng)整型量按字符型量處理時(shí),只有低八位字節(jié)參與處理。

0111100001111001120的二進(jìn)制代碼303、實(shí)型變量類型(1)float

(2)double*(3)longdouble

區(qū)別:①每個(gè)變量在內(nèi)存中所占字節(jié)數(shù)

float—4、double—8②所能存放的數(shù)值范圍

float10-38——1038double10-308——10308③有效數(shù)字位數(shù)float—7、double—1631實(shí)數(shù)3.14159在內(nèi)存中的存放形式如下:

+.3141591數(shù)符指數(shù)小數(shù)部分占的位數(shù)愈多,數(shù)的有效數(shù)字愈多,精度愈高。占的位數(shù)愈多,能表示的數(shù)值范圍愈大。32實(shí)型數(shù)據(jù)的舍入誤差。voidmain(){floata,b;a=123456.789e5;b=a+20;

printf("%f\n",a);printf("%f\n",b);}運(yùn)行結(jié)果:12345678848.00000012345678848.000000注意:1.0/3*3的結(jié)果并不等于1。大數(shù)加小數(shù)有效數(shù)字7位,前7位有效12345678900voidmain(){floata;doubleb;a=33333.33333;b=33333.33333333333333;printf("%f\n%f\n",a,b);}結(jié)果:33333.33203133333.333333

a是單精度浮點(diǎn)型,有效位數(shù)七位。整數(shù)已占五位,故小數(shù)二位之后均為無效數(shù)字b是雙精度型,有效位為十六位。但TurboC小數(shù)后最多保留六位,其余部分四舍五入。34一、定義變量類型:

<類型名><變量表>;若變量表中含有多個(gè)變量,它們之間用逗號(hào)隔開。最后一個(gè)變量名之后必須以“;”號(hào)結(jié)尾

例:unsignedinti,j;或unsignedi,j;

3.4

變量定義與賦值一般所有變量都在聲明部分定義類型二、給變量賦值

——把“=”右側(cè)的值賦給“=”左側(cè)的變量1、賦初值:定義變量類型時(shí)給變量賦值

在相應(yīng)變量后寫=<常量>例:inta=123,b=456,sum;2、賦值表達(dá)式:<變量>=<表達(dá)式>

賦值語句:<變量>=<表達(dá)式>;例:a=123sum=a+ba=123;sum=a+b;表達(dá)式末尾加“;”后即變成語句等價(jià)于inta,b,sum;a=123;b=456;①表達(dá)式本身有值的概念,其值同“=”左邊變量相同;而語句本身無值的概念;②表達(dá)式是用來構(gòu)成語句的。注:表達(dá)式中變量可用給該變量賦值的賦值表達(dá)式代替(應(yīng)加圓括號(hào))例:a=123;b=456;sum=a+b;可改為:sum=(a=123)+(b=456);注意:在定義中不允許連續(xù)賦值,如:

inta=b=c=5是不合法的而inta,b,c;

a=b=c=5則是合法的×√37

voidmain(){chara,b;a=120;b=121;printf("%c,%c\n",a,b);printf("%d,%d\n",a,b);}運(yùn)行結(jié)果:x,y120,121向字符變量賦以整數(shù)定義a,b為字符型賦值語句中賦以整型值格式符"c",輸出字符格式符為"d",輸出整數(shù)voidmain(){chara,b;a='a';b='b';a=a-32;b=b-32;printf("%c,%c\n%d,%d\n",a,b,a,b);}運(yùn)行結(jié)果:A,B65,66

a,b被定義為字符變量并賦予字符值用字符的ASCII碼參與運(yùn)算大小寫字母的ASCII碼相差32,因此運(yùn)算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出3、變量、變量名、變量類型、變量值、給變量賦值之間的關(guān)系變量——杯變量名——杯子的號(hào)碼變量類型——所裝的材料名稱變量值——所裝的東西多少給變量賦值——把某材料倒進(jìn)杯子水1號(hào)杯水2號(hào)杯油3號(hào)杯若類型不一致、以變量為準(zhǔn)inta;a=123.5;則a為12340*變量的特性:①一個(gè)變量只有一個(gè)值②新的不來、舊的不去,新的一來、舊的立即丟失③取之不盡例:inta;

……a=3;

……a=7.8;

……這段時(shí)間a值為3這段時(shí)間a值為7414、兩類常用賦值表達(dá)式的特別表示(1)自增、自減運(yùn)算符①<變量>=<變量>+1

可用++<變量>

代替例:i=i+1、count=count+1<變量>=<變量>–1

可用–

–<變量>

代替例k=k–1、num=num–1②<變量>++與

++<變量>的區(qū)別

<變量>++

的值為變量增一前的值

++<變量>的值為變量增一的值同樣,<變量>–

的值為變量減一前的值

–<變量>的值為變量減一的值提高可執(zhí)行程序的質(zhì)量++i++count–

–k–

–num例:

voidmain(){inti,j,k;i=3;j=++i;i=3;k=i++;printf(”%d,%d\n”,j,k);i=3;j=–

–i;i=3;k=i–

–;printf(”%d,%d\n”,j,k);}

j為4i為4i為3重新賦值k為i增1前的值i為3重新賦值結(jié)果:

4,32,343例:voidmain(){inti,j,k;i=3;j=++i;k=i++;printf(”%d,%d\n”,j,k);i=3;j=i–

–;k=–

–i;printf(”%d,%d\n”,j,k);}

j為4i為4k為4,運(yùn)行之后i為5j為3,運(yùn)行之后i為2結(jié)果:4,43,144(2)復(fù)合的賦值運(yùn)算符①<變量>=<變量>+表達(dá)式

<變量>=<變量>–表達(dá)式

<變量>=<變量>*表達(dá)式

分別可用<變量>+=表達(dá)式

<變量>–=表達(dá)式

<變量>*=表達(dá)式

代替

…i=i+3sum=sum+y+8n=n–2sum=sum–3*wn=n*2sum=sum*(3+w)i+=3sum+=y+8n–=2sum–=3*wn*=2sum*=3+w45+=、–=、*=、/=%=求余<<=左移>>=右移

&=按位與

^=按位異或

|=按位或10種復(fù)合的賦值運(yùn)算符:3.5

符號(hào)常量

用#define命令宏定義一個(gè)符號(hào)常量(用標(biāo)識(shí)符命名)代表某一常量作用:減少程序中重復(fù)書寫某些常量的工作量例#definePI3.141592#include<math.h>voidmain()

{printf(”%f,%f\n”,sin(35*PI/180),cos(35*PI/180));}注意:1.符號(hào)常量名中的英文字母習(xí)慣用大寫

2.不能象給變量賦值那樣給符號(hào)常量賦值

3.符號(hào)常量即以后要講的宏名的用途。調(diào)用函數(shù)庫中的函數(shù)a=3.14159合法3.14159=a非法47例:#defineS“ThisisaCProgram.”voidmain(){printf(S);}雙引號(hào)483.6運(yùn)算符與表達(dá)式

由P365附錄III中的運(yùn)算符把常量、符號(hào)常量、變量、函數(shù)等連接起來的有意義的式子:如:a+=a*=(b=2)/(float)(int)(a=4.5)…..

49(1)算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算:加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增(++)、自減(--)共七種。(2)關(guān)系運(yùn)算符:用于比較運(yùn)算:大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六種。(3)邏輯運(yùn)算符:用于邏輯運(yùn)算:與(&&)、或(||)、非(!)三種。3.6.1C語言的運(yùn)算符:P365(4)位操作運(yùn)算符:參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算:位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。(5)賦值運(yùn)算符:用于賦值運(yùn)算,分為簡單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。(6)條件運(yùn)算符:這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。(7)逗號(hào)運(yùn)算符:用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。(8)指針運(yùn)算符:用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。(9)求字節(jié)數(shù)運(yùn)算符:用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。(10)特殊運(yùn)算符:有括號(hào)(),下標(biāo)[],成員(→,.)等幾種。523.6.2表達(dá)式

一、賦值表達(dá)式:

1.三種形式的賦值表達(dá)式一般賦值表達(dá)式:

自增自減表達(dá)式:復(fù)合賦值表達(dá)式:

t*=j/(2*j+1)k++s=6*a+12、賦值表達(dá)式舉例:a=b=c=5a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)表達(dá)式的值為5,a,b,c的值均為5表達(dá)式的值為11,a值為11,c的值為6表達(dá)式的值為10,a為10,b為4,c為6表達(dá)式的值為5,a為5,b為10,c為254二.算術(shù)表達(dá)式:類似數(shù)學(xué)中的代數(shù)式pow(a,2)*b/c+1.5*fabs(sin(x*3.14159/180))/’a’P371函數(shù)a2b/c+1.5|sin(3.14159x)/180|/97

abs(整型)fabc(實(shí)型/整型)551、算術(shù)運(yùn)算符的有關(guān)說明:兩個(gè)整數(shù)相除,如果有小數(shù)部分:1、結(jié)果為整數(shù):舍去小數(shù)部分,取整;2、結(jié)果為負(fù)數(shù):舍入方向不固定,采取“向零取整”的方法,即取整后向“0”靠攏。如:-5/3=-1l運(yùn)算符的優(yōu)先級(jí):P365,優(yōu)先級(jí)較高的先于優(yōu)先級(jí)較低的。一個(gè)運(yùn)算量兩側(cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。l運(yùn)算符的結(jié)合性:分為左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。

x-y+z(左結(jié)合性):

x=y=z(右結(jié)合性):x與“-”號(hào)結(jié)合執(zhí)行x-y執(zhí)行+z執(zhí)行y=z執(zhí)行x=(y=z)572、算術(shù)表達(dá)式的有關(guān)說明:1、對表達(dá)式:(++i)+(++i)+(++i)TurboC將3作為表達(dá)式中所有i的值,因此3個(gè)i相加,得表達(dá)式的值為9。編程時(shí)應(yīng)避免這種歧義性,應(yīng)寫成:

i=3;a=i++;b=i++;c=i++;d=a+b+c;2、設(shè)i的初值為3,語句printf(“%d,%d”,i,i++);有的系統(tǒng)具有左結(jié)合性,而另一些系統(tǒng)具有有結(jié)合性,結(jié)果分別為:3,3和4,3。編程時(shí)應(yīng)避免這種歧義性,應(yīng)寫成:

j=i++;printf(“%d,%d”,j,i);583.含有強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的表達(dá)式:即表達(dá)式中含(類型名)(表達(dá)式)例.(int)a例.w+(float)(j%k)/5

整體的值為int類型,a及a的值為原類型值為float類型,j、k及它們的值仍為原來的類型59例:voidmain(){floatx=3.6;intk;k=(int)x/5;printf(”x=%f,k=%d\n”,x,k);}

結(jié)果x=3.600000,k=0360強(qiáng)制轉(zhuǎn)換運(yùn)算符的意義例如:1/2*sqrt(x+y)結(jié)果為0intfloatintfloat(float)1/2*sqrt(x+y)0.5取整一般寫為1.0/261例如:floatk=3必須寫成abs((int)k)因?yàn)閍bs函數(shù)中的參數(shù)必須是整型的見P371求整數(shù)的絕對值函數(shù)62三、逗號(hào)表達(dá)式:

格式:表達(dá)式1,表達(dá)式2,······表達(dá)式n

功能:從左至右順序計(jì)算各表達(dá)式的值,以表達(dá)式

n的值作為逗號(hào)表達(dá)式

的值(整體)

例1.

定義:ints,p;

則執(zhí)行s=5;p=s++,++p,p+2,p++;

優(yōu)先級(jí)最低p為5,先將5賦給p后,s的值再加1p為6p的值是7,是整個(gè)逗號(hào)表達(dá)式最終的值未賦值63

例:若有定義:inta,b;則表達(dá)式:

a=4,b=3,a+b+2,a++,a+b+2

值是10,是整個(gè)逗號(hào)表達(dá)式最終的值a為4b為3a為5最終b值為3優(yōu)先級(jí)高a、b未賦值64例:voidmain(){inta=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf("y=%d,x=%d",y,x);}運(yùn)行結(jié)果:y=6,x=6

x為6賦值優(yōu)先,y為6逗號(hào)表達(dá)式的值為10對于逗號(hào)表達(dá)式還要說明兩點(diǎn):1)逗號(hào)表達(dá)式一般形式中的表達(dá)式1和表達(dá)式2也可以又是逗號(hào)表達(dá)式(嵌套)。例如:

表達(dá)式1,(表達(dá)式2,表達(dá)式3)因此可以把逗號(hào)表達(dá)式擴(kuò)展為以下形式:

表達(dá)式1,表達(dá)式2,…表達(dá)式n整個(gè)逗號(hào)表達(dá)式的值等于表達(dá)式n的值。2)程序中使用逗號(hào)表達(dá)式,通常是要分別求逗號(hào)表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個(gè)逗號(hào)表達(dá)式的值。并不是在所有出現(xiàn)逗號(hào)的地方都組成逗號(hào)表達(dá)式,如在變量說明中,函數(shù)參數(shù)表中逗號(hào)只是用作各變量之間的間隔符。66四、組合運(yùn)算符例:i+++j

可理解為(i++)+j

不能理解為i+(++j)組合原則:

盡可能多地(自左而右)將若干個(gè)字符組成一個(gè)運(yùn)算符67五、表達(dá)式的運(yùn)算順序:

一般按從左至右、P365附錄III優(yōu)先級(jí)序數(shù)(1—先,7—后)進(jìn)行;(但賦值運(yùn)算、自增、自減、負(fù)號(hào)運(yùn)算、類型轉(zhuǎn)換等從右至左)優(yōu)先級(jí)高的先算

“左結(jié)合性”:自左至右的結(jié)合方向。算術(shù)運(yùn)算符的結(jié)合性是自左至右,即先左后右。如:表達(dá)式x-y+z

(1)y應(yīng)先與“-”號(hào)結(jié)合,執(zhí)行x-y運(yùn)算;(2)再執(zhí)行+z的運(yùn)算。“右結(jié)合性”:自右至左的結(jié)合方向。最典型的右結(jié)合性運(yùn)算符是賦值運(yùn)算符。如:表達(dá)式x=y=z,由于“=”的右結(jié)合性,(1)先執(zhí)行y=z運(yùn)算;(2)再執(zhí)行x=(y=z)運(yùn)算。

C語言運(yùn)算符中有不少為右結(jié)合性,應(yīng)注意區(qū)別,以避免理解錯(cuò)誤。附錄III693.7

各類型數(shù)據(jù)的混合運(yùn)算

在計(jì)算過程中、若某次運(yùn)算時(shí)碰到運(yùn)算對象為不同類型才需要進(jìn)行轉(zhuǎn)換,且由低向高轉(zhuǎn)換。注意邊計(jì)算邊轉(zhuǎn)換。但float型數(shù)據(jù)都要轉(zhuǎn)換成double型

char型與short型數(shù)據(jù)都要轉(zhuǎn)換成int型轉(zhuǎn)換規(guī)則如下圖:70intchar,shortdoublelongunsignedfloat低高P54例:設(shè)已定義floata=14.7;longc=5;計(jì)算13/5*a+(’a’+’b’)/c的步驟及轉(zhuǎn)換類型13/5*a+(’a’+’b’)/c12int2.0double14.7double229.4double97int98int3195int195long5long439long39double568.4double例:設(shè)定義floata;intb;從右至左運(yùn)算表達(dá)式:a+=a*=(b=2)/(float)(int)(a=4.5)12int24.5float34int44.0float2.0double4.0double50.5double4.5float4.5double62.25double74.5double2.25double給a賦值給a賦值例:voidmain(){floatPI=3.14159;ints,r=5;s=r*r*PI;printf("s=%d\n",s);}

運(yùn)行結(jié)果:s=78實(shí)型此語句將r和PI都轉(zhuǎn)換成double型計(jì)算結(jié)果為double型但由于s為整型,故賦值結(jié)果仍為整型,舍去了小數(shù)部分。743.8

不同類型賦值的結(jié)果賦給變量的數(shù)據(jù)類型、大小一般不受限制唯一限制:3.8.1變量或數(shù)據(jù)中含有實(shí)型的:

------值大小不變1、double型數(shù)據(jù)賦給float型,截取前7位有效數(shù)據(jù)。2、float型數(shù)據(jù)賦給double型,有效數(shù)據(jù)擴(kuò)展到16位,但范圍不能溢出。3、若把實(shí)型數(shù)據(jù)賦給整型變量,則舍去小數(shù)部分。

不允許給實(shí)型變量賦超出其所能表示范圍的數(shù)據(jù)例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論