第2章數(shù)據(jù)類型、運算符與表達式_第1頁
第2章數(shù)據(jù)類型、運算符與表達式_第2頁
第2章數(shù)據(jù)類型、運算符與表達式_第3頁
第2章數(shù)據(jù)類型、運算符與表達式_第4頁
第2章數(shù)據(jù)類型、運算符與表達式_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章數(shù)據(jù)類型、運算符與表達式2.1C語言的數(shù)據(jù)類型2.2常量與變量2.3整型數(shù)據(jù)2.4浮點型數(shù)據(jù)2.5字符型數(shù)據(jù)2.6各類數(shù)值型數(shù)據(jù)間的混合運算2.7算術運算符和算術表達式2.8逗號運算符和逗號表達式2.1C語言的數(shù)據(jù)類型

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式

字符型(char)短整型(short)

整型整型(int)

基本類型

數(shù)值類型長整型(long)

單精度型(float)

實型

雙精度型(double)

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

數(shù)組類型([])

構造類型

結構體類型(struct)

共用體類型(union)

枚舉類型(enum)

指針類型(*)

空類型(void)2.2常量與變量2.2.1常量(Constant)常量:在程序運行過程中,其值不能被改變的量。常量分為字面常量和符號常量。字面常量:是在程序中直接引用的數(shù)據(jù)。例100、021、0x21、3.14、3.14E-4、'A'、'+'符號常量:用符號(標識符)代表的常量。定義形式:#define標識符常量數(shù)據(jù)

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式<>[例2.1]在程序中使用符號常量#include<stdio.h>#definePRICE30

main(){

intnum,total;

num=10;

total=num*PRICE;

printf("total=%d\n",total);}

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式關于符號常量程序編譯時,符號常量被值替換。符號常量的值在程序運行過程中不能被改變。

PRICE=40;

/*錯誤*/符號常量不能指定類型。intPRICE;/*錯誤*/

優(yōu)點:含義清楚,方便修改。<>例#include<stdio.h>#definePI3.14

main(){

float

radius,perimeter,area;

radius=10;

perimeter=2*3.14*radius;

area=3.14*radius*radius;}

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式<>PIPI標識符

用來標識變量名、符號常量名、函數(shù)名、類型名、文件名等的有效字符序列。

定義規(guī)則:標識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。

如:_1yearmonthstudent_namesum0

M.D.Jones$123#a3b?ca=b

注:(1)在C語言中,大小寫字母不等效;(2)用戶自定義的標識符不能與保留字(關鍵

字)同名。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式<>關鍵字(保留字)

具有特定含義的標識符,用戶不能用來作自定義標識符。C語言中的關鍵字較少,由ANSI標準推薦的關鍵字有32個。與數(shù)據(jù)類型有關的(14):

charintfloatdoublesignedunsignedshort

longvoidstructuniontypedef

enumsizeof與存儲類別有關的(4):

autoexternregisterstatic與程序控制結構有關的(12):

dowhileforifelseswitchcasedefaultgoto

continuebreakreturn

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.2.2變量變量是指在程序運行中,其值可以被改變的量。變量包括變量名和變量值變量名代表計算機內存中的某一存儲空間,而該存儲空間中存放的數(shù)據(jù)就是變量的值。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式<>使用變量時必須“先定義,后使用”。定義形式:

類型標識符變量名1[,變量名2,變量名3,...];

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式自己設定,滿足標識符的規(guī)定。如:int,float,char;不可省例如inta,b,c;

floatx,y;

charc1,c2;或intc1,c2;2.3.1整型常量的表示形式整型常量有三種形式:十進制形式:與數(shù)學上表示相同。例如100,-12,0八進制形式:由數(shù)字0~7組成,在數(shù)碼前加0。例如014,056十六進制形式:由數(shù)字0~9、A~F組成,在數(shù)碼前加0X(數(shù)字0和字母X,大小寫均可)。例如0X12,0xAF

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.3

整型數(shù)據(jù)進制間的換算二、八、十六進制數(shù)到十進制數(shù)的換算采用按權展開法。

例:(11001.11)2

=1*24+1*23+1*20+1*2-1+1*2-2=25.75

(33.50)8=3*81+2*80+5*8-1=26.625

(2AB.F)16

=2*162+10*161+11*160+15*16-1=683.93

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式十進制數(shù)到二進制數(shù)的換算整數(shù)部分采用“除2取余,逆序排列”法。具體做法:十進制整數(shù)除以2得到商和余數(shù),繼續(xù)商除以2得到商和余數(shù),如此進行直到商為零。所得余數(shù)逆序排列即為二進制整數(shù)。小數(shù)部分采用“乘2取整,順序排列”法。具體做法:用2乘十進制小數(shù),可以得到積,將積的整數(shù)部分取出,再用2乘余下的小數(shù)部分,如此進行,直到積中的小數(shù)部分為零,或者達到所要求的精度為止。然后把取出的整數(shù)部分按順序排列起來即為二進制小數(shù)。

