第二章數(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頁,還剩91頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第二章o2.12.1常量與變量常量與變量o2.2 2.2 基本數(shù)據(jù)類型基本數(shù)據(jù)類型o2.3 2.3 數(shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換o2.4 2.4 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式o2.5 2.5 運(yùn)算符的優(yōu)先級(jí)和結(jié)合性運(yùn)算符的優(yōu)先級(jí)和結(jié)合性l 主要內(nèi)容主要內(nèi)容 2.1 常量與變量常量與變量2.1.1 常量和符號(hào)常量常量和符號(hào)常量o在程序運(yùn)行過程中在程序運(yùn)行過程中, ,其值不能被改變的量稱為常量其值不能被改變的量稱為常量o常量區(qū)分為不同的類型:常量區(qū)分為不同的類型:整型 100,125,-100,0實(shí)型 3.14 , 0.125,-3.789字符型 a, b,2字符串 “a”, “ab”,”1232

2、”符號(hào)常量 PI1.整型常量整型常量即整常數(shù)。在語言中,整常數(shù)整型常量即整常數(shù)。在語言中,整常數(shù)可用以下三種形式表示:可用以下三種形式表示:(1)(1)十進(jìn)制整數(shù)。十進(jìn)制整數(shù)。 如:如:123, -456.4123, -456.4。(2)(2)八進(jìn)制整數(shù)。以八進(jìn)制整數(shù)。以0 0頭的數(shù)是八進(jìn)制數(shù)。頭的數(shù)是八進(jìn)制數(shù)。 如:如:01230123表示八進(jìn)制數(shù)表示八進(jìn)制數(shù)123123,等于十進(jìn)制數(shù),等于十進(jìn)制數(shù)83,-01183,-011表表示八進(jìn)制數(shù)示八進(jìn)制數(shù)-11,-11,即十進(jìn)制數(shù)即十進(jìn)制數(shù)-9-9。(3)(3)十六進(jìn)制整數(shù)。以十六進(jìn)制整數(shù)。以0 x0 x開頭的數(shù)是開頭的數(shù)是1616進(jìn)制數(shù)。進(jìn)制數(shù)

3、。 如:如:0 x1230 x123,代表,代表1616進(jìn)制數(shù)進(jìn)制數(shù)123,123,等于十進(jìn)制數(shù)等于十進(jìn)制數(shù) 291291。 - -0 x120 x12等于十進(jìn)制數(shù)等于十進(jìn)制數(shù)1010。 (1)(1)一個(gè)整數(shù),如果其值在一個(gè)整數(shù),如果其值在-32768-32768+32767+32767范圍內(nèi),認(rèn)為它是范圍內(nèi),認(rèn)為它是intint型,它可以賦值給型,它可以賦值給intint型和型和long intlong int型變量。型變量。(2) (2) 一個(gè)整數(shù),如果其值超過了上述范圍,而在一個(gè)整數(shù),如果其值超過了上述范圍,而在- -21474836372147483637+2147483647+214

4、7483647范圍內(nèi),則認(rèn)為它是為長整型。范圍內(nèi),則認(rèn)為它是為長整型??梢詫⑺x值給一個(gè)可以將它賦值給一個(gè)long intlong int型變量。型變量。 (3) (3) 如果所用的如果所用的C C版本(如版本(如Turbo CTurbo C)分配給)分配給short intshort int與與intint型型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與intint型相型相同。因此一個(gè)同。因此一個(gè)intint型的常量同時(shí)也是一個(gè)型的常量同時(shí)也是一個(gè)short intshort int型常量,型常量,可以賦給可以賦給intint型或型或short i

5、ntshort int型變量。型變量。整型常量的類型整型常量的類型整型常量的類型整型常量的類型(4) 一個(gè)整常量后面加一個(gè)字母一個(gè)整常量后面加一個(gè)字母u或或U,認(rèn)為是,認(rèn)為是unsigned int型,如型,如12345u,在內(nèi)存中按,在內(nèi)存中按unsigned int規(guī)定的方規(guī)定的方式存放式存放(存儲(chǔ)單元中最高位不作為符號(hào)位,而用來存儲(chǔ)數(shù)存儲(chǔ)單元中最高位不作為符號(hào)位,而用來存儲(chǔ)數(shù)據(jù)據(jù))。如果寫成。如果寫成-12345u,則先將,則先將-12345轉(zhuǎn)換成其補(bǔ)碼轉(zhuǎn)換成其補(bǔ)碼53191,然后按無符號(hào)數(shù)存儲(chǔ)。,然后按無符號(hào)數(shù)存儲(chǔ)。(5) 在一個(gè)整常量后面加一個(gè)字母在一個(gè)整常量后面加一個(gè)字母l或或L,

6、則認(rèn)為是,則認(rèn)為是long int型常量。型常量。 例如:例如: 123l.432L.0L 用于函數(shù)調(diào)用中。用于函數(shù)調(diào)用中。如果函數(shù)的形參為如果函數(shù)的形參為long int型,則要求實(shí)參也為型,則要求實(shí)參也為long int型。型。 2.實(shí)型常量實(shí)型常量浮點(diǎn)型常量的表示方法浮點(diǎn)型常量的表示方法兩種表兩種表示形式示形式浮點(diǎn)表示法浮點(diǎn)表示法科學(xué)計(jì)數(shù)法科學(xué)計(jì)數(shù)法0.1230.1233e-33e-3注意注意: :字母字母e(e(或或E)E)之前必須有數(shù)字,且之前必須有數(shù)字,且e e后面的指數(shù)必須為整數(shù)后面的指數(shù)必須為整數(shù) 在字母在字母e e(或(或E E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊)之前的小數(shù)部分中

7、,小數(shù)點(diǎn)左邊應(yīng)有一位(且只能有一位)非零的數(shù)字應(yīng)有一位(且只能有一位)非零的數(shù)字. . 例如例如: : 123.456123.456可以表示為:可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e0.0123456e4, 0.00123456e 其中的其中的1.23456e31.23456e3稱為稱為“規(guī)范化的指數(shù)形式規(guī)范化的指數(shù)形式”。規(guī)范化的指數(shù)形式:規(guī)范化的指數(shù)形式:浮點(diǎn)型常量的類型浮點(diǎn)型常量的類型注

8、意:注意: 實(shí)型常量不分實(shí)型常量不分floatfloat型和型和doubledouble型,一個(gè)實(shí)型常量型,一個(gè)實(shí)型常量可以賦給一個(gè)可以賦給一個(gè)floatfloat型或型或doubledouble型變量,系統(tǒng)根據(jù)變量型變量,系統(tǒng)根據(jù)變量類型截取常量中相應(yīng)長度的有效位數(shù)字。類型截取常量中相應(yīng)長度的有效位數(shù)字。 3. 字符型常量字符型常量 (1) (1) 用單引號(hào)包含的一個(gè)字符是字符型常量用單引號(hào)包含的一個(gè)字符是字符型常量(2)(2)單引號(hào)只起定界作用單引號(hào)只起定界作用 (3)(3)單引號(hào)中的字符不能是單引號(hào)和反斜杠單引號(hào)中的字符不能是單引號(hào)和反斜杠(4)(4)只能包含一個(gè)字符只能包含一個(gè)字符(5

9、)(5)不能用雙引號(hào)代替單引號(hào)不能用雙引號(hào)代替單引號(hào)(6)(6)空格也是字符空格也是字符a,A, 1a,A, 1abcabc、“a”a” 轉(zhuǎn)義字符轉(zhuǎn)義字符 有些以有些以“”開頭的特殊字符稱為轉(zhuǎn)義字符開頭的特殊字符稱為轉(zhuǎn)義字符, ,它們用來表示特殊符號(hào)或鍵盤上的控制代碼。它們用來表示特殊符號(hào)或鍵盤上的控制代碼。n n 換行換行t t 橫向跳格橫向跳格 r r 回車回車 反斜杠反斜杠 ddd dddddd ddd表示表示1 1到到3 3位八進(jìn)制數(shù)字位八進(jìn)制數(shù)字xhh hhxhh hh表示表示1 1到到2 2位十六進(jìn)制數(shù)字位十六進(jìn)制數(shù)字 4.字符串常量字符串常量o字符串常量是一對雙撇號(hào)括起來的字符序

10、列字符串常量是一對雙撇號(hào)括起來的字符序列. .o合法的字符串常量合法的字符串常量: :“How do you do.”, “CHINA”How do you do.”, “CHINA”, “ “a” a” , “ “$123.45”$123.45”o可以輸出一個(gè)字符串,如可以輸出一個(gè)字符串,如printf(“How do you do.”)printf(“How do you do.”); 是字符常量,是字符常量,”是字符串常量,二者不同。是字符串常量,二者不同。 如:如:假設(shè)被指定為字符變量假設(shè)被指定為字符變量 :char cchar c;c=a; ”a”;c”CHINA”; 結(jié)論:結(jié)論:不

11、能把一個(gè)字符串常量賦給一個(gè)字符變量。不能把一個(gè)字符串常量賦給一個(gè)字符變量。o規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè)規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè) “ “字符字符串結(jié)束標(biāo)志串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。規(guī)定以字符規(guī)定以字符作為字符串結(jié)束標(biāo)志。作為字符串結(jié)束標(biāo)志。 如:如:如果有一個(gè)字符串常量如果有一個(gè)字符串常量” ” ,實(shí)際上在內(nèi)存,實(shí)際上在內(nèi)存中是:中是:CHINA0 它占內(nèi)存單元不是個(gè)字符,而是個(gè)字符,最后一個(gè)它占內(nèi)存單元不是個(gè)字符,而是個(gè)字符,最后一個(gè)字符為字符為。但在輸出時(shí)不輸出。但在輸出時(shí)不輸出。 5.符號(hào)常量o在一個(gè)程序中所指定的

12、以符號(hào)代表的常量。在一個(gè)程序中所指定的以符號(hào)代表的常量。o定義:定義: #define 符號(hào)常量名符號(hào)常量名 常量常量例:例:#define PI 3.1415 #define NULL 0符號(hào)常量的使用符號(hào)常量的使用o#define PRICE 30#define PRICE 30#include #include void main ( )void main ( ) int num, total;int num, total; num=10;num=10; total=num total=num * * PRICE; PRICE; printf(total=%dn,total);print

13、f(total=%dn,total); 1.1.程序中用程序中用#define#define命令行定義命令行定義PRICEPRICE代表常量代表常量30,30,此后凡在本此后凡在本文件中出現(xiàn)的文件中出現(xiàn)的PRICEPRICE都代表都代表30,30,可以和常量一樣進(jìn)行運(yùn)算可以和常量一樣進(jìn)行運(yùn)算 2.2.如再用賦值語句給如再用賦值語句給PRICEPRICE賦值是錯(cuò)的賦值是錯(cuò)的 PRICE=40;PRICE=40;/ /* * 錯(cuò)誤,不能給符號(hào)常量賦值錯(cuò)誤,不能給符號(hào)常量賦值o變量定義:變量定義: 數(shù)據(jù)類型符數(shù)據(jù)類型符 變量列表變量列表o變量的初始化變量的初始化 (1)定義時(shí)直接賦值)定義時(shí)直接賦值

14、 int a=3; / int a=3; / 指定為整型變量,初值為指定為整型變量,初值為 float f=3.56; / float f=3.56; / 指定為浮點(diǎn)型變量,初值為指定為浮點(diǎn)型變量,初值為.56 .56 char c= a; / char c= a; / 指定為字符變量,初值為指定為字符變量,初值為a a(2)變量定義后使用賦值語句初始化:)變量定義后使用賦值語句初始化: int a,b,c; a=1; b=2; c=3; a=b=c=1; (3)調(diào)用輸入輸出函數(shù)為變量賦值)調(diào)用輸入輸出函數(shù)為變量賦值 int a,b,c; scanf(“%d,%d,%d”,&a,&am

15、p;b,&c);(4)(4)可以使被定義的變量的一部分賦初值??梢允贡欢x的變量的一部分賦初值。 如如: : int a,b,c=5int a,b,c=5; 表示指定、為整型變量,表示指定、為整型變量,但只對初始化,但只對初始化,c c的初值為的初值為(5)(5)如果對幾個(gè)變量賦以同一個(gè)初值,如果對幾個(gè)變量賦以同一個(gè)初值, 應(yīng)寫成:應(yīng)寫成:int a=3,b=3,c=3; int a=3,b=3,c=3; 表示、的初表示、的初值都是。值都是。 不能寫成不能寫成int a=b=c3;int a=b=c3;注意:注意:初始化不是在編譯階段完成的而是在程序運(yùn)行時(shí)執(zhí)初始化不是在編譯階段完成的而

