第二章數(shù)據(jù)類型、運算符與表達式_第1頁
第二章數(shù)據(jù)類型、運算符與表達式_第2頁
第二章數(shù)據(jù)類型、運算符與表達式_第3頁
第二章數(shù)據(jù)類型、運算符與表達式_第4頁
第二章數(shù)據(jù)類型、運算符與表達式_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第二章

數(shù)據(jù)類型、運算符與表達式第二章數(shù)據(jù)類型、運算符與表達式本章主要內容:2.1C語言中的標識符2.2常量與變量2.3整型數(shù)據(jù)2.4實型數(shù)據(jù)2.5字符型數(shù)據(jù)2.6變量的初始值2.7數(shù)值型數(shù)據(jù)間的運算2.8運算符、表達式及常用標準函數(shù)本章重點:全部內容《C語言程序設計》2.1C語言中的標識符是用來命名一個名字的,如常量名、變量名、函數(shù)名、數(shù)組名、類型名等都必須是C語言中合法的標識符。標識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。例如:合法標識符a,x5,count,year,average,student_number,classroom3非法標識符$123,x+y,road#2,studentname,a=b數(shù)據(jù)類型、運算符與表達式《C語言程序設計》注意:大寫字母和小寫字母,在C中被認為是兩個不同的字符。如count與COUNT不同。在起名時,應注意做到“見名知義”。比如表示姓名: 比較好的標識符:

Name、name、xing_ming、Xingming、xm等 比較差的標識符:

x、y、abc等盡量不用單個的l和o作標識符。代數(shù)計算時可以采用習慣的名字。如: 圓:r、s

立方體:a、b、h、v數(shù)據(jù)類型、運算符與表達式《C語言程序設計》2.2常量與變量常量在程序運行過程中,其值不能被改變的量稱為常量。常量有不同的類型,如: 整型常量:15、-8、0等 實型常量:3.7、-8.2等 字符常量:’a’、’A’、’+’、’5’等數(shù)據(jù)類型、運算符與表達式《C語言程序設計》符號常量用一個標識符代表一個常量。語法: #define符號常量名常量如:#definePI3.1415926例2.1符號常量的使用說明:習慣上,符號常量名用大寫,以便與變量名相區(qū)分。可讀性好。修改方便。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》變量其值可以改變的量稱為變量。變量說明語法: 類型名變量名;一個變量應該有一個名字,即變量名,用來標識在內存中所分配的存儲單元。如:

inta;向變量名賦值,即是向該存儲單元中存入數(shù)據(jù),該數(shù)據(jù)就是變量的值。如:

a=10;習慣上,變量名用小寫。a10數(shù)據(jù)類型、運算符與表達式《C語言程序設計》變量“先定義、后使用”目的:保證程序中變量名的正確使用。如:

intstudent; ……

studemt=10; /*Error*/為變量分配適當?shù)膬却鎲卧H纾?/p>

inta;floatb;根據(jù)所變量的變量的類型,檢查對該變量所進行的操作是否合法。如:

int

a,b;floatc; ……a%b…… /*OK*/ ……a%c…… /*Error*/ab數(shù)據(jù)類型、運算符與表達式《C語言程序設計》2.3整型數(shù)據(jù)整型常量有三種表示:十進制整數(shù)。如:123、-456、0八進制整數(shù)。以0開頭的數(shù)是八進制數(shù)(使用的數(shù)碼為:0~7)。如0123=(123)8=(83)10。在8進制數(shù)中不使用8和9這兩個數(shù)碼,如018、094均為非法。十六進制數(shù)。以0x開頭的數(shù)是十六進制數(shù)(使用的數(shù)碼為:0~9、a~f或A~F)。如0x123=(123)16=(291)10。對于0x1a、0xabcd、0x0FFF等都是合法的16進制數(shù),而0X8a、0h0fff、0xfg等都是非法的

數(shù)據(jù)類型、運算符與表達式《C語言程序設計》整型變量整型分類、所占字節(jié)數(shù)及數(shù)據(jù)范圍:例2.2不同整型數(shù)據(jù)進行的混合運算

數(shù)據(jù)類型符占字節(jié)數(shù)(位數(shù))取值范圍int2(16)-32768~32767即-215~(215-1)short[int]2(16)-32768~32767即-215~(215-1)long[int]4(32)-2147483648~2147483547即-231~(231-1)unsigned[int]2(16)0~65535即0~(216-1)unsignedshort[int]2(16)0~65535即0~(216~-1)unsignedlong[int]4(16)0~4294967295即0~(232-1)數(shù)據(jù)類型、運算符與表達式《C語言程序設計》整型常量的類型在程序中當書寫一個整型常量時,它占幾個字節(jié)呢?C是這樣處理的:如果其值在-32768~32767范圍內,認為它是int類型(占2個字節(jié)),否則認為它是long類型(占4個字節(jié))。當需要把一個僅占兩個字節(jié)的整型常量讓它占4個字節(jié)時,可以在該數(shù)據(jù)的后面加上字母L(大小寫均可)。如:

longa=10L; 而:

longb=10;b數(shù)據(jù)類型、運算符與表達式《C語言程序設計》2.4實型數(shù)據(jù)實型常量實數(shù)在C中也稱浮點數(shù)。實數(shù)有兩種表示形式:十進制數(shù)形式,也稱小數(shù)形式。如:

0.58、

.58、

58.0、85. 指數(shù)形式,也稱科學記數(shù)法。如:

12.3e3、123E2、1.23e+4、0.12E+5

都代表1.23×104。但要注意字母e(或E)之前必須有數(shù)字,且e后面指數(shù)必須為整數(shù),如:

e3、2.1e3.5、.e3、e

等都不是合法的實數(shù)。《C語言程序設計》實型變量實型分類、所占字節(jié)和取值范圍:對于實型常量不區(qū)分float型和double型。一個實型常量可以賦給一個float型或double型變量。根據(jù)變量的類型截取實型常量中相應有效數(shù)字。例2.3實型變量的說明及精度分類數(shù)據(jù)類型占字節(jié)數(shù)小數(shù)位長度精度(有效位)取值范圍單精度float467約10-38~1038雙精度double8615~16約10-308~10308數(shù)據(jù)類型、運算符與表達式《C語言程序設計》2.5字符型數(shù)據(jù)字符常量普通字符常量:用單引號括起來的一個字符,如’a’、’H’、’&’、’9’、’+’等。轉義字符:以反斜線“\”開頭的特定字符。常見的轉義字符:轉義字符含義轉義字符含義轉義字符含義\n換行\(zhòng)t跳格\”字符”\r回車\\字符\\ddd1-3位8進制表示的字符\b退格\’字符’\xhh1-2位16進制表示的字符數(shù)據(jù)類型、運算符與表達式《C語言程序設計》[例2.4]轉義字符應用舉例main(){ printf(“abc\tde\rx\n”);

printf(“f\t\b\bg”);}

運行結果:xbc□□□□□def□□□□□ga1區(qū)2區(qū)bdcexfg數(shù)據(jù)類型、運算符與表達式《C語言程序設計》字符變量字符類型分類、所占字節(jié)和取值范圍:[例2.5]字符型數(shù)據(jù)字符型數(shù)據(jù)與整型數(shù)據(jù)的關系將一個字符常量賦給一個字符變量,并不是把該字符本身放在內存單元中去,而是將該字符的ASCII碼放到存貯單元中,因此字符型數(shù)據(jù)也可以象整型數(shù)據(jù)那樣使用。如:charch;

ch=‘A’;數(shù)據(jù)類型字節(jié)長度取值范圍[signed]char1-128~127之間的整數(shù)unsignedchar10~255之間的整數(shù)ch65《C語言程序設計》[例2.6]字符型數(shù)據(jù)與整型數(shù)據(jù)的關系#include<stdio.h>main(){ charch;

inti;

ch=’A’; i=65;

printf(“%c,%c\n”,ch,i);

printf(“%d,%d\n”,ch,i);

ch=65; i=’A’;

printf(“%c,%c\n”,ch,i);

printf(“%d,%d\n”,ch,i);

i=321; ch=i;

printf(“i=(%d,%c)\n”,i,ch);}

ich32165數(shù)據(jù)類型、運算符與表達式《C語言程序設計》字符串常量用雙引號括起來?!盚ello”、”a”、”123”等。不要把字符常量與字符串常量相混淆。如有:

charch1,ch2,ch3; ch1=’a’; /*ok*/ ch2=”a”; /*error*/ ch3=”CHINA”; /*error*/字符串的長度:雙引號括起來的字符個數(shù)。如:”CHINA”的長度為5;”abc\txyz”的長度為7(其中\(zhòng)t表示一個字符);””是空字符串,長度為0。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》字符串的存儲除了要存儲雙引號里面的字符之外,C規(guī)定還要多存儲一個字符’\0’,作為“字符串的結束標志”。如字符串“CHINA”的存儲情況為: 長度為5,而實際需要6個字節(jié)。思考: 請說明”5”,’5’,5的區(qū)別,它們各占幾個字節(jié)的存儲空間,在內存中是如何存儲的。字符串的結束標志數(shù)據(jù)類型、運算符與表達式《C語言程序設計》2.6變量的初始值在使用變量時,如果它出現(xiàn)在表達式中,事先必須得有一個初始值;否則其值將是一個不確定的值。變量的初始值可以通過賦值語句、讀語句和變量初始化來獲得。如:

int

x,y,z; x=5;

