C程序設(shè)計(jì)課件_第1頁(yè)
C程序設(shè)計(jì)課件_第2頁(yè)
C程序設(shè)計(jì)課件_第3頁(yè)
C程序設(shè)計(jì)課件_第4頁(yè)
C程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩313頁(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)介

C程式設(shè)計(jì)

1.1C語(yǔ)言發(fā)展歷史1.2C語(yǔ)言特點(diǎn)1.3C程式格式和結(jié)構(gòu)特點(diǎn)1.4C程式上機(jī)步驟第一章C語(yǔ)言概述1.1.1程式設(shè)計(jì)語(yǔ)言的發(fā)展機(jī)器語(yǔ)言組合語(yǔ)言高級(jí)語(yǔ)言面向過(guò)程面向?qū)ο驝PU指令系統(tǒng),由0、1序列構(gòu)成的指令碼組成如:10000000加

10010000減用助記符號(hào)描述的指令系統(tǒng)如ADDA,B面向機(jī)器的語(yǔ)言程式設(shè)計(jì)是數(shù)據(jù)被加工的過(guò)程客觀世界可以分類(lèi),對(duì)象是類(lèi)的實(shí)例對(duì)象是數(shù)據(jù)和方法的封裝對(duì)象間通過(guò)發(fā)送和接受消息發(fā)生聯(lián)繫程式設(shè)計(jì)關(guān)鍵是定義類(lèi),並由類(lèi)派生對(duì)象1.1C語(yǔ)言發(fā)展歷史*產(chǎn)生背景*應(yīng)用需求:界於彙編和高級(jí)語(yǔ)言之間的中級(jí)語(yǔ)言*產(chǎn)生過(guò)程*時(shí)間:1972~1973地點(diǎn):美國(guó)貝爾實(shí)驗(yàn)室目的:UNIX操作系統(tǒng)設(shè)計(jì)人:Ken.Thompson和Dennis.M.Ritchie*C標(biāo)準(zhǔn)*標(biāo)準(zhǔn)C:K&R合著《TheCProgrammingLanguage》(BrianW.Kernighan和DennisM.Rithchie)1978年ANSIC:1983年87ANSIC:1987年1990年國(guó)際標(biāo)準(zhǔn)的ANSIC1.1.2C語(yǔ)言發(fā)展過(guò)程

…見(jiàn)框圖<1960:ALGOL語(yǔ)言離開(kāi)硬體遠(yuǎn),不適合編寫(xiě)系統(tǒng)軟體1963:CPL語(yǔ)言(劍橋大學(xué))接近硬體1967:BCPL語(yǔ)言(劍橋大學(xué))簡(jiǎn)化1970:B語(yǔ)言(Bell實(shí)驗(yàn)室)1973:C語(yǔ)言(Bell實(shí)驗(yàn)室)改進(jìn)進(jìn)一步簡(jiǎn)化1978:傳統(tǒng)C語(yǔ)言1990:ANSIC語(yǔ)言規(guī)模龐大K&R著作ISO修訂語(yǔ)言簡(jiǎn)潔、緊湊、靈活運(yùn)算符和數(shù)據(jù)類(lèi)型豐富程式設(shè)計(jì)結(jié)構(gòu)化、模組化生成目標(biāo)代碼品質(zhì)高可移植性好(較之組合語(yǔ)言)可以直接操縱硬體<>>>>1.2C語(yǔ)言特點(diǎn):(由系統(tǒng)定義,不能重作其他定義的字串)1類(lèi)型說(shuō)明符autocharconstdoubleenumexternfloatintlongregistershortsignedsizeofstaticstructunsignedunionvoidvolatile2語(yǔ)句定義符breakcasecontinuedefaultdoelseforgotoifreturnswitchtypedefwhile3預(yù)處理命令字(*)

defineinclude<32個(gè)關(guān)鍵字if()~else~for()~while()~do~while()continuebreakswitchgotoreturn<9種控制語(yǔ)句算術(shù)運(yùn)算符:+-*/%++--關(guān)係運(yùn)算符:<<===>>=!=邏輯運(yùn)算符:!&&||位運(yùn)算符:<<>>~|^&賦值運(yùn)算符:=

及其擴(kuò)展條件運(yùn)算符:?:逗號(hào)運(yùn)算符:,指針運(yùn)算符:*&求位元組數(shù):sizeof強(qiáng)制類(lèi)型轉(zhuǎn)換:(類(lèi)型)分量運(yùn)算符:.->下標(biāo)運(yùn)算符:[]其他:()-(負(fù)號(hào))<34種運(yùn)算符基本類(lèi)型構(gòu)造類(lèi)型指針類(lèi)型空類(lèi)型void定義類(lèi)型typedef數(shù)值類(lèi)型字元類(lèi)型char枚舉類(lèi)型enum整型浮點(diǎn)型單精確度型float雙精度型double短整型short長(zhǎng)整型long整型int數(shù)組結(jié)構(gòu)體struct共用體union<

C數(shù)據(jù)類(lèi)型:例1.1第一個(gè)程式

Hello,World!/*example1.1ThefirstCProgram*/#include<stdio.h>main(){printf(“Hello,World!”);}注釋編譯預(yù)處理函數(shù)語(yǔ)句輸出:Hello,World!1.3C程式格式和結(jié)構(gòu)特點(diǎn)/*example1.1calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/main(){inta,b,sum;a=10;b=24;sum=add(a,b);printf(”sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);}運(yùn)行結(jié)果:sum=34函數(shù)語(yǔ)句預(yù)處理命令注釋例1.2習(xí)慣用小寫(xiě)字母,大小寫(xiě)敏感不使用行號(hào),無(wú)程式行概念可使用空行和空格常用鋸齒形書(shū)寫(xiě)格式main(){

……………….………………

…………..…………..

……………….

………………………….

