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

下載本文檔

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

文檔簡(jiǎn)介

第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式掌握C語(yǔ)言各種數(shù)據(jù)類型的定義及使用;了解各種類型數(shù)據(jù)在計(jì)算機(jī)內(nèi)的存儲(chǔ)方式;各種運(yùn)算符的運(yùn)算規(guī)則及結(jié)合律、優(yōu)先級(jí);各種表達(dá)式的組成。教學(xué)目的:本章重點(diǎn):

常用數(shù)據(jù)類型常用運(yùn)算符、變量、表達(dá)式教學(xué)內(nèi)容:標(biāo)識(shí)符的概念及作用C語(yǔ)言的基本數(shù)據(jù)類型,各種數(shù)據(jù)類型的定義、表示、存儲(chǔ)與使用各種數(shù)據(jù)類型的轉(zhuǎn)換C語(yǔ)言的運(yùn)算符和表達(dá)式2.1C語(yǔ)言字符集與標(biāo)識(shí)符任何高級(jí)語(yǔ)言都有它自身的一套字符集和使用規(guī)則,C語(yǔ)言也不例外。字符是組成語(yǔ)言的基本單位,C語(yǔ)言字符集由字母、數(shù)字、下劃線、空白符、標(biāo)點(diǎn)符號(hào)和特殊字符組成。在字符常量,字符串常量和注釋中還可以使用漢字或其它可表示的圖形符號(hào)。(1)數(shù)字:0,1,…,9。(2)字母:大、小寫(xiě)字母各26個(gè):a,b,…,z和A,B,…,Z。C語(yǔ)言中大、小寫(xiě)字母是有區(qū)別的,表示不同的字符。(3)空白符:空格符,制表符(跳格),換行符(空行)的總稱??瞻追嗽谧址?,字符串中有意義外,編譯系統(tǒng)忽略其它位置的空白??瞻追诔绦蛑兄皇瞧鸬介g隔作用。在程序的恰當(dāng)位置使用空白將使程序更加清晰,增強(qiáng)程序的可讀性。2.1.1C語(yǔ)言字符集(4)下劃線:_。(5)標(biāo)點(diǎn)符和特殊字符。

+-*/%++--<>=>= <===!=!||&&^~|&<< >>()[]{}\“‘?:.,;(6)轉(zhuǎn)義字符(如下圖)。字符形式字符名含義\n換行把打?。@示)位置移到下一行的起始位置\t水平制表把打印位置移到當(dāng)前的下一個(gè)制表點(diǎn)(通常移動(dòng)8個(gè)字符的間隔),間隔的字符個(gè)數(shù)與實(shí)現(xiàn)有關(guān)\v垂直制表把打印位置移到下一行制表點(diǎn)起始位置\b退格把打印位置在當(dāng)前行上向后退一個(gè)字符位置\r回車不換行,光標(biāo)移到行首\f換頁(yè)把打印位置移到下一個(gè)邏輯頁(yè)開(kāi)頭的起始位置\?問(wèn)號(hào)問(wèn)號(hào)字符\\反斜杠反斜杠字符本身“\”

\'單引號(hào)單引號(hào)字符

\"雙引號(hào)雙引號(hào)字符\a報(bào)警產(chǎn)生可聽(tīng)或可見(jiàn)的報(bào)警(嘀聲),位置不變\0空字符空值

\ddd八進(jìn)制1-3位8進(jìn)制數(shù)對(duì)應(yīng)的ASCII值代表的字符

\xhh十六進(jìn)制

1-2位16進(jìn)制數(shù)對(duì)應(yīng)的ASCII值代表的字符2.1.2標(biāo)識(shí)符

C語(yǔ)言中用來(lái)標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列稱為標(biāo)識(shí)符(Identifier),實(shí)際上標(biāo)識(shí)符就是一個(gè)名字。C語(yǔ)言的標(biāo)識(shí)符分為三類:預(yù)定義標(biāo)識(shí)符、關(guān)鍵字標(biāo)識(shí)符、自定義標(biāo)識(shí)符。

1預(yù)定義標(biāo)識(shí)符:預(yù)定義標(biāo)識(shí)符主要有庫(kù)函數(shù)名(如main,printf,scanf,sin,abs等)、預(yù)編譯命令(如define)。

