C語言基本數據類型_第1頁
C語言基本數據類型_第2頁
C語言基本數據類型_第3頁
C語言基本數據類型_第4頁
C語言基本數據類型_第5頁
已閱讀5頁,還剩131頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第2章基本數據類型、運算符和表達式—本章要點掌握c語言中的數據類型掌握常用的表達式形式,以及運算符的優先級和結合性。

X+y/3X=Y=3成績、工資、平均體重、價格……類型?范圍?精度?內存結構?運算?1第2章基本數據類型、運算符和表達式2.1變量和常量2.2基本數據類型2.3整型2.4實型

2.5字符型

2.6運算符和表達式

2.7基本的輸入輸出函數2.8總結與提高

預備知識2計算機中數的表示及進制轉換數碼、基與權數碼:表示數的符號基:數碼的個數權:每一位所具有的值數制<>預備知識3126912457810119-5=49+7=16=(4)123各種進制之間的轉換二進制、八進制、十六進制轉換成十進制方法:按權相加<>4各種進制之間的轉換(整數)二進制、八進制、十六進制轉換成十進制方法:按權相加十進制轉換成二進制、八進制、十六進制原理:方法:連續除以基,從低到高記錄余數,直至商為0例把十進制數59轉換成二進制數5922921427232120(59)10=(111011)2110111111011余余余余余余例把十進制數159轉換成八進制數1598198280(159)10=(237)8237余7余3余2例把十進制數459轉換成十六進制數4591628161160(459)10=(1CB)161CB余11余12余15二進制與八進制之間的轉換二進制轉換成八進制:從右向左,每3位一組(不足3位左補0),轉換成八進制八進制轉換成二進制:用3位二進制數代替每一位八進制數例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7<>6二進制與十六進制之間的轉換二進制轉換成十六進制:從右向左,每4位一組(不足4位左補0),轉換成十六進制十六進制轉換成二進制:用4位二進制數代替每一位十六進制數例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F<>7字節和位內存以字節為單元組成每個字節有一個地址一個字節一般由8個二進制位組成每個二進位的值是0或101234567012345678910……...<>76432518數值的表示方法——原碼、反碼和補碼原碼:最高位為符號位,其余各位為數值本身的絕對值反碼:正數:反碼與原碼相同負數:符號位為1,其余位對原碼取反補碼:正數:原碼、反碼、補碼相同負數:最高位為1,其余位為原碼取反,再對整個數加1<>9原碼反碼補碼+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數的范圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字節表示數)負數補碼轉換成十進制數:最高位不動,其余位取反加1例補碼:11111001

取反:10000110

加1:10000111=-7<>102.1變量和常量—變量數學中的變量是指其值可以變化的量,程序中的變量是指可多次賦值的量。變量有三個要素,變量類型、變量名和變量地址。例2-1變量的使用main(){intx,y,sum;

printf(“\npleaseinputtwointegers:");

scanf("%d%d",&x,&y);/*輸入兩個整數*/sum=x+y;/*兩個整數求和*/

printf("\nThesumis%d",sum);/*將和輸出*/}112.1

常量與變量標識符定義:用來標識變量、常量、函數等的字符序列組成:只能由字母、數字、下劃線組成,且第一個字母必須是字母或下劃線大小寫敏感不能使用關鍵字長度:最長32個字符,一般不超過16個命名原則:見名知意不宜混淆如l與I,o與0例:判斷下列標識符號合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123<>M.D.John3days#33char$123a>b122.1變量和常量—變量C語言中的關鍵字有(共32個):auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while。132.1變量和常量—變量例如:下列是合法的變量名:

下列是不合法的變量名:

SUM,_total,_ch1,employee_name,p_1M.D.John,$876,3D67,a>b,int142.1變量和常量—常量相對變量的概念就是常量,也稱為常數。在程序運行過程中,其值不能被改變的量稱為常量。具體來說有兩類:普通常量符號常量3,7.56,’a’,”Ilovebeijing”,……#difinePI3.1415一般用大寫字母是宏定義預處理命令,不是C語句直接常量:整型常量實型常量字符常量字符串常量如#definePRICE30常量定義:程序運行時其值不能改變的量(即常數)分類:符號常量:用標識符代表常量定義格式:#define

符號常量常量<>例符號常量舉例(ch2_1.c)#definePRICE30main(){

intnum,total;num=10;total=num*PRICE;

printf("total=%d",total);}運行結果:total=300162.1變量和常量—常量例2-2符號常量的例子#definePI3.14main(){floatr,area;