例:233.8125=(11101001.1101)2

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式二進制數(shù)到八、十六進制數(shù)的換算,三位二進制數(shù)對應一位八進制數(shù)、四位進制書數(shù)對應一位十六進制,所以轉換時以小數(shù)點為分界線,整數(shù)部分從低到高,小數(shù)部分從高到底按位數(shù)分組,每組對應的八或十六進制數(shù)碼。

例:(11101001.1101)2

=(011101001.110100)2

=

(351.64)8

(11101001.1101)2

=(11101001.1101)2

=(E9.D)16

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式整型變量的分類(IBMPC)

基本型(整型)int

短整型short或shortint

長整型long或longint

無符號整型:unsigned

無符號短整型:unsignedshort

無符號長整型:unsignedlong

注意:C語言標準沒有規(guī)定整型變量在計算機內存中所占的字節(jié)數(shù),它與具體的機器和操作系統(tǒng)有關。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.3.2

整型變量整數(shù)類型的有關數(shù)據(jù):

類型類型說明符長度數(shù)的范圍基本型

int

2字節(jié)-32768~32767短整型

short

2字節(jié)-215~215-1長整型

long

4字節(jié)-231~231-1無符號整型

unsigned

2字節(jié)0~65535無符號短整型

unsignedshort

2字節(jié)0~65535無符號長整型

unsignedlong

4字節(jié)0~232-1

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式TurboC2.0對整數(shù)類型的內存分配

類型類型說明符長度數(shù)的范圍基本型

int

4字節(jié)-2147483648~2147483648短整型

short2字節(jié)-215~215-1長整型

long

4字節(jié)-231~231-1無符號整型

unsigned4字節(jié)0~232-1無符號短整型unsignedshort

2字節(jié)0~65535無符號長整型unsignedlong

4字節(jié)0~232-1

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式VisualC++6.0對整數(shù)類型的內存分配整型變量的定義與使用

[例2.2]

#include<stdio.h>

voidmain(){inta,b,c,d;

unsignedu;

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf("a+u=%d,b+u=%d\n",c,d);

}

程序運行顯示:a+u=22,b+u=-14

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式說明:可以看到不同種類的整型數(shù)據(jù)可以進行算術運算

數(shù)據(jù)在內存中以二進制形式存放。原碼、反碼和補碼

計算機對數(shù)值的表示有原碼、補碼和反碼三種形式,但以補碼方式存儲。原碼:最左邊符號位用數(shù)碼0表示正號,用數(shù)碼1表示負號,數(shù)值部分一般按二進制形式表示。例[10]原=00001010

[-10]原=10001010

反碼:正數(shù)的反碼和原碼相同,負數(shù)的反碼是對該數(shù)的原碼除符號位外各位求反。例[10]反=[10]原=00001010

[-10]反=11110101

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.3.3

整型數(shù)據(jù)在內存中的存放形式補碼:正數(shù)的補碼與原碼相同,負數(shù)補碼則先對該數(shù)的原碼取反(得反碼),然后末位加1

例 [10]補=[10]原=00001010

[-10]原=10001010

[-10]反=11110101

[-10]補=11110110

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式intx;x=10;long

y;y=-10;2000200120022005xy內存內存地址2003200400001010

00000000

11111111

11111111

11111111

11110110

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式

數(shù)據(jù)超出表示范圍的情況稱為溢出。

[例2.3]整型數(shù)據(jù)的溢出

#include<stdio.h>

voidmain()

{inta,b;

a=32767;

b=a+1;

printf("%d,%d\n",a,b);

}TC環(huán)境下運行結果:32767,-327682.3.4

整型數(shù)據(jù)的溢出

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式a0111111111111111b1000000000000000在將一個整型常量賦給整型變量時如何進行類型匹配?請注意以下幾點:如果一個整常量的值在-32768~+32767范圍內,認為它是int型。

如果一個整常量的值超過了上述范圍,而在-2147483648~2147483647范圍內,則認為它是1ongint型。一個非負值的整常量后面加字母u或U,認為是unsigned型整變量(只要它的范圍不超過變量的表數(shù)范圍即可,防止溢出)

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.3.5整型常量的類型

在一個整常量后面加一個字母l或L則認為是longint型常量。例如123l、432L。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式main(){intx;x=10*9*8*7*6*5*4*3*2*1;printf("%d",x);}例

