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

下載本文檔

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

文檔簡介

第3章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式§3.1C的數(shù)據(jù)類型§3.2常量與變量§3.3整型數(shù)據(jù)§3.4實(shí)型數(shù)據(jù)§3.5字符型數(shù)據(jù)§3.6變量賦初值§3.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算§3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式§3.9賦值運(yùn)算符和賦值表達(dá)式§3.10逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式

#include<stdio.h>voidmain(){

int

a,b,area;a=2;b=4;area=a*b;

printf(“%d\n”,area);}

#include<stdio.h>voidmain(){

int

a,b;floatarea;a=2;b=4;area=a*b;

printf(“%f\n”,area);}

運(yùn)行結(jié)果:8運(yùn)行結(jié)果:8.000000例3.1求矩形的面積。3.1C的數(shù)據(jù)類型1、一個(gè)程序應(yīng)包括以下兩個(gè)方面的內(nèi)容:(1)對(duì)數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(datastructure)。(2)對(duì)操作的描述。即操作步驟,也就是算法(algorithm)著名的計(jì)算機(jī)科學(xué)家(NikiklausWirth)提出一個(gè)公式:程序=數(shù)據(jù)結(jié)構(gòu)+算法

程序=數(shù)據(jù)結(jié)構(gòu)+算法+軟件設(shè)計(jì)方法+語言環(huán)境和工具

基本類型:系統(tǒng)自己定義的一些簡單的數(shù)據(jù)類型。構(gòu)造類型:用戶根據(jù)需要由已知的基本類型按一定的規(guī)則構(gòu)造出的有結(jié)構(gòu)的數(shù)據(jù)類型。

程序在使用某一數(shù)據(jù)之前,一定要將該數(shù)據(jù)進(jìn)行說明。說明的目的是使計(jì)算機(jī)了解所使用的數(shù)據(jù)類型,以便安排合適的存儲(chǔ)空間,進(jìn)行合適的運(yùn)算。2、C語言提供的數(shù)據(jù)結(jié)構(gòu)以數(shù)據(jù)類型出現(xiàn)基本數(shù)據(jù)類型數(shù)值型整型單精度(float)雙精度(double)字符型(char)構(gòu)造類型數(shù)組結(jié)構(gòu)(struct)實(shí)型(浮點(diǎn)型)基本型(int)短整型(short)長整型(long)共用體(union)其它類型指針(point)空類型(void)字符字符串?dāng)?shù)據(jù)類型決定:1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2.數(shù)據(jù)取值范圍3.其上可進(jìn)行的操作枚舉型(enum)3.2常量與變量3.2.1常量與符號(hào)常量

在程序運(yùn)行過程中,其值不能改變的量稱為常量。1、直接常量

整型常量

12,-3,0

實(shí)型常量

4.60.,-1.23,4.0

字符常量

‘a(chǎn)’,‘b’

這些常量稱為字面常量或直接常量。2、符號(hào)常量(1)整型常量

整型常量即整常數(shù),是一個(gè)數(shù)字序列。C語言的整型常量有三種表示形式:十進(jìn)制整數(shù)。如,2006,0,-3八進(jìn)制整數(shù)(以數(shù)字0為前綴的整數(shù))。如:例:0567表示八進(jìn)制數(shù)“567”,對(duì)應(yīng)十進(jìn)制的值為7×80+6×81+5×82,即“375”。例:-023表示八進(jìn)制數(shù)“-23”,對(duì)應(yīng)十進(jìn)制的值為-(3×80+2×81),即“-19”十六進(jìn)制整數(shù)(以0x或0X為前綴的整數(shù))。如:

例0x567表示十六進(jìn)制數(shù)“567”,其十進(jìn)制的值為7×160+6×161+5×162,即“1383”

例-0x2e6表示十六進(jìn)制數(shù)“-2e6”,其對(duì)應(yīng)的十進(jìn)制值為:-(6×160+14×161+2×162),即“-742”#include<stdio.h>voidmain(){printf("%d,%o,%x\n",10,10,10);printf("%d,%d,%d\n",10,010,0x10);printf("%d,%x\n",012,012);

}例3.2關(guān)于十進(jìn)制、八進(jìn)制、十六進(jìn)制的例子(2)實(shí)型常量

實(shí)數(shù)(realnumber)又稱浮點(diǎn)數(shù)(floating-pointnumber),實(shí)型常量也稱為浮點(diǎn)型常量,表示實(shí)型常量的方法有兩種(1)十進(jìn)制小數(shù)形式。由數(shù)字和小數(shù)點(diǎn)(必須包含小數(shù)點(diǎn))組成。如,2006.3,0.15267,0.0,-3.14是實(shí)型常量;“0”是整型常量(2)指數(shù)形式,也稱為指數(shù)表示法。同一個(gè)實(shí)型常量,可以有多種指數(shù)表示法。一般地,對(duì)于一個(gè)a×10b形式的實(shí)型常量,在C語言中可以表示為aEb或aeb

其中,a為一個(gè)絕對(duì)值不小于1且不超過9的小數(shù)(帶有小數(shù)點(diǎn)),稱為尾數(shù);b是一個(gè)整數(shù),稱為指數(shù)。該種表示方法稱為實(shí)型常量的科學(xué)表示法或規(guī)范表示法(3)字符常量字符常量是指用一對(duì)單撇號(hào)括起來的單個(gè)字符。如,a,2,#等。計(jì)算機(jī)中所使用的各種字符和文字都需要進(jìn)行編碼,即賦予每個(gè)文字或字符唯一的值常用的字符采用美國信息交換標(biāo)準(zhǔn)碼(AmericanStandardCodeforInformationInterchange,簡稱為ASCII編碼)方式。如,字符0的ASCII碼值為48,字符R的ASCII碼值為82一個(gè)字符型常量的值是其在C語言字符集中對(duì)應(yīng)的編碼值(4)字符串常量