printf(“\nPleaseinputtheradius:");

scanf("%f",&r);/*輸入某圓的半徑*/PI=3.1415926;area=PI*r*r;/*計算該圓的面積*/

printf("\nTheareaofthecircleis:%f",area);/*輸出該圓的面積*/}/*此句錯誤,不能通過編譯,因為PI是符號常量,不能重新賦值。*/172.1變量和常量—常量問題:使用符號常量有什么好處?182.2基本數據類型C語言數據類型C數據類型基本類型構造類型指針類型空類型void定義類型typedef字符類型char枚舉類型enum整型實型單精度型float雙精度型double數組結構體struct共用體union短整型short長整型long整型int數據類型決定:1.數據占內存字節數2.數據取值范圍3.其上可進行的操作19基本數據類型<>類型符號關鍵字數的表示范圍所占位數整型字符型實型有無(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無unsignedchar80~255說明:數據類型所占字節數隨機器硬件不同而不同,上表以IBMPC機為例:202.3整型—整型常量

在C語言中,使用的整型常量有十進制、八進制和十六進制三種,用不同的前綴來標識不同進制的整型常量,用不同的后綴來標識不同類型的整型常量。(1)十進制整常量:其各位數為0~9,但最高位不能為0(除了0這個數字外)。例如,22,0,-56等是合法的十進制整常數;而01、726C不是十進制整常數。(2)八進制整常量:八進制整常量必須以數字0開頭,即以0作為八進制數的前綴。各位數取值為0~7。212.3整型—整型常量以下各數是合法的八進制數:---01(十進制為1)、0101(十進制為65)、0177777(十進制為65535);以下各數不是八進制數(Why):---25、07C2。(3)十六進制整常量:十六進制整常量的前綴為0X或0x。十六進制需要十六個字符來表示各位可能出現的數符,這些字符規定為0~9,A~F或a~f。222.3整型—整型常量以下各數是合法的十六進制整常量:---0X4B(十進制為75)、0X10(十進制為16)、0XFFFF(十進制為65535);以下各數不是十六進制整常量:---5A(無前綴0X)、0X5H(含有非十六進制數碼)。232.3整型—整型常量(4)整型常量的后綴:在16位字長的機器上,基本整型的長度為16位,因此表示的數的范圍也是有限定的。注意:八進制整型常量和十六進制整型常量都只能表示正整數,因此16位取值范圍是0~+65535,而十進制整型常量可以是負數,取值范圍為-32768~+32767。如果使用的數超過了上述范圍,則要用相應的后綴來標明。242.3整型—整型常量超范圍的數用長整型數來表示(關于整型數據類型,參考本章2.3.2節)。長整型數是用后綴“L”或“l”來表示的。例如: 十進制長整型常數:例如32L(十進制為32)、1234567L(十進制為1234567); 八進制長整型常數:例如040L(十進制為32)、0300000L(十進制為98304); 十六進制長整型常數:例如0X20L(十進制為32)、0XFFFFL(十進制為65535)。

注意:整數32L和基本整常數32在數值上并無區別但是在內存中,32L占用4個字節空間,而32只占用2個字節的空間,因此是不相同的。252.3整型—整型常量如果要表示一個無符號數,整型常數的后綴為“U”或“u”。例如:---358u,0x38Au,235Lu均為無符號數。前綴和后綴可同時使用以表示各種類型的數。如0XB7CLu表示十六進制無符號長整數B7C,其十進制數為2940。2.3整型—整型常量262.3整型—整型常量例2-3各進制整數的輸出。main(){

inti;i=167;

printf("\ni=167");

printf("\nThedecimalformis%d",i);/*以十進制格式顯示*/

printf("\nthe

octonaryformis%o",i);/*以八進制格式顯示*/

printf("\nthehexadecimalformis%x",i);/*以十六進制格式顯示*/i=0167;

272.3整型—整型常量

printf("\ni=0167");

printf("\nThedecimalformis%d",i);

printf("\nthe

octonaryformis%o",i);

printf("\nthehexadecimalformis%x",i);i=0x167;

printf("\ni=0x167");

printf("\nThedecimalformis%d",i);

printf("\nthe

octonaryformis%o",i);

printf("\nthehexadecimalformis%x",i);}282.3整型—整型常量運行該程序后,其結果為:i=167Thedecimalformis167Theoctonaryformis247Thehexadecimalformisa7i=0167Thedecimalformis119Theoctonaryformis167Thehexadecimalformis77i=0x167thedecimalformis359theoctonaryformis547thehexadecimalformis167292.3整型—整型變量整型變量分類。短整型≤基本整型≤長整型。在16位字長的機器中,基本整型變量占2個字節。有無符號位有符號整型無符號整型有無符號位短整型長整型基本整型2*3=6類302.3整型—整型變量1.整數的機內表示如果聲明一個整型變量:inti;i=876;因為876=29+28+26+25+23+22,所以在機內二進制的表示形式如圖2-2所示(共占16位):圖2-2876在內存中的表示0000001101101100312.3整型—整型變量無符號整型將所有的位均表示為數據,因此只有正數形式。有符號的整型將最高位用做符號位,最高位為“1”表示負數,為“0”表示正數。322.3整型—整型變量2.整型變量的類型 數據類型類型說明符字節數表示范圍無符號短整型unsignedshort[int]20~65535有符號短整型[signed]Short[int]2-32768~32767無符號整型unsigned[int]20~65535有符號整型[signed]int2-32768~32767無符號長整型unsignedlong[int]40~4294967295有符號長整型[signed]long[int]4-2147483648~2147483647332.3整型—整型變量3.整型變量的聲明和賦值聲明變量的格式為:

變量類型變量名;下面是聲明整型變量的例子:

shortintx;聲明了一個短整型的變量x。而

unsignedinty;則聲明了一個無符號的基本整型變量y。342.3整型—整型變量聲明變量的時候要注意三點:(1)允許一行聲明多個同類型變量,各變量名間用“,”(逗號)隔開;(2)變量必須先聲明,然后才能使用;(3)在一個語句塊中,程序中所有的變量應當一起聲明在開始處,不能重復聲明。

352.3整型—整型變量例2-4整型變量的運用main(){

inta,b,c,d;/*在程序段開始處一起聲明變量*/unsignedu;a=12;b=-24;u=10;/*用常量為變量賦值*/c=a+u;d=b+u;/*用一個表達式為變量賦值*/

printf("\na+u=%d,b+u=%d",c,d);}362.3整型—整型變量例2-5一個不正確的例子main(){intx,y;y=x;printf("\ny=%d",y);}我錯在那?嗚嗚嗚……372.3整型—整型變量給整型變量賦值有很多方式(1)聲明時立即賦值,稱為初始化。例如:

intx=3;

inty=4,z=5;(2)先聲明后賦值。

intx;x=3;(3)通過格式化函數scanf從標準輸入設備輸入。

intx;

scanf(“%d”,&x);

382.3整型—整型變量4.整型值的輸出。也可以將整型常量或變量的值以十進制、八進制或十六進制的格式輸出,例2-3說明了這一點。

重要提示:數學上的整數可以無限大,但程序設計中整數在機內存儲所占的內存有限,因此整型數據表示的范圍有限,在平時的編程中,要特別注意不能把一個超過范圍的數值賦值給一個整型變量。如果這樣做了,那么這個整型變量事實上接受的不是預想中的值,稱為“溢出”。392.3整型—整型變量例2-6整型數據的溢出。main(){

inta,b;a=32767;

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

}運行后,其結果為:32767,-32768402.3整型—整型變量為什么會出錯?0111111111111111a=32767:

圖2-5整數溢出0000000000000001+11000000000000000-32768412.4實型—實型常量在C語言中,實數只采用十進制。基本的形式為:

整數部分.小數部分但有兩種表達方式:(1)小數方式:由0~9和小數點組成。例如:

0.35,1.67,67.36,-728.3等。(2)指數方式:由十進制實數,加階碼標志“e”或“E”以及階碼(只能為整常量,可以帶符號)組成。其一般形式為:

aEn或aen(a為十進制數,n為十進制整數表示的階碼)其值為a×10n。

422.4實型—實型常量實型常量的例子使用實型常量要注意以下幾點:

(1)整數部分和小數部分可以省略其中的一個,例如,.36和200.都是合法的實型常量。

(2)用指數方式時,E或e兩邊都要有數字,但都只能是常量。

(3)實型分為單精度實型和雙精度實型,但是實型常數不分單、雙精度,都按雙精度double型處理。0.36e2,表示0.36×102;12.56E12,表示12.56×1012;-3.89e-3,表示-3.89×10-3。432.4實型—實型變量1.實型數據的機內表示 實型數據一般占4個字節(32位)內存空間,按指數形式存儲。比如實數3.14159在內存中的存放形式:+.314159+1數符小數部分階符階數小數部分占的位數愈多,數的有效數字愈多,精度愈高。指數部分占的位數愈多,則能表示的數值范圍愈大。

442.4實型—實型變量2.實型變量的類型類型類型說明符比特數(字節數)有效數字表示范圍單精度實型float32(4)6~7-3.4×10-37~3.4×1038

雙精度實型double64(8)15~16-1.7×10-307~1.7×10308

長雙精度實型longdouble128(16)18~19-1.2×10-4931~1.2×104932

452.4實型—實型變量3.實型變量的聲明和賦值實型變量定義的格式和書寫規則與整型相同。例如:

floatx,y;(x,y為單精度實型量)doublea,b,c;(a,b,c為雙精度實型量)462.4實型—實型變量 實型變量賦值方式與整型變量類似,但是要注意的是從鍵盤輸入時scanf()函數的類型說明符為“%f”:

floatx; x=scanf(“%f”,&x);

從鍵盤輸入實數時可以用小數的形式或指數的形式輸入。

472.4實型—實型變量4.實型值的輸出 若用printf()函數輸出,格式輸出符是“%f”,細節請參看本章2.7節。482.4實型—實型變量5.實型數據的舍入誤差例2-7實型數據的舍入誤差。main(){floata,b;a=123456.789e5;b=a+20;printf("\na=%f,b=%f",a,b);}該程序的運行結果是:a=12345678848.000000,b=12345678848.000000492.5字符型—字符常量字符常量是用單引號括起來的單個字符或轉義字符。例如: 'a'、'c'、'='、'+'、'?'都是合法字符常量。注意,‘a’和‘A’是不同的字符常量。在C語言中,字符常量有以下特點:(1)字符常量只能用單引號括起來,不能用雙引號或其它括號。(2)字符常量只能是單個字符,不能是字符串。(3)有些字符有特殊含義,如單引號“‘”、雙引號““”等,還有一些字符不能或不方便直接從鍵盤輸入,比如回車換行符、退格符等。這時可使用轉義字符來表示。502.5字符型—字符常量轉義字符轉義字符的意義ASCII代碼

\n回車換行10

\t橫向跳到下一制表位置9

\b退格8

\r回車13

\f走紙換頁12

\\反斜線符"\"92

\'單引號符39\”雙引號符34

\a鳴鈴7

\ddd1~3位八進制數所代表的字符

\xhh1~2位十六進制數所代表的字符512.5字符型—字符常量廣義地講,C語言字符集中的任何一個字符均可用轉義字符來表示。表中的\ddd和\xhh正是為此而提出的。ddd和hh分別為八進制和十六進制的ASCII代碼(ASCII表見附錄1)。如‘\101’(十進制為65)表示字母‘A’,‘\012’(十進制為10)代表"換行",‘\376’代表圖形字符“■”,‘\XOA’表示換行等。特別注意‘\0’或‘\000’是代表ASCII碼為0的控制字符,即“空操作”。要注意的是,‘\015’表示回車,不換行,使得輸出的當前位置移到本行開頭,而‘\n’表示回車換行,使得輸出的當前位置跳到了下一行的行首。522.5字符型—字符常量例2-8轉義字符的使用。main(){printf("abc\tde\rf\012");

printf("hi\'\"\101\x61");}運行后其結果如下(□表示空格,本章其它地方出現這個符號,不作特別說明的話也代表空格):fab□c□□□de□hi’”□Aa

532.5字符型—字符變量1.字符數據的機內表示01111000每個字符變量被分配一個字節的內存空間,因此只能存放一個字符。字符值是以ASCII碼的形式存放在變量的內存單元之中。如'x'的十進制ASCII碼是120,'y'的十進制ASCII碼是121。對字符變量a,b賦予‘x’和‘y’值:a='x';b='y';實際上是在a,b兩個單元內存放120和121的二進制代碼,如圖2-7所示:a:b:01111001542.5字符型—字符變量例2-9把整數賦給字符變量。main(){chara,b;a='x';/*將字符常量賦值給字符變量*/b=120;/*將整型常量賦值給字符變量*/

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

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

運行后其結果是:x,120x,120

552.5字符型—字符變量例2-10大小寫轉換main(){chara,b;a='a';b='B';

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

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

運行后,其結果是:a,97B,66A,65b,98 562.5字符型—字符變量2.字符變量的聲明和賦值字符變量的聲明格式為:

char變量名; 例如:

charx,y; 該語句聲明了兩個字符變量x和y。字符變量聲明后就可以賦值,對于聲明的變量x可以這樣賦值:

x=‘x’; 注意,在該語句中,左邊的x是變量,而右邊的x是字符常量。

572.5字符型—字符變量字符變量也可用轉義字符賦值:

x=‘\b’; 該語句將退格符賦值給了x。 也可以從標準輸入設備輸入字符給字符變量,如:scanf(“%c”,&x)。因為scanf函數可以指定輸入數據的類型,也稱做格式化輸入函數。582.5字符型—字符串常量在C語言中,沒有為字符串定義變量類型,也就是說,沒有字符串變量這個概念。但是有字符串常量的概念。日常生活中的人名、書名等,都要用字符串來描述。字符串可以存儲在后面將要學到的數組或指針類型變量中。字符串常量是由一對“”括起的字符序列。例如:“CHINA”,“Cprogram”,“$12.5”等都是合法的字符串常量。 如果要將雙引號“””作為字符串的一部分,那么就需要使用轉義字符。例如:“thenumber\”5\””,該字符串就是平時理解的thenumber“5”。592.5字符型—字符串常量字符串常量和字符常量是不同的量。它們之間主要有以下區別:(1)從書寫格式上看,字符常量由單引號括起來,字符串常量由雙引號括起來。(2)從形式上看,字符常量只能是單個字符,字符串常量則可以含一個或多個字符。(3)從賦值方式上看,可以把一個字符常量賦值給一個字符變量,但不能把一個字符串常量賦值一個字符變量。在C語言中沒有相應的字符串變量,但是可以用一個字符數組或字符指針變量來存放一個字符串常量。在數組一章內予以介紹。602.5字符型—字符串常量(4)從內存格式上看,字符常量占一個字節的內存空間。字符串常量占的內存字節數等于字符串中字節數加1。增加的一個字節中存放字符“\0”(ASCII碼為0)。這是字符串結束的標志。例如:字符串“Cprogram”在內存中所占的字節為如圖2-8所示。CprOgram\0612.5字符型—字符串常量字符常量‘a’和字符串常量“a”雖然都只有一個字符,但在內存中的情況是不同的。思考:語句“printf(“Ilike\0c”)”執行的結果是什么?62一般用大寫字母是宏定義預處理命令,不是C語句直接常量:整型常量實型常量字符常量字符串常量如#definePRICE30定義:程序運行時其值不能改變的量(即常數)分類:符號常量:用標識符代表常量定義格式:#define

符號常量常量<>例符號常量舉例(ch2_1.c)#definePRICE30main(){

intnum,total;num=10;total=num*PRICE;

printf("total=%d",total);}運行結果:total=300常量63整型常量(整常數)三種形式:十進制整數:由數字0~9和正負號表示.如123,-456,0八進制整數:由數字0開頭,后跟數字0~7表示.如0123,011十六進制整數:由0x開頭,后跟0~9,a~f,A~F表示.如0x123,0Xff<例12與12L例30000為int型65536為longint

型整型常量的類型根據其值所在范圍確定其數據類型在整常量后加字母l或L,認為它是longint

型常量問題:0123=()100x123=()100Xff=()1083291255問題:0123=()100x123=()100Xff=()1064實型常量(實數或浮點數)表示形式:十進制數形式:(必須有小數點)如0.123,.123,123.0,0.0,123.指數形式:(e或E之前必須有數字;指數必須為整數)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5

<實型常量的類型默認double型在實型常量后加字母f或F,認為它是float型65字符常量定義:用單引號括起來的單個普通字符或轉義字符.

字符常量的值:該字符的ASCII碼值<轉義字符及其含義:轉義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉義字符含義換行垂直制表回車響鈴單引號3位8進制數代表的字符水平制表退格換頁反斜線雙引號2位16進制數代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------(

)例:‘A’-------’\101’-------’\x41’--------65<如‘A’——65,‘a’——97,‘0’——48,‘\n’——10如‘a’‘A’‘?’‘\n’‘\101’轉義字符:反斜線后面跟一個字符或一個代碼值表示例轉義字符舉例(ch2_001.c,ch2_004.c)

main(){printf("\101\x42C\n");

printf("Isay:\"Howareyou?\"\n");

printf("\\CProgram\\\n");

printf("Turbo\'C\'");}運行結果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}運行結果:屏幕顯示:=打印機輸出:¥66aaa<字符常量與字符串常量不同字符串常量定義:用雙引號(“”)括起來的字符序列存儲:每個字符串尾自動加一個‘\0’作為字符串結束標志hello\0例字符串“hello”在內存中a

a\0例‘a’“a”例空串“”\0例:charch;

ch=“A”;例:charch;

ch=‘A’;67編譯程序根據變量定義為其分配指定字節的內存單元…...地址inta=1,b=-3,c;abc2字節2字節2字節地址地址…...內存1-3

隨機數概念:其值可以改變的量變量名與變量值變量定義的一般格式:

數據類型變量1[,變量2,…,變量n];<>變量初始化:定義時賦初值例:

inta,b,c;floatdata;決定分配字節數和數的表示范圍合法標識符例:

inta=2,b,c=4;floatdata=3.67;charch=‘A’;

intx=1,y=1,z=1;

intx=y=z=1;變量的使用:先定義,后使用例1

intstudent;

stadent=19;//Undefinedsymbol‘statent’infunctionmain

例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain

變量定義位置:一般放在函數開頭main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;

printf(“data=%f\n”,data);}變量定義可執行語句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;

printf(“data=%f\n”,data);}Ch2_005.c變量68整型變量占字節數隨機器不同而不同,一般占一個機器字short≤int≤long可用sizeof(類型標識符)測量例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/<>Ch2_006.c實型變量float:占4字節,提供7位有效數字double:占8字節,提供15~16位有效數字字符型變量字符變量存放字符ASCII碼char與int數據間可進行算術運算例a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/沒有字符串變量,用字符數組存放69例/*ch2_003.c*/#definePRICE12.5main(){intnum=3;floattotal;charch1,ch2=‘D’;total=num*PRICE;ch1=ch2-‘A’+‘a’;

printf(“total=%f,ch1=%c\n”,total,ch1);}宏定義變量定義輸出結果運行結果:total=37.500000,ch1=d702.6運算符和表達式—運算符簡介算術運算符:用于各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(--)、強制類型轉換共八種。關系運算符:用于比較運算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六種。邏輯運算符:用于邏輯運算。包括與(&&)、或(||)、非(!)三種。位操作運算符:參與運算的量按二進制位逐位進行運算。包括按位與(&)、按位或(|)、按位非(~)、按位異或(^)、左移(<<)、右移(>>)六種。712.6運算符和表達式—運算符簡介賦值運算符:用于賦值運算,分為簡單賦值(=)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算賦值(&=,|=,^=,>>=,<<=)三類共十一種。條件運算符:這是一個三目運算符,用于條件求值(?:)。逗號運算符:用于把若干表達式組合成一個表達式(,)。指針運算符:用于取內容(*)和取地址(&)二種運算。求字節數運算符:用于計算數據類型所占的字節數(sizeof)。特殊運算符:有括號(),下標[],成員(→,.)等幾種。72學習運算符應注意:運算符功能與運算量關系要求運算量個數要求運算量類型運算符優先級別結合方向結果的類型732.6運算符和表達式—算術運算符和算術表達式1.基本的算術運算符加法運算符“+”:加法運算符為雙目運算符,即應有兩個量參與加法運算。如a+b,4+8等。減法運算符“-”:減法運算符為雙目運算符。但“-”也可作負值運算符,此時為單目運算。乘法運算符“*”:雙目運算符。除法運算符“/”:雙目運算符。參與運算的量均為整型時,結果為舍去小數整型數;如果運算量中有一個是實型,則結果為雙精度實型數。求余運算符(也稱模運算符)“%”:雙目運算符。要求參與運算的量均為整型。求余運算的結果等于兩數相除后的余數。742.6運算符和表達式—算術運算符和算術表達式例2-11兩數相除。main(){printf("\n%d,%d",20/7,-20/7);printf("\n%f,%f",20.0/7,-20.0/7);}該程序的運行結果為:2,-22.857143,-2.857143

“/”兩個操作數如果都為整形,結果為整形,如果有一個為實型,結果即為實型。752.6運算符和表達式—算術運算符和算術表達式例2-12除法與求余。main(){

printf("\n%d,%d",100/3,100%3);}

該程序運行后的輸出為:33,1762.6運算符和表達式—算術運算符和算術表達式2.算術表達式和運算符的優先級和結合性表達式是由常量、變量、函數和運算符組合起來的式子。表達式有相應類型的值,它們等于計算表達式所得結果。表達式求值按運算符的優先級和結合性規定的順序進行。單個的常量、變量、函數可以看作是表達式的特例。772.6運算符和表達式—算術運算符和算術表達式算術表達式:用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合C語法規則的式子,例如(a+b)*3+c/2。例2-13表達式的值main(){

inta,b;a=5;b=7;

printf("\n(a*2)/b=%d",(a*2)/b);}

其運行結果為:(a*2)/b=1 782.6運算符和表達式—算術運算符和算術表達式(2)運算符的優先級和結合性

在表達式求值的時候,先按運算符的優先級別從高到低進行,若運算量兩側的運算符優先級相同時,則按運算符的結合性所規定的結合方向處理(優先級相同的所有運算符結合方向相同,因此不會有矛盾)。算術運算符的優先級別從小到大是:先乘除(‘*’、‘/’和‘%’的等級相同),后加減(‘+’和‘-’的等級相同)。若有a+b/c

,因為除運算比加運算優先級高,因此先算除法,再將其結果與a相加。792.6運算符和表達式—算術運算符和算術表達式C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右。如有表達式a+b-c,則b應先與“+”號結合,執行a+b運算,然后再執行-c的運算。C語言中各種運算符及其優先級和結合性請參看附錄3,理解運算符的優先級和結合性才能真正理解表達式的合法性和運算過程。

802.6運算符和表達式—算術運算符和算術表達式3.強制類型轉換運算其一般形式為:

(類型說明符)(表達式)其功能是把表達式的運算結果強制轉換成類型說明符所表示的類型。例如:

(float)a把a轉換為實型

(int)(x+y)把x+y的結果轉換為整型812.6運算符和表達式—算術運算符和算術表達式如果有下述語句:

inti;floatx=3.6;i=(int)x;/*不能省略括號*/則i的值為3。注意:x本身的值還是3.6。類型轉換還有一種,就是自動轉換,請看下面的語句:

inti=3;floatx;x=i;在這里,語句x=i不需要寫成x=(float)i,其轉換是自動完成的。

822.6運算符和表達式—算術運算符和算術表達式4.自增、自減運算符自增1運算符記為“++”,其功能是使變量的值自增1。自減1運算符記為“--”,其功能是使變量值自減1。自增1,自減1運算符均為單目運算,都具有右結合性。可有以下幾種形式:832.6運算符和表達式—算術運算符和算術表達式(1)++ii自增1后再參與其它運算。例如,假設i和j為已經聲明好的整型變量:

j=++i相當于(注意兩個語句的先后順序,不能顛倒):i=i+1;j=i;(2)--ii自減1后再參與其它運算。例如:

j=--i;

相當于:

i=i-1; j=i;842.6運算符和表達式—算術運算符和算術表達式(3)i++i參與運算后,i的值再自增1。例如:

j=i++;

相當于:

j=i; i=i+1;(4)i--i參與運算后,i的值再自減1。例如:

j=i--;

相當于:

j=i; i=i-1;852.6運算符和表達式—算術運算符和算術表達式自加自減運算用法靈活,出現在較復雜的表達式或語句中時,常常難以弄清,因此應仔細分析。例如,設i,j都為整型,j=i++合法,而j=(i++)++卻不合法,因為(i++)是表達式,不能在用++運算了。另外,碰到繁難的表達式,必要的時候可以編寫程序運行,通過結果反推其運算過程。862.6運算符和表達式—算術運算符和算術表達式例2-14自加自減運算main(){

inti=5;

printf("\n%d",-i++);

printf("\n%d",-++i);}

其運行的結果為:-5-7

872.6運算符和表達式—算術運算符和算術表達式例2-15復雜的自加自減運算main(){

inti=5,j=5,k=5,p,q,r;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);r=k+++1;

printf("\ni=%d,p=%d",i,p);

printf("\nj=%d,q=%d",j,q);

printf("\nk=%d,r=%d",k,r);}