……………….………………..}main(){inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);}優(yōu)秀程式員的素質(zhì)之一:使用TAB縮進(jìn){}對(duì)齊有足夠的注釋有合適的空行1.3.1C程式格式特點(diǎn)函數(shù)與主函數(shù)函數(shù)是C語(yǔ)言的基本單位程式由一個(gè)或多個(gè)函數(shù)組成必須有且只能有一個(gè)主函數(shù)main()程式執(zhí)行從main開(kāi)始,在main中結(jié)束,其他函數(shù)通過(guò)嵌套調(diào)用得以執(zhí)行。(習(xí)慣上把main()函數(shù)放在最前面)程式語(yǔ)句C程式由語(yǔ)句組成用“;”作為語(yǔ)句終止符注釋/**/為注釋,不能嵌套不產(chǎn)生編譯代碼例:/*Thisisthemain/*ofexample1.1*/*/非法1.3.2結(jié)構(gòu)特點(diǎn)任何函數(shù)(包括主函數(shù)main())都是由函數(shù)說(shuō)明和函數(shù)體兩部分組成。其一般結(jié)構(gòu)如下:

[函數(shù)類(lèi)型]函數(shù)名(函數(shù)參數(shù)表)

{說(shuō)明語(yǔ)句部分;執(zhí)行語(yǔ)句部分;

}函數(shù)體部分函數(shù)說(shuō)明部分(函數(shù)的首部)1.3.3函數(shù)的一般結(jié)構(gòu)

…見(jiàn)後面實(shí)例

函數(shù)說(shuō)明例如,某個(gè)函數(shù):max(),其函數(shù)說(shuō)明各部分如下所示。函數(shù)類(lèi)型函數(shù)名函數(shù)參數(shù)表

↓↓↓intmax(intx,inty)

函數(shù)體在函數(shù)說(shuō)明部分的下麵、大括?。ū仨毰鋵?duì)使用)內(nèi)的部分。函數(shù)體一般由說(shuō)明語(yǔ)句和可執(zhí)行語(yǔ)句兩部分構(gòu)成:說(shuō)明語(yǔ)句部分說(shuō)明語(yǔ)句部分由變數(shù)定義、自定義類(lèi)型定義、自定義函數(shù)說(shuō)明、外部變數(shù)說(shuō)明等組成。可執(zhí)行語(yǔ)句一般由若干條可執(zhí)行語(yǔ)句構(gòu)成。/*主函數(shù)main()*/main(){intnum1,num2;

printf(“Inputthefirstintegernumber:”);scanf(“%d”,&num1);printf(“Inputthesecondintegernumber:”);scanf(“%d”,&num2);printf(“max=%d\n”,max(num1,num2));}

函數(shù)體結(jié)構(gòu)示意圖

…續(xù)函數(shù)體main(){intx,y; /*變數(shù)定義語(yǔ)句:定義2個(gè)整型變數(shù)x、y*/x=3; /*可執(zhí)行的賦值語(yǔ)句:將3賦值給變數(shù)x*/y=6; /*可執(zhí)行的賦值語(yǔ)句:將6賦值給變數(shù)y*/intmax; /*變數(shù)定義語(yǔ)句:出現(xiàn)在可執(zhí)行的賦值語(yǔ)句“x=3;”和“

y=6;”之後,非法!*/max=x>y?x:y;printf(“max=%d\n”,max);}解決辦法很簡(jiǎn)單,請(qǐng)讀者自己思考。說(shuō)明語(yǔ)句部分需要放在可執(zhí)行語(yǔ)句的前面<…續(xù)函數(shù)體一個(gè)程式應(yīng)包括1)對(duì)數(shù)據(jù)的描述和2)對(duì)數(shù)據(jù)處理的描述

1.對(duì)數(shù)據(jù)的描述,即數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是電腦學(xué)科的核心課程之一,有許多專(zhuān)門(mén)著作論述,本課程就不再贅述。

在C語(yǔ)言中,系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),是以數(shù)據(jù)類(lèi)型的形式出現(xiàn)的。

2.對(duì)數(shù)據(jù)處理的描述,即電腦演算法。演算法是為解決一個(gè)問(wèn)題而採(cǎi)取的方法和步驟,是程式的靈魂。為此,著名電腦科學(xué)家沃思(NikiklausWirth)提出一個(gè)公式:

數(shù)據(jù)結(jié)構(gòu)+演算法=程式

實(shí)際上,一個(gè)程序除了數(shù)據(jù)結(jié)構(gòu)和算法外,還必須使用一種計(jì)算機(jī)語(yǔ)言,并采用結(jié)構(gòu)化方法來(lái)表示。

2.1.1程式的組成2.1程式設(shè)計(jì)概述<2.1.2結(jié)構(gòu)化程式設(shè)計(jì)方法1、含義:規(guī)範(fàn)程式設(shè)計(jì)風(fēng)格和程式結(jié)構(gòu)。2、思路:將複雜的問(wèn)題分階段處理3、方法:自頂向下、逐步細(xì)化、模組化設(shè)計(jì)、結(jié)構(gòu)化編碼1、自然語(yǔ)言2、流程圖3、偽代碼4、電腦語(yǔ)言2.1.3演算法的表示方法<S1:輸入n的值.S2:置變數(shù)i的值為2.S3:求解m=n%i;若m=0,轉(zhuǎn)向S6,否則執(zhí)行S4.S4:變數(shù)i的值自加1.S5:判斷i<n是否成立;若為真則轉(zhuǎn)向S3,否則執(zhí)行S6.S6:判斷i<n是否成立;若為真輸出“非素?cái)?shù)”,否則輸出“素?cái)?shù)”.

判斷一個(gè)數(shù)n是否是素?cái)?shù)(n>2)<流程圖N-S流程圖AB順序結(jié)構(gòu)P成立不成立AB選擇結(jié)構(gòu)當(dāng)P成立A迴圈結(jié)構(gòu)<輸入整數(shù)n(n>2),判斷其是否為素?cái)?shù)

