C語言之2-2數(shù)據(jù)類型、運算符和表達(dá)式_第1頁
C語言之2-2數(shù)據(jù)類型、運算符和表達(dá)式_第2頁
C語言之2-2數(shù)據(jù)類型、運算符和表達(dá)式_第3頁
C語言之2-2數(shù)據(jù)類型、運算符和表達(dá)式_第4頁
C語言之2-2數(shù)據(jù)類型、運算符和表達(dá)式_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2.3.5賦值運算1.簡單賦值簡單賦值運算符“=“僅執(zhí)行賦值操作,表達(dá)式的形式為:操作數(shù)1=操作數(shù)2“=“的功能是將右操作數(shù)的值賦給由左操作數(shù)指定的存儲單元(變量)。左操作數(shù)必須是一個可更改內(nèi)容的左值表達(dá)式.賦值運算符的右操作數(shù)類型可以和左操作數(shù)不同,執(zhí)行賦值之前右操作數(shù)被自動轉(zhuǎn)換為左操作數(shù)的類型。如:intj;j=5.6;則j的值為5;對于基本類型,賦值表達(dá)式的形式可具體化為:變量名=表達(dá)式例如:inti=5,j;floata=3.0,b=3.5;doubler;charc1,c2;c1=’a’;j=c1;/*由char向int轉(zhuǎn)換,結(jié)果賦給j*/r=a*b+i;/*a*b的結(jié)果由float向double轉(zhuǎn)換,結(jié)果賦給r*/c2=j;/*j由int向char轉(zhuǎn)換,其結(jié)果賦給c2*/i=c1>c2;/*c1>c2的類型與左操作數(shù)相同,直接賦值*/表達(dá)式的結(jié)果和類型與左操作數(shù)相同。當(dāng)右操作數(shù)又是一個賦值表達(dá)式時,形成多重賦值表達(dá)式,例如:i=j=0是一個合法的賦值表達(dá)式,“=”右結(jié)合。因此上式等價于i=(j=0)

,而j=0表達(dá)式的值為0,因此i的值也為0。但要注意:多重賦值表達(dá)式不能出現(xiàn)在變量說明中,如:inti=j=0;是非法的。x=y=4.0;是先將值4.0賦給變量y,再賦給變量x。如有變量說明:intk;doublex;則賦值表達(dá)式:x=k=3.5;是先將實數(shù)3.5自動轉(zhuǎn)換成整數(shù)3賦給整型變量k,然后又將整數(shù)3自動轉(zhuǎn)換成實數(shù)3.0賦給實型變量x,所以k的值是3,x的值是3.0。i=(j=3)+(k=8)表達(dá)式的值為11,使i值為11,使j值為3,k值為8。

2.復(fù)合賦值復(fù)合賦值運算符包括+=-=*=/=%=&=|=^=<<=和>>=,其形式為操作數(shù)1OP=操作數(shù)2可理解為下面的展開形式:

操作數(shù)1=操作數(shù)1OP(操作數(shù)2)下面舉例說明復(fù)合賦值運算的意義:x+=5.0;等效于x=x+5.0x*=u+v;等效于x=x*(u+v)a+=a-=b+2;等效于a=a+(a=a-(b+2))賦值運算符和所有復(fù)合賦值運算符的優(yōu)先級全相同,并且都是“自右至左”結(jié)合,它們的優(yōu)先級高于逗號運算符的優(yōu)先級,低于C語言中其它所有運算符的優(yōu)先級。2.3.5賦值運算2.3.6條件運算條件運算是一個三目運算,有三個運算分量。條件運算的一般形式為

表達(dá)式1?

表達(dá)式2:表達(dá)式3條件運算的計算規(guī)則是:(1)計算表達(dá)式1的值;(2)如果表達(dá)式1的值非0(真),則計算表達(dá)式2,并以表達(dá)式2的值為條件運算的結(jié)果(不再計算表達(dá)式3);(3)如果表達(dá)式1的值為0(假),則計算表達(dá)式3,并以表達(dá)式3的值為條件運算的結(jié)果(不再計算表達(dá)式2)。例如:

x>y?x:y如果x>y條件為真,則條件運算取x值,否則取y值。注意:表達(dá)式2和表達(dá)式3中只有一個被求值。如果表達(dá)式2和表達(dá)式3是不同的基本類型,則進(jìn)行一般算術(shù)轉(zhuǎn)換,結(jié)果為轉(zhuǎn)換后的類型;例1.設(shè)i類型為int,則(i<0)?–i:i結(jié)果為i的絕對值,類型為int.例2.(d>=0)?1:-1結(jié)果為d的符號。例3.設(shè)a,b的類型為int,則(a>b)?a:b結(jié)果為a,b中較大的一個。例4.設(shè)ch為char類型(ch>=’a’&&ch<=’z’)?(ch-‘a(chǎn)’+‘A’):ch如果ch是小寫字母,則結(jié)果為大寫字母,若不是小寫字母,結(jié)果為ch,類型為int。例5.(a>0)?1:((a<0)?-1:0)結(jié)果例6.y<3?-1.0:1結(jié)果為實型,即使y>=3,結(jié)果也為1.0。1a>00a=0-1a<0為了便于調(diào)試程序,下面講printf。3.2.2格式輸出函數(shù)printf一般調(diào)用形式為:printf(“格式控制字符串”,輸出項表列);其功能是按“格式控制字符串”所指定的格式,在計算機標(biāo)準(zhǔn)輸出設(shè)備(通常為顯示器)上依次輸出由輸出項表列所指定的輸出項。輸出項表列用于指定輸出內(nèi)容,它通常由一個或多個輸出項構(gòu)成,當(dāng)有多個輸出項時,輸出項之間應(yīng)使用逗號“,”分隔,輸出項可以是常量、變量或表達(dá)式。輸出項的順序、個數(shù)與類型要與“格式控制字符串”中的格式說明符的順序、個數(shù)、類型相匹配?!案袷娇刂谱址笔鞘褂靡粚﹄p撇號括起來的字符串,用于指定后面各個輸出項的輸出格式。它一般包含兩個方面的信息:格式說明(以%開頭的若干個字符)和普通字符。1.格式說明格式說明由“%”和格式說明符組成,用于將后面相對應(yīng)的輸出項以指定的格式進(jìn)行輸出。常用的格式說明符及使用方法如下。(1)整型格式說明符①%d:輸出十進(jìn)制基本整型數(shù)據(jù)。例如,設(shè)整型數(shù)據(jù)a=3;b=5;printf("%d,%d",a,b);上面雙撇號中的字符“%d”是十進(jìn)制整型格式說明符,其作用是使后面兩個輸出項a、b中的數(shù)據(jù)以十進(jìn)制整型格式輸出到顯示屏幕上。兩個“%d”之間的逗號“,”是普通字符,它將按原樣輸出,因此上面printf函數(shù)的輸出結(jié)果為:3,5②%u:輸出無符號十進(jìn)制基本整型數(shù)據(jù)。

