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

下載本文檔

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

文檔簡介

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

#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);}

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

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

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

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

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

整型常量

12,-3,0

實型常量

4.60.,-1.23,4.0

字符常量

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

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

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

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

例-0x2e6表示十六進制數(shù)“-2e6”,其對應(yīng)的十進制值為:-(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)于十進制、八進制、十六進制的例子(2)實型常量

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

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

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

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

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

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

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

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

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

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

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

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

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

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

例:

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

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)每個變量在定義時被指定為一確定類型,編譯時為其分配相應(yīng)存儲單元;(2)每個變量屬于一確定類型,據(jù)此檢查該變量所進行的運算是否合法,以避免運算時類型出錯;比如求余運算:

floata;

intb,c; a=50;b=10; c=a%b;/*編譯系統(tǒng)報告錯誤*/3、變量的定義34a變量名存儲單元(地址)變量值變量的存儲3.3.1整型常量的表示方法十進制(Decimal)八進制(Octal):以0開頭,不得含有8或9十六進制(Hexadecimal):以0x或0X開頭,用a~f或A~F表示10~153.3整型數(shù)據(jù)1、整型數(shù)據(jù)在內(nèi)存中的存放方式二進制形式舉例,inti=10;/*int類型占2字節(jié)*/補碼(Complement)正數(shù):與原碼一致,首位為0負數(shù):絕對值取反加1,首位為1零:各位全為00000000000001010高地址字節(jié)低地址字節(jié)3.3.2整型變量補碼舉例舉例inti=-10;/*int類型占2字節(jié)*/00000000000010101111111111110101111111111100111010的原碼-10的補碼取反加一最左邊的一位是符號位,該位為0,表示數(shù)值為正;為1表示為負。基本數(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ù)范圍,可以將變量定為“無符號型”類型:unsignedint

unsignedshort

unsignedlong2、整型變量的分類計算機中數(shù)的表示法(補充內(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.對變量的定義,放在函數(shù)的開頭的變量說明部分;

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

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

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

int

i;unsignedj;

i=j=-50;

i=i/2;

/*-25*/

j=j/2;

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

int

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

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

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

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

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

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

注意:

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

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

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、對整型變量賦值常量的值不要超過變量的取值范圍

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

123.456e0,12.3456e1,1.23456e2,

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

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

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

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

/*定義了三個單精度實型變量x,y,z*/doubles1,s2;

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

intmain()

{

/*變量的聲明部分*/

floata,b=3.067;

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

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

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

a=b;

d=56.000;

}注意實型變量所能表示的數(shù)據(jù)范圍比整型變量表示的數(shù)據(jù)范圍要大一些。實型變量也是用有限的存儲單元存儲的,因此能提供的精度(即有效數(shù)字)也是有限的。在有效位以外的數(shù)字將被舍去。對實型變量進行一些操作,可能引起一些誤差。內(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、實型變量的舍入誤差運行結(jié)果:

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

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

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

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

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

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

1到2位16進制數(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"); }

[程序演示]打印機上結(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個字節(jié)內(nèi)存單元存儲。1、字符變量的定義形式

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

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

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

(2)允許對字符數(shù)據(jù)進行算術(shù)運算,此時就是對它們的ASCII碼值進行算術(shù)運算。(一個字符和整型數(shù)據(jù)在內(nèi)存中存儲形式都是二進制,所以一個字符型和整型可以進行運算。)(3)一個字符型變量,可以被賦予單個的字符,也可以被賦予一個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);

}運行結(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ù)運算。

main()

{charc1,c2;

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

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

/*用字符形式輸出一個大于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.字符串常量的概念和字符串長度字符串常量是用一對雙引號括起來的若干字符序列。字符串中字符的個數(shù)稱為字符串長度。長度為0的字符串(即一個字符都沒有的字符串)稱為空串,表示為""(一對緊連的雙引號)。例如,“Howdoyoudo.”其長度為14(空格也是一個字符);“CHINA”;“A”;“123.45”如果反斜杠和雙引號作為字符串中的有效字符,則必須使用轉(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”;

是錯誤的。不能把一個字符串賦給一個字符變量。3.5.3字符串常量

2.字符串的存儲

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

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

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

int

a,b,c=3; int

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

而不能寫成:

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

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

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

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

charch;

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

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

(+-*/%)

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

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

3.邏輯運算符

(!&&||)

4.位運算符

(<<>>~

|

^&)

5.賦值運算符

(=)

6.條件運算符

(?:)c中唯一的一個三目運算符

7.逗號運算符

(,)

8.指針運算符

(*&)

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

(sizeof)10.強制類型轉(zhuǎn)換運算符

((類型))11.分量運算符

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

([])13.其它

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

3x2+x-2

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

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

%+,-,

=

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

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

如式:

a-b+c

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

在C語言中還有從右至左進行結(jié)合的運算符。5、強制類型轉(zhuǎn)換運算符(類型名)(表達式)例:(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型,進行強制類型轉(zhuǎn)換后得到一個int型的中間變量,它的值等于X的整數(shù)部分,而X的類型不變(仍未float型)main(){floatx;

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

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

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

i++(i--)是先使用i,再將i的值加1(減1)i=i+1(i=i-1)注意:自加自減運算符按自右而左的結(jié)合順序如:-i++,i應(yīng)先++,再取負。如果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)自增自減運算符只能用于變量,不能用于常量或表達式。即5++,(a+b)++是不合法的。(2)++和--的結(jié)合方向是“自右至左”,-i++相當(dāng)于-(i++)。1、賦值運算符

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

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

注意:賦值運算的方向,右結(jié)合性。“

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

2、類型轉(zhuǎn)換

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

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

floatf;doubled=123.45678e100;f=d;

/*將會出現(xiàn)溢出錯誤*/

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

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

第二種情況:

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

賦值情況:(6)

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

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

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

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

chara;intb;

a=‘\376’;

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

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

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

由賦值運算符將一個變量和一個表達式連接起來的式子稱為賦值表達式

賦值表達式的值就是被賦值的變量的值;賦值運算符:“自右至左”進行運算。如:

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)多次給同一個變量賦值后,該變量保留最后所賦的值。例如,

intnum=3;

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

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

則分別輸出3和4

3.10逗號運算符和逗號表達式用逗號將兩個表達式連接起來,叫逗號表達式。

一般形式:表達式1,表達式2

如:3+5,6+8逗號運算符又稱順序求值運算符。計算過程:先計算表達式1的值,再計算表達式2的值,整個逗號表達式的值等于最后一個表達式的值。

注意:逗號運算符的運算級別最低。a=35,a4

(a=35,a4),a+5

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

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

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

計算機運算基礎(chǔ)1.進位計數(shù)制概念進位計數(shù)制的兩要素:基數(shù)和位權(quán)任何一種數(shù)制表示的數(shù)都可以寫成按位權(quán)展開的多項式之和,其一般形式為: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、常用計數(shù)制的基數(shù)和數(shù)碼數(shù)碼二進制八進制十進制十六進制基數(shù)281016010123456701234567890123456789ABCDEF數(shù)制 十進制二進制八進制十六進制

0000A1111B21022C3

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論