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

下載本文檔

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

文檔簡介

2.1數(shù)據(jù)類型2.2常量與變量2.3運算符與表達式2.4標準輸入/輸出2.5數(shù)學(xué)函數(shù)2.6隨機數(shù)發(fā)生器函數(shù)2.7案例應(yīng)用第2章數(shù)據(jù)類型、運算符與表達式1數(shù)據(jù)在計算機中的存儲計算機內(nèi)部的信息都是用二進制表示計算機存儲器是用半導(dǎo)體集成電路構(gòu)成的有兩種穩(wěn)定的工作狀態(tài):“導(dǎo)”與“截止”,即電脈沖的“有”與“無”分別用“1”和“0”表示一、數(shù)據(jù)在計算機中是以二進制形式存儲的2數(shù)據(jù)在計算機中的存儲若相鄰的8個二極管元件中第1,3,5,7個元件處于“導(dǎo)通”狀態(tài),第2,4,6,8個元件處于“截止”狀態(tài),用“10101010”表示。導(dǎo)通截止導(dǎo)通截止導(dǎo)通截止導(dǎo)通截止101010103數(shù)據(jù)在計算機中的存儲十進制數(shù)二進制數(shù)001121031141005101十進制數(shù)二進制數(shù)6110711181000910011010104數(shù)據(jù)在計算機中的存儲位(bit),又稱“比特”

。每一個二極管元件稱為一個“二進制位”,是存儲信息的最小單位。它的值是“1”或“0”。字節(jié)(byte),又稱“拜特”

。一般將8個“二進制位”組織成一組,稱為“字節(jié)”。這是人們最常用的存儲單位。二、位、字節(jié)和地址5數(shù)據(jù)在計算機中的存儲二、位、字節(jié)和地址200120022003200420052006地址:計算機的存儲器包含許多存儲單元,操作系統(tǒng)把所有存儲單元以字節(jié)為單位編號。345789┆61.1數(shù)據(jù)類型枚舉類型(enum)基本類型數(shù)據(jù)類型構(gòu)造類型指針類型空類型(void)整型(int)實型(浮點型)字符型(char)結(jié)構(gòu)體(struct)共用體(union)單精度實型(float)雙精度實型(double)數(shù)組7一、整型類型名稱類型說明符所占字節(jié)數(shù)取值范圍有符號基本整型[signed]int4-2147483648~2147483647-232-1~232-1-1有符號短整型[signed]short[int]2-32768~32767-216-1~216-1-1有符號長整型[signed]long[int]4-2147483648~2147483647-232-1~232-1-1無符號基本整型unsigned[int]40~42949672950~232-1無符號短整型unsignedshort[int]20~655350~216-1-1無符號長整型unsignedlong[int]40~42949672950~232-18一、整型數(shù)據(jù)存儲時在內(nèi)存中所占字節(jié)數(shù)與具體的機器及系統(tǒng)有關(guān)。如int類型,在32位系統(tǒng)中VisualC++下所占4個字節(jié),但是在TurboC下int只占2個字節(jié),表示范圍就是:-32768~32767。編程時,可以用運算符sizeof()求出所使用環(huán)境中int類型究竟占用幾個字節(jié)。

整數(shù)類型是以二進制數(shù)據(jù)形式存儲的,確切地說是以二進制補碼形式。9一、整型整數(shù)的存儲方式一個十進制整數(shù),先轉(zhuǎn)換為二進制形式如整數(shù)15,以二進制形式表示是1111000011110000000000001111用一個字節(jié)存放用兩字節(jié)存放負數(shù)按補碼形式存放請問:-15又是如何存儲的呢?10二、實型C語言中實型也稱為浮點型,包括單精度實型和雙精度實型。實型與整型的區(qū)別在于是否包含小數(shù)部分,比如6是整數(shù)類型,6.00是實數(shù)類型。類型名稱類型說明符所占字節(jié)數(shù)有效數(shù)字取值范圍(絕對值)單精度實型float4約6~7位3.4×10-38~3.4×1038雙精度實型double8約15~16位1.7×10-308~1.7×1030811二、實型實數(shù)的存儲形式實型數(shù)據(jù)按指數(shù)形式存儲,分為小數(shù)部分(尾數(shù))和指數(shù)部分(階碼)分別存放。123.456標準化指數(shù)形式為0.123456103+.12345+3數(shù)符數(shù)值部分指數(shù)符號指數(shù)12三、字符型類型說明符為char。字符型數(shù)據(jù)只占1個字節(jié),只能存放1個字符,無法存放多個字符組成的字符串,字符串的概念將在后面章節(jié)中介紹。為了處理字符,計算機使用一種數(shù)字編碼,用特定的整數(shù)表示特定的字符。應(yīng)用最廣泛的是編碼是ASCII碼(AmericaStandardCordforInformationInterchange,美國信息交換標準碼)大寫字母A的ASCII碼為65,小寫字母a的ASCII碼為97,字符‘0’為48。13三、字符型字符的存儲方式對于字符,按ASCII代碼存放A的ASCII代碼是65(1000001)01000001用一個字節(jié)存放由于這種與整型數(shù)據(jù)類似的存儲方式,在1個字節(jié)(0~255)范圍內(nèi),字符型數(shù)據(jù)和整形數(shù)據(jù)可以通用。14四、枚舉型如果一個數(shù)據(jù)對象只有幾種可能的取值,可以將這些值一一列舉出來,即定義為枚舉類型。定義的格式為:enum枚舉類型名{枚舉常量1,枚舉常量2,...,枚舉常量n};15五、構(gòu)造數(shù)據(jù)類型C語言的基本數(shù)據(jù)類型并不能滿足實際應(yīng)用中的所有需求,用戶可以利用整型、實型、字符型這些基本數(shù)據(jù)類型構(gòu)造滿足需要的數(shù)據(jù)類型,即構(gòu)造類型。數(shù)組類型構(gòu)造類型結(jié)構(gòu)體類型共用體類型16六、其他數(shù)據(jù)類型指針類型。