882.6運算符和表達式—算術運算符和算術表達式該程序運行結果為:i=8,p=15j=8,q=24k=6,r=6892.6運算符和表達式—算術運算符和算術表達式5.各數值類型數據間的混合運算整型、字符型和實型之間可以混合運算,但在運算的時候,不同類型的數據需要進行自動轉換,其規律是:(1)字符型(char)和短整型(short)必定先轉換為整型(int);(2)float型一律轉換為double型(可以提高運算精度);902.6運算符和表達式—算術運算符和算術表達式(3)當運算對象為不同類型時,轉換方向是:int→unsigned→long→double例如:int型與double型運算,先將int型對象轉換為double型后運算。912.6運算符和表達式—賦值運算符和賦值表達式1.簡單賦值運算符簡單賦值運算用“=”表示,基本格式為: 變量=表達式其含義是把右邊的表達式的值賦給左邊的變量。也可以用連等的形式:變量1=變量2=……變量n=表達式。例如:

i=j=5(設i和j為整型變量); 注意賦值運算是右結合的,因此連等相當于: 變量n=表達式; 變量n-1=變量n;

……; 變量1=變量2;922.6運算符和表達式—賦值運算符和賦值表達式下面給出一些賦值表達式的例子:x=a+bw=sin(a)+sin(b)y=i+++--ja=b=c=5可理解為a=(b=(c=5))可以說,凡是表達式可以出現的地方均可出現賦值表達式。例如,式子:x=(a=5)+(b=8)932.6運算符和表達式—賦值運算符和賦值表達式2.復合賦值表達式賦值符“=”之前加上其它一些運算符可構成復合賦值符。如+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。構成復合賦值表達式的一般形式為:變量雙目運算符=表達式它等效于變量=變量運算符(表達式)例如:

a+=5等價于a=a+5x*=y+7等價于x=x*(y+7)r%=p等價于r=r%p注意有個括號942.6運算符和表達式—賦值運算符和賦值表達式3.賦值運算中的類型轉換(1)實型賦予整型,舍去小數部分。(2)整型賦予實型,數值不變,但將以浮點形式存放,即增加小數部分(小數部分的值為0)。(3)字符型賦予基本整型,由于字符型為只占一個字節,而整型占二個字節,故將字符的ASCII碼值放到整型量的低八位中,高八位的值根據不同的系統確定是否進行符號擴展。(4)短整型(基本整型)賦予長整型,與字符型賦予基本整型類似,將整個數據寫入長整型的低16位,高16位的值也根據系統來確定是否進行符號擴展。(5)整型賦予字符型,只把低八位賦予字符量。952.6運算符和表達式—賦值運算符和賦值表達式例2-16類型轉換程序之一。main(){

inta;longintb=112768;a=b;

printf("\n%d",a);}其運行結果為:─18304962.6運算符和表達式—賦值運算符和賦值表達式例2-17類型轉換程序之二。main(){

inta,b=322,c;charc1='a',c2;floatx,y=35600.35;a=y;x=b;c=c1;c2=b;

printf("\na=%d,x=%f,c=%d,c2=%d",a,x,c,c2);}