字符串常量是由雙撇號(hào)括起來的字符序列。如,"IloveChina","3prog","A"等。字符串常量可由多個(gè)字符組成,也可由單個(gè)或零個(gè)字符組成字符串常量須用雙撇號(hào)括起來。雙撇號(hào)僅起定界符的作用,并不是字符串中的字符如,"w"是一個(gè)字符串常量,而'w'是一個(gè)字符常量。字符串常量中不能直接包含單撇號(hào)(“'”)、雙撇號(hào)(“"”)和反斜杠(“\”),若要使用,可參照轉(zhuǎn)義字符中介紹的方法一般用大寫字母是宏定義預(yù)處理命令,不是C語句直接常量:整型常量實(shí)型常量字符常量字符串常量如#definePRICE30定義:程序運(yùn)行時(shí)其值不能改變的量(即常數(shù))分類:符號(hào)常量:用標(biāo)識(shí)符代表常量定義格式:#define

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

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

printf("total=%d",total);}運(yùn)行結(jié)果:total=300常量#definePRICE30#defineNUM12voidmain(){......total=NUM*PRICE;total2=84*PRICE2;

printf("total=%d",total);......}不會(huì)被替換=>total=12*

30;常量符號(hào)常量符號(hào)常量示例(1)#define定義結(jié)束時(shí)不加分號(hào)(;)(2)符號(hào)常量在整個(gè)運(yùn)行中其值不變(3)符號(hào)常量一般用大寫,以示區(qū)別,但不是必須的。注意使用符號(hào)常量的好處(1)含義清楚?!耙娒狻?,如上面的程序,從PRICE就知道它代表價(jià)格(2)在需要時(shí)一個(gè)常量時(shí)能做到“一改全改”。

一處修改=多處修改。變量程序內(nèi)存編寫程序時(shí),常常需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,方便后面使用這個(gè)數(shù)據(jù)或者修改這個(gè)數(shù)據(jù)的值。通常使用變量來存儲(chǔ)數(shù)據(jù)。使用變量可以引用存儲(chǔ)在內(nèi)存中的數(shù)據(jù),并隨時(shí)根據(jù)需要顯示數(shù)據(jù)或執(zhí)行數(shù)據(jù)操縱。存儲(chǔ)

RateRate*5%將值存儲(chǔ)為DiscAmtRate-DiscAmt100.5將值存儲(chǔ)為Result9.52.3.2變量1.變量的概念在程序運(yùn)行過程中,其值可以被改變的量稱為變量。變量的兩個(gè)要素:(1)變量名。每個(gè)變量都必須有一個(gè)名字──變量名,變量命名遵循標(biāo)識(shí)符命名規(guī)則。(2)變量值。在程序運(yùn)行過程中,變量值存儲(chǔ)在內(nèi)存中。在程序中,通過變量名來引用變量的值。2.標(biāo)識(shí)符命名規(guī)則

標(biāo)識(shí)符:用來標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列。變量命名在C語言中,變量命名需要遵循一定的規(guī)則有效名稱principalcost_pricemarks_3lastnamecity無效名稱123ratecurrency$discount%zipcode變量的命名規(guī)則:變量名可以由字母、數(shù)字和_(下劃線)組合而成變量名不能包含除_以外的任何特殊字符,如:%、#、逗號(hào)、空格等變量名必須以字母或

_(下劃線)開頭變量名不能包含空白字符(換行符、空格和制表符稱為空白字符)C語言中的關(guān)鍵字(例如int

和float等)稱為保留字,具有特殊意義,不能用作變量名C語言區(qū)分大小寫,因此變量price與變量PRICE是兩個(gè)不同的變量習(xí)慣上,變量名和函數(shù)名中的英文字母用小寫,以增加可讀性。標(biāo)識(shí)符命名的良好習(xí)慣──見名知意:通過變量名就知道變量值的含義。通常應(yīng)選擇能表示數(shù)據(jù)含義的英文單詞(或縮寫)作變量名,或漢語拼音字頭作變量名。例如,name/xm(姓名)、sex/xb(性別)、age/nl(年齡)、salary/gz(工資)。變量定義的一般格式:

數(shù)據(jù)類型變量1[,變量2,…,變量n];變量初始化:定義時(shí)賦初值

例:

inta,b,c;floatdata;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標(biāo)識(shí)符例:

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

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

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

intstudent;

stadent=19;//Undefinedsymbol‘statent’infunctionmain

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

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

printf(“data=%f\n”,data);}變量定義可執(zhí)行語句3、變量的定義3變量在使用之前必須定義,否則不可以使用;(1)每個(gè)變量在定義時(shí)被指定為一確定類型,編譯時(shí)為其分配相應(yīng)存儲(chǔ)單元;(2)每個(gè)變量屬于一確定類型,據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法,以避免運(yùn)算時(shí)類型出錯(cuò);比如求余運(yùn)算:

floata;