16、是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語句。行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語句。2.2基本數(shù)據(jù)類型基本數(shù)據(jù)類型C C語言提供了以下一些數(shù)據(jù)類型。語言提供了以下一些數(shù)據(jù)類型。 shortshortintintlonglong 2.2.1 整數(shù)類型整型變量的分類整型變量的分類共六種共六種有符號(hào)基本整型有符號(hào)基本整型有符號(hào)短整型有符號(hào)短整型有符號(hào)長整型有符號(hào)長整型無符號(hào)基本整型無符號(hào)基本整型無符號(hào)短整型無符號(hào)短整型無符號(hào)長整型無符號(hào)長整型(signed)int (signed)short (int )(signed) long (int)unsigned intunsigned

17、short (int)unsigned long (int) 注意:注意:括號(hào)表示其中的內(nèi)容是可選的括號(hào)表示其中的內(nèi)容是可選的. .2.2.1 整型類型整型類型整型數(shù)據(jù)整型數(shù)據(jù)整型變量的定義整型變量的定義: : 規(guī)定在程序中所有用到的變量都必須在程序中定義,即規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義強(qiáng)制類型定義”。 例如例如: : int a,bint a,b(指定變量、為整型)(指定變量、為整型) unsigned short c,d;unsigned short c,d;(指定變量、為無符號(hào)短整型)(指定變量、為無符號(hào)短整型) long e,f;long e,f;(

18、(指定變量、為長整型)指定變量、為長整型)【例【例2.2】整數(shù)類型數(shù)據(jù)定義、賦值與輸出。】整數(shù)類型數(shù)據(jù)定義、賦值與輸出。 #include void main()int a=40000;/*基本整型*/short int b=30000;/*短整型*/long int c=123456789;/*長整型*/unsigned int d=12;/*無符號(hào)整型*/printf(%dt%dt%dt%un,a,b,c,d); /*整型數(shù)據(jù)輸出,%u為無符號(hào)類型*/運(yùn)行情況:運(yùn)行情況:4000030000 12345678912 #include #include void main()void mai