該程序運行的結果是:a=─29936,,x=322.000000,c=97,c2=66972.6運算符和表達式—關系運算符和關系表達式關系運算符是用于兩兩之間比較大小,C語言提供了6種關系運算符:

<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、!=(不等于)。關系表達式的格式為: 表達式1關系運算符表達式2例如:

a<b (3+4)>9982.6運算符和表達式—關系運算符和關系表達式可以認為關系表達式的值為“真(True)”或“假(false)”,但是C語言中沒有邏輯量。關系表達式的值要么是1,要么是0。如果關系成立,則關系表達式的值為1,否則為0。表達式的值(3+4)>9的值為0,可以用printf(“%d”,(3+4)>9)語句來驗證。第三章中將進一步講述關系表達式的使用。

992.6運算符和表達式—邏輯運算符和邏輯表達式C語言提供三種邏輯運算符:

&&(邏輯與)、||(邏輯或)、!(邏輯非)。由邏輯運算符構成的表達式為邏輯表達式。

&&運算要求兩個操作數,當兩個操作數都為“真”時表達式的值為“真”,否則為假;||運算也需要兩個操作數,當其中之一為“真”時,整個表達式就為“真”,否則為假;!為單目運算符,若操作數為“真”,則其邏輯非為“假”,若操作數為“假”,則其邏輯非為“真”。第三章進一步講述關系表達式的使用。1002.6運算符和表達式—逗號運算符和逗號表達式在C語言中逗號“,”也是一種運算符,稱為逗號運算符。其功能是把兩個表達式連接起來組成一個表達式,稱為逗號表達式。其一般形式為:表達式1,表達式2,......表達式n(n>=2)。其求值過程是分別求各個表達式的值,并以表達式n的值作為整個逗號表達式的值。1012.6運算符和表達式—逗號運算符和逗號表達式例2-18逗號表達式的值main(){inta=2,b=4,c=6,x,y,z;y=(x=a+b),(b+c);z=((x=a+b),(b+c));printf("\ny=%d,x=%d,z=%d",y,x,z);} 本程序的結果為:y=6,x=6,z=10 1022.6運算符和表達式—逗號運算符和逗號表達式逗號表達式一般形式中的表達式也可以又是逗號表達式。例如: 表達式1,(表達式2,表達式3)形成了嵌套情形。上面整個表達式的值就是表達式3的值。程序中使用逗號表達式,則分別求逗號表達式內各表達式的值,并不一定需要將整個逗號表達式的值賦給某一變量。1032.7基本的輸入輸出函數—printf函數兩種調用形式格式控制字符串的一般形式為:printf(“字符串”);printf(“格式控制字符串”,輸出表列);