intb,c; a=50;b=10; c=a%b;/*編譯系統(tǒng)報(bào)告錯(cuò)誤*/3、變量的定義34a變量名存儲(chǔ)單元(地址)變量值變量的存儲(chǔ)3.3.1整型常量的表示方法十進(jìn)制(Decimal)八進(jìn)制(Octal):以0開頭,不得含有8或9十六進(jìn)制(Hexadecimal):以0x或0X開頭,用a~f或A~F表示10~153.3整型數(shù)據(jù)1、整型數(shù)據(jù)在內(nèi)存中的存放方式二進(jìn)制形式舉例,inti=10;/*int類型占2字節(jié)*/補(bǔ)碼(Complement)正數(shù):與原碼一致,首位為0負(fù)數(shù):絕對(duì)值取反加1,首位為1零:各位全為00000000000001010高地址字節(jié)低地址字節(jié)3.3.2整型變量補(bǔ)碼舉例舉例inti=-10;/*int類型占2字節(jié)*/00000000000010101111111111110101111111111100111010的原碼-10的補(bǔ)碼取反加一最左邊的一位是符號(hào)位,該位為0,表示數(shù)值為正;為1表示為負(fù)?;緮?shù)據(jù)類型數(shù)據(jù)屬于不同類別AfricaThequickbrownfoxTRUE數(shù)據(jù)

非數(shù)值數(shù)值整型非整型9002.129999/12/20032.175123JackieChanchar數(shù)據(jù)類型非數(shù)值數(shù)值整型intshortintlongintdoublefloat非整型

有三類整型變量:

(1)基本型:以int表示

(2)短整型:以shortint

或short

表示

(3)長整型:以longint

或long表示為充分利用變量的表數(shù)范圍,可以將變量定為“無符號(hào)型”類型:unsignedint

unsignedshort

unsignedlong2、整型變量的分類計(jì)算機(jī)中數(shù)的表示法(補(bǔ)充內(nèi)容)3.3.2整型變量各類整型型數(shù)據(jù)長度、取值范圍

數(shù)據(jù)類型

所占位數(shù)

取值范圍

int

16

-32768~32767

short

16

-32768~32767long

32

-21億~21億unsignedint

16 0~65535

unsignedshort16 0~65535 unsignedlong32 0~42億

1.注意不同類型整型數(shù)取值范圍;

2.對(duì)變量的定義,放在函數(shù)的開頭的變量說明部分;

3.對(duì)整型變量賦值時(shí),注意表示數(shù)的范圍匹配。

有符號(hào)數(shù)與無符號(hào)數(shù)有符號(hào)數(shù)二進(jìn)制補(bǔ)碼表示,首位為符號(hào)位指定signed或缺省情況,即為有符號(hào)數(shù)若指定signed,則存儲(chǔ)單元中最高位代表符號(hào)位(0為正數(shù),1為負(fù)數(shù))無符號(hào)數(shù)沒有符號(hào)位,只能表示非負(fù)數(shù),不能存放負(fù)數(shù),如-123,-3無符號(hào)數(shù)類型必須指定為unsigned無符號(hào)整型變量中可以存放的的正數(shù)的范圍比一般整型變量中正數(shù)的范圍擴(kuò)大一倍(-32768~32767)(0~

65535)若把負(fù)數(shù)賦值給無符號(hào)數(shù),則把該負(fù)數(shù)的補(bǔ)碼當(dāng)作無符號(hào)數(shù)進(jìn)行處理定義學(xué)號(hào),庫存號(hào)等等這些編號(hào),不需要符號(hào),可以定義為無符號(hào)類型有符號(hào)數(shù)與無符號(hào)數(shù)舉例voidmain(){

int

i;unsignedj;

i=j=-50;

i=i/2;

/*-25*/

j=j/2;

/*32743*/}1111111111001110-50的補(bǔ)碼i,j/211111111111001110111111111100111i/2-25的補(bǔ)碼j/232743的補(bǔ)碼/原碼3、整型變量的定義

int

a,b;unsignedshortc,d;longe,f;

對(duì)于變量的定義,一般是放在一個(gè)函數(shù)的開頭部分的聲明部分3.3.2整型變量

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

a,b,c,d;/*指定a,b,c,d為整型變量*/unsignedu;/*指定u為無符號(hào)整型變量*/a=12;b=-24;u=10;c=a+u;d=b+u;

printf(“a+u=%d,b+u=%d\n”,c,d);}3、整型變量的定義與使用示例運(yùn)行結(jié)果為:

a+u=22,b+u=-144、整型數(shù)據(jù)的溢出(Overflow)溢出:數(shù)據(jù)超出了變量能夠存儲(chǔ)的范圍,造成數(shù)據(jù)丟失或數(shù)值改變等舉例voidmain(){inta=32767;b=a+1;/*32768*/}01111111111111111000000000000000+132767的補(bǔ)碼-32768的補(bǔ)碼

注意:

1.一個(gè)整型變量只能容納-32768~32767范圍內(nèi)的數(shù),無法表示大于32767的數(shù),遇此情況發(fā)生溢出,系統(tǒng)并不報(bào)錯(cuò)。

2.定義變量之后,就意味著它的值的范圍,賦值時(shí)就要注意。

3.3.3整型常量的類型

1.整常量在-32768~32767之間可賦給int

或longint;

2.超過上述范圍而在-2147483648~2147483648之間,可賦給longint

;

3.若shortint

與int

型常量在內(nèi)存中占據(jù)的長度相同,它可以賦給int型或shortint型變量;