指針是一種特殊的數(shù)據(jù)類型,也是很重要的一種數(shù)據(jù)類型,指針的值指的是內(nèi)存中的地址值??疹愋?/p>

C語言中空類型用void表示,一般用于描述指針以及作為不返回值的函數(shù)的返回值類型。172.2常量與變量在程序所處理的各種數(shù)據(jù)中,有些數(shù)據(jù)的值在程序使用前可以預(yù)先設(shè)定并在程序運行過程中不會發(fā)生變化,稱為常量。有的數(shù)據(jù)在程序運行過程中可能會變化,稱為變量。

兩者的區(qū)別在于數(shù)據(jù)在程序運行過程中其值是否變化。182.2.1常量在程序運行過程中,其值不變的量稱為常量。常量區(qū)分為不同的類型:整型常量100,125,-100,0實型常量3.14,0.125,-3.789字符型常量‘a(chǎn)’,‘b’,‘2’字符串常量“a”,“ab”,”1232”以上四種稱為字面常量。還有一種叫符號常量。19一、整型常量整型常量即整常數(shù)。在C語言中,整常數(shù)可用以下三種形式表示:十進制整數(shù):用10個數(shù)字0~9表示,如369,9652。八進制整數(shù):以數(shù)字0開頭,用8個數(shù)字0~7表示。如:0123表示八進制數(shù)123,等于十進制數(shù)83,-011表示八進制數(shù)-11,即十進制數(shù)-9。十六進制整數(shù):以0X或0x開頭(注意是數(shù)字0加字母X或x),用10個數(shù)字0~9和6個字母A~F(或a~f)表示。如:0x123,代表16進制數(shù)123,等于十進制數(shù)

291。-0x12等于十進制數(shù)10。注意:正整數(shù)前面的“+”號可以省略。20一、整型常量常量的后綴表示列舉如下:常量類型

十進制數(shù)

八進制

十六進制

十進制的值長整型

12L 014L0XCL 12無符號整型

15u 017u 0xfu15注意:C把大多數(shù)整數(shù)常量識別為int類型,如果整數(shù)特別大,將會有不同的處理。比如,在程序中使用254時,通常會識別為int類型。當使用的整數(shù)超出了int類型的范圍時,則識別為long類型。21二、實型常量實型常量的表示形式:十進制形式:由數(shù)字0~9和小數(shù)點組成(必須有小數(shù)點)。

如:0.123

指數(shù)形式:由尾數(shù)、E(或e)和整數(shù)指數(shù)(階碼)組成。

如:3e-3注意:整數(shù)或小數(shù)部分的數(shù)字可以省略,但二者不能同時省略并且小數(shù)點不能省略。字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù)。22二、實型常量在實型常量中不能有空格。默認狀態(tài)下,實型常量被識別為雙精度(double)類型??梢允褂煤缶YF或f表示單精度(float)類型,后綴L或l表示長雙精度(longdouble)類型。比如123.56是double類型,123.56f是float類型,1.2356E2L是longdouble類型。1.2、7.、.36、1e3、1.8e-3、-.1e-30、1.2、3、e3、2.1e3.5、.e3、e

23三、字符常量(1)用單引號括起來的一個字符是字符型常量。(2)只能包含一個字符。注意:使用字符常量時要注意數(shù)字字符和數(shù)字的區(qū)別,例如,寫法'5'表示符號5,而不是數(shù)值5,字符5的ASCII碼值是53。例‘a(chǎn)’,’A’,‘1’‘a(chǎn)bc’、“a”24三、字符常量

有些以“\”開頭的特殊字符稱為轉(zhuǎn)義字符。\n換行\(zhòng)t橫向跳格\r回車\\反斜杠\dddddd表示1到3位八進制數(shù)字\xhhhh表示1到2位十六進制數(shù)字例:字母A有3種表示,’A’,’\101’,’\x41’‘\0’與‘0’是有區(qū)別的字符類型的數(shù)據(jù)也可參與四則運算25四、字符串常量字符串常量是一對雙撇號括起來的字符序列.合法的字符串常量:

"Howdoyoudo.","CHINA","a",

"$123.45"可以輸出一個字符串,如printf("Howdoyoudo.");注意:"a"表示的是一個字符串常量

'a'表示的是一個字符常量26四、字符串常量字符串常量與字符常量的區(qū)別:(1)字符常量是由單引號括起來,而字符串常量則是由雙引號括起來。(2)字符常量只能表示一個字符,而字符串常量則可以包含1個或多個字符。(3)可以將1個字符常量賦值給一個字符變量,但不能將1個字符串常量賦予一個字符變量。(4)字符常量在存儲中只占一個字節(jié),字符串常量占用的存儲空間的字節(jié)數(shù)等于雙引號中所包含字符個數(shù)加1(結(jié)束符‘\0’)。27四、字符串常量字符串常量與字符常量的區(qū)別:(5)字符串中可以有轉(zhuǎn)義字符。(6)單引號和雙引號只是字符和字符串的定界符,如果字符常量本身是單引號,則要用轉(zhuǎn)義字符,如‘\’’??兆址鳛樽址A康慕Y(jié)束'a'是一個字符常量"a"是一個字符串常量aa\028五、符號常量用一個標識符來代表一個常量,稱為符號常量。符號常量在使用前必須先定義,用宏定義的形式,其一般定義格式為:

#define標識符常量例:#definea20定義符號常量名時應(yīng)盡量做到“見名知意”,#definePRICE2029五、符號常量#include<stdio.h>#definePRICE10//定義價格符號常量PRICE為10voidmain(){intnum,total;scanf(“%d”,&num); //輸入購買數(shù)量total=num*PRICE; //計算總金額printf(“total=%d”,total);}30五、符號常量符號常量的性質(zhì)和使用方法:1、#define不是C語句,該行的末尾沒有分號。它是一個“預(yù)編譯命令”。2、不要把符號常量與變量混淆,符號常量只是一個符號,不占存儲單元。它只是簡單地進行字符置換(如把字符PRICE置換為字符10)。不論置換的字符是否有含義都進行置換。3、習(xí)慣上,符號常量名用大寫,變量名用小寫,以示區(qū)別。4、使用符號常量的好處

含義清楚在需要改變一個常量時能做到“一改全改”。

31變量是指在程序運行過程中其值可以變化的量。C語言要求在使用變量之前必須先進行聲明。給變量指定一個標識符,這個標識符稱為變量名;變量名(標識符)的命名規(guī)則:只能由字母、數(shù)字或下劃線組成;第一個字符必須是字母或下劃線。2.2.2變量32聲明一個變量包括:指定該變量的數(shù)據(jù)類型,該類型決定了變量值的類型、表現(xiàn)形式和占用內(nèi)存空間,以及對該變量能執(zhí)行的運算;指定變量的存儲類型和變量的作用域。1、變量的聲明變量聲明的一般形式:[存儲類型說明符]數(shù)據(jù)類型說明符變量名1[,變量名2,變量名3,…]331、變量的聲明☆變量名必須是一個合法的標識符,還應(yīng)考慮“見名知意”的原則。☆類型說明符后聲明多個相同類型的變量,各變量之間用逗號分隔?!钭兞柯暶鞅仨毞旁谧兞渴褂弥?,即先聲明,后使用。//變量聲明示例#include<stdio.h>voidmain(){

inta,b;

//聲明兩個整型變量a和bcharc;

//聲明一個字符變量c

floatf1,f2;

//聲明兩個浮點型變量f1,f2}數(shù)據(jù)類型說明符34聲明變量,只是給變量分配內(nèi)存空間,存儲空間中存放的值是隨機的,變量值不確定的。C語言允許在聲明變量的同時給變量賦值即初始化變量,這個值為變量的初值。2、變量的初始化在變量聲明中初始化賦值的一般格式為:[存儲類型說明符]數(shù)據(jù)類型說明符變量名1=值1[,變量名2=值2,…];☆多個變量初始化賦值必須將其分別賦值,即使所賦的值相同也是如此。inti=j=20;(錯誤)應(yīng)寫成:inti=20,j=20;352、變量的初始化//變量聲明及初始化#include<stdio.h>voidmain(){charc1=‘a(chǎn)’,c2=‘b’;/*聲明c1和c2為字符類型變量,c1初始化值分別為字符'a'、'b‘*/inti=20,j=20,k;/*聲明i,j和k為基本整型變量,i和j初始化值為20*/ floatf1=3.6,f2;/*聲明f1和f2為單精度類型變量,f1初始化值為3.6*/} 362、變量的初始化要注意區(qū)別變量名和變量值:intk=26;26k3000存儲單元變量名變量地址變量值37(1)整型變量

有基本整型、短整型、長整型、無符號基本整型、無符號短整型、無符號長整型6種。3、變量的使用

☆在程序中使用變量,要考慮程序運行的環(huán)境和變量的取值范圍,當變量的取值超出變量類型所規(guī)定的范圍時,會出現(xiàn)錯誤的運算結(jié)果。//整型變量的定義與使用#include<stdio.h>voidmain(){inta=-10,b=20,c;

//聲明基本整型變量a、b、c,//并對a,b初始化

unsignedk;

//聲明無符號基本整型變量k

scanf("%u",&k);

//用scanf()函數(shù)給k輸入一個值

c=a+b;

//將a、b的和賦值給c

printf("c=%d,k=%u\n",c,k);

//用printf()函數(shù)輸出c、k的值} 38

☆使用整型變量時要注意它獲取的值不要超過變量的取值范圍,否則會發(fā)生“溢出”。3、變量的使用//整型數(shù)據(jù)的溢出#include<stdio.h>voidmain(){shortx=32767,y;y=x+1;

printf("x=%d,y=%d\n",x,y);}

☆因為一個短整型變量所能表示數(shù)的范圍是-32768-32767,將無法表示大于32767的數(shù),這種情況叫溢出。而程序在運行過程中并沒有報錯。39(1)實型變量

分為單精度實型和雙精度實型,兩者的區(qū)別在于精度即有效數(shù)字位數(shù)。3、變量的使用//實型變量的有效位數(shù)#include<stdio.h>voidmain(){

float a=33.3333333333;doubleb=12.123456789012345678;printf("a=%21.18f\n",a);

//格式符%21.18f,輸出a時總長度21位,小數(shù)位數(shù)占18位

printf("b=%21.18f\n",b);

} float類型的數(shù)據(jù)只接收7位有效數(shù)字

double類型的數(shù)據(jù)接收16位有效數(shù)字