%[flag][[width][.prec]][[h][l][L]]輸出格式字符

1042.7基本的輸入輸出函數—printf函數printf的格式字符輸出類型格式控制符格式字符意義[m][l]d或[m][l]i以十進制形式輸出帶符號整數(正數不輸出符號),方括號中內容可選,m為整數,指定輸出字段的寬度和對齊方式。[l]用于輸出長整型。[l]0以八進制形式輸出無符號整數(不輸出前綴O)。[l]用于輸出長整型。[l]x或[l]X以十六進制形式輸出無符號整數(不輸出前綴OX)。[l]用于輸出長整型。[l]u以十進制形式輸出無符號整數。[l]用于輸出長整型。[m.n]f以小數形式輸出單、雙精度實數。方括號中內容可選,指定輸出字段的寬度和小數位數。1052.7基本的輸入輸出函數—printf函數C輸出單個字符。[m]s或[m.n]s輸出字符串,方括號中內容可選,m指定輸出寬度和對齊方式。n用于截取字符串中的一段用于顯示。[m.n]e或[m.n]E以指數形式輸出單、雙精度實數。[m.n]可選,含義同上。g,G以%f或%e中較短的輸出寬度輸出單、雙精度實數。1062.7基本的輸入輸出函數—printf函數對上表的格式控制符說明如下:(1)%d格式符:用來輸出十進制整數,有以下幾種用法:%d:按數據實際長度輸出。%md:m為指定的輸出字段的寬度。m>0時,如果數據的位數小于|m|,則左端補以空格;如果m<0,當數據的位數小于|m|,則右端補空格。若數據位數大于|m|,則按實際位數輸出。%ld:輸出長整型數據,如longa=123560;