輸入n的值

i=2

當(dāng)i<nm=n%im=0YN

結(jié)束迴圈i=i+1

Yi<nNn是非素?cái)?shù)n是素?cái)?shù)

<列印x的絕對(duì)值(偽代碼)IfxispositivethenPrintxElsePrint-x<列印x的絕對(duì)值(C根源程式段)if(x>0)printf("|x|=%d",x);elseprintf("|x|=%d",-x);電腦中數(shù)的表示及進(jìn)制轉(zhuǎn)換數(shù)碼、基與權(quán)數(shù)碼:表示數(shù)的符號(hào)基:數(shù)碼的個(gè)數(shù)(10進(jìn)制:10)權(quán):每一位所具有的值數(shù)制不同的基和權(quán)構(gòu)成不同的數(shù)制

2進(jìn)制、8進(jìn)制、10進(jìn)制、16進(jìn)制、……2.2數(shù)制之間的轉(zhuǎn)換2.2.1數(shù)制的基本概念數(shù)制基權(quán)表示數(shù)碼特點(diǎn)10o,101,102,…十進(jìn)位數(shù)0~910逢十進(jìn)一二進(jìn)位數(shù)0~122o,21,22,…逢二進(jìn)一八進(jìn)制數(shù)0~788o,81,82,…逢八進(jìn)一十六進(jìn)制數(shù)0~9,A~F,a~f1616o,161,162,…逢十六進(jìn)一十進(jìn)位:4956=4

103+9

102+5

101+6

10o二進(jìn)位:1011=1

23+0

22+1

21+1

2o十六進(jìn)制:81AE=8

163+1

162+10

161+14

16o八進(jìn)制:4275=4

83+2

82+7

81+5

8o二進(jìn)位、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)位

方法:按權(quán)相加2.2.2各種進(jìn)制之間的轉(zhuǎn)換十進(jìn)位轉(zhuǎn)換成二進(jìn)位、八進(jìn)制、十六進(jìn)制方法:連續(xù)除以基,從低到高記錄餘數(shù),直至商為0例把十進(jìn)位數(shù)459轉(zhuǎn)換成十六進(jìn)制數(shù)4591628161160(459)10=(1CB)161CB餘11餘12餘1…續(xù):各種進(jìn)制之間的轉(zhuǎn)換二進(jìn)位轉(zhuǎn)換成八進(jìn)制:從右向左,每3位一組(不足3位左補(bǔ)0),轉(zhuǎn)換成八進(jìn)制八進(jìn)制轉(zhuǎn)換成二進(jìn)位:用3位二進(jìn)位數(shù)代替每一位八進(jìn)制數(shù)例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7二進(jìn)位與八進(jìn)制之間的轉(zhuǎn)換…續(xù):各種進(jìn)制之間的轉(zhuǎn)換二進(jìn)位轉(zhuǎn)換成十六進(jìn)制:從右向左,每4位一組(不足4位左補(bǔ)0),轉(zhuǎn)換成十六進(jìn)制十六進(jìn)制轉(zhuǎn)換成二進(jìn)位:用4位二進(jìn)位數(shù)代替每一位十六進(jìn)制數(shù)例(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二進(jìn)位與十六進(jìn)制之間的轉(zhuǎn)換

…續(xù):各種進(jìn)制之間的轉(zhuǎn)換記憶體以位元組為單元組成每個(gè)位元組有一個(gè)地址一個(gè)位元組一般由8個(gè)二進(jìn)位位組成每個(gè)二進(jìn)位的值是0或101234567012345678910……...76432512.2.3位元組和位2.2.4原碼、反碼與補(bǔ)數(shù)原碼:最高位為符號(hào)位,其餘各位為數(shù)值本身的絕對(duì)值反碼:正數(shù):反碼與原碼相同負(fù)數(shù):符號(hào)位為1,其餘位對(duì)原碼取反補(bǔ)數(shù):正數(shù):原碼、反碼、補(bǔ)數(shù)相同負(fù)數(shù):最高位為1,其餘位為原碼取反,再對(duì)整個(gè)數(shù)加1正數(shù)的原碼、反碼、和補(bǔ)數(shù)是相同的;負(fù)數(shù)的原碼:符號(hào)位為1,其餘不變;(一個(gè)實(shí)例)反碼:取反;補(bǔ)數(shù):取反,再加1;負(fù)數(shù)補(bǔ)數(shù)轉(zhuǎn)換成十進(jìn)位數(shù):最高位是符號(hào)位(不動(dòng)),取反加1<數(shù)據(jù)類(lèi)型總表C數(shù)據(jù)類(lèi)型基本類(lèi)型構(gòu)造類(lèi)型指針類(lèi)型空類(lèi)型void定義類(lèi)型typedef字元類(lèi)型char枚舉類(lèi)型enum整型實(shí)型單精確度型float雙精度型double數(shù)組結(jié)構(gòu)體struct共用體union短整型short長(zhǎng)整型long整型int數(shù)據(jù)類(lèi)型決定:1.數(shù)據(jù)占記憶體位元組數(shù)2.數(shù)據(jù)取值範(fàn)圍3.其上可進(jìn)行的操作2.3

數(shù)據(jù)類(lèi)型類(lèi)型符號(hào)關(guān)鍵字?jǐn)?shù)的表示範(fàn)圍所占位數(shù)整型字元型實(shí)型有無(wú)(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

longunsigned

short160~65535有char8-128~127無(wú)unsignedchar80~255說(shuō)明:數(shù)據(jù)類(lèi)型所占位元組數(shù)隨機(jī)器硬體不同而不同,上表以IBMPC機(jī)為例:請(qǐng)注意int和unsignedint2.3.1基本數(shù)據(jù)類(lèi)型有float323.4e-38~3.4e38有double641.7e-308~1.7e308<2.3.2構(gòu)造型,指針型…例子2.4常量和變數(shù)2.4.1識(shí)別字定義:用來(lái)標(biāo)識(shí)變數(shù)、常量、函數(shù)等的字元序列組成:只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線大小寫(xiě)敏感不能使用關(guān)鍵字長(zhǎng)度:最長(zhǎng)32個(gè)字元命名原則:見(jiàn)名知意不宜混淆如l與I,o與0例:判斷下列識(shí)別字號(hào)合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b一般用大寫(xiě)字母是宏定義預(yù)處理命令,不是C語(yǔ)句直接常量:整型常量請(qǐng)點(diǎn)擊:實(shí)型常量請(qǐng)點(diǎn)擊:字元常量請(qǐng)點(diǎn)擊:字串常量請(qǐng)點(diǎn)擊:如#definePRICE30定義:程式運(yùn)行時(shí)其值不能改變的量(即常數(shù))分類(lèi):符號(hà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=3002.4.2常量<三種形式:十進(jìn)位整數(shù):由數(shù)字0~9和正負(fù)號(hào)表示.如123,-456,0八進(jìn)制整數(shù):由數(shù)字0開(kāi)頭,後跟數(shù)字0~7表示.如0123,011十六進(jìn)制整數(shù):由0x開(kāi)頭,後跟0~9,a~f,A~F表示.如0x123,0Xff例12與12L例30000為int型

65536為longint型整型常量的類(lèi)型根據(jù)其值所在範(fàn)圍確定其數(shù)據(jù)類(lèi)型在整常量後加字母l或L,認(rèn)為它是longint型常量問(wèn)題:0123=()100x123=()100Xff=()1083291255問(wèn)題:0123=()100x123=()100Xff=()10整型常量(整常數(shù))<表示形式:十進(jìn)位數(shù)形式:(必須有小數(shù)點(diǎn))如0.123,.123,123.0,0.0,123.指數(shù)形式:(e或E之前必須有數(shù)字;指數(shù)必須為整數(shù))如12.3e3,123E2,1.23e4,1e-5,1.2E-3.5實(shí)型常量的類(lèi)型默認(rèn)double型在實(shí)型常量後加字母f或F,認(rèn)為它是float型實(shí)型常量(實(shí)數(shù)或浮點(diǎn)數(shù))

<aaa42定義:用單引號(hào)括起來(lái)的單個(gè)普通字元或轉(zhuǎn)義字元.

字元常量的值:該字元的ASCII碼值<轉(zhuǎn)義字元及其含義:轉(zhuǎn)義字元含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉(zhuǎn)義字元含義換行垂直製錶回車(chē)響鈴單引號(hào)3位8進(jìn)制數(shù)代表的字元水準(zhǔn)製錶退格換頁(yè)反斜線雙引號(hào)2位16進(jìn)制數(shù)代表的字元如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’

’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------(

)例:‘A’-------’\101’-------’\x41’--------65如‘A’——65,‘a(chǎn)’——97,

‘0’——48,‘\n’——10如‘a(chǎn)’‘A’‘?’‘\n’‘\101’轉(zhuǎn)義字元:反斜線後面跟一個(gè)字元或一個(gè)代碼值表示例轉(zhuǎn)義字元舉例(ch2_001.c,ch2_004.c)main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}運(yùn)行結(jié)果:(螢?zāi)伙@示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}運(yùn)行結(jié)果:螢?zāi)伙@示:=印表機(jī)輸出:¥字元常量