40在使用實型變量時應(yīng)該注意以下兩種情況:①實型常量沒有加后綴F(或f)時,系統(tǒng)默認為double類型進行處理,具有較高精度,把該實型常量賦值給一個float類型的變量時,系統(tǒng)會截取相應(yīng)的有效位數(shù)進行賦值。②應(yīng)避免將很大的數(shù)和一個很小的數(shù)進行加減運算,否則會丟失“較小”的數(shù)。3、變量的使用//實型數(shù)據(jù)的舍入誤差。#include<stdio.h>voidmain(){floata=123456789.0,b;b=a+1;

printf("a=%f\n",a);printf("b=%f\n",b);}

只能保證前7位是準確的,后面幾位是無效數(shù)字,把1加在無效數(shù)字上,是無意義的。

41(1)字符型變量每個字符變量占一個字節(jié)的內(nèi)存空間,存放一個字符,即字符變量的取值是一個字符常量??梢园炎址蛿?shù)據(jù)作為整型數(shù)據(jù)進行處理。允許對整型變量賦以字符值,也允許對字符變量賦以整型值。在輸出時,允許把字符變量按整型形式輸出,也允許把整型數(shù)據(jù)按字符形式輸出。注意,整型為4個字節(jié),字符為1個字節(jié),當整型按字符型量處理時,只有低八位參與處理。3、變量的使用//字符型變量示例#include<stdio.h>voidmain(){

chara,b;a='x';b='y';a=a-32;b=b-32;

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

422.3運算符與表達式2.3.1運算符2.3.2表達式2.3.3類型轉(zhuǎn)換432.3.1運算符C語言的運算符有以下幾類:⑴算術(shù)運算符(+-*/%)⑵關(guān)系運算符(><==>=<=!=)⑶邏輯運算符(?。Γ|)⑷位運算符(<<>>~|∧&)⑸賦值運算符(=及其擴展賦值運算符)⑹條件運算符(?:)⑺逗號運算符(,)(8)指針運算符(*和&)(9)求字節(jié)數(shù)運算符(sizeof)(10)強制類型轉(zhuǎn)換運算符((類型))(11)分量運算符(.->)(12)下標運算符([])(13)其他(如函數(shù)調(diào)用運算符())442.3.1運算符使用運算符需要注意以下幾點:⑴運算符的功能⑵對操作數(shù)(即運算對象)的要求操作數(shù)的個數(shù);操作數(shù)的數(shù)據(jù)類型。⑶運算符的優(yōu)先級別⑷運算符的結(jié)合方向⑸運算結(jié)果參見附錄B451、算術(shù)運算符+

(加法運算符,或正值運算符。如:3+5、+3)-(減法運算符,或負值運算符。如:5-2、-3)*(乘法運算符。如:3*5)/(除法運算符。兩個整數(shù)相除的結(jié)果為整數(shù),如:5/3結(jié)果為1)%(模運算符,或稱求余運算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。注:1、/:如果兩個整數(shù)相除,結(jié)果為整數(shù)(整除),結(jié)果“向零取整”。例:8/5=1,8/-5=-1,-8/5=-1,8.0/5=1.6。2、%:結(jié)果的符號與被除數(shù)符號相同。例:8%5=3,-8%5=-3,8%-5=3。462、自增、自減運算符作用是使變量的值增1或減1++i,--i:在使用i之前,先使i的值加(減)1i++,i--:在使用i之后,使i的值加(減)1注:由于自增和自減可以改變操作數(shù)自身的值,因此其運算對象只能是一個變量。整型、實型、字符型、指針類型變量均可作為其運算對象。變量x初值表達式運算后x的值運算后表達式的值2++x332x++322--x112x--12472、自增、自減運算符//自增自減綜合應(yīng)用#include<stdio.h>voidmain(){

inti=8;printf(“%d\n”,++i);printf("%d\n",--i);printf(“%d\n”,i++);printf(“%d\n”,i--);printf("%d\n",-i++);printf(“%d\n”,-i--);printf("%d\n",i);}

//輸出9//輸出8//輸出8,但i的值為9//輸出9,但i的值為8//輸出-8,但i的值為9//輸出-9,相當于-(i--)//此時輸出多少呢?483、賦值運算符

“=”是賦值運算符作用是將一個數(shù)據(jù)賦給一個變量也可以將一個表達式的值賦給一個變量例:a=20;的作用是“將值20賦給變量a”。

賦值表達式一般形式為:

變量賦值運算符表達式對賦值表達式求解的過程:求賦值運算符右側(cè)的“表達式”的值賦給賦值運算符左側(cè)的變量493、賦值運算符賦值運算符左側(cè)的標識符稱為“左值”

出現(xiàn)在賦值運算符右側(cè)的表達式稱為“右值”注意:并不是任何對象都可以作為左值的,表達式和常變量就不能作為左值。任何左值都可做右值。賦值表達式“a=3*5”的值為15,對表達式求解后,變量a的值和表達式的值都是15“a=(b=5)”和“a=b=5”等價“a=b”和“b=a”含義不同503、賦值運算符兩側(cè)類型一致時,直接賦值兩側(cè)類型不一致,但都是數(shù)值型或字符型,自動將右側(cè)的類型轉(zhuǎn)換為左側(cè)類型后賦值定義變量時要防止數(shù)據(jù)溢出實型→整型:直接取整,舍棄小數(shù)部分。整型→實型:數(shù)值不變,但要補足相應(yīng)的有效位數(shù)。字符型→整型:將ASCII碼值賦給最低的8位。整型→字符型:只截取最低的8位賦給字符型變量。

513、賦值運算符復(fù)合的賦值運算符