19、n()int a,b; int a,b; a=32767; a=32767; b=a+1; b=a+1; printf(“%d,%dn”,a,b); printf(“%d,%dn”,a,b); 數(shù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容數(shù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容納納-32768-327683276732767范圍內(nèi)的數(shù),無法表示大于范圍內(nèi)的數(shù),無法表示大于3276732767或小于或小于-32768-32768的數(shù)。遇此情況就發(fā)生的數(shù)。遇此情況就發(fā)生“溢溢出出”。運(yùn)行結(jié)果:運(yùn)行結(jié)果: 32767,-3276832767,-32768整型數(shù)據(jù)的溢出整型數(shù)據(jù)的溢出2.2.2 字符型數(shù)據(jù)字符

20、型數(shù)據(jù) o字符型變量用來存放字符常量,注意只能放一個(gè)字符。字符型變量用來存放字符常量,注意只能放一個(gè)字符。o字符變量的定義形式如下:字符變量的定義形式如下:char c1,c2;char c1,c2;o在本函數(shù)中可以用下面語句對在本函數(shù)中可以用下面語句對c1,c2c1,c2賦值:賦值: c1c1aa;c2c2 b b ;o一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。 o字符型數(shù)據(jù)以其字符型數(shù)據(jù)以其ASCIIASCII碼存儲(chǔ),和整型數(shù)據(jù)可以通用。碼存儲(chǔ),和整型數(shù)據(jù)可以通用。字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法o一個(gè)字符常量存放到一個(gè)字符

21、變量中,實(shí)際上并不是把該字符的字一個(gè)字符常量存放到一個(gè)字符變量中,實(shí)際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCIIASCII代碼放到存儲(chǔ)單元代碼放到存儲(chǔ)單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。注意注意: : 一個(gè)字符數(shù)據(jù)既一個(gè)字符數(shù)據(jù)既可以以字符形可以以字符形式輸出,也可式輸出,也可以以整數(shù)形式以以整數(shù)形式輸出。輸出?!纠纠?.3】字符型數(shù)據(jù)定義、賦值與輸出。】字符型數(shù)據(jù)定義、賦值與輸出。#include void main()char c1=D,c2=d; /*字符型變量定義并賦值

22、*/int x=65,y=97;printf(%ct%cn,c1,c2); /*以字符形式輸出字符型變量值*/printf(%dt%dn,c1,c2); /*以整型形式輸出字符型變量值*/printf(%dt%dn,x,y); /*以整型形式輸出整型變量值*/printf(%ct%cn,x,y); /*以字符形式輸出整型變量值*/運(yùn)行情況:運(yùn)行情況:D Dd d686810010065659797A Aa a#include #include void main()void main() char c1,c2 char c1,c2; c1=a;c1=a; c2=b; c2=b; c1=c1-3

23、2; c1=c1-32; c2=c2-32; c2=c2-32; printf(“ printf(“c c cc,c1,c2c1,c2);); 程序的作用是將兩個(gè)小寫字母程序的作用是將兩個(gè)小寫字母a a和和b b轉(zhuǎn)換成轉(zhuǎn)換成大寫字母大寫字母A A和和B B。從。從ASCIIASCII代碼表中可以看到每一個(gè)代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的小寫字母比它相應(yīng)的大寫字母的ASCIIASCII碼大碼大3232。語言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。語言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。 o運(yùn)行結(jié)果:運(yùn)行結(jié)果: 例例: : 大小寫字母的轉(zhuǎn)換大小寫字母的轉(zhuǎn)換例例: 向字符變量賦以整數(shù)。

24、向字符變量賦以整數(shù)。 #include #include void main()void main() char c1,c2; char c1,c2; c1=97; c1=97; c2=98; c2=98; printf(“%c %cn”,c1,c2); printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); printf(“%d %dn”,c1,c2); 在第和第在第和第4 4行中,將整數(shù)行中,將整數(shù)9797和和9898分別賦給分別賦給c1c1和和c2c2,它的作用相當(dāng)于以下兩個(gè)賦值語句:,它的作用相當(dāng)于以下兩個(gè)賦值語句:c1c1;c2;c2; 因?yàn)橐?/p>

25、為aa和和bb的的ASCIIASCII碼為碼為9797和和9898o運(yùn)行結(jié)果:運(yùn)行結(jié)果: 97 9897 98 有些系統(tǒng)(如有些系統(tǒng)(如Turbo CTurbo C)將字符變量定義為)將字符變量定義為signed charsigned char型。其存儲(chǔ)單元中的最高位作為符號(hào)位,它的取值范圍是型。其存儲(chǔ)單元中的最高位作為符號(hào)位,它的取值范圍是- -128128127127。如果在字符變量中存放一個(gè)。如果在字符變量中存放一個(gè)ASCIIASCII碼為碼為0 0127127間的間的字符,由于字節(jié)中最高位為字符,由于字節(jié)中最高位為0 0,因此用,因此用%d%d輸出字符變量時(shí),輸輸出字符變量時(shí),輸出的是

26、一個(gè)正整數(shù)。如果在字符變量中存放一個(gè)出的是一個(gè)正整數(shù)。如果在字符變量中存放一個(gè)ASCIIASCII碼為碼為128128255255間的字符,由于在字節(jié)中最高位為間的字符,由于在字節(jié)中最高位為1 1,用,用%d%d格式符輸格式符輸出時(shí),就會(huì)得到一個(gè)負(fù)整數(shù)。出時(shí),就會(huì)得到一個(gè)負(fù)整數(shù)。 2.2.3實(shí)數(shù)類型實(shí)數(shù)類型 浮點(diǎn)型變量分為單精度(浮點(diǎn)型變量分為單精度(floatfloat型)、雙精度(型)、雙精度(doubledouble型)和長雙精度型(型)和長雙精度型(long doublelong double)三類形式。)三類形式。 2.2.3浮點(diǎn)型數(shù)據(jù)浮點(diǎn)型數(shù)據(jù)(1)(1)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形

27、式浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式 一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4 4個(gè)字節(jié)個(gè)字節(jié)(32(32位位) )。與整型數(shù)據(jù)的存儲(chǔ)方式不同,浮點(diǎn)型數(shù)據(jù)。與整型數(shù)據(jù)的存儲(chǔ)方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。采用規(guī)范化的指數(shù)形式?!纠纠?.4】實(shí)型數(shù)據(jù)定義、賦值與輸出?!繉?shí)型數(shù)據(jù)定義、賦值與輸出。#include void main()float x=123.123416789,m; /*單精度實(shí)型變量*/d

28、ouble y=123456789.3456789,n; /*雙精度實(shí)型變量*/m=x+y;n=x+y;printf(x=%fn,x);/*有誤差產(chǎn)生*/printf(y=%fn,y);printf(m=%fn,m); /*有誤差產(chǎn)生*/printf(n=%fn,n);運(yùn)行情況:x=123.123413y=123456789.345679m=123456912.000000n=123456912.469092#include #include void main()void main()float a,b;float a,b; a = 123456.789e5; a = 123456.789e

29、5; b = a + 20 ; b = a + 20 ; printf(“%fn”,b); printf(“%fn”,b); 一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是7 7位有效數(shù)字,位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)則就會(huì)“丟失丟失”小的數(shù)小的數(shù)運(yùn)行結(jié)果:運(yùn)行結(jié)果: 123456.789e5123456.789e5浮點(diǎn)型數(shù)據(jù)的舍入誤差浮點(diǎn)型數(shù)據(jù)的舍入誤差2.3數(shù)據(jù)類型的轉(zhuǎn)換o1非賦值運(yùn)算的類

