第三章數(shù)據(jù)類型_第1頁
第三章數(shù)據(jù)類型_第2頁
第三章數(shù)據(jù)類型_第3頁
第三章數(shù)據(jù)類型_第4頁
第三章數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章數(shù)據(jù)類型第一頁,共五十二頁,2022年,8月28日第三章

數(shù)據(jù)類型、運算符與表達式3.1基本概念1、C語言程序的組成特點

一個C源程序由函數(shù)構(gòu)成,其中至少包含一個主函數(shù)(main函數(shù))。

C程序總是由main函數(shù)開始執(zhí)行。分號“;”是C語言的一部分。C程序書寫格式自由,一行內(nèi)可以寫多條語句,且語句中的空格和回車符均可忽略不計。程序的注釋部分應(yīng)括在/*……*/之間;/和*之間不允許留有空格;注釋都分允許出現(xiàn)在程序中的任何位置上。第二頁,共五十二頁,2022年,8月28日2、標識符

C語言的標識將可分為以下三類:一、關(guān)鍵字

C語言共有32個關(guān)用字;每個關(guān)鍵字在C程序中都代表著某一固定含意,所有關(guān)鍵字都要用小寫英文字母表示,且這些關(guān)鍵字都不允許作為用戶標識將使用。C語言中的關(guān)鍵字可見書.二、預定義標識符

這些標識符在C而言中都具有特定含意,如C語言提供的庫函數(shù)的名字和預編譯處理命令。C語言語法允許用戶把這類標識用作其它用途,但這將使這些預定義標識符失去系統(tǒng)規(guī)定的原意。鑒于目前各種計算機系統(tǒng)的C語言已經(jīng)把這類標識符作為統(tǒng)一的庫函數(shù)名或預編譯處理中的專用命令名使用,因此為了避免誤解,建議用戶不要把這些預定義標識符作它用或?qū)⑺鼈冎匦露x。第三頁,共五十二頁,2022年,8月28日2、標識符三、用戶標識符用戶可以根據(jù)需要對C程序中用到的變量、符號常量、自己的函數(shù)或文件指針進行命名,形成用戶標識符。這類標識符的構(gòu)成規(guī)則如下:由英文字母、數(shù)字、下劃線組成;且第一個字符不能是數(shù)字,必須是字母或下劃線。如:

sum,average,class,student_nameM.D,$123.#33,3D64,a>bERROR!大、小寫英文字母的含意不同。標識符中所允許包含的字符個數(shù)隨不同的C編譯系統(tǒng)而有所不同,通??梢宰R別前面6個字符。用戶取名時,應(yīng)當盡量遵循“簡潔明了”和“見名知意”的原則。注意:

大寫字母和小寫字母被認為是兩個不同的字符。因此,sum和SUM是兩個不同的變量名。習慣上,變量名用小寫字母表示,以增加可讀性。第四頁,共五十二頁,2022年,8月28日3、C語言的數(shù)據(jù)類型

整型字符型單精度基本類型實型枚舉類型雙精度

數(shù)據(jù)類型數(shù)組類型構(gòu)造類型結(jié)構(gòu)體類型共用體類型指針類型

空類型

第五頁,共五十二頁,2022年,8月28日3.2常量(Constant)⒈常量的概念在程序中不能改變的量稱為常量。常量的類型由數(shù)據(jù)的外部表現(xiàn)形式確定。

常量區(qū)分為不同的類型,如12、0、-3等為整型常量,4.6,-1.23等為實型常量,’a’,’d’為字符常量,一般從其字面形式即可判別,也可以用一個標識符代表一個常量。#definePI3.1415926main()/*test1.c*/{floats,r,l;/*constfloatPI=3.1415926*/r=10.;l=2.*PI*r;s=PI*r*r;printf("l=%fs=%f\n",l,s);printf("PI=%f\n",PI);}第六頁,共五十二頁,2022年,8月28日2、符號常量概念:用一個標識符代表一個常量。例:#definePRICE30main()/*

test2.c*/{

intnum,total;

num=10;total=num*PRICE;printf("total=%d",total);}第七頁,共五十二頁,2022年,8月28日3.3變量(Variable)⒈變量的概念變量是在程序中可以改變的量,變量具有三個特征:

⑴變量有名,用標識符命名;

⑵變量有類型;

⑶在程序中可以改變。