2關(guān)鍵字標(biāo)識(shí)符:C語(yǔ)言中規(guī)定的具有特定含義的標(biāo)識(shí)符。

3自定義標(biāo)識(shí)符

(1)標(biāo)識(shí)符由字母、數(shù)字、下劃線組成,且第一個(gè)字符必須為字母或下劃線,不能是數(shù)字。例如:合法的標(biāo)識(shí)符:james,student,_total,count_1_2_3,PRICE。不合法的標(biāo)識(shí)符:L.Jiang,$123,?xyz,45A3,x>y。

(2)大小寫(xiě)敏感。標(biāo)識(shí)符的大小寫(xiě)是有區(qū)別的,如a和A是不同的標(biāo)識(shí)符。

C語(yǔ)言中變量一般用小寫(xiě),常量一般用大寫(xiě),但也不是絕對(duì),像windows編程中,常用匈牙利表示法(大小寫(xiě)混用,每個(gè)單詞第一個(gè)大寫(xiě),其余小寫(xiě),單詞之間沒(méi)有空格,如WinMain,GetCurrentTime)。

(3)標(biāo)識(shí)符長(zhǎng)度:ANSIC標(biāo)準(zhǔn)沒(méi)有限制標(biāo)識(shí)符長(zhǎng)度(字符個(gè)數(shù)),不同編譯系統(tǒng)都有自已的規(guī)定。如TurboC規(guī)定為32個(gè)字符,MicrosoftC規(guī)定為8個(gè)字符。

(4)自定義標(biāo)識(shí)符不能與關(guān)鍵字標(biāo)識(shí)符同名,雖然可與預(yù)定義標(biāo)識(shí)同名,但強(qiáng)烈建議不要與之相同,以免造成混淆,影響程序可讀性。

注意:標(biāo)識(shí)的命名應(yīng)做到“見(jiàn)名知意”

2.2常量和變量在程序運(yùn)行中,其值不可改變的量稱為常量。用標(biāo)識(shí)符命名的常量,稱為符號(hào)常量,通常用大寫(xiě)字母。C語(yǔ)言中使用符號(hào)常量,有兩種聲明符號(hào)常量的方法:(1)用預(yù)處理命令#define來(lái)聲明一般形式:#define符號(hào)常量名常量值例如:

#definePI3.1416/*結(jié)尾處沒(méi)有分號(hào)*/

(2)用const聲明一般形式:const類型符號(hào)常量名=常量值;

例如:程序中多處用到π的值,可以聲明符號(hào)PI來(lái)表示。

constfloatPI=3.1416;

/*結(jié)尾處有分號(hào)*/2.2.1常量例2-1符號(hào)常量的使用。程序代碼如下:

#include<stdio.h> #definePI3.14 /*聲明符號(hào)常量PI*/ voidmain() { constfloatR=5.0;/*聲明符號(hào)常量R,后面有分號(hào)*/ floatr,area1,area2; /*聲明變量r,area1,area2*/

printf("r=");

scanf("%f",&r); /*用輸入函數(shù)scanf輸入半徑r的值*/ area1=PI*r*r; /*用圓面積計(jì)算公式PI*r*r的值并賦值給

area1*/

/*此處半徑是變量r*/ area2=PI*R*R; /*此處半徑是符號(hào)常量R*/ printf(“area1=%f,area2=%f\n”,area1,area2);/*輸出面積的值,\n表 示換行*/ }2.2.2變量

在程序運(yùn)行中,其值可以改變的量稱為變量。一個(gè)變量必須有一個(gè)名字(即標(biāo)識(shí)符),在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。在該存儲(chǔ)單元中存放變量的值。注意區(qū)分變量名和變量值這兩個(gè)不同的概念。變量名實(shí)際上是一個(gè)符號(hào)地址,在對(duì)程序編譯連接時(shí)由系統(tǒng)給每一個(gè)變量名分配一個(gè)內(nèi)存地址。在程序中從變量中取值,實(shí)際上是通過(guò)變量名找到相應(yīng)的內(nèi)存地址,從其存儲(chǔ)單元中讀取數(shù)據(jù)。見(jiàn)圖2-1。圖2-1變量值與變量名區(qū)別在C語(yǔ)言中,變量必須遵循“先定義,后使用”的原則。關(guān)于變量的定義、使用及賦初值將在2.3節(jié)中結(jié)合數(shù)據(jù)類型介紹。i變量名變量值存儲(chǔ)單元教室編號(hào):3棟2013桌椅2.3基本數(shù)據(jù)類型