30、型轉(zhuǎn)換非賦值運(yùn)算的類型轉(zhuǎn)換 不同類型的數(shù)據(jù)參加運(yùn)算,編譯程序按照一定規(guī)則不同類型的數(shù)據(jù)參加運(yùn)算,編譯程序按照一定規(guī)則自動(dòng)將它們轉(zhuǎn)換為同一類型,然后再進(jìn)行運(yùn)算。自動(dòng)將它們轉(zhuǎn)換為同一類型,然后再進(jìn)行運(yùn)算。 【例【例2.5】數(shù)據(jù)類型轉(zhuǎn)換?!繑?shù)據(jù)類型轉(zhuǎn)換。 #include void main()double r;int i=6;float f=4.24; double d=6.85;char c=H;r=(8-c)+i*f+d/i;printf(%fn,r); 運(yùn)行情況: -37.418335o2賦值運(yùn)算的類型轉(zhuǎn)換賦值運(yùn)算的類型轉(zhuǎn)換 (1)賦值運(yùn)算的類型轉(zhuǎn)換是指通過賦值運(yùn)算符)賦值運(yùn)算的類型轉(zhuǎn)換是指

31、通過賦值運(yùn)算符“=”實(shí)現(xiàn)變量類型的轉(zhuǎn)換,賦值符號(hào)右邊的表達(dá)實(shí)現(xiàn)變量類型的轉(zhuǎn)換,賦值符號(hào)右邊的表達(dá)式的值的類型自動(dòng)轉(zhuǎn)換為其左邊變量的類型。式的值的類型自動(dòng)轉(zhuǎn)換為其左邊變量的類型。 (2)賦值轉(zhuǎn)換具有強(qiáng)制性,一般要求賦值運(yùn)算符)賦值轉(zhuǎn)換具有強(qiáng)制性,一般要求賦值運(yùn)算符左右兩邊的數(shù)據(jù)類型要一致,如果賦值運(yùn)算符左右左右兩邊的數(shù)據(jù)類型要一致,如果賦值運(yùn)算符左右兩邊的數(shù)據(jù)類型不同,系統(tǒng)自動(dòng)將賦值運(yùn)算符右邊兩邊的數(shù)據(jù)類型不同,系統(tǒng)自動(dòng)將賦值運(yùn)算符右邊的類型轉(zhuǎn)換成左邊的類型,數(shù)據(jù)類型可能被提升,的類型轉(zhuǎn)換成左邊的類型,數(shù)據(jù)類型可能被提升,也有可能被降低。也有可能被降低。 【例【例2.6】利用賦值運(yùn)算符實(shí)現(xiàn)類型轉(zhuǎn)

32、換。】利用賦值運(yùn)算符實(shí)現(xiàn)類型轉(zhuǎn)換。#include void main()short int s;char c;long l;float f;double d;int i;s=65;c=A;f=12.64;i=100;d=i; /*將int型變量轉(zhuǎn)換為double型*/i=f; /*將float型變量轉(zhuǎn)換為int型*/l=s+c; /*s+c為int型,將int型轉(zhuǎn)換為long型*/f=c; /*將char型變量轉(zhuǎn)換為float型*/c=s; printf(%ft%dt%ldt%ft%cn,d,i,l,f,c); 運(yùn)行情況:100.000000 12 130 65.000000 A2.3.2