在賦值符“=”之前加上其他運算符,可以構(gòu)成復(fù)合的運算符a+=3等價于a=a+3復(fù)合賦值運算符使用一般形式為:<變量><雙目運算符>=<表達式>等價于:<變量>=<變量><雙目運算符><表達式>//例如:n+=1 等價于n=n+1x*=y+1 等價于x=x*(y+1)k%=i+k 等價于k=k%(i+k)要加括號523、賦值運算符賦值表達式也可以包含復(fù)合的賦值運算符。

例:

a+=a-=a*a求解步驟如下:(設(shè)置a的初值為12)①先進行“a-=a*a”的運算,它相當于:a=a-a*a,a的值為12-144=-132。②再進行“a+=-132”的運算,相當于:a=a+(-132),a的值為-132-132=-264。如果變成:

a+=a-=a*=a

結(jié)果又如何呢?534、關(guān)系運算符關(guān)系運算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)說明:關(guān)系運算符的優(yōu)先級低于算術(shù)運算符關(guān)系運算符的優(yōu)先級高于賦值運算符544、關(guān)系運算符關(guān)系表達式用關(guān)系運算符將兩個表達式起來的式子,稱關(guān)系表達式。例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關(guān)系表達式的值是一個邏輯值,即“真”或“假”。例:關(guān)系表達式”a>b”的值為“真”,表達式的值為1。C語言中沒有專用的邏輯值,1代表真,0代表假554、關(guān)系運算符#include<stdio.h>voidmain(){

inta=1,b=2,c=3,d=4;

/*聲明變量a,b,c,d并初始化*/printf(“%d\n”,a+b>c+d); printf(“%d\n”,a<=2*b); printf(“%d\n”,'a'<'d'); printf(“%d\n”,a!=(c==d));}

//結(jié)果為假,輸出0//結(jié)果為真,輸出1//結(jié)果為真,輸出1//結(jié)果為真,輸出1printf(“%d\n”,a<b<c);

輸出什么?有時判斷的條件是一個復(fù)合的條件,如:是中國公民,且在18歲以上,如何表達?565、邏輯運算符邏輯運算符及其優(yōu)先次序1、&&(邏輯與)相當于其他語言中的AND2、||(邏輯或)相當于其他語言中的OR3、!(邏輯非)相當于其他語言中的NOT例:a&&b若a,b為真,則a&&b為真。a||b若a,b之一為真,則a||b為真。!a若a為真,則!a為假。優(yōu)先次序:!(非)->&&(與)->||(或)邏輯運算符中的“&&”和“||”低于關(guān)系運算符,“!”高于算術(shù)運算符575、邏輯運算符//邏輯運算示例#include<stdio.h>voidmain(){

charch;printf(“inputaletter:”);scanf(“%c”,&ch); /*輸入一個字母*/if(!(ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’))printf(“inputerror!\n”);

/*如果輸入的不是字母則提示錯誤*/}

不能改成:’A’<=ch<=’Z’

585、邏輯運算符邏輯表達式用邏輯運算符將關(guān)系表達式或邏輯量連接起來的式子就是邏輯表達式邏輯表達式的值應(yīng)該是一個邏輯量“真”或“假”。例:設(shè)a=4,b=5:!a的值為0a&&b的值為1a||b的值為1!a||b的值為14&&0||2的值為1任何非零的數(shù)值被認作“真”,非零即為真595、邏輯運算符例:5>3&&8<4-!0

自左向右運算

1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達式值為0605、邏輯運算符邏輯運算的“短路”特性:(1)a&&b&&c

只有a為真時,才需要判斷b的值,只有a和b都為真時,才需要判斷c的值。(2)a||b||c

只要a為真,就不必判斷b和c的值,只有a為假,才判斷b。a和b都為假才判斷c。例:(m=a>b)&&(n=c>d)當a=1,b=2,c=3,d=4,m和n的原值為1時,由于“a>b”的值為0,因此m=0,而“n=c>d”不被執(zhí)行,因此n的值不是0而仍保持原值1。616、逗號運算符逗號運算符:將兩個表達式連接起來,又稱為“順序求值運算符”。如:3+5,6+8一般形式:

表達式1,表達式2…,表達式n求解過程:先求解表達式1,再求解表達式2,依次。整個逗號表達式的值是表達式n的值。626、逗號運算符例:逗號表達式x=a=2*3,a*4,a+5;

分析:賦值運算符優(yōu)先級高于逗號運算符,先計算子表達式x=a=2*3,a和x被賦值為6,再計算子表達式a*4,值為24,最后計算子表達式a+5,值為11,整個表達式的結(jié)果取子表達式a+5的值,即11。例:逗號表達式x=(a=2*3,a*4,a+5);

分析:先計算括號中的逗號表達式a=2*3,a*4,a+5,其中先計算子表達式a=2*3,a被賦值為6,再計算子表達式a*4,值為24,最后計算子表達式a+5,值為11,整個逗號表達式的結(jié)果取子表達式a+5的值11,再賦給x。637、條件運算符條件運算符是三目運算符,由兩個符號“?:”組成,需要3個運算對象。

一般形式:表達式1?表達式2:表達式3求解過程:若表達式1的值為真(非0),則執(zhí)行表達式2,其結(jié)果作為整個條件表達式的值,否則執(zhí)行表達式3,其結(jié)果作為整個條件表達式的值。647、條件運算符說明:(1).3個操作數(shù)可以是任意類型表達式。

(2).條件運算符優(yōu)先級高于賦值運算符,低于關(guān)系運算符和算術(shù)運算符,位于第13優(yōu)先級。

(3).條件運算符的結(jié)合方向為“自右至左”。