2.3.1C語(yǔ)言的數(shù)據(jù)類型單精度實(shí)型(float)雙精度實(shí)型(double)整型(int)字符型(char)數(shù)組類型結(jié)構(gòu)體類型(struct)共用體類型(union)枚舉類型(enum

)實(shí)型(浮點(diǎn)數(shù))基本類型構(gòu)造類型指針類型空類型(void)數(shù)據(jù)類型基本數(shù)據(jù)類型如下表說(shuō)明:數(shù)據(jù)類型所占字節(jié)數(shù)隨機(jī)器硬件不同而不同,上表以IBMPC機(jī)為例:類型符號(hào)關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實(shí)型有無(wú)(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無(wú)unsignedchar80~2552.3.2整型數(shù)據(jù)

1整型常量三種形式:

十進(jìn)制整數(shù):由數(shù)字0~9和正負(fù)號(hào)表示.如123,-456,0。

八進(jìn)制整數(shù):由數(shù)字0開(kāi)頭,后跟數(shù)字0~7表示.如0123,011

十六進(jìn)制整數(shù):由0x或0X開(kāi)頭,后跟0~9,a~f,A~F表示。

如0x123,0Xff2整型變量

整型變量使用前必須先定義,定義后系統(tǒng)為整型變量開(kāi)辟存儲(chǔ)空間,用于存儲(chǔ)變量值。整型數(shù)據(jù)在內(nèi)存中是以二進(jìn)制補(bǔ)碼形式存放的。例如:定義一個(gè)整型變量i:

inti; /*定義整型變量*/

i=5; /*給i賦以整數(shù)5*/

整型變量的基本類型符為int,也可根據(jù)數(shù)值范圍將變量定義為基本整型、短整型或長(zhǎng)整型。在int之前加上修飾符:short(短型)或long(長(zhǎng)型),也可在前面加上signed(有符號(hào)數(shù))和unsigned(無(wú)符號(hào)數(shù))。標(biāo)準(zhǔn)C語(yǔ)言的整型類型及取值范圍

關(guān)鍵字VisualC++6.0環(huán)境TurboC2.0環(huán)境所占字節(jié)取值范圍所占字節(jié)取值范圍int4-2147483648~21474836472-32768~32767unsigned[int]40~429496729520~65535short[int]2-32768~327672-32768~32767signed[int]4-2147483648~21474836472-32768~32767unsignedshort[int]20~6553520~65535signedshort[int]2-32768~327672-32768~32767long[int]4-2147483648~21474836474-2147483648~2147483647unsignedlong[int]40~429496729540~4294967295例2-2整型變量的定義與使用。程序代碼如下:

#include<stdio.h> voidmain() {

int

a,b,c,d; /*指定a、b、c、d為整型變量*/ unsignedu; /*指定u為無(wú)符號(hào)整型變量*/a=5;b=-6;u=20; c=a+u;d=b+u;

printf("a+u=%d,b+u=%d\n",c,d);/*整型在VC++中占內(nèi)存的字節(jié)數(shù)*/

printf("%d,%d,%d\n",sizeof(short),sizeof(int),sizeof(long)); }

3整型數(shù)據(jù)的溢出例2-3整型數(shù)據(jù)的溢出。程序代碼如下:

#include<stdio.h> voidmain() { shortint

a,b,c; a=32767;/*最大值賦給a*/ b=a+2;/*a+2并不等于32769,而是-32767*/ c=-a-3; /*-a-3并不等于-32770,而是32766*/

printf("a=%d,a+2=%d,-a-3=%d\n",a,b,c); }

觀察如下運(yùn)行結(jié)果。

運(yùn)行結(jié)果:

a=32767,a+2=-32767,-a-3=32766說(shuō)明:

a+2為什么等于-32767而不是32769?這是由于整型數(shù)據(jù)在溢出時(shí)會(huì)“循環(huán)”取值,即當(dāng)變量達(dá)到整型數(shù)據(jù)的最大值(或最小值)時(shí),會(huì)從最小值(或最大值)一端移動(dòng)取值,如下圖所示。