4.12345u或U為unsigned型,123L,123l

為長型常量。

整型常量使用中的類型問題

1、對(duì)整型變量賦值常量的值不要超過變量的取值范圍

2、直接使用常量帶有l(wèi)、L、u、U等后綴的整型常量一般用于函數(shù)調(diào)用不帶有后綴的整型常量的類型,是根據(jù)其數(shù)值大小所處的范圍來確定的總結(jié)1、數(shù)據(jù)類型:基本數(shù)據(jù)類型2、常量:基本常量符號(hào)常量3、變量:變量的概念標(biāo)識(shí)符的命名規(guī)則變量的定義4、整型變量:整型變量在內(nèi)存中的存放形式整型變量的分類整型變量的定義整形數(shù)據(jù)的溢出3.4.1實(shí)型常量又分兩種形式:(1)十進(jìn)制形式:它由數(shù)字和小數(shù)點(diǎn)組成(注意必須有小數(shù)點(diǎn))。如:.123,123.0,0.0(2)指數(shù)形式:如123e3或123E3都代表123×103注意字母e(或E)之前必須有數(shù)字,且e后面指數(shù)必須為整數(shù)。不合法的指數(shù)形式:e3,2.1e3.5,.e3,e浮點(diǎn)數(shù)的多種表示形式。例如123.456可以表示為

123.456e0,12.3456e1,1.23456e2,

0.123456e3,0.0123456e4,0.00123456e53.4實(shí)型數(shù)據(jù)(又稱浮點(diǎn)數(shù))3.4.1實(shí)型常量規(guī)范化的指數(shù)形式為:1.23456e2規(guī)范化的指數(shù)形式:在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位(且只有一位)非零的數(shù)字。如規(guī)范化的指數(shù)形式:

2.3478e2,3.0999E5,6.46832e12不規(guī)范化的指數(shù)形式:

12.908e0,0.4578e3,756e0浮點(diǎn)數(shù)在按指數(shù)形式輸出時(shí)是按規(guī)范化的指數(shù)形式輸出。例如,指定將實(shí)數(shù)5689.65按指數(shù)形式輸出,必然輸出5.68965e+003例:#include<stdio.h>Voidmain(){floata=12345.678;

printf(“%e”,a);}運(yùn)行結(jié)果:1.234568e+0043.4.2實(shí)型變量1、實(shí)型變量的分類:按變量所能表示的數(shù)據(jù)范圍和精度單精度float,在內(nèi)存中占4Bytes,7位有效數(shù)字雙精度double,在內(nèi)存中占8Bytes,提供15~16位有效數(shù)字長雙精度型(longdouble)不同的編譯系統(tǒng),規(guī)定的實(shí)型變量所能表示的數(shù)據(jù)的長度、精度和數(shù)值范圍有所不同。2、微機(jī)上常用的C編譯系統(tǒng)的規(guī)定類型比特?cái)?shù)有效數(shù)字?jǐn)?shù)值范圍float326~710-37~1038double6415~1610-307~10308longdouble12818~1910-4931~1049323、實(shí)型變量的定義實(shí)型變量在使用前要加以定義floatxy;/*定義了一個(gè)單精度實(shí)型變量xy*/floatx,y,z;

/*定義了三個(gè)單精度實(shí)型變量x,y,z*/doubles1,s2;

/*定義了兩個(gè)雙精度實(shí)型變量s1,s2*/4、賦值實(shí)型變量可以在定義時(shí)賦初值,也可以在程序的運(yùn)行階段被賦予一個(gè)實(shí)型常量,還可以通過一個(gè)已被賦值的變量進(jìn)行賦值。

intmain()

{

/*變量的聲明部分*/

floata,b=3.067;

/*定義了兩個(gè)基本整型變量a和b*/floatc=3.14e3;

doubled; /*定義了一個(gè)長整型變量d*/…

/*函數(shù)的執(zhí)行部分*/

a=b;

d=56.000;

}注意實(shí)型變量所能表示的數(shù)據(jù)范圍比整型變量表示的數(shù)據(jù)范圍要大一些。實(shí)型變量也是用有限的存儲(chǔ)單元存儲(chǔ)的,因此能提供的精度(即有效數(shù)字)也是有限的。在有效位以外的數(shù)字將被舍去。對(duì)實(shí)型變量進(jìn)行一些操作,可能引起一些誤差。內(nèi)存floatdouble213.5671435568967

64位取值范圍:10-308

1030816

位有效數(shù)字聲明:doublepressure_level;初始化:pressure_level=213.5671435568967;doubledvalue=35.4;例main(){floata,b;a=123456.789e5;b=a+20;

printf(“b=%f\n”,b);}3、實(shí)型變量的舍入誤差運(yùn)行結(jié)果:

b=12345678848.000000思考:1.0/3*3=?由于實(shí)型數(shù)據(jù)是用有限的存儲(chǔ)單元存儲(chǔ)的,因此能提供的有效數(shù)字總是有限的,在有效位以外的數(shù)字將被舍去。由此可能會(huì)產(chǎn)生一些誤差。因?yàn)閷?shí)型變量能保證的有效數(shù)字是7

位,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。a和b的值都是:

12345678848.000000建議:應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”小的數(shù)。3.5.1字符常量1.字符常量的定義用一對(duì)單引號(hào)括起來的單個(gè)字符,稱為字符常量。例如,‘a(chǎn)’,‘A’、‘1’、‘+’,‘$’等。2.轉(zhuǎn)義字符C語言還允許使用一種特殊形式的字符常量,就是以反斜杠“\”開頭的轉(zhuǎn)義字符。

