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

下載本文檔

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

文檔簡(jiǎn)介

第2章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式C程序的框架是什么樣的?如何編寫(xiě)程序?qū)崿F(xiàn),計(jì)算兩個(gè)整數(shù)x=2,y=3的和,然后顯示器輸出兩個(gè)數(shù)相加的結(jié)果?如何編寫(xiě)程序?qū)崿F(xiàn)從鍵盤(pán)輸入兩個(gè)整數(shù),然后顯示器輸出兩個(gè)數(shù)相加的結(jié)果?思考一個(gè)簡(jiǎn)單的C程序例子#include<stdio.h>/*函數(shù)功能:計(jì)算兩個(gè)整數(shù)相加之和

入口參數(shù):整型數(shù)據(jù)a和b

返回值:整型數(shù)a和b之和*/int

Add(inta,intb){

return(a+b);}/*主函數(shù)*/voidmain(){

intx,y,sum=0;

printf("Inputtwointegers:");

scanf("%d%d",&x,&y);/*輸入兩個(gè)整型數(shù)x和y*/ sum=Add(x,y);/*調(diào)用函數(shù)Add計(jì)算x和y相加之和*/

printf("sum=%d\n",sum);/*輸出x和y相加之和*/}并列的兩個(gè)函數(shù)其中主函數(shù)是程序的入口程序注釋編譯預(yù)處理命令C程序常見(jiàn)符號(hào)分類關(guān)鍵字(Keyword)又稱保留字(CReservedWord)AwordthathasspecialmeaninginC標(biāo)識(shí)符(Identifier)CStandardIdentifier(系統(tǒng)預(yù)定義標(biāo)識(shí)符)Awordhavingspecialmeaningbutmayberedefined(butisnotrecommended!!)用戶自定義標(biāo)識(shí)符變量,函數(shù)名,…C程序常見(jiàn)符號(hào)分類運(yùn)算符(Operator)34種,詳見(jiàn)附錄2

分隔符(Separator)空格、回車/換行、逗號(hào)等其它符號(hào)“{”和“}”標(biāo)識(shí)函數(shù)體或語(yǔ)句塊“/*”和“*/”程序注釋的定界符常量(Constant)常量和變量√C語(yǔ)言程序處理的數(shù)據(jù)形式常量(constant)在程序中不能改變其值的量變量(variable)其值在程序執(zhí)行過(guò)程中是可以改變的常量(Constant)在程序中不能改變其值的量Consistsof:整型(e.g.067-2

123L123u

0220x12)缺省為int實(shí)型(e.g.2.31.2e-52.73F2.73L)缺省為double字符型(e.g.'z''3''$''\n')用\開(kāi)頭的字符為轉(zhuǎn)義字符,代表1個(gè)字符字符串(e.g."UKM""1""5a")枚舉型長(zhǎng)整型無(wú)符號(hào)整型八進(jìn)制十六進(jìn)制單精度實(shí)型長(zhǎng)雙精度實(shí)型十進(jìn)制小數(shù)指數(shù)形式十進(jìn)制字符常量√轉(zhuǎn)義字符一些特殊字符(無(wú)法從鍵盤(pán)輸入或者另有它用)用轉(zhuǎn)義字符表示字符常量√字符常數(shù)就是一個(gè)普通整數(shù),也可參與各種數(shù)學(xué)運(yùn)算每個(gè)字符具有一個(gè)0~255之間的數(shù)值,可從ASCII表查出注意:’5’和整數(shù)5的區(qū)別’5’的ASCII碼值是53字符的數(shù)學(xué)運(yùn)算在密碼學(xué)內(nèi)用得比較多例:小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母#include<stdio.h>main(){

char

ch='b';printf("%c,%d\n",ch,ch);

ch='b'-32;

printf("%c,%d\n",ch,ch);}#include<stdio.h>main(){

char

ch='b';printf("%c,%d\n",ch,ch);

ch='b'-('a'-'A')

;

printf("%c,%d\n",ch,ch);}b,98B,66

b,98B,66