(4).“表達式2”和“表達式3”不僅可以是數(shù)值表達式,還可以是賦值表達式或函數(shù)表達式。(5).如果表達式1為真,只計算表達式2,否則只計算表達式3。657、條件運算符//輸入兩個數(shù),求其中較大的數(shù)和較小的數(shù)。#include<stdio.h>voidmain(){inta,b,max,min;printf(“inputa=”);scanf(“%d”,&a);/*輸入變量a*/printf(“inputb=”);scanf(“%d”,&b);/*輸入變量b*/max=a>b?a:b;min=a<b?a:b;printf(“max=%d,min=%d\n”,max,min);

}

求a,b,c三個數(shù)的最大數(shù)m:

m=a>b?a:b>c?b:c;

()668、位運算符由于C語言可直接對硬件編程,在系統(tǒng)軟件設(shè)計中要求能對位進行運算,因此,C語言提供了6種位運算符,支持位運算等匯編操作。運算符功能運算對象個數(shù)優(yōu)先級結(jié)合方向~按位取反單目2從右至左<<左移位雙目5從左至右>>右移位雙目5從左至右&按位與雙目8從左至右^按位異或雙目9從左至右|按位或雙目10從左至右678、位運算符位邏輯運算符是以數(shù)據(jù)的二進制數(shù)位進行運算,位移動運算是按二進制位數(shù)進行左移和右移。(1)位邏輯運算ab~

a(按位取反)a&b(按位與)a|b(按位或)a^b(按位異或)110110100011011011001000688、位運算符1)按位取反按位取反,運算符為“~”。把該運算對象的每個二進制位取反。例如,~5,運算如下(只列出了最低的8個二進制位):~0000010111111010698、位運算符2)按位與按位與,運算符為“&”。兩個運算對象中對應(yīng)的二進制位都是1,則該位結(jié)果為1;否則,結(jié)果為0。按位與運算通常用來對某些二進制位清0或保留某些二進制位。在需要清0的位置上,將與它進行與運算的運算對象的對應(yīng)的二進制位置0,需要保留原值的位置,則將對應(yīng)的二進制位置1。例如,要保留155的最低3位不變,其余置0,可用155&7來實現(xiàn),運算如下(只列出了最低的8個二進制位):10011011(155的二進制形式)&00000111(7的二進制形式)00000011(結(jié)果為3)708、位運算符3)按位或運算符為“|”。兩個運算對象中對應(yīng)的二進制位有一個是1,則該位結(jié)果為1;否則,結(jié)果為0。按位或運算通常用來對某些二進制位置1或保留某些二進制位。在需要置1的位置上,將與它進行或運算的運算對象的對應(yīng)的二進制位置1,需要保留原值的位置,則將對應(yīng)的二進制位置0。例如,要保留129的最低3位不變,其余置1,可用129|248來實現(xiàn),運算如下(只列出了最低的8個二進制位):10000001(129的二進制形式)|11111000(248的二進制形式)11111001(結(jié)果為249)718、位運算符4)按位異或按位異或,運算符為“^”。兩個運算對象中對應(yīng)的二進制位相同(都是1或都是0),則該位結(jié)果為0;不相同則結(jié)果為1。例如,155^129,運算如下(只列出了最低的8個二進制位):10011011(155的二進制形式)^10000001(129的二進制形式)00011010(結(jié)果為26)728、位運算符(2)位移動運算位移動運算表達式的語法格式:運算數(shù)據(jù)位移動運算符移動位數(shù)①左移位,運算符為“<<”。把左邊的運算數(shù)據(jù)的全部向左移指定的位數(shù),高位丟棄,低位補0。例如,a的值為5,a<<2則是把a的二進制位全部向左移動2位,即5的二進制00000101左移2位后為00010100(十進制數(shù)為20),相當于a乘以22。738、位運算符(2)位移動運算②右移位,運算符為“>>”。把左邊的運算數(shù)據(jù)的全部向右移指定的位數(shù),低位丟棄,對于正數(shù),高位補0,負數(shù)的符號位為1,最高位補1還是補0取決于編譯器,多數(shù)情況是補1。例如,a的值為15,a>>2則是把a的二進制位全部向右移動2位,即15的二進制00001111右移2位后為00000011(十進制數(shù)為3),相當于a除以22取整。749、其他運算符

sizeof()運算符,單目運算,第2優(yōu)先級,結(jié)合方向是從右至左。一般形式:sizeof(變量名|數(shù)據(jù)類型標識符|表達式)功能:計算該數(shù)據(jù)類型變量所占的字節(jié)數(shù)。例:

inta=5;floatx=3.2,y=6.4;

sizeof(a)值為:4(在TURBOC中為2)

sizeof(char)值為:1

sizeof(x+y)值為:4

sizeof(double)值為:8 752.3.2表達式表達式:用運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C表達式。運算對象包括常量、變量、函數(shù)等。其中,單個的常量、變量、函數(shù)也稱為表達式。表達式運算后只會產(chǎn)生一個結(jié)果,該結(jié)果是具有某種數(shù)據(jù)類型的數(shù)值。C語言中,運算是自左向右的,運算符執(zhí)行順序通常由運算符的優(yōu)先級和結(jié)合方向控制。優(yōu)先級較高的運算符先于優(yōu)先級較低的執(zhí)行,如生活中常說的先乘除后加減。結(jié)合方向則控制具有相同優(yōu)先級的多個運算符的執(zhí)行順序。762.3.3類型轉(zhuǎn)換C語言提供了3種類型轉(zhuǎn)換方式:自動轉(zhuǎn)換、強制轉(zhuǎn)換和賦值轉(zhuǎn)換。1、自動轉(zhuǎn)換(也稱隱式類型轉(zhuǎn)換)說明:這種類型轉(zhuǎn)換是由系統(tǒng)自動進行的。必定的轉(zhuǎn)換轉(zhuǎn)換的方向772.3.3類型轉(zhuǎn)換例如,設(shè)folatx=7.5;則x%3顯然不符合要求,因為只能對整型數(shù)據(jù)進行取余運算,所以需要用到強制類型轉(zhuǎn)換,(int)x%3即7%3。2、強制類型轉(zhuǎn)換(也稱顯式轉(zhuǎn)換)是用強制類型轉(zhuǎn)換運算符將運算對象轉(zhuǎn)換為需要的數(shù)據(jù)類型。