<…習(xí)題3.6上機(jī)字元常量與字串常量不同定義:用雙引號(hào)(“”)括起來(lái)的字元序列存儲(chǔ):每個(gè)字串尾自動(dòng)加一個(gè)‘\0’作為字串結(jié)束標(biāo)誌hello\0例字串“hello”在內(nèi)存中a

a\0例‘a(chǎn)’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;字串常量

編譯程序根據(jù)變數(shù)定義為其分配指定位元組的記憶體單元…...地址inta=1,b=-3,c;abc2位元組2位元組2位元組地址地址…...記憶體1-3

亂數(shù)概念:其值可以改變的量變數(shù)名與變數(shù)值變數(shù)定義的一般格式:數(shù)據(jù)類(lèi)型變數(shù)1[,變數(shù)2,…,變數(shù)n];變數(shù)初始化:定義時(shí)賦初值例:inta,b,c;floatdata;決定分配位元組數(shù)和數(shù)的表示範(fàn)圍合法識(shí)別字例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;intx=y=z=1;(X)變數(shù)的使用:先定義,後使用例1intstudent;stadent=19;//Undefinedsymbol‘stadent’infunctionmain

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

變數(shù)定義位置:一般放在函數(shù)開(kāi)頭main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}變數(shù)定義可執(zhí)行語(yǔ)句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}2.4.3變數(shù)

占位元組數(shù)隨機(jī)器不同而不同,一般占一個(gè)機(jī)器字short≤int≤long可用sizeof(類(lèi)型識(shí)別字)測(cè)量實(shí)型變數(shù)float:占4位元組,提供7位有效數(shù)字double:占8位元組,提供15~16位有效數(shù)字字元型變數(shù)字元變數(shù)存放字元ASCII碼char與int數(shù)據(jù)間可進(jìn)行算術(shù)運(yùn)算例1:floata;a=111111.111;/*a=111111.1*/例2:doubleb;b=111111.111;/*b=111111.111*/例a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/沒(méi)有字串變數(shù),用字符數(shù)組存放(第7章)整型變數(shù)

/*ch2_003.c*/#definePRICE12.5main(){intnum=3;floattotal;charch1,ch2=‘D’;total=num*PRICE;ch1=ch2-‘A’+‘a(chǎn)’;