注意:如果反斜杠或單引號(hào)本身作為字符常量,必須使用轉(zhuǎn)義字符:‘\\’、‘\’‘。3.5字符型數(shù)據(jù)字符形式含義\n換行,將當(dāng)前位置移到下一行開頭\t移到下一制表位\b退格,將當(dāng)前位置移到前一列\(zhòng)r將當(dāng)前位置移到本行開頭\f換頁,將當(dāng)前位置移到下一頁開頭\\反斜杠\\′單引號(hào)\xhh1到2位16進(jìn)制數(shù)(ASCII)所代表的字符\ddd1到3位8進(jìn)制數(shù)(ASCII)所代表的字符轉(zhuǎn)義字符表轉(zhuǎn)義字符

\123的含義是,將八進(jìn)制的“123”(十進(jìn)制的“83”)轉(zhuǎn)換成ASCII碼值為83的字符。\123等價(jià)于X\x23代表ASCII碼值為十六進(jìn)制的“23”(十進(jìn)制的“35”)的字符,即,#在程序中,使用轉(zhuǎn)義字符時(shí),和普通的字符常量一樣,必須用單撇號(hào)括起來。如,\n

1到3位8進(jìn)制數(shù)所代表的字符:’\ddd’,如:’\101’代表ASCII值為65的字符’A’;

1到2位16進(jìn)制數(shù)所代表的字符:’\xhh’,如:’\x41’也代表ASCII值為65的字符’A’;例用轉(zhuǎn)義字符輸出可打印字符和不可打印字符。

/*程序功能:用轉(zhuǎn)義字符輸出可打印字符和不可打印字符*/

main()

{printf(“\x4F\x4B\x21\n”); printf(“\x15\xAB\n”);

printf("□ab□c\t

□de\rf\tgn");

printf("h\ti\b\bj□k\n"); }

[程序演示]打印機(jī)上結(jié)果:

OK!i1/2fab_c___

gdeh______jik后兩行屏幕顯示結(jié)果:

f_______gde h______

j_k練習(xí):printf(“a\1011\”\\\’\x414”);屏幕顯示結(jié)果:

aA1”\’A4字符變量的類型關(guān)鍵字為char,用1個(gè)字節(jié)內(nèi)存單元存儲(chǔ)。1、字符變量的定義形式

字符變量用來存儲(chǔ)字符常量。將一個(gè)字符常量存儲(chǔ)到一個(gè)字符變量中,實(shí)際上是將該字符的ASCII碼值(無符號(hào)整數(shù))存儲(chǔ)到該字符變量所分配的內(nèi)存單元中。例如:charch1,ch2;

/*定義兩個(gè)字符變量:ch1,ch2*/ch1=’a’;ch2=’b’;

/*給字符變量賦值*/3.5.2字符變量2、特性字符數(shù)據(jù)在內(nèi)存中存儲(chǔ)的是字符的ASCII碼──一個(gè)無符號(hào)整數(shù),其形式與一個(gè)字節(jié)的整數(shù)的存儲(chǔ)形式一樣,以該字符的ASCII碼值的二進(jìn)制形式存儲(chǔ),所以C語言允許字符型數(shù)據(jù)與整型數(shù)據(jù)之間通用(注意:字符型數(shù)據(jù)ASCII碼值是有范圍的)。01100001c1='a'(ASCII=97)00110010c1='2'(ASCII=50)(1)一個(gè)字符型數(shù)據(jù),既可以字符形式輸出,也可以整數(shù)形式輸出。

(2)允許對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時(shí)就是對(duì)它們的ASCII碼值進(jìn)行算術(shù)運(yùn)算。(一個(gè)字符和整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)形式都是二進(jìn)制,所以一個(gè)字符型和整型可以進(jìn)行運(yùn)算。)(3)一個(gè)字符型變量,可以被賦予單個(gè)的字符,也可以被賦予一個(gè)0-255之間的整數(shù)。例如,

charc1,c2;

c1='a';c2=97;則c1和c2都被賦值為字符'a'例:字符型和整型數(shù)據(jù)轉(zhuǎn)換

main()