相當(dāng)于97-65字符串常量√用雙引號(hào)括住的由0個(gè)或多個(gè)字符組成的字符序列"Iamastring"""表示空字符串除注釋外,是唯一可以出現(xiàn)中文的地方C語(yǔ)言內(nèi)部用’\0’表示字符串的結(jié)束"x"和’x’是不同的<string.h>里定義了一系列專門(mén)的字符串處理函數(shù)轉(zhuǎn)義字符也可在字符串中使用字符串"\t\"Name\\Address\n"的長(zhǎng)度?15變量(Variable)Anameassociatedwithamemorycellwhosevaluecanchange其值在程序執(zhí)行過(guò)程中是可以改變的PropertiesofavariableName變量名Type變量類型Value變量的值A(chǔ)ddress變量的存儲(chǔ)單元——地址Needstobedeclared:

類型關(guān)鍵字變量名;變量聲明(VariableDeclaration)*使用變量的基本原則變量必須先定義,后使用聲明的順序無(wú)關(guān)緊要一條聲明語(yǔ)句可聲明若干個(gè)同類型的變量變量聲明(VariableDeclaration)*聲明變量是初始化變量的最好時(shí)機(jī)不被初始化的變量,其值為隨機(jī)數(shù)

結(jié)果會(huì)是什么?Algorithm

變量

表達(dá)式

Syntax

變量=表達(dá)式

;Rules:類型一致Expression’stypemustbethesameasvariable’stype

intx; inty; x=12; y=5.75;變量賦值(VariableAssignment)√Example:intnumber1,number2;number1=25;number2=23;number1=number2;…… number1?number2?252323變量賦值(VariableAssignment)*Example:Calculateanddisplaythepriceofanumberofapplesifthequantityinkgandpriceperkgaregiven.Input:

quantityandpricePerkgOutput:

priceProcess:

price=quantity*pricePerkg變量賦值(VariableAssignment)Example:intquantity;floatpricePerkg,price;quantity=5;pricePerkg=4.50;price=quantity*pricePerkg;…Howdoesthisprogramwork?變量賦值(VariableAssignment)Example:intquantity;floatpricePerkg,price;quantity=2;pricePerkg=4.50;price=quantity*pricePerkg;…quantity?

pricePerkg?price?4.509.002變量賦值(VariableAssignment)Example:intquantity;floatpricePerkg;floatprice;Whydidwedeclareitasint?Whydidwedeclarethemasfloat?變量類型(VariableType)數(shù)據(jù)類型(DataType)為什么要區(qū)分類型?變量的類型決定了數(shù)據(jù)的存儲(chǔ)形式合法的取值范圍占用內(nèi)存空間大小可參與的運(yùn)算種類數(shù)據(jù)類型(DataType)數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型整型實(shí)型(浮點(diǎn)型)字符型枚舉類型數(shù)組類型結(jié)構(gòu)體類型共用體類型單精度實(shí)型雙精度實(shí)型基本整型長(zhǎng)整型短整型無(wú)符號(hào)整型基本數(shù)據(jù)類型*int整數(shù),在目前絕大多數(shù)機(jī)器上占4個(gè)字節(jié)TC2.0,2個(gè)字節(jié)float單精度浮點(diǎn)數(shù),4個(gè)字節(jié)double雙精度浮點(diǎn)數(shù),8個(gè)字節(jié)char字符,1個(gè)字節(jié)表示256個(gè)ASCII字符,或0~255的整數(shù)數(shù)據(jù)類型修飾符shortshort

int,簡(jiǎn)寫(xiě)為short,短整數(shù),2個(gè)字節(jié)longlong

int,簡(jiǎn)寫(xiě)為long,長(zhǎng)整數(shù),4個(gè)字節(jié)long

double,長(zhǎng)雙精度(高精度)浮點(diǎn)數(shù),10個(gè)字節(jié)unsigned用來(lái)修飾char、int、short和long無(wú)符號(hào)整數(shù)(正整數(shù)和0)不同類型取值范圍不同C語(yǔ)言直接提供的任何類型都有取值范圍。不同類型取值范圍不同Mostsignificantbit(MSB)issign(最高位為符號(hào)位)如何衡量變量所占空間大小?bit,中文叫法:位Byte,中文叫法:字節(jié)Kilobyte(KB),中文叫法:

KMegabyte(MB),中文叫法:兆Gigabyte(GB),中文叫法:GTerabyte(TB),中文叫法:T1TB==