printf(“total=%f,ch1=%c\n”,total,ch1);}宏定義變數(shù)定義輸出結(jié)果運(yùn)行結(jié)果:total=37.500000,ch1=d例子<2.5.1隱式轉(zhuǎn)換什麼情況下發(fā)生運(yùn)算轉(zhuǎn)換------不同類(lèi)型數(shù)據(jù)混合運(yùn)算時(shí)賦值轉(zhuǎn)換------把一個(gè)值賦給與其類(lèi)型不同的變數(shù)時(shí)輸出轉(zhuǎn)換------輸出時(shí)轉(zhuǎn)換成指定的輸出格式函數(shù)調(diào)用轉(zhuǎn)換------實(shí)參與形參類(lèi)型不一致時(shí)轉(zhuǎn)換運(yùn)算轉(zhuǎn)換規(guī)則:不同類(lèi)型數(shù)據(jù)運(yùn)算時(shí)先自動(dòng)轉(zhuǎn)換成同一類(lèi)型2.5不同類(lèi)型數(shù)據(jù)間的轉(zhuǎn)換doublefloatlongunsignedintchar,short低高說(shuō)明:必定的轉(zhuǎn)換運(yùn)算對(duì)象類(lèi)型不同時(shí)轉(zhuǎn)換

charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例2inti;floatf;doubled;longl;例1intintdoubledoubledoubledoubledoubledouble一般形式:(類(lèi)型名)(運(yùn)算式)例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6

說(shuō)明:強(qiáng)制轉(zhuǎn)換得到所需類(lèi)型的中間變數(shù),原變數(shù)類(lèi)型不變

例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果:x=3.600000,i=3較高類(lèi)型向較低類(lèi)型轉(zhuǎn)換時(shí)可能發(fā)生精度損失問(wèn)題2.5.2顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)<C運(yùn)算符算術(shù)運(yùn)算符:(+-*/%++--)關(guān)係運(yùn)算符:(<<===>>=!=)邏輯運(yùn)算符:((!&&||)位運(yùn)算符:(<<>>~|^&)賦值運(yùn)算符:(=及其擴(kuò)展)條件運(yùn)算符:(?:)逗號(hào)運(yùn)算符:(,)指針運(yùn)算符:(*&)求位元組數(shù):(sizeof)強(qiáng)制類(lèi)型轉(zhuǎn)換:(類(lèi)型)分量運(yùn)算符:(.->)下標(biāo)運(yùn)算符:([])其他:(()-)2.6運(yùn)算符和運(yùn)算式C表達(dá)式算術(shù)運(yùn)算式關(guān)係運(yùn)算式邏輯運(yùn)算式

賦值運(yùn)算式條件運(yùn)算式逗號(hào)運(yùn)算式

用運(yùn)算符號(hào)將運(yùn)算對(duì)象連接起來(lái)形成的運(yùn)算式稱(chēng)為運(yùn)算式運(yùn)算符功能與運(yùn)算量關(guān)係要求運(yùn)算量個(gè)數(shù)要求運(yùn)算量類(lèi)型運(yùn)算符優(yōu)先順序別結(jié)合方向結(jié)果的類(lèi)型2.6.1學(xué)習(xí)運(yùn)算符應(yīng)注意基本算術(shù)運(yùn)算符:+-*/%結(jié)合方向:從左向右優(yōu)先順序:----->*/%----->+-(2)(3)(4) 說(shuō)明:“-”可為單目運(yùn)算符時(shí),右結(jié)合性兩整數(shù)相除,結(jié)果為整數(shù)%要求兩側(cè)均為整型數(shù)據(jù)例5/2=-5/2.0=例5%2=-5%2=1%10=5%1=5.5%22.6.2算術(shù)運(yùn)算符和運(yùn)算式2-2.51-110(

)作用:使變數(shù)值加1或減1種類(lèi):前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)後置i++,i--(先使用i值,再執(zhí)行i+1或i-1)例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=42.6.3自增、自減運(yùn)算符++--

作用:使變數(shù)值加1或減1種類(lèi):前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)後置i++,i--(先使用i值,再執(zhí)行i+1或i-1)說(shuō)明:++--不能用於常量和運(yùn)算式,如5++,(a+b)++++--結(jié)合方向:自右向左對(duì)整型數(shù)使用優(yōu)先順序:-++-------->*/%----->+-(2)(3)(4)例-i++

-(i++)i=3;printf(“%d”,-i++);//-3例j+++k;(j++)+k;例-i++i=3;printf(“%d”,-i++);

續(xù):自增、自減運(yùn)算符++--

簡(jiǎn)單賦值運(yùn)算符符號(hào):=格式:變數(shù)識(shí)別字=運(yùn)算式作用:將一個(gè)數(shù)據(jù)(常量或運(yùn)算式)賦給一個(gè)變數(shù)複合賦值運(yùn)算符種類(lèi):+=-=*=/=%=《=》=&=^=|=含義:a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例a=3;d=func();c=d+2;2.6.4賦值運(yùn)算符和運(yùn)算式結(jié)合方向:自右向左優(yōu)先順序:14左側(cè)必須是變數(shù),不能是常量或運(yùn)算式賦值運(yùn)算式的值與變數(shù)值相等,且可嵌套賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊運(yùn)算式值自動(dòng)轉(zhuǎn)換成其左邊變數(shù)的類(lèi)型例3=x-2*y;a+b=3;例

floatf;inti;i=10;f=i;則

f=10.0例inti;i=2.56;//結(jié)果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//運(yùn)算式值為5,a,b,c值為5//b=5;a=5//運(yùn)算式值11,c=6,a=11//運(yùn)算式值10,a=10,b=4,c=6//運(yùn)算式值5,a=5,b=10,c=2簡(jiǎn)單賦值說(shuō)明(1):

結(jié)合方向:自右向左優(yōu)先順序:12

左側(cè)必須是變數(shù),不能是常量或運(yùn)算式賦值運(yùn)算式的值與變數(shù)值相等,且可嵌套賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊運(yùn)算式值自動(dòng)轉(zhuǎn)換成其左邊變數(shù)的類(lèi)型例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=-264等價(jià)於a=a+(a=a-(a*a))//a=0等價(jià)於a=a+(a=a*(a=a-(a=a*3)))複合賦值說(shuō)明:

形式:運(yùn)算式1,運(yùn)算式2,……運(yùn)算式n結(jié)合性:從左向右優(yōu)先順序:15逗號(hào)運(yùn)算式的值:等於運(yùn)算式n的值用途:常用於迴圈for語(yǔ)句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,運(yùn)算式值60//a=15,運(yùn)算式值20//賦值運(yùn)算式,運(yùn)算式值18,x=18//逗號(hào)運(yùn)算式,運(yùn)算式值18,x=3//1,2,3//3,2,32.6.5逗號(hào)運(yùn)算符和運(yùn)算式例:/*ch2_6.c*/#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}運(yùn)行結(jié)果:x=3關(guān)係運(yùn)算符種類(lèi):<<===>=>!=結(jié)合方向:自左向右優(yōu)先順序別:<<=>>===!=優(yōu)先順序6(高)優(yōu)先順序7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)關(guān)係運(yùn)算式的值:是邏輯值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//運(yùn)算式值1//運(yùn)算式值1//運(yùn)算式值0//d=1//f=02.6.6關(guān)係運(yùn)算符和運(yùn)算式例若a=0;b=0.5;x=0.3;

則a<=x<=b的值為0例5>2>7>8在C中是允許的,值為0例inti=1,j=7,a;a=i+(j%4!=0);

則a=2例‘a(chǎn)’>0結(jié)果為‘A’>100結(jié)果為10關(guān)係運(yùn)算注意(1)例注意區(qū)分“=”與“==”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);例應(yīng)避免對(duì)實(shí)數(shù)作相等或不等的判斷如1.0/3.0*3.0==1.0結(jié)果為可改寫(xiě)為:fabs(1.0/3.0*3.0-1.0)<1e-60關(guān)係運(yùn)算注意(2)ab!a!ba&&ba||b真假真假假假真真邏輯運(yùn)算符種類(lèi):!&&||邏輯運(yùn)算真值表C語(yǔ)言中,運(yùn)算量:0表示“假”,非0表示“真”,

運(yùn)算結(jié)果:0表示“假”,

1表示“真”,真假假假假假真真假假真真真假真真2.6.7邏輯運(yùn)算符和運(yùn)算式!(2)&&(11)||(12)高低例a<=x&&x<=ba>b&&x>ya==b||x==y!a||a>b優(yōu)先順序:結(jié)合方向:!:從右向左&&:從左向右||:從左向右//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)…續(xù)邏輯運(yùn)算符和運(yùn)算式(2)!(2)&&(11)||(12)高低優(yōu)先順序:結(jié)合方向:!:從右向左&&:從左向右||:從左向右例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’值為1值為0值為1值為1值為1值為1//(5>3)&&2||(8<(4-(!0)))值為1…續(xù)邏輯運(yùn)算符和運(yùn)算式(3)!(2)&&(11)||(12)高低優(yōu)先順序:結(jié)合方向:!:從右向左&&:從左向右||:從左向右短路特性:邏輯運(yùn)算式求解時(shí),並非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出運(yùn)算式的解時(shí),才執(zhí)行該運(yùn)算符<例a&&b&&c//只在a為真時(shí),才判別b的值;只在a、b都為真時(shí),才判別c的值例a||b||c//只在a為假時(shí),才判別b的值;只在a、b都為假時(shí),才判別c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//結(jié)果m=0,n=1…續(xù)邏輯運(yùn)算符和運(yùn)算式(4)3.1C語(yǔ)言的語(yǔ)句C語(yǔ)句:以“;”作分隔符號(hào),編譯後產(chǎn)生機(jī)器指令.C語(yǔ)句分類(lèi)運(yùn)算式語(yǔ)句:運(yùn)算式加分號(hào)構(gòu)成。空語(yǔ)句:;程式控制語(yǔ)句(9種):if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支迴圈輔助控制如total=total+limit;a=3;func();printf(“Hello,world!\n”);

:用{…}括起來(lái)的一組語(yǔ)句一般形式:

{[數(shù)據(jù)說(shuō)明部分;]

執(zhí)行語(yǔ)句部分;

}說(shuō)明:“}”後不加分號(hào)語(yǔ)法上和單一語(yǔ)句相同複合語(yǔ)句可嵌套複合語(yǔ)句3.2數(shù)據(jù)輸出格式:putchar(c)參數(shù):c為字元常量、變數(shù)或運(yùn)算式功能:把字元c輸出到顯示器上返值:正常,為顯示的代碼值;出錯(cuò),為EOF(-1)C語(yǔ)言無(wú)I/O語(yǔ)句,I/O操作由函數(shù)實(shí)現(xiàn)

3.2.1字元輸出函數(shù)

#include<stdio.h>格式:printf(“格式控制串”,輸出表)功能:按指定格式向顯示器輸出數(shù)據(jù)返值:正常,返回輸出位元組數(shù);出錯(cuò),返回EOF(-1)1)輸出表:要輸出的數(shù)據(jù)(可以沒(méi)有,多個(gè)時(shí)以“,”分隔)2)格式控制串:包含兩種資訊

格式說(shuō)明:

%[修飾符]格式字元