看看下面程序的輸出是什么?運行結果:-3036longintx;%Ld

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.4.1浮點型常量的表示形式十進制形式:由數(shù)字和小數(shù)點組成;

例如:3.44..3指數(shù)形式:由“十進制小數(shù)”+“e(或E)”+“十進制數(shù)整數(shù)”三部分組成。

例如:13.5e-6表示13.5×10-6注:(1)小數(shù)點不能單獨出現(xiàn);例如:0.=.0=0=0.0(2)e或E的兩邊必須有數(shù),且其后面必須為

整數(shù);例如:6E0.2e56E

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.4

浮點型數(shù)據(jù)浮點型變量的分類

單精度float

4字節(jié)(32位)

10-38~1038

雙精度double

8字節(jié)(64位)

10-308~10308

floatx,y;/*指定x、y為單精度實型變量*/

doublez;/*指定z為雙精度實型變量*/

x=123456.711;z=123456.789;

float型變量只能接受7位有效數(shù)字,最后兩位數(shù)字不起作用。

double型變量能接受16位有效數(shù)字。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.4.2

浮點型變量浮點型數(shù)據(jù)在內存中的存放形式

浮點型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個浮點型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。小數(shù)部分用二進制表示,指數(shù)部分用2的冪次來表示。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式浮點型數(shù)據(jù)的舍入誤差

由于浮點型變量是由有限的存儲單元組成的,因此能提供的有效數(shù)字總是有限的。在有效位以外的數(shù)字將被舍去。由此可能會產(chǎn)生一些誤差。

[例2.4]

#include<stdio.h>

voidmain()

{floata;

a=3.141592612;

printf("%f\n",a);

}

運行結果:

3.141593

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式說明:一個單精度浮點型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準確地表示該數(shù)。

例浮點型數(shù)據(jù)的舍入誤差

#include<stdio.h>

voidmain()

{floata,b;

a=123456.789e5;

b=a+20;

printf("a=%f,b=%f\n",a,b);

}

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式說明:應當避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù)C編譯系統(tǒng)將浮點型常量作為雙精度來處理,分配8個字節(jié)。

例如:f=2.45678*4523.65

系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進行相乘的運算,得到的乘也是一個雙精度數(shù)。精度高,速度慢。如果把一個浮點型常量賦給一個單精度變量f系統(tǒng)給出警告,警告不影響連接和運行最后結果,但只取其結果前7位賦給浮點型變量f。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.4.3

浮點型常量的類型如是在數(shù)的后面加字母f或F(如1.65f,654.87F),編譯系統(tǒng)就會把它們按單精度處理。

例如:floatf,g;f=3.1415926;/*警告*/g=1.65f;

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.5.1字符型常量

在計算機中,字符的使用占有很大的比重。字符包括各種文字、數(shù)字、符號和控制字符。用單引號括起來的一個字符;例如:'A'、'1'、'?'、'a'等。

‘a(chǎn)bc’、“a”用單引號括起來的由反斜杠(\)引導的轉義字符。

例如:'\n'、'\101'、'\x41'

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式只能是英文的單引號在統(tǒng)計字符個數(shù)時,只能記為一個字符2.5

字符型數(shù)據(jù)轉義字符表

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式字符形式含義ASCII碼\n換行10\t水平制表位9\b退格8\r回車,將當前位置移到本行開頭13\\、\'、\"代表字符“\”、“'”、“"”92、39、34\ddd1~3位八進制數(shù)所代表的字符\xhh1~2位十六進制數(shù)所代表的字符1234567812345678[例2.5]轉義字符的使用

main()

/*注@代表空格*/{printf("@@ab@c\t@de\rf\tg\n");

printf("h\ti\b\bj@@@k");

}

設一個輸出區(qū)占8列,試分析輸出結果。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式@

@

a

b

@

c@

d

efg

hij@

@

@

k2.5.2字符變量字符變量用來存放字符常量。字符變量在內存中占一字節(jié),取值范圍0~255。字符變量的定義和使用

charc1,c2;

c1='a';c2='b';

例charc1=‘a(chǎn)’;

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式對字符的編碼方法很多,使用最普遍的是美國標準信息交換碼,簡稱ASCII碼。一個字符常量存放到一個字符變量中,實際上并不是把該字符的字型放到內存中去,而是將該字符的相應的ASCII代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.5.3

字符數(shù)據(jù)在內存中的存放形式[例2.6]向字符變量賦予整數(shù)main(){charc1,c2;c1=97;c2=98;printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);}該例的輸出是:ab

97

98