printf("%u\n",3247483647);的結(jié)果是:3247483647printf("%d\n",3247483647);的結(jié)果是:-1047483649printf(“%u”,-1);的結(jié)果是:4294967295③%o(或%lo):以八進(jìn)制格式輸出整型數(shù)據(jù)。其中的二進(jìn)制全部是數(shù)值位。printf(“%o”,23);的結(jié)果是:27④%x(或%lx):以十六進(jìn)制格式輸出整型數(shù)據(jù)。其中的二進(jìn)制全部是數(shù)值位。printf(“%x”,23);的結(jié)果是:17例:inti=30;printf(“%d%o%x”,i,i,i);則輸出:30361e在%和整型格式說明符之間可以加入某些修飾,用來確定整型數(shù)據(jù)的顯示寬度及對齊方式。其一般形式為:%[標(biāo)志][輸出最小寬度]整型格式說明符常用標(biāo)志有:0、+、-三種。0:表示數(shù)據(jù)不足最小輸出寬度時,左補零;-:表示數(shù)據(jù)不足最小輸出寬度時右邊填空格,即數(shù)據(jù)左對齊。若不加此標(biāo)志則默認(rèn)左邊填空格,即數(shù)據(jù)右對齊;+:輸出數(shù)據(jù)右對齊,并在正數(shù)前輸出“+”號。最小輸出寬度:用十進(jìn)制整數(shù)來表示輸出的最少位數(shù)。若數(shù)據(jù)的實際位數(shù)多于定義的寬度,則按實際位數(shù)輸出,若數(shù)據(jù)的實際位數(shù)少于定義的寬度則根據(jù)“標(biāo)志”的定義補空格或0。例如:設(shè)整型數(shù)據(jù)intx=18,y=-1;printf("%-5d,%4d\n",x,y);printf("%15o,%-10x\n",y,y);上面printf函數(shù)輸出結(jié)果為:18???,??-1????37777777777,ffffffff??例.printf(“%%d,%d”,3,4);結(jié)果為:%d,3說明:(1)如果輸出參數(shù)的數(shù)目多于轉(zhuǎn)換說明項數(shù)則多余的參數(shù)不被輸出。(2)printf中參數(shù)右結(jié)合,如設(shè)inti=1;則printf("%d,%d,%d",++i,++i,++i);輸出結(jié)果為4,3,2printf("%d,%d,%d",i++,i++,i++);輸出結(jié)果為3,2,1(2)實型格式說明符①%f:以十進(jìn)制小數(shù)形式輸出單精度、雙精度浮點數(shù)?!纠?.4】#include"stdio.h"voidmain(){ doublex=3.1415; floaty=15.725; printf("x=%f,y=%f\n",x,y);}程序運行結(jié)果為x=3.141500,y=15.725000編譯程序默認(rèn)輸出6位小數(shù),若不夠6位時末尾補零。②%e:以科學(xué)計數(shù)法形式輸出單精度、雙精度浮點數(shù)。例如,對上述例3.4程序中的變量x和y,若以科學(xué)計數(shù)法形式輸出,則printf函數(shù)可改為:printf("x=%e,y=%e\n",x,y);輸出結(jié)果為x=3.141500e+000,y=1.572500e+001同樣也可以在%和浮點數(shù)格式說明符之間一些修飾,用來確定浮點數(shù)據(jù)的顯示寬度、精度及對齊方式。其一般形式為:%[-][m.n]浮點格式說明符-:依然表示數(shù)據(jù)輸出時左對齊;m.n:m表示整個數(shù)據(jù)的輸出寬度,n表示小數(shù)部分輸出的位數(shù)。【例3.5】#include"stdio.h"voidmain(){ doublepi=3.1415; printf("%f,%6.2f,%.2f,%-6.2f\n",pi,pi,pi,pi);}程序輸出結(jié)果為:3.141500,??3.14,3.14,3.14??③%g:根據(jù)浮點數(shù)的大小,自動選用%f或%e格式中輸出寬度較短的一種格式,且不輸出無意義的零。例如:對上述例3.5程序中的變量pi,若printf輸出形式如下:printf("%f,%e,%g",pi,pi,pi);則程序輸出結(jié)果為3.141500,3.141500e+000,3.1415(3)字符型格式說明符%c:輸出一個字符%mc:以寬度m輸出一個字符,若m>1,則在輸出字符前面補m-1個空格。例如:charc;c=’s’;printf("%c,%3c",c,c);輸出結(jié)果為s,??s(4)字符串格式說明符%s:按實際寬度輸出一個字符串。%[-]ms:輸出的字符串占m列,若字符串本身長度超過m列,則按實際寬度輸出;若字符串長度小于m列,則當(dāng)m前有負(fù)號“-”時,字符串左對齊,右補空格,否則字符串右對齊,左補空格。%[-]m.ns:輸出的字符串占m列,但只取字符串中左端n個字符。若m>n,則當(dāng)m前有負(fù)號“-”時,這n個字符左對齊,右補空格,當(dāng)m前沒有負(fù)號“-”時,這n個字符右對齊,左補空格;若m<n,則m自動取n值,以保證n個字符正常輸出?!纠?.6】#include"stdio.h"voidmain(){printf("%s,%3s,%8s,%-8s,%8.3s","Hello","Hello","Hello","Hello","Hello");}程序輸出結(jié)果為Hello,Hello,???Hello,Hello???,?????Hel2.普通字符“格式控制字符串”中,除了格式說明以外的其它字符都是普通字符,普通字符在顯示屏幕上將按原樣輸出。例如:inta=7,b=8;printf("a=%d,b=%d\n",a,b);上述程序段中,printf函數(shù)的“格式控制字符串”中,除了兩個“%d”以外的其它字符均為普通字符,其中“a=,b=”是可打印字符,它們將在顯示屏幕上原樣輸出,最后一個字符’\n’是一個轉(zhuǎn)義字符,表示“換行符”,輸出時光標(biāo)將在屏幕上另起一行顯示。上述程序段的輸出結(jié)果為a=7,b=8