一般形式:

(目標類型說明符)(表達式)說明:表達式應(yīng)該用括號括起來。在強制類型轉(zhuǎn)換時,得到一個所需類型的中間變量,原來變量的類型未發(fā)生變化。782.3.3類型轉(zhuǎn)換3、賦值時的類型轉(zhuǎn)換當左右類型不一致時,需要進行類型轉(zhuǎn)換,將右邊的類型轉(zhuǎn)換為左邊的類型,這種轉(zhuǎn)換系統(tǒng)自動進行。實型數(shù)據(jù)→整型:直接取整,舍棄小數(shù)部分。字符型或整型數(shù)據(jù)→實型:數(shù)值不變,補足相應(yīng)的有效位數(shù)。單精度實型→雙精度實型:數(shù)值不變,有效位數(shù)擴展到16位,以8個字節(jié)存儲;雙精度實型賦值給單精度實型時,只截取前面7位有效數(shù)字,以4個字節(jié)存儲。字符型→整型:將ASCII碼值賦給最低的8位。整型→字符型:只截取最低的8位賦給字符型變量。占位數(shù)多的→位數(shù)少的:截取低位賦值。占位數(shù)少的→位數(shù)多的:數(shù)據(jù)直接賦給低位,高位符號擴充。792.4標準輸入/輸出(一)所謂輸入輸出是以計算機主機為主體而言的。輸出:從計算機向外部輸出設(shè)備(顯示器,打印機)輸出數(shù)據(jù)。輸入:從輸入設(shè)備(鍵盤,鼠標,掃描儀)向計算機輸入數(shù)據(jù)。(二)C語言本身不提供輸入輸出語句,輸入和輸出操作是由C函數(shù)庫中的函數(shù)來實現(xiàn)的。(三)在使用系統(tǒng)庫函數(shù)時,要用預(yù)編譯命令#include將有關(guān)的“頭文件”包括到用戶源文件中。

#include<stdio.h>或#include“stdio.h”802.4.1printf()函數(shù)

printf()函數(shù)稱為格式化輸出函數(shù),它能夠按用戶指定的格式輸出多種類型的數(shù)據(jù)。

一般格式為:printf(”格式控制字符串”,輸出列表);

例如:printf(”i=%d,c=%c\n”,i,c);普通字符可以是常量、變量或表達式812.4.1printf()函數(shù)printf函數(shù)的參數(shù)包括兩部分:(1)“格式控制”是用雙撇號括起來的字符串,也稱“轉(zhuǎn)換控制字符串”,它包括三種信息。①格式說明。格式說明由“%”和格式字符組成,如%d、%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由“%”字符開始的。

②普通字符。普通字符即需要原樣輸出的字符。例如上面printf函數(shù)中雙撇號內(nèi)的逗號、空格和換行符。

③轉(zhuǎn)義字符:無法用單個字符描述的一些特定操作,如\n(換行)、\t(跳到下一個水平制表位)等。(2)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是常量、變量或表達式。822.4.1printf()函數(shù)//printf()函數(shù)的使用示例。#include<stdio.h>voidmain(){charch=’a’;

printf("ch=%d,thecapital:%c\n",ch,ch-32);

}

運行結(jié)果:ch=97,thecapital:A832.4.1printf()函數(shù)格式字符含義d以十進制形式輸出帶符號整數(shù)(默認正數(shù)不輸出符號)o以八進制形式輸出無符號整數(shù)(默認不輸出前綴0)x或X以十六進制形式輸出無符號整數(shù)(默認不輸出前綴0x)u以十進制形式輸出無符號整數(shù)f以小數(shù)形式輸出單、雙精度實數(shù)e或E以指數(shù)形式輸出單、雙精度實數(shù)g或G以%f或%e中輸出寬度較短的形式輸出單、雙精度實數(shù)c輸出單個字符s輸出字符串842.4.1printf()函數(shù)基本的格式字符有以下幾種:⑴d格式符。按十進制整型數(shù)據(jù)的實際長度輸出。

⑵i格式符。作用與d格式符相同,按十進制整型數(shù)據(jù)的實際長度輸出。一般習(xí)慣用%d而少用%i。⑶c格式符。用來輸出一個字符。

一個值在0~255范圍內(nèi)的整數(shù),也可以用“%c”使之按字符形式輸出。

852.4.1printf()函數(shù)⑷s格式符,用來輸出一個字符串。

例:printf(″%s″,″CHINA″);輸出字符串“CHINA”(不包括雙引號)⑸f格式符。用來輸出實數(shù)(包括單、雙精度),以小數(shù)形式輸出,不指定整個字段的長度,由系統(tǒng)自動指定。一般的處理方法是:整數(shù)部分全部輸出,并輸出6位小數(shù)。注意:在輸出的數(shù)字中并非全部數(shù)字都是有效數(shù)字。單精度實數(shù)的有效位數(shù)一般為6-7位,雙精度實數(shù)的有效位數(shù)一般為15-16位。862.4.1printf()函數(shù)(6)e格式符,用格式說明%e指定以指數(shù)形式輸出實數(shù)。例:printf(″%e″,123.456);輸出如下