printf(“%ld”,a);如用%d輸出長整型數據,就會發生錯誤,因此long型數據應該用%ld格式輸出。對長整型數據也可指定字段寬度,如用“printf(“%9ld”,a);”語句,其結果為: □□□123560

共9列。1072.7基本的輸入輸出函數—printf函數(2)%o格式符:以8進制形式輸出整數。例如:inta=-1;printf(“%d,%o”,a,a);輸出結果為:-1,37777777777%lo用于輸出八進制長整型。1082.7基本的輸入輸出函數—printf函數(3)%x格式符:以16進制形式輸出整數。例如:inta=-1;printf(“%x,%o,%d”,a,a,a);輸出結果為:ffffffff,37777777777,-1%lx含義是以16進制形式輸出長整型數據。(4)%u格式符:以十進制形式輸出無符號數,例如地址值。1092.7基本的輸入輸出函數—printf函數(5)%f格式符:用來以小數形式輸出實數(包括單、雙精度),有以下幾種用法:%f:不指定字段寬度,由系統自動指定,使整數部分原樣輸出,并輸出6位小數。單精度實數的有效位數一般為7位。雙精度數也可用%f格式輸出,它的有效位數一般為16位,小數部分為6位。1102.7基本的輸入輸出函數—printf函數例2-19%f的用法。#include<stdio.h>main(){floatx,y;