(光標(biāo)另起一行閃爍)【例3.7】#include"stdio.h"voidmain(){ inta,b; floatx,y,s; a=12;b=-34; x=3.1;y=6.3;s=x*x-y*y; printf("a=%d,b=%d\n",a,b); printf("x=%6.2f,y=%-6.2f,s=%.2f\n",x,y,s);}程序運行結(jié)果為a=12,b=-34x=??3.10,y=6.30??,s=-30.082.3.7其它運算其它運算主要是逗號運算、sizeof運算、位運算和移位運算。1.逗號運算C語言提供逗號運算,逗號運算符“,”用于將若干表達(dá)式連接起來順序地逐個計算。連續(xù)逗號運算的一般形式為: 表達(dá)式1,表達(dá)式2,…,表達(dá)式n它的計算順序是從左到右逐一計算各表達(dá)式,并以表達(dá)式n的值為連續(xù)逗號運算的結(jié)果。例如表達(dá)式x=(i=3,i*2)使i等于3,x等于6。其實,逗號運算只是把多個表達(dá)式串聯(lián)起來,在許多情況下,使用逗號運算的目的只是想分別計算各個表達(dá)式的值,而并非想使用逗號運算中最后那個表達(dá)式的值。2.sizeof運算sizeof運算以字節(jié)為單位給出其運算對象所需(或所占)的字節(jié)數(shù),習(xí)慣稱為運算對象的長度。sizeof運算有兩種書寫形式:sizeof(變量名)或sizeof(類型名)如有intj;doublex;表達(dá)式sizeof(j)和sizeof(x)分別是變量j和x所占的字節(jié)數(shù)。483.位運算所謂位運算就是指對一個數(shù)的二進(jìn)制位的運算,例如位的或、與、非運算,位的左移、右移運算。C語言提供了6個用于位操作的運算符,這些運算符只作用于各種整型數(shù)據(jù)(如char型、int型、unsigned型、long型)。關(guān)于位運算,更詳細(xì)的內(nèi)容參見第9章。&按位與(AND)(二元運算符)|按位或(OR)(二元運算符)∧按位異或(XOR)(二元運算符)<<左移(二元運算符)>>右移(二元運算符)~求反碼(一元運算符)voidmain(){inti=1,j=2,k=3;i+=j+=k;/*i=6,j=5,k=3*/printf("i=%d\tj=%d\tk=%d\n",i,j,k);printf("(i<j?i++:j++)=%d\n",i<j?i++:j++);printf("i=%d\tj=%d\n",i,j);printf("(k+=i>j?i++:j++)=%d\n",k+=i>j?i++:j++);printf("i=%d\tj=%d\tk=%d\n",i,j,k);i=3;j=k=4;printf("(k>=j>=i)=%d",k>=j>=i);printf("\t(k>=j&&j>=i)=%d\n",k>=j&&j>=i);i=j=2;k=i++-1;printf("i=%d\tj=%d\tk=%d\n",i,j,k);/*i=3,j=2,k=1*/k+=-i+++++j;printf("i=%d\tj=%d\tk=%d\n",i,j,k);k=i/++i;printf("k=%d\n\n",k);}

2.4類型轉(zhuǎn)換C語言中,整型、單精度型、雙精度型和字符型數(shù)據(jù)可以進(jìn)行混合運算。類型轉(zhuǎn)換可以歸納成3種轉(zhuǎn)換方式:自動轉(zhuǎn)換、賦值轉(zhuǎn)換和強制轉(zhuǎn)換。2.4.1類型自動轉(zhuǎn)換自動轉(zhuǎn)換(在進(jìn)行運算時隱含的轉(zhuǎn)換)的規(guī)則如圖所示。如:3+’a’+34535+7.82.4.2賦值轉(zhuǎn)換如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值過程中就要進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換的基本原則為:(1)將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中。(2)將實型數(shù)據(jù)賦給整型變量時,舍棄實數(shù)的小數(shù)部分。如x為整型變量,執(zhí)行“

溫馨提示

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

評論

0/150

提交評論