33、強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換 o強(qiáng)制類型轉(zhuǎn)換是通過強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一種類型的變量強(qiáng)制轉(zhuǎn)換為另外一種類型,而不是由系統(tǒng)自動(dòng)完成的。o基本語法格式如下: (類型標(biāo)識(shí)符) 表達(dá)式o強(qiáng)制轉(zhuǎn)換只是為了運(yùn)算需要而對變量類型進(jìn)行臨時(shí)性轉(zhuǎn)換,不會(huì)改變變量在定義時(shí)所聲明的變量類型。 【例【例2.7】數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換?!繑?shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換。#include void main()int a,b,c,d;float x=2.46,y=3.57,z=4.68;a=(int)x;b=(int)x+(int)y+(int)z;c=(int)(x+y+z);d=(int)x+y+z;printf(%dt%dt%dt%dn

34、,a,b,c,d);printf(%ft%ft%fn,x,y,z);運(yùn)行情況:運(yùn)行情況: 2 92 910101010 2.460000 2.4600003.5700003.5700004.6800004.680000 2.4運(yùn)算符和表達(dá)式o運(yùn)算符:用來表示各種運(yùn)算的符號(hào)稱為運(yùn)算符。運(yùn)算符用來處理數(shù)據(jù)。o表達(dá)式:用運(yùn)算符將運(yùn)算對象連接而成的符合C語言規(guī)則的算式。 2.4.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式的運(yùn)算符有以下幾類:的運(yùn)算符有以下幾類:(1)(1)算術(shù)運(yùn)算符算術(shù)運(yùn)算符 (+ - + - * * / % / %)(2)(2)關(guān)系運(yùn)算符關(guān)系運(yùn)算符 (?。ǎ。?3)(3)邏輯

35、運(yùn)算符邏輯運(yùn)算符 (?。?!|)(4)(4)位運(yùn)算符位運(yùn)算符 ( | |)(5)(5)賦值運(yùn)算符賦值運(yùn)算符 (及其擴(kuò)展賦值運(yùn)算符)(及其擴(kuò)展賦值運(yùn)算符)(6)(6)條件運(yùn)算符條件運(yùn)算符 (?:)(?:)(7)(7)逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符 ( (,),) 2.4.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式(8)(8)指針運(yùn)算符指針運(yùn)算符 (* *和)和)(9)(9)求字節(jié)數(shù)運(yùn)算符()求字節(jié)數(shù)運(yùn)算符()(10)(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(強(qiáng)制類型轉(zhuǎn)換運(yùn)算符( ( (類型)類型) ) )(11)(11)分量運(yùn)算符(分量運(yùn)算符(-)(12)(12)下標(biāo)運(yùn)算符()下標(biāo)運(yùn)算符()(13)(13)其他其他

36、(如函數(shù)調(diào)用運(yùn)算符()(如函數(shù)調(diào)用運(yùn)算符() 2.4.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.8.2 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式 (1)(1)基本的算術(shù)運(yùn)算符基本的算術(shù)運(yùn)算符: : (加法運(yùn)算符,或正值運(yùn)算符。如(加法運(yùn)算符,或正值運(yùn)算符。如: :、)、) (減法運(yùn)算符,或負(fù)值運(yùn)算符。如(減法運(yùn)算符,或負(fù)值運(yùn)算符。如: :、)、)* * (乘法運(yùn)算符。如(乘法運(yùn)算符。如: :* *) (除法運(yùn)算符。如(除法運(yùn)算符。如: :) (模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整型數(shù)據(jù),如(模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整型數(shù)據(jù),如: :的值為)。的值為)。【例【例2.12

37、】常用算術(shù)運(yùn)算符的使用?!砍S盟阈g(shù)運(yùn)算符的使用。#include void main()int a=10,b=2,c=3,d=-7;char ch=A;printf(%dt%dt%dt%dt%dn,a+b,a-b,b*c,a/b,a%c);printf(%dt%dn,d%b,a%d);printf(%dt%dt%dn,ch/3,ch-3,ch%3);運(yùn)行情況:運(yùn)行情況:12128 86 65 51 1-1-13 3212162622 2(2 2)自增、自減運(yùn)算符()自增、自減運(yùn)算符(+、-) 作用是使變量的值增或減作用是使變量的值增或減如如: o,(在使用之前,先使的值加(減),(在使用之前,

38、先使的值加(減)o,(在使用之后,使的值加(減),(在使用之后,使的值加(減) 使用自增、自減運(yùn)算符時(shí)需要注意:使用自增、自減運(yùn)算符時(shí)需要注意:o自增運(yùn)算符+和自減運(yùn)算符-,只能用于變量不能用于常量或表達(dá)式,這是因?yàn)樽栽觥⒆詼p運(yùn)算是對變量進(jìn)行操作后再賦值,而常量或表達(dá)式都不能進(jìn)行賦值操作。o+和-的結(jié)合性都是自右向左的。o+和-運(yùn)算的變量只能是整型、字符型和指針型變量。i+i+與與+i+i的區(qū)別:的區(qū)別: 是先執(zhí)行后,再使用的值;是先執(zhí)行后,再使用的值; 是先使用的值后,再執(zhí)行。是先使用的值后,再執(zhí)行。例如:例如: ; i i的值先變成的值先變成4, 4, 再賦給再賦給,j,j的值均為的值均為

39、 ; 先將先將 i i的值的值3 3賦給賦給, ,的值為,然后變?yōu)榈闹禐?,然后變?yōu)椤纠纠?.9】自增、自減運(yùn)算符的使用。】自增、自減運(yùn)算符的使用。#include void main()int i=5,j=5;int x,y; x=i+;y=+j;printf(%dt%dn,-x+,-(+y);printf(%dt%dt%dt%dn,i,j,x,y); 運(yùn)行情況:運(yùn)行情況:-5-5-7-76 66 66 67 7【例【例2.11】自增、自減運(yùn)算的副作用?!孔栽?、自減運(yùn)算的副作用。#include void main()int i=3,j=3,x,y;x=(i+)+(i+)+(i+);y=(+

40、j)+(+j)+(+j);printf(%dt%dn,x,y);在在Turbo C 2.0Turbo C 2.0環(huán)境下調(diào)試運(yùn)行情況為:環(huán)境下調(diào)試運(yùn)行情況為:9 91818在在Visual C+6.0Visual C+6.0環(huán)境下調(diào)試運(yùn)行情況為:環(huán)境下調(diào)試運(yùn)行情況為:9 91616 2.4 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式(2) (2) 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性基本的算術(shù)運(yùn)算符算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性基本的算術(shù)運(yùn)算符: : 用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對象用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對象( (也稱操作數(shù))連接起也稱操作數(shù))連接起來的、符合語法規(guī)則的式子,稱為算術(shù)表達(dá)式。運(yùn)

41、來的、符合語法規(guī)則的式子,稱為算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。算對象包括常量、變量、函數(shù)等。 例如例如: : * *.5.5aa 是一個(gè)合法的表達(dá)式是一個(gè)合法的表達(dá)式使用算術(shù)表達(dá)式應(yīng)遵循如下原則:使用算術(shù)表達(dá)式應(yīng)遵循如下原則:o(1)要區(qū)分算術(shù)運(yùn)算符與數(shù)學(xué)運(yùn)算符在表達(dá)形式上的)要區(qū)分算術(shù)運(yùn)算符與數(shù)學(xué)運(yùn)算符在表達(dá)形式上的差異。差異。o(2)要注意各種運(yùn)算符的優(yōu)先級(jí)別,如果不能確定,)要注意各種運(yùn)算符的優(yōu)先級(jí)別,如果不能確定,最好在表達(dá)式中適當(dāng)?shù)奈恢锰砑訄A括號(hào)最好在表達(dá)式中適當(dāng)?shù)奈恢锰砑訄A括號(hào)“( )”,括號(hào)必,括號(hào)必須匹配且成對出現(xiàn),計(jì)算時(shí)由內(nèi)層括號(hào)向外層括號(hào)逐層須匹配且成對出現(xiàn),計(jì)