1.23460

e+0026列5列C編譯系統(tǒng)自動指定給出數(shù)字部分的小數(shù)位數(shù)為6位,指數(shù)部分占5位。872.4.1printf()函數(shù)完整的格式說明部分還可以加入一些修飾符,形式為:

%[標志][域?qū)抅[.精度][長度]格式字符(1)標志:可使用-、+、空格、#和0共5種標志字符

標志字符含義-結(jié)果左對齊,數(shù)據(jù)長度小于域?qū)挄r右邊補充空格+輸出符號(正號或負號)空格輸出值為正數(shù)且沒有輸出正號時冠以空格#只對部分類型格式字符有影響;對o類,在輸出時加前綴0;對x類,在輸出時加前綴0x;對e,g,f類當結(jié)果有小數(shù)時才顯示出小數(shù)點0數(shù)據(jù)長度小于域?qū)挄r,不足位數(shù)用0補充882.4.1printf()函數(shù)(2)域?qū)挘褐付〝?shù)據(jù)顯示在輸出設(shè)備上所占的總寬度。若數(shù)據(jù)的實際位數(shù)多于指定寬度,則按實際位數(shù)輸出;若實際位數(shù)少于指定寬度,則數(shù)據(jù)通常會在指定寬度內(nèi)右對齊,不足部分以空格補齊。(3)精度:以“.”開頭,其意義是:如果輸出值為整數(shù),則輸出數(shù)字的最少個數(shù),若位數(shù)少于指定精度,就在整數(shù)前面加0,補齊指定的最小數(shù)字個數(shù);如果輸出值為實數(shù),則表示小數(shù)的位數(shù),默認為6位;如果輸出的是字符串,則只取字符串中左端n個字符。注意,若實際位數(shù)大于所定義的精度數(shù),則截去超過的部分,對小數(shù)部分四舍五入。(4)長度:長度格式符為h,l兩種,h表示按短整型輸出,l表示按長整型輸出。892.4.1printf()函數(shù)//格式輸出示例。{inta=123;floatb=123.1234567;doublec=12345678.1234567;charch='f';

printf("a=%d,%8.5d,%08d,%o,%#x\n",a,a,a,a,a,a);printf("b=%f,%-10.3f,%e,%g\n",b,b,b,b);printf("c=%f,%8.4f,%g\n",c,c,c);printf("ch=%c,%8c\n",ch,ch);printf("%s,%.4s\n","abcdef","abcdef");}

902.4.1printf()函數(shù)注意:使用printf()函數(shù)時輸出順序是從左到右,但是輸出列表中的各輸出項的求值順序,不同的編譯器不一定相同,VisualC++是按從右到左進行的。printf()函數(shù)還可以只有格式控制字符串而沒有輸出項。

//輸出項求值順序示例{

inta=5;printf("a=%d,a=%d\n",a=a+1,a=a+2);}

運行結(jié)果:a=8,a=7912.4.2scanf()函數(shù)scanf()函數(shù)稱為格式化輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量中。一般格式為:

scanf(“格式控制字符串”,地址列表);

含義同printf函數(shù)可以是變量的地址,或字符串的首地址inta,b,c;scanf(“%d%d%d”,&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);345↙a=3,b=4,c=5922.4.2scanf()函數(shù)格式字符串由%和格式字符組成,還可以加入一些可選項。一般形式為:

%[*][輸入數(shù)據(jù)寬度][長度]格式字符(1)格式字符:指定輸入數(shù)據(jù)的類型。格式字符含義(輸入類型)d輸入十進制整數(shù)o輸入八進制整數(shù)(可以以0開頭,也可以不以0開頭)u輸入無符號十進制整數(shù)x輸入十六進制整數(shù)(可以以0x或0X開頭,也可以不以此開頭)f、e、g輸入實數(shù)(用小數(shù)形式或指數(shù)形式,符號和小數(shù)部分可選)c輸入單個字符(輸入時不加單引號)s輸入字符串(輸入時不加雙引號)932.4.2scanf()函數(shù)(2)*:表示該輸入項,讀入后不賦予相應(yīng)的變量,即跳過該輸入值。例如:scanf("%d%*d%d",&a,&b);當輸入為:123時,把1賦予a,2被跳過,3賦予b。(3)輸入寬度:用十進制整數(shù)指定輸入的寬度(即字符數(shù))。例如:scanf("%5d",&a);輸入:12345678只截取前5位12345賦予變量a。又如:scanf("%4d%4d",&a,&b);輸入:12345678將把1234賦予a,而5678賦予b。(4)長度:長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld)和雙精度實型數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。942.4.2scanf()函數(shù)使用scanf()函數(shù)容易與printf()函數(shù)混淆,注意以下:scanf()函數(shù)中沒有精度控制。如:scanf(“%5.2f”,&a);是非法的。scanf()函數(shù)中要求給出變量地址,如給出變量名則不會正確賦值。如:scanf(“%d”,a);是錯誤的,應(yīng)改為scnaf(“%d”,&a);在輸入多個數(shù)值數(shù)據(jù)時,若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。在輸入字符數(shù)據(jù)時,若格式控制串中無非格式字符,則認為所有輸入的字符均為有效字符。

952.4.2scanf()函數(shù)例如:scanf("%c%c%c",&a,&b,&c);當輸入為:def(即d空

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論