變量對應(yīng)于內(nèi)存中某一地址下的幾個單元,變量名作為程序引用變量的標志。變量的類型確定了變量在內(nèi)存中所占單元的數(shù)量及其表示的方式。變量的地址可以通過&運算獲得。內(nèi)存inta;

a變量的引用標志&a對應(yīng)a的地址。整型變量占兩個內(nèi)存單元。變量必須先說明后使用!說明的目的是確定變量的名字和類型。第八頁,共五十二頁,2022年,8月28日3.4整型數(shù)據(jù)⑴整型常量的表示整型常量根據(jù)表示的范圍可以有長整型和一般整型,還可以表示為十進制、八進制、十六進制。其中八進制、十六進制不能有符號。一般整型的表示進制表示舉例范圍字節(jié)數(shù)十進制2304 -32768~+32767 2八進制04400 0~0177777 2十六進制0xaa00 0x0000~0xffff 2長整型的表示進制表示舉例范圍字節(jié)數(shù)十進制 -21234l -231~+231-1

4八進制04400l 0~017777777774十六進制 0xaa00l 0x0000----0xffffffff4第九頁,共五十二頁,2022年,8月28日3.4整型數(shù)據(jù)⑵整型變量的分類①有符號整型變量說明說明符 所占字節(jié)數(shù) 范圍

int 2 -32768~+32767short [int] 2 -32768~+32767long [int] 4 -2147483648~+2147483647②無符號整型變量說明說明符 所占字節(jié)數(shù) 范圍unsigned 2 0~65535unsignedshort 2 0~65535unsignedlong 4 0~4294967295unsignedd,e,f;第十頁,共五十二頁,2022年,8月28日3.4整型數(shù)據(jù)⑶整型變量的定義

C規(guī)定在程序中所有用到的變量都必須在程序中指定其類型,即“定義”。例如:

inta,b;(指定變量a,b為整型)

unsignedshortc,d;(指定變量c,d為無符號短整型)

1onge,f;(指定變量e,f為長整型)

對變量的定義,一般是放在一個函數(shù)的開頭部分(也可以放在程序中間,但作用域只限于某一分程序,這將在后面介紹)。第十一頁,共五十二頁,2022年,8月28日3.4整型數(shù)據(jù)⑶整型變量的定義(舉例)/*test3.c*/main(){inta,b,c,d;/*指定a,b,c,d為整型變量*/

unsignedu;/*指定u為無符號整型變量*/

a=12;b=-24;u=10;c=a+u;d=b+u;printf("c=%dd=%d",c,d);}不同種類的整型數(shù)據(jù)可以進行算術(shù)運算。第十二頁,共五十二頁,2022年,8月28日(1)浮點型常量的表示(只有十進制表示)浮點型常量有兩種表示方式:小數(shù)表示方法,指數(shù)表示方法。不區(qū)分單、雙精度。小數(shù)表示方式規(guī)則:一個小數(shù)點、符號和至少一位數(shù)字。-2.01.0.11113-15.指數(shù)表示方式規(guī)則:規(guī)則:ne±m(xù)表示n×10mn小數(shù)部分,整型常量或小數(shù)形式表示的實型常量。指數(shù)部分,三位整數(shù)。

n決定精度,一般精度為7位;m決定范圍,范圍10-38到10+38,當超過范圍時稱為“溢出”,小于10-38稱為下溢,當0處理,大于10+38,稱為上溢,系統(tǒng)出錯!123.456表示為0.123456E+3-10000000

表示為-1e+70.0000123

表示為0.123e-43.5實型數(shù)據(jù)第十三頁,共五十二頁,2022年,8月28日(2)實型變量

C實型變量分為單精度(float型)和雙精度(double型)兩類,對每一個實型變量都應(yīng)在使用前加以定義。如:floatx;/*一般,一個float型數(shù)據(jù)在內(nèi)存中占4個字節(jié)(32位)*/doublez;/*一個double型數(shù)據(jù)占8個字節(jié)。*/

單精度實數(shù)提供7位有效數(shù)字,雙精度實數(shù)提供15~16位有效數(shù)字,數(shù)值的范圍隨機器系統(tǒng)而異。單精度實數(shù)的數(shù)值范圍約為10-38~1038,雙精度實數(shù)范圍約為10-308~10308。應(yīng)當說明,實型常量不分float型和double型。一個實型常量可以賦給一個float型或double型變量。根據(jù)變量的類型截取實型常量中相應(yīng)的有效位數(shù)字,3.5實型數(shù)據(jù)說明符所占字節(jié)數(shù) 范圍精度float 4 10-38~10+38 7位double 8 10-306~10+306 16位第十四頁,共五十二頁,2022年,8月28日(2)實型變量例:main()/*test4.c*/{floats;s=111111.11;printf("\nfloat=%f",s);}3.5實型數(shù)據(jù)main()/*test5.c*/{doubles;s=111111.11;printf("\ndouble=%f",s);}第十五頁,共五十二頁,2022年,8月28日