42、算時(shí)由內(nèi)層括號(hào)向外層括號(hào)逐層計(jì)算。計(jì)算。o(3)雙目運(yùn)算符兩側(cè)運(yùn)算對象的數(shù)據(jù)類型應(yīng)保持一致,)雙目運(yùn)算符兩側(cè)運(yùn)算對象的數(shù)據(jù)類型應(yīng)保持一致,運(yùn)算所得結(jié)果類型與運(yùn)算對象的類型一致;若參與運(yùn)算運(yùn)算所得結(jié)果類型與運(yùn)算對象的類型一致;若參與運(yùn)算的數(shù)據(jù)類型不一致,系統(tǒng)將自動(dòng)按轉(zhuǎn)換規(guī)律對操作對象的數(shù)據(jù)類型不一致,系統(tǒng)將自動(dòng)按轉(zhuǎn)換規(guī)律對操作對象進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,然后再進(jìn)行相應(yīng)的運(yùn)算。進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,然后再進(jìn)行相應(yīng)的運(yùn)算。 o語言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。語言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。 在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行,例如先乘除后加減。行

43、,例如先乘除后加減。 o規(guī)定了各種運(yùn)算符的結(jié)合方向規(guī)定了各種運(yùn)算符的結(jié)合方向( (結(jié)合性結(jié)合性) ) 算術(shù)運(yùn)算符的結(jié)合方向?yàn)樗阈g(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣易宰笾劣摇?,即先左后,即先左后右?。 2.4 算術(shù)運(yùn)算符和算術(shù)表達(dá)式【例【例2.13】從鍵盤輸入兩個(gè)實(shí)數(shù),計(jì)算算術(shù)表達(dá)式的值。】從鍵盤輸入兩個(gè)實(shí)數(shù),計(jì)算算術(shù)表達(dá)式的值。#include #include #definePI3.14void main()float x,y,z;printf(請輸入實(shí)型變量請輸入實(shí)型變量x和和y的值,的值,x不等于不等于y:n);scanf(%f %f,&x,&y);z=cos(PI/4)+2

44、*sqrt(x+2*pow(x,y)/(x-y);printf(z=%fn,z);運(yùn)行情況:運(yùn)行情況: 請輸入實(shí)型變量請輸入實(shí)型變量x x和和y y的值,的值,x x不等于不等于y y:2 21 1 5.6063685.6063682.4 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式有關(guān)表達(dá)式使用中的問題說明有關(guān)表達(dá)式使用中的問題說明 ANSI CANSI C并沒有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,并沒有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排。允許各編譯系統(tǒng)自己安排。 例如例如:對表達(dá)式對表達(dá)式 a = f1( )+f2( )a = f1( )+f2( ) 并不是所有

45、的編譯系統(tǒng)都先調(diào)用并不是所有的編譯系統(tǒng)都先調(diào)用f1( )f1( ), 然后調(diào)用然后調(diào)用f2( )f2( )。在有的情況下結(jié)果可能不同。有時(shí)會(huì)出現(xiàn)一些令人容易搞混在有的情況下結(jié)果可能不同。有時(shí)會(huì)出現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹(jǐn)慎的問題,因此務(wù)必要小心謹(jǐn)慎。 語言中有的運(yùn)算符為一個(gè)字符,有的運(yùn)算符由兩個(gè)語言中有的運(yùn)算符為一個(gè)字符,有的運(yùn)算符由兩個(gè)字符組成字符組成 ,為避免誤解,最好采取大家都能理解的寫,為避免誤解,最好采取大家都能理解的寫法。法。 例如例如:不要寫成不要寫成i+ji+j的形式,而應(yīng)寫成的形式,而應(yīng)寫成 (i+)+j(i+)+j的形式的形式 在調(diào)用函數(shù)時(shí),實(shí)參數(shù)的求值順序

46、,標(biāo)準(zhǔn)并無統(tǒng)在調(diào)用函數(shù)時(shí),實(shí)參數(shù)的求值順序,標(biāo)準(zhǔn)并無統(tǒng)一規(guī)定。一規(guī)定。例如:例如:的初值為,如果有下面的函數(shù)調(diào)用:的初值為,如果有下面的函數(shù)調(diào)用: printf(,i+) 在有的系統(tǒng)中,從左至右求在有的系統(tǒng)中,從左至右求值,輸出值,輸出“,”。在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右。在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右而左,函數(shù)輸出的是而左,函數(shù)輸出的是“,”。以上這種寫法不宜。以上這種寫法不宜提倡,提倡, 最好改寫成最好改寫成 j = i+;j = i+; printf(%d printf(%d, %d%d, j j,i)i) 不要寫出別人看不懂的也不知道系統(tǒng)會(huì)怎樣執(zhí)行程序2.4.2 關(guān)系

47、運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式 o1關(guān)系運(yùn)算符關(guān)系運(yùn)算符 關(guān)系運(yùn)算符是表示運(yùn)算量之間邏輯關(guān)系的運(yùn)算符,關(guān)系運(yùn)算實(shí)際上是邏輯比較運(yùn)算,通過對兩個(gè)操作數(shù)值的比較,判斷比較的結(jié)果,關(guān)系運(yùn)算的結(jié)果為邏輯值,如果符合條件,則結(jié)果為真,如果不符合條件,則結(jié)果為假。 2.4.2 關(guān)系運(yùn)算符和關(guān)系表達(dá)式1.關(guān)系運(yùn)算符及其優(yōu)先次序 (小于) (大于) = (大于或等于) = (等于) != (不等于)優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)優(yōu)先級(jí)相同(低)說明:關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符 2.4.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式 2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表

48、達(dá)式(可以是算術(shù)表達(dá)式或 關(guān)系表達(dá)式,邏輯表達(dá)式,賦值表達(dá)式,字符表達(dá)式) 接起來的式子,稱關(guān)系表達(dá)式例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值為“真”,表達(dá)式的值為1。C C語言中沒有專用語言中沒有專用的邏輯值,的邏輯值,1 1代表代表真,真,0 0代表假代表假【例【例2.14】關(guān)系運(yùn)算示例?!筷P(guān)系運(yùn)算示例。 #include void main()int a,b,c,d;a=3;b=4;c=5;d=6;printf(%d ,a+bc+d); /*表達(dá)式為算術(shù)表達(dá)式*/printf(%d ,(a=3)!=(c=5); /*表達(dá)式為賦值表達(dá)式*/printf(%d ,(a

49、=3)!=(c=5); /*表達(dá)式為關(guān)系表達(dá)式*/printf(%d ,(a=b)=(ca); /*表達(dá)式為字符表達(dá)式*/運(yùn)行情況:運(yùn)行情況:0 1 0 1 00 1 0 1 0使用關(guān)系運(yùn)算符和關(guān)系表達(dá)式應(yīng)注意:使用關(guān)系運(yùn)算符和關(guān)系表達(dá)式應(yīng)注意:o(1)關(guān)系表達(dá)式的值是整數(shù)0或1,真用1表示,假用0表示;表達(dá)式的值非0結(jié)果即為真,表達(dá)式的值為0結(jié)果即為假。o(2)字符型數(shù)據(jù)在比較時(shí)按其ASCII值進(jìn)行。o(3)在連續(xù)使用關(guān)系表達(dá)式時(shí),要注意其正確表達(dá)含義。 2.4.3 邏輯運(yùn)算符和邏輯表達(dá)式1.邏輯運(yùn)算符及其優(yōu)先次序(1)& (邏輯與) 相當(dāng)于其他語言中的AND(2)| (邏輯或) 相

50、當(dāng)于其他語言中的OR(3)! (邏輯非) 相當(dāng)于其他語言中的NOT例:a&b 若a,b為真,則a&b為真。 a|b 若a,b之一為真,則a|b為真。 !a 若a為真,則!a為假。優(yōu)先次序:!(非)-&()-|()邏輯運(yùn)算符中的“&”和“|”低于關(guān)系運(yùn)算符,“!”高于算 術(shù)運(yùn)算符 2.4.3 邏輯運(yùn)算符和邏輯表達(dá)式 2.邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就 是邏輯表達(dá)式。邏輯表達(dá)式的值應(yīng)該是一個(gè)邏輯量“真”或“假”。例:設(shè)a=4,b=5:!a的值為0 a&b的值為1a|b的值為1 !a|b的值為14&0|2的值為1任何非零的數(shù)

51、值被認(rèn)作任何非零的數(shù)值被認(rèn)作“真真” 2.4.3 邏輯運(yùn)算符和邏輯表達(dá)式 例:53&84-!0 自左向右運(yùn)算 1&0邏輯值為083邏輯值為1表達(dá)式值為0 2.4.3 邏輯運(yùn)算符和邏輯表達(dá)式 在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都要被執(zhí)行。(1)a&b&c 只有a為真時(shí),才需要判斷b的值,只有a和b都為真時(shí), 才需要判斷c的值。(2)a|b|c 只要a為真,就不必判斷b和c的值,只有a為假,才 判斷b。a和b都為假才判斷c例:(m=ab)&(n=cd)當(dāng)a=1,b=2,c=3,d=4,m和n的原值為1時(shí),由于“ab”的值為0,因此m=0,而“n=c

52、d”不被執(zhí)行,因此n的值不是0而仍保持原值1。 2.4.3 邏輯運(yùn)算符和邏輯表達(dá)式 用邏輯表達(dá)式來表示閏年的條件能被4整除,但不能被100整除。能被4整除,又能被400整除。答答 (year%4=0&year%100!=0)|year%400=0案案 值為真(1)是閏年,否則為非閏年。【例【例2.16】邏輯運(yùn)算示例。】邏輯運(yùn)算示例。#include void main()int a,b,c;float x;a=0;b=3;c=0;x=3.5;printf(%dt, a&b&c);printf(%dt, a|b|c);printf(%dt, !a);printf(%dt,

53、 ba&(a|b);printf(%dt, !(x3)&(b=x);運(yùn)行情況:運(yùn)行情況:0 1 1 1 00 1 1 1 0使用邏輯運(yùn)算符和邏輯表達(dá)式應(yīng)注意:使用邏輯運(yùn)算符和邏輯表達(dá)式應(yīng)注意:o邏輯運(yùn)算符兩側(cè)的操作數(shù),除可以是0或非0的整數(shù)外,也可以是其它任何類型的數(shù)據(jù)。o在計(jì)算邏輯表達(dá)式的值時(shí),只有在必須計(jì)算下一個(gè)表達(dá)式才能求解的情況下,才進(jìn)行下一個(gè)表達(dá)式的求解運(yùn)算。 2.4.4 賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 (1)(1)賦值運(yùn)算符賦值運(yùn)算符 賦值符號(hào)賦值符號(hào)“”就是賦值運(yùn)算符,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。就是賦值運(yùn)算符,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量

54、。 如如“”的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量賦給變量。賦給變量。 也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量. . 2.4.4 賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式(2) (2) 賦值表達(dá)式賦值表達(dá)式 由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱為由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱為“賦賦值表達(dá)式值表達(dá)式”。一般形式為一般形式為: 例如例如: “5”5”是一個(gè)賦值表達(dá)式是一個(gè)賦值表達(dá)式使用賦值運(yùn)算符和賦值表達(dá)式應(yīng)注意:使用賦值運(yùn)算符和賦值表達(dá)式應(yīng)注意:o賦值運(yùn)算符是賦值運(yùn)算符

55、是“=”,含義是將,含義是將“=”右邊的值賦給右邊的值賦給左邊的變量,它與符號(hào)左邊的變量,它與符號(hào)“=”不同,不同,“=”是等是等于符號(hào),用來判斷左右兩側(cè)的值是否相等的,返回于符號(hào),用來判斷左右兩側(cè)的值是否相等的,返回值為邏輯值。值為邏輯值。o賦值運(yùn)算符左側(cè)必須是變量或者是對應(yīng)某特定內(nèi)存賦值運(yùn)算符左側(cè)必須是變量或者是對應(yīng)某特定內(nèi)存單元的表達(dá)式。例如,單元的表達(dá)式。例如,(a+b)=20,x=y-3=8都是非法的賦值表達(dá)式。都是非法的賦值表達(dá)式。o賦值表達(dá)式可以連續(xù)賦值,例如,賦值表達(dá)式可以連續(xù)賦值,例如,a=b=c=2,但在變量定義時(shí)不允許連續(xù)賦值,例如,但在變量定義時(shí)不允許連續(xù)賦值,例如,

56、int a=b=c=2;是錯(cuò)誤的。是錯(cuò)誤的。 2.4.4賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 (3) (3) 復(fù)合的賦值運(yùn)算符復(fù)合的賦值運(yùn)算符 在賦值符在賦值符“”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。符。例如例如:o 等價(jià)于等價(jià)于 o* * 等價(jià)于等價(jià)于 * *()()o 等價(jià)于等價(jià)于 以“”為例來說明,它相當(dāng)于使進(jìn)行一次自加()的操作。即先使加,再賦給。 2.4.4 賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 為便于記憶,可以這樣理解:為便于記憶,可以這樣理解: a += b ( a += b (其中其中a a為變量,為變量,b b為表達(dá)

57、式為表達(dá)式) ) a += b a += b(將有下劃線的(將有下劃線的“a+”a+”移到移到“=”=”右側(cè))右側(cè)) |_|_ a = a + b a = a + b (在(在“=”=”左側(cè)補(bǔ)上變量名左側(cè)補(bǔ)上變量名a a) 2.4.4賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 注意注意: :如果是包含若干項(xiàng)的表達(dá)式,則相當(dāng)于它有如果是包含若干項(xiàng)的表達(dá)式,則相當(dāng)于它有 括號(hào)。括號(hào)。如:如: x %= y+3 x %= y+3 x %= (y+3) x %= (y+3) |_ |_ x = x %(y+3)( x = x %(y+3)(不要錯(cuò)寫成不要錯(cuò)寫成x=x%y+3)x=x%y+3) 凡是二

58、元(二目)運(yùn)凡是二元(二目)運(yùn)算符,都可以與賦值算符,都可以與賦值符一起組合成復(fù)合賦符一起組合成復(fù)合賦值符。值符。 語言規(guī)定可以使用種復(fù)合賦值運(yùn)算符:語言規(guī)定可以使用種復(fù)合賦值運(yùn)算符:,* *,| | 【例【例2.17】復(fù)合賦值運(yùn)算示例?!繌?fù)合賦值運(yùn)算示例。#include void main()int a,b,c,d,k;a=2;b=4;c=6,d=k=8;b+=2;c%=a;d*=a+2;a-=k/2;printf(%dt%dt%dt%dt ,a,b,c,d); 運(yùn)行情況:-2 6 0 32 2.4.4賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 對賦值表達(dá)式求解的過程是:對賦值表達(dá)式求解

59、的過程是: 求賦值運(yùn)算符右側(cè)的求賦值運(yùn)算符右側(cè)的“表達(dá)式表達(dá)式”的值的值; 賦給賦值運(yùn)算符左側(cè)的變量。賦給賦值運(yùn)算符左側(cè)的變量。例如例如: 賦值表達(dá)式賦值表達(dá)式“=3=3* *5”5”的值為的值為1515,執(zhí)行表達(dá)式后,變量,執(zhí)行表達(dá)式后,變量a a的值也是的值也是1515。 注意注意: 一個(gè)表達(dá)式應(yīng)該有一個(gè)值一個(gè)表達(dá)式應(yīng)該有一個(gè)值 2.4.4賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 左值左值 (lvalue)(lvalue) : : 賦值運(yùn)算符左側(cè)的標(biāo)識(shí)符賦值運(yùn)算符左側(cè)的標(biāo)識(shí)符o變量可以作為左值變量可以作為左值; ;o而表達(dá)式就不能作為左值而表達(dá)式就不能作為左值( (如如a+b);a+b

60、);o常量也不能作為左值常量也不能作為左值. . 右值右值 (lvalue)(lvalue) : :出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式 左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而左值都可以作為右值。左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而左值都可以作為右值。 2.4.4賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 賦值表達(dá)式中的賦值表達(dá)式中的“表達(dá)式表達(dá)式”,又可以是一個(gè)賦值表達(dá)式。,又可以是一個(gè)賦值表達(dá)式。 例如例如: : a=(b=5)a=(b=5) 分析分析(1)(1)括弧內(nèi)的括弧內(nèi)的“b=5”b=5”是一個(gè)賦值表達(dá)式,它的值等于是一個(gè)賦值表達(dá)式,它的值等于5 5。執(zhí)行表。執(zhí)行表達(dá)式達(dá)式“a=(b=5)”a=(b=5)”相當(dāng)于執(zhí)行相當(dāng)于執(zhí)行“b=5”b=5”和和“a ab”b”兩個(gè)賦值表達(dá)式。兩個(gè)賦值表達(dá)式。 (2)(2)賦值運(yùn)算符按照賦值運(yùn)算符按照“自右而左自右而左

溫馨提示

  • 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)論