1,024GB1GB

==

1,024MB1MB

==

1,024KB1KB

==

1,024B1B==

8b一個(gè)位有多大?只能是“0”或者“1”,二進(jìn)制一個(gè)字節(jié)有多大?可以表示數(shù)字0~255之間的整數(shù)如何衡量變量所占空間大???不同類型占用的內(nèi)存字節(jié)數(shù)不同同種類型在不同的平臺(tái)其占字節(jié)數(shù)不盡相同如int在16位、32位和64位系統(tǒng)上分別占2、4和8個(gè)字節(jié)不要對(duì)變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然用sizeof獲得變量或者數(shù)據(jù)類型的長(zhǎng)度現(xiàn)象與危害:在平臺(tái)間移植時(shí)會(huì)出現(xiàn)問(wèn)題,導(dǎo)致數(shù)據(jù)丟失或者溢出注意!sizeof到底是什么?*C語(yǔ)言的關(guān)鍵字,并非函數(shù)計(jì)算類型占用的字節(jié)數(shù)兩種語(yǔ)法形式

sizeof(類型)結(jié)果為類型占用的字節(jié)數(shù)

sizeof(表達(dá)式)結(jié)果為表達(dá)式值所屬類型占用的字節(jié)數(shù)一般都使用sizeof(變量名)

例在TC和VC、CB下的運(yùn)行結(jié)果#include<stdio.h>voidmain(){

printf("DatatypeNumberofbytes\n");

printf("---------------------------------\n");

printf("char%d\n",sizeof(char));

printf("int%d\n",sizeof(int));

printf("short

int%d\n",sizeof(short));

printf("long

int%d\n",sizeof(long));

printf("float%d\n",sizeof(float));

printf("double%d\n",sizeof(double));}變量的賦值和賦值表達(dá)式簡(jiǎn)單賦值(SimpleAssignment)Syntax:

變量=

表達(dá)式;Don’tforgetthesemicolon!!Everyassignmentexpressionhasavalue#include<stdio.h>main(){floatprice,discount,total;

printf(“Buyingprice:“);

scanf(“%f”,&price);

printf(“\nDiscountrate:“);

scanf(“%f”,&discount);total=price*discount;

printf(“Thetotalpriceis%.2f\n”,total);}Buyingprice:_discount??price??

total??Buyingprice:10.00_10.00Buyingprice:10.00Discountrate:_Buyingprice:10.00Discountrate:0.25_0.252.50Buyingprice:10.00Discountrate:0.25_Buyingprice:10.00Discountrate:0.25Thetotalpriceis2.50_Example:簡(jiǎn)單賦值

SimpleAssignment動(dòng)態(tài)和靜態(tài)數(shù)據(jù)類型>>>a=123>>>type(a)<type'int'>>>>a='abc'>>>type(a)<type'str'>變量是一個(gè)對(duì)象的別名、指針或引用賦值是重新綁定inta;a=123;√a="abc";×變量是數(shù)據(jù)的內(nèi)存地址名,賦值是改寫(xiě)PythonCSyntax:變量1=

變量2=

表達(dá)式;多重賦值

MultipleAssignmentDon’tforgetthesemicolon!!右結(jié)合:從右向左賦值

變量1=(變量2=表達(dá)式);Example:inta,b;floatx,y;...a=b=0;x=y=100.0;b??a??x??y??00100.0100.0多重賦值

MultipleAssignment運(yùn)算符(Operator)34種,詳見(jiàn)附錄常見(jiàn)的運(yùn)算符算術(shù)運(yùn)算符賦值運(yùn)算符增1和減1類型強(qiáng)轉(zhuǎn)關(guān)系運(yùn)算符邏輯運(yùn)算符......C運(yùn)算符和操作數(shù)

(OperatorandOperand)Example:W+Z操作數(shù)(Operand)運(yùn)算符(Operator)操作數(shù)(Operand)Whatareoperatorandoperand?算術(shù)運(yùn)算符(ArithmeticOperators)Addition(+)Subtraction(-)Multiplication(*)Division(/)Modulus(%)除法(Division)Example:W/Z浮點(diǎn)數(shù)除法(FloatingDivision)WorZorbotharefloats整數(shù)除法(IntegerDivision)WandZareintegersExample:anintegeraninteger