(3)實型數(shù)據(jù)的舍入問題3.5實型數(shù)據(jù)浮點型變量包含精度和范圍兩個概念。超過精度位數(shù)后的位數(shù)值不確定。floata;a=1.1111111111;超過范圍溢出(Overflow)。floata,b,c;a=1.234e+20b=2.345e+21c=a*b

當運算結(jié)果大于10+38稱為上溢,系統(tǒng)出錯。當運算結(jié)果小于10-38稱為下溢,當0處理。超出精度部分,不準確。超出1038,溢出。第十六頁,共五十二頁,2022年,8月28日3.6字符型數(shù)據(jù)(1)字符常量的表示表示ASCII字符集中的一個字符。字符有一個整型值,即該字符的ASCII碼值。表示方法:’a’、’!’

。撇號定界的一個字符。值為:97(2)字符串常量的表示雙引號“定界的字符序列。系統(tǒng)會在最后一個字符后加NULL(ASCII碼值為0),標志字符串的結(jié)束。如:”HEFEI””hello”’a’和”a”的區(qū)別?內(nèi)部’a’:97”a”:97NULL第十七頁,共五十二頁,2022年,8月28日3.6字符型數(shù)據(jù)(3)轉(zhuǎn)義字符轉(zhuǎn)義字符是C語言表示字符的特殊方法,用來表示ASCII字符集中的控制字符,以及系統(tǒng)占用字符如:”。表示方法:①\字符;②

\八進制(十六進制整數(shù),小于256)

\b 表示回退一格字母\n 表示換到下一行頭 \r 表示回車到本行頭 \t表示TAB(占8列) \\ 表示\ \? 表示?符號 \’ 表示’ \” 表示” \0 表示NULL八進制十六進制數(shù)\x41\101代表’A’printf(“\007”);響鈴printf(“語文\n數(shù)學\n”);例:“\\141\141abc\t”?統(tǒng)計該字符串的長度第十八頁,共五十二頁,2022年,8月28日

(4)轉(zhuǎn)義字符舉例