{charc1,c2;

c1='a';ch2='b';printf(“c1=%c,c2=%c\n”,c1,c2);

printf(“c1=%d,c2=%d\n”,ch1,ch2);

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

ab9798例大小寫字母的轉(zhuǎn)換

main(){charc1,c2;c1=‘a(chǎn)’;c2=‘b’;c1=c1-32;c2=c2-32;

printf(“%c,%c\n”,c1,c2);}例字符數(shù)據(jù)的算術(shù)運(yùn)算。

main()

{charc1,c2;

c1=‘a(chǎn)’;c2=‘B’;/*字母的大小寫轉(zhuǎn)換*/

printf(“c1=%c,c2=%c\n”,c1-32,c2+32);

/*用字符形式輸出一個(gè)大于256的數(shù)值*/

printf("c1+200=%d\n",c1+200);

printf("c1+200=%c\n",c1+200);

printf("c1+256=%d\n",c1+256);

printf("c1+256=%c\n",c1+256);

}3.5.3字符串常量1.字符串常量的概念和字符串長度字符串常量是用一對(duì)雙引號(hào)括起來的若干字符序列。字符串中字符的個(gè)數(shù)稱為字符串長度。長度為0的字符串(即一個(gè)字符都沒有的字符串)稱為空串,表示為""(一對(duì)緊連的雙引號(hào))。例如,“Howdoyoudo.”其長度為14(空格也是一個(gè)字符);“CHINA”;“A”;“123.45”如果反斜杠和雙引號(hào)作為字符串中的有效字符,則必須使用轉(zhuǎn)義字符。例如:(1)C:\msdos\v6.22→"C:\\msdos\\v6.22"

(2)Isay:"Goodbye!"→"Isay:\"Goodbye!\""不要將字符常量與字符串常量混淆?!產(chǎn)’

是字符常量,”a”是字符串常量,二者不同。

假設(shè)c被指定為字符常量:

charc;c=‘a(chǎn)’;

是正確的。而

c=”a”;

是錯(cuò)誤的。不能把一個(gè)字符串賦給一個(gè)字符變量。3.5.3字符串常量

2.字符串的存儲(chǔ)

C語言規(guī)定:在存儲(chǔ)字符串常量時(shí),由系統(tǒng)在字符串的末尾自動(dòng)加一個(gè)‘\0’作為字符串的結(jié)束標(biāo)志。注意:在源程序中書寫字符串常量時(shí),不必加結(jié)束字符‘\0’,否則畫蛇添足。

如果有一個(gè)字符串為“CHINA”,則它在內(nèi)存中的實(shí)際存儲(chǔ)如下所示:最后一個(gè)字符‘\0’是系統(tǒng)自動(dòng)加上的,它占用6字節(jié)而非5字節(jié)的內(nèi)存空間。CHINA\0可以在定義變量時(shí)進(jìn)行初始化

inta=2; inta;a=2;也可以初始化一部分變量

int

a,b,c=3; int

a,b,c;c=3;如果對(duì)不同變量賦同一初值,應(yīng)該分別賦值如:inta=4,b=4,c=4;

而不能寫成:

inta=b=c=4;3.6變量賦初值

整型、實(shí)型、字符型數(shù)據(jù)間可以混合運(yùn)算。例如:

10+’a’+1.5-8765.124*’b’

在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。表達(dá)式中出現(xiàn)不同的類型的數(shù)據(jù)時(shí),系統(tǒng)要將不同類型數(shù)據(jù)轉(zhuǎn)換成同一種類型,然后才進(jìn)行運(yùn)算。1、轉(zhuǎn)換規(guī)則:doublelongunsignedintchar,shortfloat高低說明:1、運(yùn)算時(shí),表達(dá)式的類型以最高類型為準(zhǔn)。2、為保證計(jì)算結(jié)果的精度,兩個(gè)float型運(yùn)算,先轉(zhuǎn)換成double型再運(yùn)算。必定的轉(zhuǎn)換必定的轉(zhuǎn)換可轉(zhuǎn)換方向3.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算例

charch;

inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例

inti;floatf;doubled;longl;intintdoubledoubledoubledoubledoubledouble1.算術(shù)運(yùn)算符

(+-*/%)

2.關(guān)系運(yùn)算符

(><==>=<=!=)

3.邏輯運(yùn)算符

(!&&||)

4.位運(yùn)算符

(<<>>~

|

^&)

5.賦值運(yùn)算符

(=)

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

(?:)c中唯一的一個(gè)三目運(yùn)算符

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

(,)

8.指針運(yùn)算符

(*&)

9.求字節(jié)運(yùn)算符

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

((類型))11.分量運(yùn)算符

(.->)12.下標(biāo)運(yùn)算符

([])13.其它

(函數(shù)調(diào)用運(yùn)算符())3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.8.1C的運(yùn)算符簡介3.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式+(加、正號(hào)),-(減、取負(fù)),*(乘),/(除),%(模運(yùn)算)特別說明:(1)/(除):在兩側(cè)均為整數(shù)時(shí),相除的結(jié)果為整數(shù),舍去小數(shù)部分(向零取整),如7/3=2。(2)%(模運(yùn)算或求余運(yùn)算符):%兩側(cè)的操作數(shù)必須為整數(shù),如7%3=1(3)如果參加+、-、*、/運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為實(shí)數(shù),則結(jié)果是double型。如5.2/31、算術(shù)運(yùn)算符2、算術(shù)表達(dá)式用算術(shù)運(yùn)算符和括號(hào)將常量,變量及函數(shù)連起來的式子稱為算術(shù)表達(dá)式。例1代數(shù)式

3x2+x-2

在計(jì)算機(jī)中,不能直接對(duì)代數(shù)式進(jìn)行運(yùn)算,而要將它轉(zhuǎn)化成相應(yīng)的算術(shù)表達(dá)式。相應(yīng)的算術(shù)表達(dá)式為:3.0*pow(x,2.0)+x-2.0例2代數(shù)式

相應(yīng)的算術(shù)表達(dá)式為:a/2.0-(6.0*y)/(5.0*x)3、運(yùn)算符的優(yōu)先級(jí)()*,/高低

%+,-,

=

-++,--例:i=5;i=++i*4+2;i的值為:26i=5;i=i++*4+2;i的值為:23在四則運(yùn)算中,有先乘除,后加減的規(guī)則。在C語言中,也存在哪個(gè)運(yùn)算符先進(jìn)行運(yùn)算,哪個(gè)后進(jìn)行運(yùn)算的問題,這些,稱為運(yùn)算符的優(yōu)先級(jí)。i=i*4+2,i++;4、運(yùn)算符的結(jié)合方向

C規(guī)定了運(yùn)算符的結(jié)合方向(結(jié)合性)。即在一個(gè)變量(或其它表達(dá)式、常量等)的左右兩側(cè)有優(yōu)先級(jí)別相同的運(yùn)算符時(shí)應(yīng)從左至右還是從右至左進(jìn)行結(jié)合運(yùn)算的問題。

如式:

a-b+c

即b先與減號(hào)結(jié)合,執(zhí)行a-b的運(yùn)算,再將結(jié)果加上c。

在C語言中還有從右至左進(jìn)行結(jié)合的運(yùn)算符。5、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(類型名)(表達(dá)式)例:(double)a(int)(x+y)(int)x+y(float)(5%3)思考題:假設(shè)變量num的數(shù)據(jù)類型為float,其值為2.5,則執(zhí)行“num=(int)num”后,num的值等于多少?注意:如果X原來指定為float型,進(jìn)行強(qiáng)制類型轉(zhuǎn)換后得到一個(gè)int型的中間變量,它的值等于X的整數(shù)部分,而X的類型不變(仍未float型)main(){floatx;

inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}

例:強(qiáng)制類型轉(zhuǎn)換6、自加自減運(yùn)算符作用:使變量的值增1或減1形式:++i,--i,i++,i--注意:

++i(--i)是先將i加1(減1)后再使用i

i++(i--)是先使用i,再將i的值加1(減1)i=i+1(i=i-1)注意:自加自減運(yùn)算符按自右而左的結(jié)合順序如:-i++,i應(yīng)先++,再取負(fù)。如果i的原值等于3,則執(zhí)行下面的賦值語句:(1)j=++i;(2)j=i++;例main(){inta,b;a=5;b=5;

printf(”a=%d,++a=%d”,a,++a);

Printf(”b=%d,b++=%d”,b,b++);}輸出結(jié)果:a=6,++a=6b=6,b++=5(1)自增自減運(yùn)算符只能用于變量,不能用于常量或表達(dá)式。即5++,(a+b)++是不合法的。(2)++和--的結(jié)合方向是“自右至左”,-i++相當(dāng)于-(i++)。1、賦值運(yùn)算符

=”是賦值運(yùn)算符,作用是將一個(gè)數(shù)值賦給一個(gè)變量。如:

a=3;x=a+b;a=y;

注意:賦值運(yùn)算的方向,右結(jié)合性?!?/p>

=”的左邊只能是變量。如:3=a;a+b=x;是錯(cuò)。當(dāng)將表達(dá)式或變量賦給一個(gè)變量時(shí),表達(dá)式或變量一定要有具體數(shù)值。3.9賦值運(yùn)算符和賦值表達(dá)式

2、類型轉(zhuǎn)換

賦值運(yùn)算符兩側(cè)的類型可以不一致,但都是數(shù)值型或字符型。賦值前要進(jìn)行類型轉(zhuǎn)換。如:(1)將實(shí)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時(shí),舍棄浮點(diǎn)數(shù)的小數(shù)部分。如:i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3,以整數(shù)形式存儲(chǔ)在整型變量中

(2)將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲(chǔ)到變量中。floata;a=23;a=23.000000(3)將一個(gè)double型的變量賦給float型的變量。截取前面的7位有效數(shù)字,存放到float變量的存儲(chǔ)單元(4個(gè)字節(jié))中。注意不能溢出。如:

floatf;doubled=123.45678e100;f=d;

/*將會(huì)出現(xiàn)溢出錯(cuò)誤*/

如果將一個(gè)float型數(shù)據(jù)賦給double變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個(gè)字節(jié)存儲(chǔ)。(4)字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占1個(gè)字節(jié),而整型變量為2個(gè)字節(jié),因此將字符數(shù)據(jù)(8個(gè)二進(jìn)位)放到整型變量存儲(chǔ)單元的低8位中。第一種情況:

如果所用系統(tǒng)將字符處理為無符號(hào)的字符類型,或程序已將字符變量定義為unsignedchar型,則將字符的8位放到整型變量低8位,高8位補(bǔ)零例如:將字符’\376’賦給int型變量i

第二種情況:

如果所用系統(tǒng)(如TurboC++)將字符處理為帶符號(hào)的(即signedchar),若字符最高位為0,則整型變量高8位補(bǔ)0;若字符最高位為1,則高8位全補(bǔ)1。這稱為“符號(hào)擴(kuò)展”,這樣做的目的是使數(shù)值保持不變,如變量c(字符‘\376’)以整數(shù)形式輸出為-2,i的值也是-2。(5)將一個(gè)int、short、long型數(shù)據(jù)賦給一個(gè)char型變量時(shí),只將其低8位原封不動(dòng)地送到char型變量(即截?cái)啵?。例如:inti=289;charc=′a′;c=i;

賦值情況:(6)

將帶符號(hào)的整型數(shù)據(jù)(int型)賦給long型變量時(shí),要進(jìn)行符號(hào)擴(kuò)展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號(hào)位為0),則long型變量的高16位補(bǔ)0;如果int型變量為負(fù)值(符號(hào)位為1),則long型變量的高16位補(bǔ)1,以保持?jǐn)?shù)值不改變。反之,若將一個(gè)long型數(shù)據(jù)賦給一個(gè)int型變量,只將long型數(shù)據(jù)中低16位原封不動(dòng)地送到整型變量(即截?cái)啵?7)將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),不存在符號(hào)擴(kuò)展問題,只需將高位補(bǔ)0即可。將一個(gè)unsigned類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsignedint>int,unsignedlong->long,unsignedshort->short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤。