doubleu,v;x=111111.111;y=222222.222;u=1111111111111.111111111;v=2222222222222.222222222;

printf("\n%f",x+y);

printf("\n%f",u+v);}輸出結果為:333333.3281253333333333333.3330101112.7基本的輸入輸出函數—printf函數%m.nf:指定輸出的數據共占|m|列,其中有n位小數(不含小數點)。當m>0時,如果數值長度小于|m|,則左端補空格;當m<0時,如果如果數值長度小于|m|,則右端補空格。1122.7基本的輸入輸出函數—printf函數例2-20%m.nf的用法。#include<stdio.h>main(){floatf=1234.56789;

printf("\n%f,%10f,%10.2f,%.2f,%-10.2f\n",f,f,f,f,f);}輸出結果如下:1234.567871,1234.567871,1234.57,1234.57,1234.571132.7基本的輸入輸出函數—printf函數(6)%c格式符:輸出一個字符。例如:charc=’a’;printf(“%c”,c);輸出字符a。一個整數的值只要在0~255之間,可用字符形式輸出。在輸出前,將該整數轉換成相應的ASCII字符;反之,一個字符數據也可用整數形式輸出。

1142.7基本的輸入輸出函數—printf函數%s格式符:用來輸出一個字符串,它有以下幾種用法:%s:輸出字符串不包括雙引號。例如,語句“printf(“%s”,”student”);”輸出字符串student。它等價于“printf(“student”);”。%ms:輸出的字符串占|m|列,如果字符串本身長度大于|m|,則突破|m|的界限,輸出全部字符串。m>0時,如果數據的位數小于|m|,則左端補以空格;如果m<0,當數據的位數小于|m|,則右端補空格。%m.ns:m.n格式指輸出占|m|列,但只取字符串左端n個字符。如果n>|m|,則m自動取n,即保證n個字符正常輸出。1152.7基本的輸入輸出函數—printf函數(8)%e格式符:以指數形式輸出實數,它有以下幾種形式:e:不指定輸出數據所占的寬度和小數位數(含小數點在內),由系統自動指定給出5位小數,指數部分總共占4位(如e+03),其中“e”占1位,符號占1位,指數占2位。數值按標準化指數形式輸出(即小數點前必須有一位非零數字)。例如printf(“%e”,1234.567);出處結果為:1.23457e+03。也就是說,用%e格式輸出的實數共占11位。1162.7基本的輸入輸出函數—printf

溫馨提示

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

評論

0/150

提交評論