,用於指定輸出格式普通字元或轉(zhuǎn)義序列:原樣輸出3.2.2格式輸出函數(shù)d,ix,Xoucse,Efg%%十六進(jìn)制無(wú)符號(hào)整數(shù)不帶符號(hào)十進(jìn)位整數(shù)十進(jìn)位整數(shù)指數(shù)形式浮點(diǎn)小數(shù)單一字元字串八進(jìn)制無(wú)符號(hào)整數(shù)小數(shù)形式浮點(diǎn)小數(shù)e和f中較短一種百分號(hào)本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);567ff101567AABC5.677890e+02567.789000567.789%說(shuō)明 格式字元一般要用小寫(xiě)格式字元與輸出項(xiàng)個(gè)數(shù)應(yīng)相同,按先後順序一一對(duì)應(yīng)輸出轉(zhuǎn)換:格式字元與輸出項(xiàng)類(lèi)型不一致,自動(dòng)按指定格式輸出…續(xù)格式字串.n對(duì)實(shí)數(shù),指定小數(shù)點(diǎn)後位數(shù)(四捨五入)修飾符功能m輸出數(shù)據(jù)域?qū)?數(shù)據(jù)長(zhǎng)度<m,左補(bǔ)空格;否則按實(shí)際輸出輸出數(shù)據(jù)在域內(nèi)左對(duì)齊(缺省右對(duì)齊)-指定在有符號(hào)數(shù)的正數(shù)前顯示正號(hào)(+)+輸出數(shù)值時(shí)指定左面不使用的空位置自動(dòng)填00在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)0,0x#在d,o,x,u前,指定輸出精度為long型在e,f,g前,指定輸出精度為double型l附加格式說(shuō)明符(修飾符)對(duì)字串,指定實(shí)際輸出位數(shù)…續(xù)格式字串例inta=1234;floatf=123.456;printf(“%08d\n”,a);printf(“%010.2f\n”,f);printf(“%+08d\n”,a);printf(“%+010.2f\n”,f);0、+例inta=123;printf(“%o,%#o,%X,%#X\n”,a,a,a,a);

例#例longa=65536;printf(“%d,%8ld\n”,a,a);

例l00000000000000010000000000000000//00001234//0000123.46//+0001234//+000123.56//173,0173,7B,0X7B//0,65536例3.3數(shù)據(jù)輸入格式:getchar()功能:從鍵盤(pán)讀一字元返值:正常,返回讀取的代碼值;出錯(cuò),返回EOF(-1)3.3.1字元輸入函數(shù)

例/*ch3_4.c*/#include<stdio.h>main(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);}運(yùn)行結(jié)果:Enteracharacter:A

A--->hex41格式:scanf(“格式控制串”,地址表)功能:按指定格式從鍵盤(pán)讀入數(shù)據(jù),存入地址表指定的存儲(chǔ)單元中,並按回車(chē)鍵結(jié)束返值:正常,返回輸入數(shù)據(jù)個(gè)數(shù)地址表:變數(shù)的地址,常用取地址運(yùn)算符&格式字元:d,i,o,x,u,c,s,f,e例scanf(“%d”,&a);

輸入:10

則a=10例scanf(“%x”,&a);

輸入:11

則a=173.3.2格式輸入函數(shù)附加格式說(shuō)明符(修飾符)l修飾符功能h域?qū)?用於d,o,x前,指定輸入為short型整數(shù)用於d,o,x前,指定輸入為long型整數(shù)用於e,f前,指定輸入為double型實(shí)數(shù)指定輸入數(shù)據(jù)寬度,遇空格或不可轉(zhuǎn)換字元?jiǎng)t結(jié)束抑制符,指定輸入項(xiàng)讀入後不賦給變數(shù)例scanf(“%4d%2d%2d”,&yy,&mm,&dd);

輸入19991015

則1999

yy,10

mm,15

dd修飾符功能…續(xù)格式輸入函數(shù)一般以空格、TAB或回車(chē)鍵作為分隔符號(hào)其他字元做分隔符號(hào):格式串中兩個(gè)格式符間字元例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);

輸入123123123

輸出a=123,b=83,c=291例scanf(“%d:%d:%d”,&h,&m,&s);

輸入12:30:45

則12

h,30

m,45

s例scanf(“%d,%d”,&a,&b)

輸入3,4

則3

a,4

b例scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);

輸入a=12,b=24,c=36

輸入分隔符號(hào)的指定

用“%c”格式符時(shí),空格和轉(zhuǎn)義字元作為有效字元輸入如scanf(“%c%c%c”,&c1,&c2,&c3);

若輸入abc

則a

c1,

c2,b

c3

輸入數(shù)據(jù)時(shí),遇以下情況認(rèn)為該數(shù)據(jù)結(jié)束:遇空格、TAB、或回車(chē)遇寬度結(jié)束遇非法輸入如scanf(“%d%c%f”,&a,&b,&c);

若輸入1234a123o.26

則1234

a,‘a(chǎn)’

b,123

c說(shuō)明:賦值抑制字元*

表示本輸入項(xiàng)對(duì)應(yīng)的數(shù)據(jù)讀入後,不賦給相應(yīng)的變數(shù)(該變數(shù)由下一個(gè)格式指示符輸入)。例如,scanf("%2d%*2d%3d",&num1,&num2);printf("num1=%d,num2=%d\n",num1,num2);

假設(shè)輸入“123456789”,則系統(tǒng)將讀取“12”並賦值給num1;讀取“34”、但捨棄掉(“*”的作用);讀取“567”並賦值給num2。所以,printf()函數(shù)的輸出結(jié)果為:num1=12,num2=567。進(jìn)一步介紹:

數(shù)據(jù)輸入操作