(8)將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦(連原有的符號(hào)位也作為數(shù)值一起傳送)。

(4)字符型數(shù)據(jù)賦給整形數(shù)據(jù)時(shí),

如果字符型數(shù)據(jù)是最高位是0,高8位補(bǔ)0;如果最高位為1,高8位補(bǔ)1。

chara;intb;

a=‘\376’;

b=a;printf(“%c,%d”,a,b); ■,-211111111

11111110表1被賦值變量的存儲(chǔ)單元較大表達(dá)式類型被賦值變量類型轉(zhuǎn)換規(guī)則charunsignedchar無需轉(zhuǎn)換charint將char的8位存入int的低8位中,高8位符號(hào)擴(kuò)展unsignedcharint將char的8位存入int的低8位中,高8位補(bǔ)0intunsignedint無需轉(zhuǎn)換intlongint的16位存入long的低16位中,高16位符號(hào)擴(kuò)展unsignedintlongunsigned的16位存入long的低16位,高16位補(bǔ)0intfloat將int型用實(shí)型表示floatdouble將float的小數(shù)位和指數(shù)位分別存入double的小數(shù)位和指數(shù)位表2被賦值變量的存儲(chǔ)單元較小表達(dá)式類型被賦值變量類型轉(zhuǎn)換規(guī)則unsignedcharchar無需轉(zhuǎn)換intchar截去int的高8位intunsignedchar截去int的高8位,低8位按無符號(hào)數(shù)據(jù)處理unsignedintint無需轉(zhuǎn)換longint或char截去long的高位longunsignedint截去long的高位floatint截去float的小數(shù)部分doublefloat將double多余的小數(shù)位四舍五入3.復(fù)合的賦值運(yùn)算符復(fù)合的賦值運(yùn)算:將“=”之前加上一個(gè)其它運(yùn)算符。如:

+=,-=,=,/=,%=, <<=,>>=,&=,^=,|=例:i+=j+8i=i+(j+8)x*=j+4x=x*(j+4)注意:復(fù)合運(yùn)算符相當(dāng)于賦值號(hào)后有一括號(hào),實(shí)際上是自右至左進(jìn)行運(yùn)算的。4.賦值表達(dá)式:

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

賦值表達(dá)式的值就是被賦值的變量的值;賦值運(yùn)算符:“自右至左”進(jìn)行運(yùn)算。如:

a=b=c=55

a=5+(c=6)11

a=(b=4)+(c=6)10

a+=a-=a(a=12)-264a=12;a=a-a*a;a=a+a;變量可以多次賦值當(dāng)多次給同一個(gè)變量賦值后,該變量保留最后所賦的值。例如,

intnum=3;

printf("%d\n",num);num=4;

printf("%d\n",num);

則分別輸出3和4

3.10逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式用逗號(hào)將兩個(gè)表達(dá)式連接起來,叫逗號(hào)表達(dá)式。

一般形式:表達(dá)式1,表達(dá)式2

如:3+5,6+8逗號(hào)運(yùn)算符又稱順序求值運(yùn)算符。計(jì)算過程:先計(jì)算表達(dá)式1的值,再計(jì)算表達(dá)式2的值,整個(gè)逗號(hào)表達(dá)式的值等于最后一個(gè)表達(dá)式的值。

注意:逗號(hào)運(yùn)算符的運(yùn)算級(jí)別最低。a=35,a4

(a=35,a4),a+5

x=(a=3,6a)x為18

x=a=3,6ax為3函數(shù)的參數(shù)用逗號(hào)分開,但不是逗號(hào)表達(dá)式

,如6065printf(“%d,%d,%d”,a,b,c);printf(“%d,%d”,(a,b),c);第三章結(jié)束重點(diǎn):常量與變量不同類型混合運(yùn)算三個(gè)表達(dá)式算術(shù)表達(dá)式賦值表達(dá)式逗號(hào)表達(dá)式B1計(jì)算機(jī)中的數(shù)和編碼必須明確,在計(jì)算機(jī)內(nèi)部,不管是數(shù)值、符號(hào)、指令或程序,都是用二進(jìn)制的代碼來表示的,即用0、1代碼來表示各種不同信息的。B2

計(jì)算機(jī)運(yùn)算基礎(chǔ)1.進(jìn)位計(jì)數(shù)制概念進(jìn)位計(jì)數(shù)制的兩要素:基數(shù)和位權(quán)任何一種數(shù)制表示的數(shù)都可以寫成按位權(quán)展開的多項(xiàng)式之和,其一般形式為:N=dn-1bn-1+dn-2bn-2+…d0b0+d-1b-1+…d-mb-m

式中:n--整數(shù)的總位數(shù)

m--小數(shù)的總位數(shù)

d--某位的數(shù)碼(位權(quán))

b--基數(shù)

例:(345.17)8=3×82+4×81+5×80+1×8-1+7×8-2

2、常用計(jì)數(shù)制的基數(shù)和數(shù)碼數(shù)碼二進(jìn)制八進(jìn)制十進(jìn)制十六進(jìn)制基數(shù)281016010123456701234567890123456789ABCDEF數(shù)制 十進(jìn)制二進(jìn)制八進(jìn)制十六進(jìn)制

0000A1111B21022C3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論