-327670……0……32766327672.3.3實(shí)型數(shù)據(jù)1實(shí)型常量

小數(shù)形式:它是由數(shù)的符號(hào)(+,-)、數(shù)字和小數(shù)點(diǎn)組成(注意:必須有小數(shù)點(diǎn))。如-1.25、3.0、3.3等都是合法的實(shí)型小數(shù)形式。

指數(shù)形式:它是由尾數(shù)(整數(shù)或小數(shù))、階碼標(biāo)示(E或e)和階碼組成。尾數(shù)不可缺省(是一整數(shù)或小數(shù)),階碼必須為整數(shù)。如1.25E-3、1e-5、-3E2等都是合法的指數(shù)形式,分別表示1.23*(10^(-3)).1*(10^(-5)),-3*(10^(2))

實(shí)型常量分為單精度、雙精度和長(zhǎng)雙精度三種類型。實(shí)型常量如果沒(méi)有任何說(shuō)明,則表示為雙精度常量,實(shí)型常量后加上F或f則表示單精度常量,實(shí)型常量后加上L或l則表示長(zhǎng)雙精度常量。

2實(shí)型變量與實(shí)型常量一樣,C語(yǔ)言中的實(shí)型變量也分為單精度(float型)、雙精度(double型)和長(zhǎng)雙精度型(longdouble)三類,不同類型在不同的編譯系統(tǒng)下取值范圍也是不是同的。標(biāo)準(zhǔn)C語(yǔ)言的實(shí)型類型及取值范圍

關(guān)鍵字VisualC++6.0環(huán)境TurboC2.0環(huán)境所占字節(jié)取值范圍所占字節(jié)取值范圍float4-3.4×10-38~+3.4×10384-3.4×10-38~+3.4×1038double8-1.7×10-308~+3.4×103088-1.7×10-308~+3.4×10308longdouble16-1.2×10-4932~+3.4×10493216-1.2×10-4932~+1.2×1049322.3.4字符型數(shù)據(jù)

1字符常量字符型常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符。它分為一般字符常量和轉(zhuǎn)義字符。一個(gè)字符常量在計(jì)算機(jī)的存儲(chǔ)中占據(jù)一個(gè)字節(jié)。(1)一般字符常量:一般字符常量是用單引號(hào)括起來(lái)的一個(gè)普通字符,其值為該字符的ASCII碼值。如‘a(chǎn)’、‘A’、‘0’、‘?’等都是字符常量,‘a(chǎn)’的值為97,‘A’的值為65,‘0’的值為48,‘?’的值為63。(2)轉(zhuǎn)義字符:C語(yǔ)言允許用一種特殊形式的字符常量,它是以反斜杠(\)開(kāi)頭的特定字符序列,表示ASCII字符集中控制字符(如\n表示換行)、某些用于功能聲明的字符和其他字符。

2字符串常量用雙引號(hào)括起來(lái)的字符序列稱為字符串常量也稱字符串。如“c”、“”、“12345”,“Ateacher”等都是合法的字符串常量。字符或字符串在內(nèi)存中存儲(chǔ)的字符形式“Ateacher”Ateacher\0“c”c\0‘c’c“”\0

注意:字符串會(huì)在最后自動(dòng)加上一個(gè)字符‘\0’,作為字符串結(jié)束標(biāo)志,所以字符串實(shí)際占用字節(jié)數(shù)要比字符串中字符的個(gè)數(shù)(長(zhǎng)度)多1個(gè)。

3字符變量

字符變量用來(lái)存放字符常量,請(qǐng)注意只能存放一個(gè)字符,不能存放一個(gè)字符串。字符變量的定義如下:

charc1,c2;

它表示c1和c2為字符型變量,各存放一個(gè)字符??蔀樽址兞抠x值:c1=‘a(chǎn)’;c2=‘b’。除可以為字符變量賦字符常量外,還可以直接賦以整數(shù)。 例2-5向字符賦值 程序代碼如下:

#include<stdio.h> voidmain() { charc1,c2; c1='a';c2='b'; printf("c1=%d,c2=%d\n",c1,c2); c1=65;c2=66; printf("c1=%c,c2=%c\n",c1,c2);}2.3.5變量賦初值