main()/*test7.c*/{

printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk");}

運行結(jié)果:

f_______gdeh______j_k

3.6字符型數(shù)據(jù)第十九頁,共五十二頁,2022年,8月28日

(5)字符變量

一個字符占一個字節(jié).

字符型變量用來存放字符常量,注意只能放一個字符,不要以為在一個字符變量中可以放一個字符串(包括若干字符)。

字符變量的定義形式如下:

charc1,c2;它表示c1和c2為字符型變量,各可以放一個字符,因此可以用下面語句對c1、c2賦值:

c1=‘a(chǎn)’;c2=‘b’;一般以一個字節(jié)來存放一個字符,或者說一個字符變量在內(nèi)存中占一個字節(jié)。3.6字符型數(shù)據(jù)說明符所占字節(jié)數(shù) 范圍char 1 -128~+127unsignedchar 1 0~255第二十頁,共五十二頁,2022年,8月28日

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

將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。例如字符‘a(chǎn)’的ASCII代碼為97,‘b’為98,。實際上是以二進制形式存放的.3.6字符型數(shù)據(jù)c1c297980110000101100010main(){charc1,c2;

c1=97;c2=98;

printf(“%c%c”,c1,c2);}運行結(jié)果:ab第二十一頁,共五十二頁,2022年,8月28日

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

c1、c2被指定為字符變量。但在第3行中,將整數(shù)97和98分別賦給c1和c2,它的作用相當于以下兩個賦值語句:

c1='a';c2='b'因為‘a(chǎn)’和‘b’的ASCII碼為97和98。也可以理解為將97和98兩個整數(shù)直接存放到cl和c2的內(nèi)存單元中。字符數(shù)據(jù)以ASCII碼存儲,它的存儲形式與整數(shù)的存儲形式相類似。C語言使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。一個字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。以字符形式輸出時,需要先將存儲單元中的ASCII碼轉(zhuǎn)換成相應(yīng)字符,然后輸出。以整數(shù)形式輸出時,直接將ASCII碼作為整數(shù)輸出。也可以對字符數(shù)據(jù)進行算術(shù)運算,此時相當于對它們的ASCII碼進行算術(shù)運算。3.6字符型數(shù)據(jù)第二十二頁,共五十二頁,2022年,8月28日

(6)字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。如:

inti;charc;i=’a’;c=97;是合法的。如果將i的值輸出得到97。輸出c可得字符‘a(chǎn)’。字符數(shù)據(jù)可以以字符形式輸出,也可以用整數(shù)形式輸出。例如在上面語句之后執(zhí)行語句:

printf(”%c,%d\n”,c,c);

printf(”%c,%d\n”,i,i);

printf(”%c,%d\n”,i-32,i-32);3.6字符型數(shù)據(jù)輸出的結(jié)果是什么?第二十三頁,共五十二頁,2022年,8月28日

(7)字符串常量

字符常量是由一對單引號括起來的單個字符。C語言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是一對雙引號括起來的字符序列。如:

“Howdoyoudo?!?,”CHINA”,”$123.45”都是字符串常量,可以輸出一個字符串,如

printf(”Howdoyoudo.”);

charc;c=’a’;

right!

c=”a”;

error!c=”CHINA”,也是錯誤的。不能把一個字符串賦給一個字符變量。3.6字符型數(shù)據(jù)‘a(chǎn)’和“a”究竟有什么區(qū)別?第二十四頁,共五十二頁,2022年,8月28日

(7)字符串常量C規(guī)定:在每一個字符串的結(jié)尾加一個“字符串結(jié)束標志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。c規(guī)定以字符‘\0’作為字符串結(jié)束標志?!甛0’是一個ASCII碼為0的字符,從ASCII代碼表中可以看到ASCII碼為0的字符是,“空操作字符”,即它不引起任何控制動作,也不是一個可顯示的字符。如果有一個字符串,“CHINA”實際上在內(nèi)存中是:3.6字符型數(shù)據(jù)CHINA\0它的長度6個字符,最后一個字符為’\0’。但在輸出時不輸出.例如:printf(”Howdoyoudo?!保┹敵鰰r一個一個字符輸出,直到遇到最后的’\0’字符,就知道字符串結(jié)束,停止輸出?!?’,字符是系統(tǒng)自動加上的。第二十五頁,共五十二頁,2022年,8月28日3.7變量賦初值

程序中常需要對一些變量預先設(shè)置初值。C規(guī)定,可以在定義變量時同時使變量初始化。如:

inta=3;指定a為整型變量,初值為3

floatf=3.56;指定f為實型變量,初值為3.56

charc=’a’;指定c為字符變量,初值為‘a(chǎn)’

也可以使被定義的變量的一部分賦初值。如:

inta,b,c=5表示a、b、c為整型變量,只有c初始化,值為5。如果對幾個變量賦以同一個初值,不能寫成:

inta=b=c=3;

ERROR!而應(yīng)寫成:

inta=3,b=3,c=3;

RIGHT!

第二十六頁,共五十二頁,2022年,8月28日3.7變量賦初值初始化不是在編譯階段完成的(只有在后面介紹的靜態(tài)存儲變量和外部變量的初始化是在編譯階段完成的),而是在程序運行時執(zhí)行本函數(shù)時賦以初值的。相當于有一個賦值語句,例如

inta=3;相當于:

inta;/指定a為整型變量

a=3;/賦值語句,將3賦予a/又如

inta,b,c=5;相當于:

inta,b,c;/指定a、b、c為整型變量/

c=5;/將5賦給c/

第二十七頁,共五十二頁,2022年,8月28日3.8各類數(shù)值型數(shù)據(jù)間的混合運算

整型、單精度型、雙精度型數(shù)據(jù)可以混合運算。前已述及,字符型數(shù)據(jù)可以與整型通用,因此,整型、實型(包括單、雙精度)、字符型數(shù)據(jù)間可以混合運算。例如10+‘a(chǎn)’+1.5-8765.1234*‘b’是合法的。在進行運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進行運算。轉(zhuǎn)換的規(guī)則按下圖所示

double

float

long

unsigned

int

char,short第二十八頁,共五十二頁,2022年,8月28日3.8各類數(shù)值型數(shù)據(jù)間的混合運算圖中橫向向左的箭頭表示必定的轉(zhuǎn)換,如字符數(shù)據(jù)必定先轉(zhuǎn)換為整數(shù),short型轉(zhuǎn)為int型,float型數(shù)據(jù)在運算時一律轉(zhuǎn)換成雙精度型,以提高運算精度(即使是兩個float型數(shù)據(jù)在加化成double型,然后再相加)。

縱向的箭頭表示當運算對象為不同類型時轉(zhuǎn)換的方向。例如int型與doub1e型數(shù)據(jù)進行運算,先將int型的數(shù)據(jù)轉(zhuǎn)換成圖double型,然后在兩個同類型(double型)數(shù)據(jù)進行運算,結(jié)果為double型。注意箭頭方向只表示數(shù)據(jù)類型級別的高低,由低向高轉(zhuǎn)換,不要理解為int型先轉(zhuǎn)成unsigned型,再轉(zhuǎn)成1ong型,再轉(zhuǎn)成double型。如果一個Int型數(shù)據(jù)與一個double型數(shù)據(jù)運算,是直接將int型轉(zhuǎn)成double型。同理,一個int型與一個Long型數(shù)據(jù)運算,先將int型轉(zhuǎn)換成1ong型。第二十九頁,共五十二頁,2022年,8月28日3.8各類數(shù)值型數(shù)據(jù)間的混合運算換言之,如果有一個數(shù)據(jù)是float型或double型,則另一數(shù)據(jù)要先轉(zhuǎn)為double型,結(jié)果為double型。如果二個數(shù)據(jù)中最高級別為1ong型,則另一數(shù)據(jù)先轉(zhuǎn)為1ong型,結(jié)果為1ong型。其它依此類推。舉例說明:假設(shè)已指定i為整型變量,f為float變量,d為double型變量,e為1ong型,有下面式子:10十’a’+i*f-d/e運算次序為:①進行10+’a’的運算,先將‘a(chǎn)’轉(zhuǎn)換成整數(shù)97,運算結(jié)果為107。②進行i*f的運算。先將i與f都轉(zhuǎn)成double型,運算結(jié)果為dOuble型。③整數(shù)107與i*f的積相加。先將整數(shù)107轉(zhuǎn)換成雙精度數(shù)(小數(shù)點后加若干個0,即107.000…00),結(jié)果為double型。④將變量e化成double型,d/e結(jié)果為double型。⑤將10十’a’+i*f的結(jié)果與”d/e結(jié)果為double型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動進行的。第三十頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式3.9.1C運算符簡介C的運算符有以下幾類:

1.算術(shù)運算符(+-*/%)

2.關(guān)系運算符(><==>=<=!=)

3.邏輯運算符(!&&||)

4.位運算符(<<>>~|^&)

5.賦值運算符(=及其擴展賦值運算符)

6.條件運算符(?:)

7.逗號運算符(,)

8.指針運算符(*和&)第三十一頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式3.9.1C運算符簡介C的運算符有以下幾類:

9.求字節(jié)數(shù)運算符(sizeof)

10.強制類型轉(zhuǎn)換運算符(類型)11.分量運算符(.→)

12.下標運算符([])

13.其它(如函數(shù)調(diào)用運算符())

第三十二頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式程序重要的一點是對數(shù)據(jù)按照算法進行處理(運算)。C語言的運算功能強大。數(shù)據(jù)通過運算符連接的式子稱為表達式,表達式根據(jù)運算對象及運算關(guān)系得到一個值。分類介紹如下:⒈變量賦值運算格式:

V=expression;/*將expression的值賦給變量V*/inta=2;/*說明賦值,編譯時賦值。*/intb;b=3+2;/*說明后賦值,執(zhí)行時賦值。*/說明:⑴=是賦值號(動詞);⑵賦值運算的左值只能是變量。a=a+2;iCount=iCount+10;a+2=12;/*Error!*/⑶賦值號兩邊類型應(yīng)該一致,如不一致,以變量類型轉(zhuǎn)換。inta=2.5;/*2a*/這里a的值等于2第三十三頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式1.基本的算術(shù)運算功能:完成各種類型數(shù)據(jù)的加、減、乘、除及求余數(shù)運算。雙目算術(shù)運算(兩個運算對象參加的運算)運算運算規(guī)則示例+加2+3-減a-b*乘2*(-a)/除12/3.0%求余數(shù)15%4只能對整型或字符型數(shù)據(jù)運算。余數(shù)符號與被除數(shù)相同。-12%5-2?-12%(-5)“向零取整”.-5/3=-1第三十四頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式2.算術(shù)表達式和運算符的優(yōu)先級與結(jié)合級(附錄III)表達式:數(shù)據(jù)通過運算符連接的式子C算術(shù)表達式:用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語言語法規(guī)則的式子。如:a*b/c-1.5+’a’

求表達式的值時,先按運算符的優(yōu)先級別高到低的次序執(zhí)行。

a+b*c–(x+y)/c算術(shù)運算符的結(jié)合方向為:“自左至右”

a-b+c如果參加運算的兩個數(shù)中有一個數(shù)為實數(shù),則結(jié)果是double型,因為所有實數(shù)都按double型進行運算.如果一個運算符的兩側(cè)的數(shù)據(jù)類型不同,則會按右邊所述,先自動進行類型轉(zhuǎn)換,使二者具有同一種類型,然后進行運算。double

float

long

unsigned

int

char,short第三十五頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式3.強制類型轉(zhuǎn)換運算符將一個表達式轉(zhuǎn)換成所需類型

(double)a

(將a轉(zhuǎn)換成double類型)

(int)(x+y)(將調(diào)x+y的值轉(zhuǎn)換成整型)

(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)其一般形式為:

(類型名)(表達式)注意:表達式應(yīng)該用括號括起來。如果寫成

(int)x+y:只將x轉(zhuǎn)換成整型,然后與y相加。需要說明的是在強制類型轉(zhuǎn)換時,得到一個所需類型的中間變量,原來變量的類型未發(fā)生變化。例如(int)x(不要寫成int(x))如果x原指定為float型,進行強制類型運算后得到一個int型的中間變量,它的值等于x的整數(shù)部分,而x的類型不變(仍為float型,)第三十六頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式3.強制類型轉(zhuǎn)換運算符將一個表達式轉(zhuǎn)換成所需類型

main()/*test8.c*/{floatx;

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

}結(jié)論:兩種類型轉(zhuǎn)換:一種是系統(tǒng)自動進行類型轉(zhuǎn)換一種是強制類型轉(zhuǎn)換

當自動類型轉(zhuǎn)換不能實現(xiàn)目的時,可以用強制類型轉(zhuǎn)換。如:“%”運算符要求其兩側(cè)均為整型量,若x為float型,則“x%3”不合法,必須用:(int)x%3”。強制類型轉(zhuǎn)換運算優(yōu)先于%運算,因此先進行(int)x的運算,得到一個整型的中間變量,然后再對3求模。此外,在函數(shù)調(diào)用時,有時為了使實參與形參類型一致,可以用強制類型轉(zhuǎn)換運算符得到一個所需類型的參數(shù)。第三十七頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式4.類型轉(zhuǎn)換小結(jié)運算對象的類型相同,運算結(jié)果取運算對象相同的類型。inta;floatb;b=2/3;/*0b0.0*/a=5.0/2.0;/*2.5a0*/運算對象的類型不同,先將低等類型轉(zhuǎn)換為高等類型后再進行運算,運算結(jié)果取高等類型。等級原則如下:charintlongdoublefloat2*16.0+15.0doublefloatdouble運算時可以實行類型的強制轉(zhuǎn)換,格式如下:(type)expression只對當前表達式起作用。(float)a/(int)’c’+(float)(a+10)第三十八頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式4.自加、自減運算(單目運算):

本章重點、難點運算符前置后置運算關(guān)系++++aa++a=a+1

----aa--a=a-1說明:①運算對象只能是一個變量(不能對常量和表達式)。②前置是先運算,后引用,而后置則是先引用,后運算。2++;/*Error!*/inti,x;i=5;x=i++;/*x=i;i=i+1;*/i=5;x=++i;/*i=i+1;x=i;*/結(jié)合方向:自右至左第三十九頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式4.自加、自減運算(單目運算)自增、自減運算符的用法與運算規(guī)則示例。main()/***A1.c***/{

intx=6,y;

printf("x=%d\n",x); /*輸出x的初值*/

y=++x; /*前置運算*/

printf("y=++x:x=%d,y=%d\n",x,y);

y=x--; /*后置運算*/

printf("y=x--:x=%d,y=%d\n",x,y);}第四十頁,共五十二頁,2022年,8月28日3.9算術(shù)運算符和算術(shù)表達式5.有關(guān)表達式使用中的問題說明C運算符和表達式使用靈活a=3;j=(a++)+(a++)+(a++);printf(“a=%d,j=%d”,a,j);

結(jié)果為:a=6j=9如何理解?(test9.c)

i+++j為(i++)+j還是i+(++j)呢?

C編譯系統(tǒng)在處理時盡可能多地(自左向右)將若干個字符組成一個運算符。

i+++j=(i++)+ji=3;printf(“%d,%d”,i,i++);(test10.c)

在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右而左。故上面的結(jié)果為:4,3

第四十一頁,共五十二頁,2022年,8月28日3.10賦值運算符和賦值表達式1.賦值運算符賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運算)。把常量3賦給變量a,也可以將一個表達式的值賦給一個變量。2.類型轉(zhuǎn)換(重點、難點)如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進行類型轉(zhuǎn)換。(1).將實型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄實數(shù)的小數(shù)部分。如i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3。(2).將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值下變,但以浮點數(shù)形式存儲到變量中,如將23賦給float變量f,即f=23,先將23轉(zhuǎn)換成23.000000,再存儲在f中。如將23賦給double型變量d,即d=23,則將23補足有效位數(shù)字為23.00000000000000,然后以雙精度浮點數(shù)形式存儲到d中。第四十二頁,共五十二頁,2022年,8月28日3.10賦值運算符和賦值表達式(3).將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元中。

(4).字符型數(shù)據(jù)賦給整型變量時,由于字符只占一個字節(jié),而整型變量為2個字節(jié),因此將字符數(shù)據(jù)(8位)放到整型變量低8位中。有兩種情況:

如果所用系統(tǒng)將字符處理為無符號的量或?qū)nsignedchar型變量賦值,則將字符的8位放到整型變量低8位,高8位補零。例如:將字符‘\376’(八進制)賦給int型變量I0000000011111110如果所用系統(tǒng)將字符處理為帶符號的量,若字符最高位為0.則整型變量高8位補0;若字符最高位為1.則高8位全補1,這稱為“符號擴展”.這樣做的目的是使數(shù)值保持不變,如變量c(字符、‘\376’)以整數(shù)形式輸出為一2,i的值也是一2。1111111111111110第四十三頁,共五十二頁,2022年,8月28日3.10賦值運算符和賦值表達式(5).將一個int、short、long型數(shù)據(jù)賦給char變量時,只將其低8位原封不動地送到char型變量中。例:IntI=289;charc;c=I;0000000100100001(6).將帶符號的整型數(shù)據(jù)(int型)賦給1ong型變量時。要進行符號擴展,如果int型數(shù)據(jù)為正值(符號位為0).則1ong型變量的高16位補0;如int型變量為負值(符號位為1),則1ong型變量的高16位補1,將整型數(shù)(int型)的16位送到1ong型低16位中,以保持數(shù)值不改變。反之,若將一個1ong型數(shù)據(jù)賦給一個int型變量,只將1ong型數(shù)據(jù)中低16位原封不動送到整型變量(即截斷)00100001I=289C=33?Longb=‘\x6823’;inta;a=b;第四十四頁,共五十二頁,2022年,8月28日3.10賦值運算符和賦值表達式(7)將unsignedint型數(shù)據(jù)賦給longint,不存在擴展問題,只需將高位補0即可。將一個unsignedint型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的整型變量(例如unsignedint→int,unsignedlong→long,unsignedshort→short)將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。如:

unsignedinta=65535(216-1);intb;b=a;printf(“%d”,b);將a整個送到b中,由于b是int型,第1位是符號位,成了負數(shù)。(-1的補碼)運行結(jié)果為:-1第四十五頁,共五十二頁,2022年,8月28日3.10賦值運算符和賦值表達式3.復合的賦值運算符(重點、難點)運算符表達式示例運算關(guān)系+=a+=3a=a+3-=b=cb=b-c*=a*=2a=a*2/=s/=ts=s/t%=a%=5a=a%5說明:①運算對象的左值只能是一個變量。(a+2)+=5;/*Error!*/②%=運算的對象,必須是整性。思考:a=12;a/=a+a;?a第四十六頁,共五十二頁,2022年,8月28日3.10賦值運算符和賦值表達式4.賦值表達式

賦值表達式:由賦值運算符將一個變量和一個表達式連接起來的式子。(結(jié)尾無分號)它的一般形式為:(變量)(賦值運算符)(表

溫馨提示

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

評論

0/150

提交評論