theresultisalsoaninteger整數(shù)除法(IntegerDivision)11/5=2Python/floatdivision//integerdivision對(duì)Python2.x版本當(dāng)a/b同為整數(shù)時(shí),a/b等價(jià)于a//b來(lái)處理以避免出錯(cuò)Example:實(shí)數(shù)除法(FloatingDivision)11.0/5=2.2afloatanintegertheresultisafloatWhatwillbetheanswerifanintegerisdividedby0?Somethingtoponder…求余(Modulus)*Itreturnsthe

remainder

thatoccursafterperformingthedivisionof2operandsRule:

操作數(shù)必須是整數(shù)Operandsmustbe

integers注意!Example:-11%5=-1anintegeraninteger-115-2-10-1remainderresulttheresultistheremainderof-11/5求余(Modulus)Example:11%-5=1anintegeraninteger11-5-2101remainderresulttheresultistheremainderof11/-5求余(Modulus)Example:11.0%5=??afloatanintegerINVALID!

求余(Modulus)*注意!Anexpressionmaycontain2ormorearithmeticoperatorsMainissue:運(yùn)算順序

OrderofPrecedence

優(yōu)先級(jí)算術(shù)表達(dá)式

(ArithmeticExpression)

優(yōu)先級(jí)(OrderofPrecedence)

High: */%

Low: +-Alloperatorshaveaprecedencelevel.不同優(yōu)先級(jí)時(shí)的運(yùn)算順序:Highprecedenceleveloperatorsareevaluatedbeforelowerones.相同優(yōu)先級(jí)時(shí)的運(yùn)算順序:Operatorsofthesameprecedencelevelareevaluatedfromlefttoright(算術(shù)運(yùn)算符為左結(jié)合)算術(shù)表達(dá)式

(ArithmeticExpression)√Example:??48.52.5+6–

–44.52.5+6–2*2=算術(shù)表達(dá)式

(ArithmeticExpression)4.5巧妙使用圓括號(hào)改變運(yùn)算順序AllexpressionsinparenthesesmustbeevaluatedpriortovaluesoutsidebracketsNestedparenthesizedexpressionsmustbeevaluatedfromtheinsideout,withtheinnermostexpressionevaluatedfirstExample:(9–(3+2))*3=??算術(shù)表達(dá)式

(ArithmeticExpression)√【例】計(jì)算并輸出一個(gè)三位整數(shù)的個(gè)位、十位和百位數(shù)字之和Example:153%10

=3153/100=1153-1*100=5353/10=5【例】計(jì)算并輸出一個(gè)三位整數(shù)的個(gè)位、十位和百位數(shù)字之和賦值語(yǔ)句

(AssignmentStatement)Thereare3typesofassignment:Simple——簡(jiǎn)單賦值Multiple——多重賦值Shorthand——簡(jiǎn)寫(xiě)的復(fù)合賦值變量的賦值簡(jiǎn)單賦值(SimpleAssignment):

變量=

表達(dá)式;多重賦值(MultipleAssignment):變量1=

變量2=

表達(dá)式;Syntax:

變量x=變量x

運(yùn)算符op

表達(dá)式;

變量x

運(yùn)算符op=表達(dá)式;

復(fù)合的賦值運(yùn)算符√

(CombinedAssignmentOperators)這種形式看起來(lái)更直觀,且執(zhí)行效率一般也更高一些Example:num=num+5;num1515+52020Example:num+=5;similarto

num=num+5shorthandassignmentoperator復(fù)合的賦值運(yùn)算符

(CombinedAssignmentOperators)OperationExamplesofexpressionDescription+=num+=5;num=num+5;-=num-=5;num=num–5;*=num*=5;num=num*5;/=num/=5;num=num/5;%=num%=5;num=num%5;簡(jiǎn)寫(xiě)的復(fù)合賦值(ShorthandAssignment)復(fù)合的賦值運(yùn)算符√(CombinedAssignmentOperators)賦值運(yùn)算符的優(yōu)先級(jí)和結(jié)合性√賦值運(yùn)算符優(yōu)先級(jí)低于算術(shù)、關(guān)系和邏輯運(yùn)算符賦值表達(dá)式規(guī)定為完成運(yùn)算后左操作數(shù)的值賦值運(yùn)算符結(jié)合性為右結(jié)合。已知inta=3;執(zhí)行a+=a-=a*a后,變量a的值?a+=a-=a*aa+=a-=9a+=-6