1.如果相鄰2個(gè)格式指示符之間,不指定數(shù)據(jù)分隔符號(hào)(如逗號(hào)、冒號(hào)等),則相應(yīng)的2個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)空格分開(kāi),或者用Tab鍵分開(kāi),或者輸入1個(gè)數(shù)據(jù)後,按回車(chē),然後再輸入下1個(gè)數(shù)據(jù)。例如,scanf("%d%d",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為:12□36↙

或者:12↙36↙

注:使用“↙”符號(hào)表示按回車(chē)鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。2.“格式字串”中出現(xiàn)的普通字元(包括轉(zhuǎn)義字元形式的字元),務(wù)必原樣輸入。例如,scanf("%d,%d",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:12,36↙

另外,scanf()函數(shù)中、格式字串內(nèi)的轉(zhuǎn)義字元(如\n),系統(tǒng)並不把它當(dāng)轉(zhuǎn)義字元來(lái)解釋?zhuān)瑥亩a(chǎn)生一個(gè)控制操作,而是將其視為普通字元,所以也要原樣輸入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:

num1=12,num2=36\n↙

提高人機(jī)交互性建議:為改善人機(jī)交互性,同時(shí)簡(jiǎn)化輸入操作,在設(shè)計(jì)輸入操作時(shí),一般先用printf()函數(shù)輸出一個(gè)提示資訊,再用scanf()函數(shù)進(jìn)行數(shù)據(jù)輸入。例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:

printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);3.輸入數(shù)據(jù)時(shí),遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束:(1)遇到空格,或者回車(chē)鍵,或者Tab鍵。(2)遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。(3)遇到非法輸入。例如,在輸入數(shù)值數(shù)據(jù)時(shí),遇到字母等非數(shù)值符號(hào)(數(shù)值符號(hào)僅由數(shù)字字元0-9、小數(shù)點(diǎn)和正負(fù)號(hào)構(gòu)成)。4.使用格式說(shuō)明符“%c”輸入單個(gè)字元時(shí),空格和轉(zhuǎn)義字元均作為有效字元被輸入。例如,scanf("%c%c%c",&ch1,&ch2,&ch3);printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);

假設(shè)輸入:A□B□C↙,則系統(tǒng)將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。

[Return]/*ch3_12.c*/#include<math.h>#include<stdio.h>main(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);printf("area=%7.2f\n",area);}輸入:3,4,6

輸出:a=3.00,b=4.00,c=6.00s=6.50area=5.33檔包含預(yù)處理命令變數(shù)定義輸入數(shù)據(jù)輸出數(shù)據(jù)例輸入三角形邊長(zhǎng),求面積PAB真假PBA真假kA1A2AiAnk=k2k=k1k=knk=ki......二分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)4.1選擇結(jié)構(gòu)簡(jiǎn)介形式一:格式:if(expression)statement執(zhí)行過(guò)程:exprstatement非0=0例:if(x>y)printf(“%d”,x);exprstatement1statement2非0=0形式二:格式:if(expression)statement1elsestatement2執(zhí)行過(guò)程:例:if(x>y)max=x;elsemax=y;4.2if語(yǔ)句形式三:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0執(zhí)行過(guò)程:

例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;

如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);if(x)

if(x!=0)if(!x)

if(x==0)if後面的運(yùn)算式類(lèi)型任意,必須用()語(yǔ)句可以是複合語(yǔ)句else子句(可選)是if語(yǔ)句的一部分,必須與if配對(duì)使用,不能單獨(dú)使用。當(dāng)if和else下麵的語(yǔ)句組,僅由一條語(yǔ)句構(gòu)成時(shí),也可不使用複合語(yǔ)句形式(即去掉花括弧)。例考慮下麵程式的輸出結(jié)果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!對(duì)If語(yǔ)句的說(shuō)明一般形式:if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4內(nèi)嵌if內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement2內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement3

內(nèi)嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4內(nèi)嵌ifif語(yǔ)句嵌套…續(xù)If語(yǔ)句說(shuō)明/*ch4_4.c*/#include<stdio.h>main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");}運(yùn)行:Enterintegerx,y:12,23

X<YEnterintegerx,y:12,6

X>YEnterintegerx,y:12,12

X==Y例輸入兩數(shù)並判斷其大小關(guān)係…續(xù)If語(yǔ)句的說(shuō)明缺省{}時(shí),else總是和它上面離它最近的未配對(duì)的if配對(duì)if(……)if(……)if(……)else…...else…...else…...if~else配對(duì)原則…續(xù)If語(yǔ)句的說(shuō)明例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);實(shí)現(xiàn)if~else正確配對(duì)方法:加{}…續(xù)If語(yǔ)句的說(shuō)明一般形式switch(運(yùn)算式){caseE1:

語(yǔ)句組1;break;caseE2:

語(yǔ)句組2;break;…….caseEn:

語(yǔ)句組n;break;[default:

語(yǔ)句組;

break}執(zhí)行過(guò)程switch運(yùn)算式語(yǔ)句組1語(yǔ)句組2語(yǔ)句組n語(yǔ)句組…...E1E2Endefaultcase4.3switch語(yǔ)句(開(kāi)關(guān)分支語(yǔ)句)(1)當(dāng)switch後面“運(yùn)算式”的值,與某個(gè)case後面的“常量運(yùn)算式”的值相同時(shí),就執(zhí)行該case後面的語(yǔ)句(組);當(dāng)執(zhí)行到break語(yǔ)句時(shí),跳出switch語(yǔ)句,轉(zhuǎn)向執(zhí)行switch語(yǔ)句的下一條。(2)如果沒(méi)有任何一個(gè)case後面的“常量運(yùn)算式”的值,與“運(yùn)算式”的值匹配,則執(zhí)行default後面的語(yǔ)句(組)。然後,再執(zhí)行switch語(yǔ)句的下一條。說(shuō)明(1)switch後面的“運(yùn)算式”,可以是int、char和枚舉型中的一種。(2)每個(gè)case後面“常量運(yùn)算式”的值,必須各不相同,否則會(huì)出現(xiàn)相互矛盾的現(xiàn)象(即對(duì)運(yùn)算式的同一值,有兩種或兩種以上的執(zhí)行方案)。(3)case後面的常量運(yùn)算式僅起語(yǔ)句標(biāo)號(hào)作用,並不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開(kāi)始執(zhí)行,不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上break語(yǔ)句,以便結(jié)束switch語(yǔ)句?!m(xù)執(zhí)行過(guò)程(4)case後可包含多個(gè)可執(zhí)行語(yǔ)句,且不必加{}(5)switch可嵌套(6)多個(gè)case可共用一組執(zhí)行語(yǔ)句如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);

溫馨提示

  • 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)論