類型說(shuō)明符變量1=值1,變量2=值2,……;

如:inta=1,b=2,c=3;表示定義了三個(gè)變量a,b,c,并分別賦值1,2,3。但要注意不能寫(xiě)成inta=b=c=3;

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

a,b,c=3;表示定義了變量a,b,c,只對(duì)c初始化,c的值為3。 需要注意的是,初始化并不是在編譯階段完成的,而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦予初值的,相當(dāng)于一個(gè)賦值語(yǔ)句。如:

inta=5;相當(dāng)于:

inta; /*指定a為整型變量*/ a=5/*賦值語(yǔ)句,將5賦給a*/2.4運(yùn)算符和表達(dá)式運(yùn)算符是表示實(shí)現(xiàn)某種運(yùn)算的符號(hào),C語(yǔ)言幾乎所有基本操作(除了控制語(yǔ)句和輸入輸出)都作為運(yùn)算符處理。表達(dá)式是由運(yùn)算符、常量、變量、函數(shù)、圓括號(hào)等按一定的規(guī)則組成的式子。每一個(gè)表達(dá)式也都具有一定的值。 簡(jiǎn)單表達(dá)式:如:i,j,a,f。 復(fù)雜表達(dá)式:如:a+b,100+200,(a-b)*(c+d)。

C語(yǔ)言提供了13類,共34種運(yùn)算符。C語(yǔ)言的運(yùn)算符分類歸納如下:

(1)算術(shù)運(yùn)算符:+-*/%++--

(2)關(guān)系運(yùn)算符:><==>=<=!=

(3)邏輯運(yùn)算符:!&&‖2.4.1運(yùn)算符和表達(dá)式概述

(4)位運(yùn)算符:<<>>~|∧&

(5)賦值運(yùn)算符:=及其擴(kuò)展賦值運(yùn)算符

(6)條件運(yùn)算符:?:

(7)逗號(hào)運(yùn)算符:,

(8)指針運(yùn)算符:*&

(9)求字節(jié)數(shù)運(yùn)算符:sizeof

(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符:(類型)

(11)分量運(yùn)算符:.和->

(12)下標(biāo)運(yùn)算符:[]

(13)其他:函數(shù)運(yùn)算符()

C語(yǔ)言運(yùn)算符需要從運(yùn)算符的功能,運(yùn)算對(duì)象的數(shù)據(jù)類型及個(gè)數(shù),運(yùn)算符的優(yōu)先級(jí),運(yùn)算的結(jié)合性等方面掌握。

(1)據(jù)運(yùn)算符的運(yùn)算對(duì)象的個(gè)數(shù),C語(yǔ)言的運(yùn)算符又分為單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。例如單目運(yùn)算符++,雙目運(yùn)算符(+,-,*,/等),三目運(yùn)算符?:。

(2)運(yùn)算符的優(yōu)先級(jí)運(yùn)算符的優(yōu)先級(jí)是指不同的運(yùn)算符在表達(dá)式中進(jìn)行運(yùn)算的先后次序。例如,算術(shù)運(yùn)算符*、/的優(yōu)先級(jí)高于+、-的優(yōu)先級(jí)。

(3)運(yùn)算符的結(jié)合性當(dāng)一個(gè)運(yùn)算對(duì)象的兩側(cè)的運(yùn)算符的優(yōu)先級(jí)相同時(shí),運(yùn)算的結(jié)合方向稱為結(jié)合性。運(yùn)算符的結(jié)合性分為左結(jié)合和右結(jié)合兩種。在C語(yǔ)言中,運(yùn)算對(duì)象先與左面的運(yùn)算符結(jié)合稱左結(jié)合,如+、-、*、/的結(jié)合方向?yàn)樽宰笙蛴?;運(yùn)算對(duì)象先與右面的運(yùn)算符結(jié)合稱右結(jié)合,如單目運(yùn)算符++、--的結(jié)合方向是自右向左。實(shí)際上,只有單目運(yùn)算符、三目運(yùn)算符和賦值運(yùn)算符的是右結(jié)合的,其他都是左結(jié)合。2.4.2算術(shù)運(yùn)算符及算術(shù)表達(dá)式1.基本算術(shù)運(yùn)算符:基本算術(shù)運(yùn)算符包括:+、-、*、/、%。2.自增、自減運(yùn)算符:自增(++)和自減(--)運(yùn)算符是單目運(yùn)算符,其功能是使變量的值增1或減1。它們既可以作前綴運(yùn)算符,如++i,--i;也可以作后綴運(yùn)算符,如i++,i--。作為前綴和后綴運(yùn)算符的處理方法是不同的:

++i,--i在使用i之前,先使i的值加(減)1。若i值為5,x=++i,則x為6,i值為6。

i++,i--在使用i之后,使i的值加(減)1。若i值為5,x=i++,則x值為5,i值為6。

自增或自減運(yùn)算符在使用時(shí),需要注意以下幾點(diǎn):(1)運(yùn)算符的操作對(duì)象,只能是變量,而不能作用于常量或表達(dá)式。(2)運(yùn)算符的優(yōu)先級(jí)高于基本算術(shù)運(yùn)算符,結(jié)合性是“自右向左”右 結(jié)合。

3.算術(shù)表達(dá)式算術(shù)表達(dá)式:用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象連接起來(lái)的、符合C語(yǔ)法規(guī)則的式子,稱為算術(shù)表達(dá)式。運(yùn)算對(duì)象可以是常量、變量、函數(shù)等。說(shuō)明:

(1)C語(yǔ)言算術(shù)表達(dá)式的乘號(hào)(*)不能省略。例如:數(shù)學(xué)式,相應(yīng)的C表達(dá)式應(yīng)該寫(xiě)成:x*y。

(2)C語(yǔ)言表達(dá)式中只能出現(xiàn)字符集允許的字符。例如:數(shù)學(xué)上求圓的面積s=π*r^2,相應(yīng)的C表達(dá)式應(yīng)該寫(xiě)成:PI*r*r(其中PI是已經(jīng)聲明的符號(hào)常量)。

(3)C語(yǔ)言算術(shù)表達(dá)式只使用圓括號(hào)改變運(yùn)算的優(yōu)先順序(不能用{}和[])??梢允褂枚鄬訄A括號(hào),此時(shí)左右括號(hào)必須配對(duì),運(yùn)算時(shí)從內(nèi)層括號(hào)開(kāi)始,由內(nèi)向外依次計(jì)算表達(dá)式的值。例2-7算術(shù)運(yùn)算符表達(dá)式的使用。程序代碼如下:

#include<stdio.h>voidmain(){

inta,b,c,x1,x2,x3,x4; floatd,e,y1,y2; d=6.4; e=9.6; y1=d+e/d-e; y2=(d+e)/(d-e); printf("y1=%f,y2=%f\n",y1,y2); a=5; b=2; c=6; x1=a+b*c-a/b+b%c*a; x2=(a+b)*c-(a/b)+(b%c)*a; x3=a%b; x4=a/b; printf("x1=%d,x2=%d,x3=%d,x4=%d\n",x1,x2,x3,x4);}

例2-7中,y1和y2,x1和x2均使用相同的運(yùn)算符和變量,但在程序的可讀性上y1,x1明顯不如y2,x2,因此在平時(shí)編寫(xiě)代碼時(shí)要盡量減少?gòu)?fù)雜表達(dá)式的使用,如果實(shí)在需要,可以添加括號(hào),使程序具有更好的可讀性。當(dāng)然加了括號(hào)會(huì)改變表達(dá)式的計(jì)算順序,從而改變表達(dá)式的結(jié)果。上例x4的值可以看到,如果運(yùn)算符“/”兩邊都是整型時(shí),其結(jié)果也是整型。例2-8自增自減的作用。程序代碼如下:

#include<stdio.h>voidmain(){

int

i,j; floatx,y,y1,y2,y3; i=5; x=3.6; j=++i; /*前綴*/ y=++x; /*前綴*/

printf("i=%d,j=%d,x=%f,y=%f\n",i,j,x,y); j=i++; /*后綴*/ y=x++; /*后綴*/

printf("i=%d,j=%d,x=%f,y=%f\n",i,j,x,y); i=5,x=3.5; y1=++i+x*i+++i;/*復(fù)雜表達(dá)式1*/ printf("y1=%f\n",y1); i=5,x=3.5; y2=(++i)+x*i+(++i);/*復(fù)雜表達(dá)式2*/ printf("y2=%f\n",y2); i=5,x=3.5; y3=(++i)+x*(i++)+i;/*復(fù)雜表達(dá)式3*/ printf("y3=%f\n",y3);}