a=-123-6-12執(zhí)行a+=a-=a*=a后,變量a的值?a+=a-=a*=aa+=a-=9a+=0

a=03900增一和減一運(yùn)算符

(IncrementandDecrement)*n++,n--,++n,--n++讓參與運(yùn)算的變量加1,--讓參與運(yùn)算的變量減1作為后綴(postfix)運(yùn)算符時(shí),先取n的值,然后加/減1m=n++;m=n;n++;增一和減一運(yùn)算符

(IncrementandDecrement)

n++,n--,++n,--n++讓參與運(yùn)算的變量加1,--讓參與運(yùn)算的變量減1作為后綴(postfix)運(yùn)算符時(shí),先取n的值,然后加/減1作為前綴(prefix)運(yùn)算符時(shí),先加/減1,然后取n的值m=++n;n++;

m=n;Example:j=++i-2i5similartoi=i+1;j=i–2;j??46前綴(Prefix

)增一和減一運(yùn)算符Example:j=i++-2i5similartoj=i–2;i=i+1;后綴(Postfix)增一和減一運(yùn)算符j??36inta=3;printf("%d",-a++);a3similartoprintf("%d",-a);a=a+1;后綴(Postfix)增一和減一運(yùn)算符4良好的程序設(shè)計(jì)風(fēng)格提倡:在一行語(yǔ)句中,一個(gè)變量只能出現(xiàn)一次增1或者減1運(yùn)算過(guò)多的增1和減1運(yùn)算混合,不僅可讀性差,而且因?yàn)榫幾g器實(shí)現(xiàn)的方法不同,導(dǎo)致不同編譯器產(chǎn)生不同的運(yùn)行結(jié)果增一和減一運(yùn)算符

(IncrementandDecrement)

【例】計(jì)算圓的周長(zhǎng)和面積circumference=33.300854area=88.247263如何從鍵盤(pán)讀取半徑值?【例】計(jì)算圓的周長(zhǎng)和面積Inputr:5.3↙circumference=33.300854area=88.247263在程序中直接使用的常數(shù)稱為幻數(shù)(MagicNumber)

使用幻數(shù)存在的問(wèn)題?假如直接使用常數(shù),會(huì)有什么影響?程序的可讀性變差容易發(fā)生書(shū)寫(xiě)錯(cuò)誤當(dāng)常數(shù)需要改變時(shí),要修改所有使用它的代碼,工作量大,還可能有遺漏解決方案:避免使用幻數(shù)把幻數(shù)定義為常量(宏常量、const常量...)宏常量與宏替換

#define

標(biāo)識(shí)符字符串宏常量(Macroconstant)也稱符號(hào)常量一般采用全大寫(xiě)字母表示宏定義不是語(yǔ)句,而是一種編譯預(yù)處理命令【例】計(jì)算圓的周長(zhǎng)和面積宏替換#include<stdio.h>#definePI3.14159;#defineR5.3;main(){

printf("area=%f\n",PI*R*R);

printf("circumference=%f\n",2*PI*R);}相當(dāng)于執(zhí)行#include<stdio.h>main(){

printf("area=%f\n",3.14159;*5.3;*5.3;);

printf("circumference=%f\n",2*3.14159;*5.3;);}語(yǔ)法錯(cuò)誤計(jì)算圓的周長(zhǎng)和面積const常量與宏常量相比的優(yōu)點(diǎn)是什么?const常量有數(shù)據(jù)類型某些集成化調(diào)試工具可以對(duì)const常量進(jìn)行調(diào)試const常量【例】表達(dá)式與賦值中的自動(dòng)類型轉(zhuǎn)換相同類型數(shù)據(jù)的運(yùn)算結(jié)果,還是該類型不同類型數(shù)據(jù)的運(yùn)算結(jié)果,是兩種類型中取值范圍大的那種long

double>double>float>long>in

溫馨提示

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