相當于:c1=‘a(chǎn)’;c2=‘b’;因為:字符以ASCII碼存放,‘a(chǎn)’的ASCII碼為97,'b'的ASCII碼為98。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式Turboc中的字符變量是有符號的,表示范圍是–128---127

main(){charc;c=130;ptintf("%c%d\n",c,c);}輸出結果是:e–126將charc;改成unsignedcharc;輸出結果變成:e130

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式[例2.7]/*大小寫字母轉換的程序*/main(){charc1,c2;

c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c%c\n",c1,c2);}

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.5.4字符串常量字符串常量:雙引號括起來的字符序列。

例:"Howdoyoudo."

"CHINA"

"a"

"$123.45"注意區(qū)別字符常量和字符串常量例:charc;c='a';c="a";/*錯誤*/

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式字符串常量在內存中的存放:每一個字符均以其ASCII碼存放,且最后添加一個“空字符”\0.

"CHINA"存放在內存中的情況是:

注意:\0是系統(tǒng)自動加入的,不需用戶輸入。C中沒有專門的字符串變量,要把字符串常量存儲在變量中,必須使用字符數(shù)組。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式CHINA\02.6各類數(shù)據(jù)混合運算整型、實型(包括單、雙精度)、字符型數(shù)據(jù)可以混合運算。

10+'a'+1.5-8765.1234*'b'混合運算時,先轉換成同一種類型,然后進行運算。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式高doublefloatlongunsigned低intchar,short例:inti;

floatf;doubled;longe;10+'a'+i

*

f-d

/

e高doublefloatlongunsigned低intchar,shortintdoubledouble上述轉換過程是由系統(tǒng)自動進行的。

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式doubledouble2.7

算術運算符和算術表達式2.7.1C語言運算符和C表達式簡介C運算符

算術運算符:+-*/%++--

關系運算符:<<===>>=!=

邏輯運算符:!&&||

位運算符:<<>>~|^&

賦值運算符:=及其擴展

條件運算符:?:

逗號運算符:,

指針運算符:*&

求字節(jié)數(shù):sizeof

強制類型轉換:(類型)

分量運算符:.->

下標運算符:[]

其它:()-

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式C表達式

表達式是由操作數(shù)和運算符組成的序列。根據(jù)運算符分為以下幾類:

算術表達式:如2+3-4.7*6.3

關系表達式:x<0

y<=z+6

邏輯表達式:x>0&&y>0

賦值表達式:a=

7

條件表達式:x>0?y=2:y=3

逗號表達式:a=2,b=3,c=4

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式2.7.2主要的算術運算符和算術表達式基本的算術運算符+

加法運算符,如3+5

正值運算符,如+3-

減法運算符,如5-2

負值運算符,如-3*

乘法運算符,如3*5/

除法運算符,如5/3%

模運算符(求余運算符),如7%4

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式說明:如果除號兩邊是整數(shù),即做整除。%兩邊必須為整數(shù)算術表達式和運算符的優(yōu)先級與結合性算術表達式:用算術運算符和括號將運算對象連接起來、符合C語法規(guī)則的式子。

如:a*b/c-1.5+'a'運算符的優(yōu)先級:先乘除、后加減;括號優(yōu)先。運算符的結合性:運算對象兩側的運算符優(yōu)先級相同時,運算符的結合方向。左結合性:結合方向為從左至右(先左后右,簡稱左結合)。算術運算符為左結合。右結合性:結合方向為從右至左(先右后左,簡稱右結合)。賦值運算符=為右結合。例:a=b=c=d=3

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式例已知:floata=2.0;intb=6,c=3;求解:a*b/c-1.5+’A’+abs(-5)=?12.0/34.0-1.52.5+65(int)67.5572.5

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式強制類型轉換

運算符兩側的數(shù)據(jù)類型不同時,先自動進行類型轉換,再運算。程序員可以強制進行某種轉換。

一般形式:

(類型名)(表達式)

例(double)a;(int)(x+y);(int)x+y(float)(5%3);

(int)a;

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式說明:強制類型轉換時,得到一個所需類型的中間變量,原來變量的類型不發(fā)生變化。[例2.8]強制類型轉換#include<stdio.h>voidmain(){float

x;

inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}

C語言程序設計

第二章數(shù)據(jù)類型、運算符與表達式自增、自減運算符

自增:使變量的值加1;自減:使變量的值減1。

++i;/*在使用i之前使i加1*/

--i;/*在使用i之前使i減1*/

i++;/*在使用i之后使i加1*/

i--;/*在使用i之后使i減1*/

i=3;

j=++i;/*先使i加1,再賦給j。*/k=i++;

print(“j=%d,i=%d,k=%d”,j,i,k);

輸出為:j=4,

溫馨提示

  • 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

提交評論