scanf(“%d”,&y); z=x+y;數(shù)據(jù)類型、運算符與表達式《C語言程序設計》變量的初始值也可能用變量初始化來獲得,即在說明變量的同時給變量賦值。變量說明的完整語法:類型名變量名=初始值;如:

inta=3; floatf=4.5; charc1=’a’,c2;

如果對幾個變量賦以同一個初值,不能寫成:

inta=b=c=1; /*b、c沒有定義*/

應寫成:

inta=1,b=1,c=1;

數(shù)據(jù)類型、運算符與表達式《C語言程序設計》2.7數(shù)值型數(shù)據(jù)間的運算一般情況下,相同類型的數(shù)據(jù)可直接進行運算,運算的結果就是這種類型。如表達式:

5.0/2.0 /*參加運算的兩個數(shù)都是實型,結果為實型2.5*/

5/2 /*參加運算的兩個數(shù)都是整型,結果為整型2*/在C語言中,不同類型的數(shù)據(jù)可以在同一表達式中進行混合運算,但運算前要進行必要的類型轉換。如:

10+’a’-1.5/3

是正確的表達式。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》類型的自動轉換(隱式轉換)不同類型的數(shù)據(jù)在進行運算時,按下圖轉換規(guī)則自動進行:

double←float ↑ long ↑ unsigned ↑

int←char,short橫向向左的箭頭表示即使類型相同也必定轉換??v向的箭頭表示當運算對象為不同類型的數(shù)據(jù)時轉換的方向,并不表示轉換過程。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》類型轉換舉例:

若inti;floatf;doubled;longe;10+’a’+i*f–d/eintintfloatdoublelongchardoubledoubledoubledoubledoubleintintdoubledoubledouble數(shù)據(jù)類型、運算符與表達式《C語言程序設計》類型的強制轉換類型的自動轉換是系統(tǒng)自動進行的,不需要用戶干預。但有時為了達到某種目的,還必須進行類型的強制轉換,不然會出現(xiàn)錯誤的運算結果。[例2.7]沒有考慮類型轉換時,有問題的程序強制類型轉換的語法格式:(類型名)表達式如:(double)a (int)(x+y) (int)x+y思考:如何修改例2.7,使之正確。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》在強制類型轉換時,得到一個所需類型的中間值,原來變量的類型及該變量所存儲的值并未發(fā)生變化。[例2.8]強制轉換不影響原變量自動轉換一般不會使數(shù)據(jù)受到損失,而強制轉換就有可能使數(shù)據(jù)受損或結果難以理解,這是由于高級別的類型轉換為低級別的類型時無法完整存儲造成的。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》類型轉換可簡單地理解成下面的方式:整型→實型: 補足小數(shù)位及精度。如:2→2.0實型→整型: 截斷小數(shù)位,只保留整數(shù)部分。如:2.8→2 較長整型→較短整型(long→int、int→char等): 截斷高位,只保留低位數(shù)據(jù)。如:數(shù)據(jù)類型、運算符與表達式《C語言程序設計》較短整型→較長整型(int→long、char→int等):補足高位,數(shù)值不變。等長的整型之間的轉換(unsigned←→int):各二進制位不變。有符號數(shù)→無符號數(shù)時,原來的符號位不再作為符號,而變?yōu)閿?shù)據(jù)的一部分;無符號數(shù)→有符號數(shù)時,最高位被當作符號位。如:[例2.9]類型轉換對數(shù)據(jù)的影響數(shù)據(jù)類型、運算符與表達式《C語言程序設計》2.8運算符、表達式及常用標準函數(shù)運算(即操作)是對數(shù)據(jù)的加工。運算符或操作符:如+、-、*、/等符號。運算量或操作數(shù):被運算的對象(即常量、變量或函數(shù))。表達式:就是用運算符把運算量連接起來所構成的式子。C語言提供了相當豐富的運算符。根據(jù)運算符所需要的運算量的個數(shù),運算符還分為單目、雙目和三目運算符。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》2.8.1算術運算符及其表達式由算術運算符與運算量構成的表達式稱算術表達式?;舅阈g運算符

+(加)、-(減)、*(乘)、/(除)、%(取余)前4個是通常的四則運算。但要注意,兩個整數(shù)相除的結果仍為整數(shù)?!?”是取余或稱取模運算,只適合于整型數(shù)據(jù)。x%y就是x除以y所得的余數(shù)。如:5%3 /*值為2*/3%5 /*值為3*/6%6或10%2 /*值為0*/數(shù)據(jù)類型、運算符與表達式《C語言程序設計》自增(++)、自減(--)運算符只能用在變量的前面和后面。如:m=3;m1=m++;m2=++m;數(shù)據(jù)類型、運算符與表達式前綴形式后綴形式自增++aa++自減--bb--運算時機先使變量變化,再取變量的值參加運算先取變量的值參加運算,再使變變化mm1m233455《C語言程序設計》[例2.10]“++”和“--”運算符在表達式中的使用在一個表達式中對一個變量自增或自減多次,可能造成困惑。如:

a=3;k=(++a)+(++a); b=3;printf(“%d,%d”,b,b++);優(yōu)先級:()→++、--→*、\、%→+、-數(shù)據(jù)類型、運算符與表達式akb345103表達式棧bb++計算結果棧輸出4,3434《C語言程序設計》2.8.2賦值運算符及其表達式賦值運算符和賦值表達式賦值運算符即“=”,由它構成的表達式稱賦值表達式。其語法格式為:變量名=表達式其作用是將“=”右邊表達式的值賦給左邊的變量。如:

a=1; a=a+5;數(shù)據(jù)類型、運算符與表達式《C語言程序設計》如果表達式值的類型與變量的類型不同,將會把表達式的值自動轉換為變量的類型,這種轉換是強制性的。如:

floata; a=5; a=a*2;既然是表達式,表達式就有一個值。如:2+5是算術表達式,值為7;a=3是賦值表達式,C規(guī)定這個值就是送給左側變量的值,即表達式a=3的值為3。則下列合法:a=(b=5); a=2*(c=3); a=b=1;數(shù)據(jù)類型、運算符與表達式《C語言程序設計》復合賦值運算符及其表達式賦值運算符可以與所有的雙目運算符合在一起,構成一種新的運算符(如“+=”、“-=”、“*=”等),稱復合的賦值運算符。如:

a+=3 p*=5 h/=2+1 a=a+3 p=p*5 h=h/(2+1)a+=3可以理解為:把3加到a里面去;

p*=5可以理解為:把p擴大5倍。雖然像“a-=a+=a*=5”這樣的表達式允許,但我們不提倡這種用法。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》賦值表達式是程序中使用是頻繁的表達式。凡是允許使用表達式的地方,都可以使用賦值表達式,可以說它“無孔不入”。在賦值表達式的后面加分號,就構成了賦值語句。如:

a=10 a=10; b=c+5 b=c+5; x=y=1 x=y=1; p*=q++ p*=q++;賦值運算符的優(yōu)先級: 其它運算符→=→,數(shù)據(jù)類型、運算符與表達式賦值表達式賦值語句《C語言程序設計》2.8.3其它運算符逗號運算符由逗號運算符(即“,”字符)與運算量構成的表達式稱逗號表達式。其語法格式為:表達式1,表達式2,……,表達式n其求值過程是:從左向右逐個計算每一個表達式,把最右側表達式(即表達式n)的值作為整個表達式的值。如:

3+2,10-6數(shù)據(jù)類型、運算符與表達式4《C語言程序設計》逗號運算符是所有運算符中優(yōu)先級最低的。如:逗號運算的使用是為了程序簡潔,但不要濫用。其典型用法是在for循環(huán)語句中,如:

for(s=0,i=1;i<=100;s+=i,i++)…數(shù)據(jù)類型、運算符與表達式p=q=2,q*6p=(q=2,q*6)pqpq逗號表達式的值逗號表達式的值222121212逗號表達式《C語言程序設計》求字節(jié)運算符運算符sizeof是用來計算變量或數(shù)據(jù)類型所占的內存字節(jié)數(shù)。其語法格式:sizeof(類型名或變量名)如,求整型數(shù)據(jù)所占字節(jié)數(shù):

inta;

printf(“%d,%d”,sizeof(a),sizeof(int));在16位C語言編譯系統(tǒng)中輸出“2,2”;而在32位C語言編譯系統(tǒng)中將輸出“4,4”。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》位運算符C語言中提供了對位的運算,是通過位運算符來實現(xiàn)的。這在某種程度上實現(xiàn)了低級語言的功能。所謂位運算是指按位來進行的運算。所以應該先把參與運算的數(shù)據(jù)轉換為二進制數(shù)再進行相應的運算。數(shù)據(jù)類型、運算符與表達式《C語言程序設計》按位與運算(&)按二進制位進行“與”運算。對應的二進制位都為1時,結果位為1,否則為0。即:0&0=0 0&1=0 1&0=0 1&1=1例如3&5的運算如下:數(shù)據(jù)類型、運算符與表達式《C語言程序設計》按位或運算(|)按二進制位進行“或”運算。對應的二進制位都為0時,結果位為0,否則為1。即:0|0=0 0|1=1 1|0=1 1|1=1例如3|5的運算如下:數(shù)據(jù)類型、運算符與表達式《C語言程序設計》按位異或運算(^)對應的二進制位相同時,結果位為0,否則為1。即:0^0=0 0^1=1 1^0=1 1^1=0例如3^5的運算如下:數(shù)據(jù)

溫馨提示

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

評論

0/150

提交評論