例2-8中,j和y的值可以看出自增自減運(yùn)算中前綴和后綴的區(qū)別,前綴是先加減后賦值,而后綴是先賦值后加減。從y1,y2,y3可知,y1和y3的計(jì)算順序是相同的,為什么y1和y2的值不同呢,即x*i+++i的結(jié)合順序是x*(i++)+i而不是x*i+(++i),這是因?yàn)?+、--運(yùn)行算的優(yōu)先級(jí)高于+運(yùn)算符,因此前面兩個(gè)“+”結(jié)合在一起,成為“(++)+”的形式。需要說(shuō)明的是,這種形式在實(shí)際應(yīng)用中盡量不要使用,因?yàn)槌绦虻目勺x性不好。2.4.3關(guān)系運(yùn)算符及關(guān)系表達(dá)式

1.關(guān)系運(yùn)算符關(guān)系運(yùn)算是邏輯運(yùn)算中比較簡(jiǎn)單的一種。所謂“關(guān)系運(yùn)算”實(shí)際上是“比較運(yùn)算”。關(guān)系運(yùn)算符是對(duì)兩個(gè)值進(jìn)行比較運(yùn)算,判定兩個(gè)數(shù)據(jù)是否符合給定的關(guān)系。若符合給定的關(guān)系,則關(guān)系成立,取真值(1),否則取假值(0)。

C語(yǔ)言中的關(guān)系運(yùn)算符有6種,按優(yōu)先級(jí)分為兩組:優(yōu)先級(jí)6:>(大于),<(小于),>=(大于等于),<=(小于等于)

優(yōu)先級(jí)7:==(等于),!=(不等于)

2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的符合C語(yǔ)法規(guī)則的式子稱為關(guān)系表達(dá)式。關(guān)系表達(dá)式的運(yùn)算結(jié)果是一個(gè)邏輯值,即“真”或“假”。在C語(yǔ)言中關(guān)系運(yùn)算結(jié)果為真,以整數(shù)1表示,結(jié)果為假,以整數(shù)0表示。例如:有intx=2,y=3;

則有:表達(dá)式表達(dá)式的值

x==y0

x+y>50x!=51

關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符的優(yōu)先級(jí),且等于(==)和不等于(!=)的優(yōu)先級(jí)低于另外四種運(yùn)算符的優(yōu)先級(jí)。關(guān)系運(yùn)算符的結(jié)合性是左結(jié)合性。例2-9關(guān)系運(yùn)算表達(dá)式。程序代碼如下:

#include<stdio.h>voidmain(){

int

a,b,c,d,x,y; a=3,b=2,c=1,d=0; x=(a>b); y=(a>b>c);

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

printf("a>b的值為%d\na>b>c的值為%d\n",x,y); x=(d==c); y=(d=c);

printf("d==c的值為%d\nd=c的值為%d\n",x,y);}

例2-9中,a>b即3>2結(jié)果為真,其值為1。a>b>c,即3>2>1的值卻為0,因?yàn)椤?gt;”運(yùn)算符的結(jié)合方向是自左向右,先執(zhí)行“a>b”得1,再執(zhí)行“1>c”得0?!癲==c”的值為0,而“d=c”的值為1,因?yàn)榕袛嗍欠竦扔谝谩?=”運(yùn)算符,而“=”是賦值運(yùn)算符,表示將d的值賦值給c,得到1,賦給y。2.4.4邏輯運(yùn)算符及邏輯表達(dá)式1.邏輯運(yùn)算符運(yùn)算符運(yùn)算名稱運(yùn)算法則結(jié)合性&&邏輯與當(dāng)兩個(gè)操作對(duì)象都為“真”時(shí),運(yùn)算結(jié)果為“真”,其他情況運(yùn)算結(jié)果都為“假”。左結(jié)合||邏輯或只有當(dāng)兩個(gè)操作對(duì)象都為“假”,運(yùn)算結(jié)果才為“假”,其他情況運(yùn)算結(jié)果都為“真”。左結(jié)合!邏輯非當(dāng)操作對(duì)象為“真”時(shí),運(yùn)算結(jié)果為“假”;當(dāng)操作對(duì)象為“假”時(shí),運(yùn)算結(jié)果為“真”。右結(jié)合2.邏輯表達(dá)式

