大學(xué)C語言實用教程第3章.ppt
《大學(xué)C語言實用教程第3章.ppt》由會員分享,可在線閱讀,更多相關(guān)《大學(xué)C語言實用教程第3章.ppt(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第3章數(shù)據(jù)運算,大學(xué)C語言實用教程,計算機的基本功能是進行數(shù)據(jù)處理,而數(shù)據(jù)處理主要是通過對表達式的計算完成的。表達式是將運算量用運算符連接起來組成的式子,其中運算量可以是常量、變量或函數(shù)。由于運算量劃分為不同的數(shù)據(jù)類型,每一種數(shù)據(jù)類型都規(guī)定了自己特有的運算或操作,這就形成了對應(yīng)于不同數(shù)據(jù)類型的運算符集合及其相應(yīng)的求值規(guī)則。,必須連接兩個運算量的運算符稱為二元運算符a+ba%ba/b只連接一個運算量的運算符稱為一元運算符-aa++--b,3.1算術(shù)運算,1.算術(shù)運算符,用算術(shù)運算符連接數(shù)值型的運算量而得到的式子。-5*3+6%4/2-1(a+b)/(a-b)a+(b++)*c,(1)求余運算的規(guī)則假設(shè)兩個整數(shù)分別為a和b,則a%b=a-a/b*b8%3=2,-8%3=-2,8%(-3)=2-8%(-3)=-2(2)自加(加1)自減(減1)運算++i表示i=i+1--i表示i=i-1,2.算術(shù)表達式,①++或--可以用于前綴,也可以用于后綴。++n表示先令n=n+1,然后取n的值//先運算后變化n++表示先取n的值,然后令n=n+1//先運算后變化②如果前綴或后綴運算形成一條語句,其運算結(jié)果是相同的。例如,設(shè)i=5,則i++;及++i;運算后,i的值均為6。,100101101100,【例】加1和減1運算。#includevoidmain(){inta=100;printf("%d\n",a);printf("%d\n",++a);//前綴printf("%d\n",a--);//后綴printf("%d\n",a);},,-++i-i++5*6%4/3a+b-c③用圓括號可以提高某個運算符的優(yōu)先級或結(jié)合性,但不允許使用方括號或花括號。x+y*s-a+4/5*32與(x+(y*(s-a)+4)/5)*32,3.算術(shù)表達式求值規(guī)則(1)算術(shù)運算符的優(yōu)先級和結(jié)合性①優(yōu)先級:不同的運算符同時出現(xiàn)在表達式中時,進行運算的優(yōu)先次序②結(jié)合性:同一優(yōu)先級的運算符同時出現(xiàn)在同一表達式中時,進行運算的順序,【例】算術(shù)表達式計算優(yōu)先級和結(jié)合性規(guī)則。,#includevoidmain(){inta=3,b=5,c=15,d=2;printf("%d\n",6-a*b/c%d);printf("%d\n",++a-a++);printf("%d\n",a);},①C編繹系統(tǒng)先將所有的char和shortint都轉(zhuǎn)換成int,所有的float都轉(zhuǎn)換成double。②如果表達式中只含同類型的運算量,則直接進行運算,運算結(jié)果即表達式的值也是同類型的。3/2值為1(整型)3.0/2.0值為1.5(雙精度型)‘A’+’B’值為131(int)型③如果表達式中含有不同運算類型的運算量,先將精度較低的運算量轉(zhuǎn)化成精度較高的類型,再與精度較高的運算量進行運算,得到的運算結(jié)果為精度較高的類型。,(2)自動類型轉(zhuǎn)換規(guī)則,【例】算術(shù)表達式計算自動類型轉(zhuǎn)換規(guī)則,#includevoidmain(){charch=a;inti=5;unsignedintj=6;longintk=12;floatf=3.0;doubled=6.0;printf(“%lf\n”,ch/i+i*k-(j+k)*(f*d)/(f+i));},38.500000,,ch/i+i*k-(j+k)*(f*d)/(f+i)││││││││││int│long│long│double│doubledouble││││││││││└┬┘└┬┘└┬┘└┬┘└┬┘④⑤①②③long│double││└─┬─┘└──┬─┘double⑧⑥│double└──-─┬──┘│⑦└─────┬──────-─┘⑨,表達式ch/i+i*k-(j+k)*(f*d)/(f+i)中含有多種類型的變量,根據(jù)優(yōu)先級和結(jié)合性規(guī)則及自動類型轉(zhuǎn)換規(guī)則進行計算,計算過程如圖所示。,(3)強制類型轉(zhuǎn)換規(guī)則,當(dāng)算術(shù)表達式中需要違反自動類型轉(zhuǎn)換規(guī)則,或者說自動類型轉(zhuǎn)換規(guī)則達不到目的時,可以使用強制類型轉(zhuǎn)換,其格式為:(類型關(guān)鍵字)(表達式)(double)a強制將變量a轉(zhuǎn)換成double型(int)(x+y)強制將表達式(x+y)轉(zhuǎn)換成int型(int)x+y強制將變量x轉(zhuǎn)換成int型,然后與y相加其中包圍類型關(guān)鍵字的圓括號必不可少。,使用強制應(yīng)注意以下幾點:(1)在進行強制類型轉(zhuǎn)換時,類型關(guān)鍵字必須用括號括住。例如(int)x不能寫成intx。(2)在對一個表達式進行強制類型轉(zhuǎn)換時,整個表達式也應(yīng)該用括號括住。例如,(float)(a+b)若寫成(float)a+b就只對變量a進行了強制類型轉(zhuǎn)換。(3)在對變量或表達式進行了強制類型轉(zhuǎn)換后,并不改變原變量或表達式的類型。例如,設(shè)x為float型,y為double型,則(int)(x+y)為int型,而x+y仍然是double型。(4)將float型或double型強制轉(zhuǎn)換成int型時,對小數(shù)部分是四舍五入還是簡單地截斷,取決于具體的系統(tǒng)。VC++采用的是截斷小數(shù)的辦法。,2.5000001VC++對高精度類型轉(zhuǎn)換乘低精度類型增強了檢查能力,因此,對float型變量用double型常數(shù)初始化將給出警告。,【例】算術(shù)表達式計算強制類型轉(zhuǎn)換規(guī)則。#includevoidmain(){inta=7,x=3,y=2;floatb=2.5F,c=4.7F,z=3.5F;printf("%f\n",b+a%3*(int)(b+c)%2/4);printf("%d\n",(x+y)%2+(int)b/(int)z);},3.2賦值運算,1.賦值運算符和賦值表達式v=e;//賦值語句v=e//賦值表達式賦值運算符:+=-=*=/=%=>=,前五種復(fù)合賦值運算符具有算術(shù)運算和賦值的雙重功能;后五種復(fù)合賦值運算符則具有位運算和賦值的雙重功能。,2.賦值表達式的值和類型在賦值表達式中,被賦值的變量得到的值就是賦值表達式的值,而被賦值的變量的類型就是賦值表達式的類型。例如,在形如v=e的賦值表達式中,變量v的值就是該賦值表達式的值,變量v的類型也就是賦值表達式的類型。,#includevoidmain(){inta=-1;unsignedintb;b=a;//低精度轉(zhuǎn)換成高精度printf("%d%u\n",a,b);},#includevoidmain(){inta;charb;floatc;c=2.5;//高精度轉(zhuǎn)換成低精度b=c;//高精度轉(zhuǎn)換成低精度a=b;//低精度轉(zhuǎn)換成高精度printf("%d,%d,%.1f",a,b,c);},2,2,2.5,-14294967295,3.賦值表達式中的數(shù)據(jù)類型轉(zhuǎn)換在v=e這樣的賦值表達式中,當(dāng)v和e的數(shù)據(jù)類型不一致時,C編譯系統(tǒng)自動將e的類型轉(zhuǎn)換成與v相同的類型后再賦值。【例3.5~3.6】賦值表達式中的數(shù)據(jù)類型轉(zhuǎn)換。,-264,【例3.7】復(fù)合賦值運算符和賦值表達式作為運算量。#includevoidmain(){inta=12;a=a-a*a;a=a+a;a+=a-=a*a;//賦值表達式作為運算量printf("%d\n",a);},3.3逗號運算,1.逗號運算符(順序運算符)用逗號運算符將幾個表達式連接在一起就構(gòu)成逗號表達式。a=3*5,a*4,a+5;t=a,a=b,b=t;2.逗號表達式的值逗號表達式中最右邊的一個表達式的值視為逗號表達式的值。inta=5;a=3*5,a*4,a+5//該逗號表達式的值=?inta=5;a=(3*5,a*4,a+5)//該賦值表達式的值=?,【例】逗號運算符及逗號表達式。#includevoidmain(){intc=5;printf("%d,%d,%d\n",c+=c++,c+8,++c);c=5;printf("%d\n",(c+=c++,c+8,++c));c=5;printf("%d\n",c+=c++,c+8,++c);},(1)用一個逗號表達式語句可代替多個賦值語句,如a=0;b=1;c=2;可寫成a=0,b=1,c=2;(2)用一個逗號表達式語句可得到多個計算結(jié)果,如y=10;x=(y=y-5,60/y);執(zhí)行后,x的值為12,y的值為5。(3)當(dāng)某些語法位置只允許出現(xiàn)一個表達式時,用逗號表達式可實現(xiàn)多個表達式的運算,例如后面要介紹的for循環(huán):for(i=0,j=0;i<8,j=c-dx==yscore>90(2)用“==”或“!=”連接兩個關(guān)系表達式x>y!=yy)==(z=x-1));x=y==z;printf("%d",x);printf("%d\n",x++>=++y-z--);},011,3.邏輯運算符,,4.邏輯表達式,用邏輯運算符連接關(guān)系表達式或任意數(shù)值型表達式。charch=‘a(chǎn)’;intx=5;ch>=‘A’printf("%d\n",3*(a+b)>c},邏輯表達式的特殊計算問題①形如(表達式1)(m=a>b)},02,3.5測試數(shù)據(jù)長度運算,C語言并不規(guī)定各種類型的數(shù)據(jù)占用多大的存儲空間,這與宿主機器的硬件特性有關(guān)。為了能夠確定某一種類型數(shù)據(jù)的長度,C語言提供了測試數(shù)據(jù)長度運算符sizeof,它的一般格式為:sizeof(exp)其中,exp可以是類型關(guān)鍵字、變量或表達式。其功能是給出exp所代表的數(shù)據(jù)類型、變量或表達式占用的內(nèi)存字節(jié)數(shù)。sizeof(double),sizeof(x),sizeof(a+b),sizeof(3*1.46/7.28)sizeof是一元運算符,它的優(yōu)先級與++、--、intx=5,y=6;floata=1.28f,b=3000.0f;printf("char:%d\n",sizeof(ch));printf("shortint:%dint:%dlongint:%d\n",sizeof(shortint),sizeof(int),sizeof(longint));printf("float:%d\n",sizeof(a));printf("double:%dlongdouble:%d\n",sizeof(double),sizeof(longdouble));printf("intexpress:%d\n",sizeof(x+y));printf("floatexpress:%d\n",sizeof(a+b));printf("characterexpress:%d\n",sizeof(a-0));},C編譯系統(tǒng)在標(biāo)題文件math.h中定義了眾多的數(shù)學(xué)函數(shù)。當(dāng)需要調(diào)用這些數(shù)學(xué)函數(shù)時,要用"#include"命令行包含該標(biāo)題文件。下面列出的函數(shù)中,自變量x和y為double型,n為int型,所有的函數(shù)值均為double型,三角函數(shù)的自變量以弧度為單位,反三角函數(shù)的函數(shù)值以弧度為單位。,3.6常用數(shù)學(xué)函數(shù),知識點本章,知識點1:運算符的優(yōu)先級和結(jié)合性知識點2:算術(shù)表達式知識點3:賦值表達式知識點4:關(guān)系表達式和邏輯表達式知識點5:逗號表達式知識點6:條件表達式知識點7:測試數(shù)據(jù)長度運算符,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 大學(xué) 語言 實用教程
鏈接地址:http://zhongcaozhi.com.cn/p-11498236.html