邏輯表達(dá)式中如果包含多個(gè)邏輯運(yùn)算符,如:!a&&b||x>y&&c

(1)!(非)→&&(與)→||(或),即“!”為三者中最高的。(2)邏輯運(yùn)算符中的“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。邏輯運(yùn)算的真值表如下ab!a!ba&&ba||b0011000非01001非000101非0非000112.4.5條件運(yùn)算符及條件表達(dá)式

1.條件運(yùn)算符

條件運(yùn)算符是“?:”,是C語(yǔ)言中唯一的三目運(yùn)算符??梢源鎖f--else語(yǔ)句的完成簡(jiǎn)單的條件求值。

2.條件表達(dá)式 由條件運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的符合C語(yǔ)法規(guī)則的式子稱為條件表達(dá)式。 條件表達(dá)式的一般構(gòu)成形式:

表達(dá)式1?表達(dá)式2:表達(dá)式3

運(yùn)算過(guò)程:先計(jì)算表達(dá)式1的值,若為“真”,則計(jì)算表達(dá)式2的值,整個(gè)條件表達(dá)式的值就是表達(dá)式2的值;若表達(dá)式1的值為“假”,則計(jì)算表達(dá)式3的值,整個(gè)條件表達(dá)式的值就是表達(dá)式3的值。

思考:max=(x>y)?x:y;max=?

例2-11大小寫(xiě)字母轉(zhuǎn)換。輸入一個(gè)字符,如果是大寫(xiě)字母,則轉(zhuǎn)換成小寫(xiě)字母,如果是小寫(xiě)字母,則轉(zhuǎn)換成大寫(xiě)字母,其他字符不變。 程序代碼如下:

#include<stdio.h> voidmain() { charch,c1,c2,c3;

scanf("%c",&ch); c1=(ch>='A'&&ch<='Z')?ch+32:ch; /*只做大寫(xiě)轉(zhuǎn)小寫(xiě)*/ c2=(ch>='a'&&ch<='z')?ch-32:ch;/*只做小寫(xiě)轉(zhuǎn)大小*/

/*大寫(xiě)轉(zhuǎn)小寫(xiě),小寫(xiě)轉(zhuǎn)大寫(xiě)*/

c3=(ch>='A'&&ch<='Z')?ch+32:((ch>='a'&&ch<='z')?ch-32:ch); printf("%c,%c,%c\n",c1,c2,c3); }

分析以上程序,運(yùn)行并觀察運(yùn)行結(jié)果。2.4.6賦值運(yùn)算符及賦值表達(dá)式

1.賦值運(yùn)算符 C語(yǔ)言的賦值運(yùn)算符為“=”,其作用是將賦值運(yùn)算符右側(cè)的表達(dá)式的值賦給其左側(cè)的變量。例如:

x=4; /*將4賦給變量x*/y=2*x*x+4*a;/*將表達(dá)式之值賦給變量y*/

2.賦值表達(dá)式

由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子稱作賦值表達(dá)式。 它的一般形式為:

變量=表達(dá)式

運(yùn)算過(guò)程:先計(jì)算賦值運(yùn)算符右側(cè)的“表達(dá)式”的值,將賦值運(yùn)算符右側(cè)“表達(dá)式”的值賦值給左側(cè)的變量,整個(gè)賦值表達(dá)式的值就是被賦值變量的值。 例如:a=b=c=5;則a=5,b=5,c=5。3.復(fù)合賦值運(yùn)算符及其表達(dá)式

C語(yǔ)言允許在賦值運(yùn)算符“=”之前加上其他運(yùn)算符,構(gòu)成復(fù)合運(yùn)算符。

C語(yǔ)言可使用的復(fù)合賦值運(yùn)算符有10種。它們是:

+=、-=、*=、/=、%=(與算術(shù)運(yùn)算符組合)

<<=、>>= (與位移運(yùn)算符組合)

&=、∧=、|= (與位邏輯運(yùn)算符組合) 復(fù)合賦值表達(dá)式的一般形式為:

溫馨提示

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

評(píng)論

0/150

提交評(píng)論