C語言程序設(shè)計(jì)課件_第1頁
C語言程序設(shè)計(jì)課件_第2頁
C語言程序設(shè)計(jì)課件_第3頁
C語言程序設(shè)計(jì)課件_第4頁
C語言程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩277頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語言發(fā)展歷史C語言特點(diǎn)C程式格式和結(jié)構(gòu)特點(diǎn)C程式上機(jī)步驟C語言概述

程式設(shè)計(jì)語言的發(fā)展機(jī)器語言組合語言高級(jí)語言面向過程面向?qū)ο驝PU指令系統(tǒng),由0、1序列構(gòu)成的指令碼組成如:10000000加

10010000減用助記符號(hào)描述的指令系統(tǒng)如ADDA,B面向機(jī)器的語言程式設(shè)計(jì)是數(shù)據(jù)被加工的過程客觀世界可以分類,對(duì)象是類的實(shí)例對(duì)象是數(shù)據(jù)和方法的封裝對(duì)象間通過發(fā)送和接受消息發(fā)生聯(lián)繫程式設(shè)計(jì)關(guān)鍵是定義類,並由類派生對(duì)象馮.諾依曼結(jié)構(gòu):電腦運(yùn)算器控制器記憶體主機(jī):I/O設(shè)備:鍵盤、顯示器等中央處理器CPU>>1.1C語言發(fā)展歷史5254565860626466687072747678808284868890929496AdaALGOL60ALGOL68PascalModula-2CPLBCPLBCC++JavaLISPPROLOGCOBOLFORTRAN77FORTRANPL/1Simula67Smalltalk80BASICANSI-BASICQBASICVBFORTRAN90<>首頁

C語言教學(xué)

幻燈片版產(chǎn)生背景產(chǎn)生過程時(shí)間:1972~1973地點(diǎn):美國(guó)貝爾實(shí)驗(yàn)室目的:UNIX操作系統(tǒng)設(shè)計(jì)人:Ken.Thompson和Dennis.M.RitchieC標(biāo)準(zhǔn)標(biāo)準(zhǔn)C:K&R合著《TheCProgrammingLanguage》ANSIC:1983年87ANSIC:1987年1990年國(guó)際標(biāo)準(zhǔn)的ANSIC<>C語言發(fā)展過程

語言簡(jiǎn)潔、緊湊、靈活運(yùn)算符和數(shù)據(jù)類型豐富程式設(shè)計(jì)結(jié)構(gòu)化、模組化生成目標(biāo)代碼品質(zhì)高可移植性好<>>>>>>中級(jí)語言>1.2C語言特點(diǎn):(由系統(tǒng)定義,不能重作其他定義)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile<32個(gè)關(guān)鍵字if()~else~for()~while()~do~while()continuebreakswitchgotoreturn<9種控制語句算術(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)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:.->下標(biāo)運(yùn)算符:[]其他:()-<34種運(yùn)算符:基本類型構(gòu)造類型指針類型空類型void定義類型typedef數(shù)值類型字元類型char枚舉類型enum整型浮點(diǎn)型單精確度型float雙精度型double短整型short長(zhǎng)整型long整型int數(shù)組結(jié)構(gòu)體struct共用體union<

C數(shù)據(jù)類型:例1.1第一個(gè)程式Hello,World!/*example1.1ThefirstCProgram*/#include<stdio.h>main(){printf(“Hello,World!”);}>注釋編譯預(yù)處理函數(shù)語句輸出:Hello,World!1.3C程式格式和結(jié)構(gòu)特點(diǎn)/*example1.1calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/main(){

int

a,b,sum;

a=10;

b=24;

sum=add(a,b);

printf(”sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/int

add(int

x,inty){

int

z;

z=x+y;return(z);}運(yùn)行結(jié)果:sum=34函數(shù)語句預(yù)處理命令注釋>例1.2習(xí)慣用小寫字母,大小寫敏感不使用行號(hào),無程式行概念可使用空行和空格常用鋸齒形書寫格式<>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ì)齊有足夠的注釋有合適的空行格式特點(diǎn)函數(shù)與主函數(shù)程式由一個(gè)或多個(gè)函數(shù)組成必須有且只能有一個(gè)主函數(shù)main()程式執(zhí)行從main開始,在main中結(jié)束,其他函數(shù)通過嵌套調(diào)用得以執(zhí)行。程式語句C程式由語句組成用“;”作為語句終止符注釋/**/為注釋,不能嵌套不產(chǎn)生編譯代碼<>例:/*Thisisthemain/*ofexample1.1*/*/非法編譯預(yù)處理命令結(jié)構(gòu)特點(diǎn)

14電腦中數(shù)的表示及進(jìn)制轉(zhuǎn)換數(shù)碼、基與權(quán)數(shù)碼:表示數(shù)的符號(hào)基:數(shù)碼的個(gè)數(shù)權(quán):每一位所具有的值數(shù)制2.0

預(yù)備知識(shí)15二進(jìn)位、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)位

方法:按權(quán)相加各種進(jìn)制之間的轉(zhuǎn)換16

二進(jìn)位、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jì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各種進(jìn)制之間的轉(zhuǎn)換(整數(shù))

方法:按權(quán)相加17

二進(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)換18

二進(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)換

19記憶體以位元組為單元組成每個(gè)位元組有一個(gè)地址一個(gè)位元組一般由8個(gè)二進(jìn)位位組成每個(gè)二進(jìn)位的值是0或101234567012345678910……...7643251位元組和位

20原碼:最高位為符號(hào)位,其餘各位為數(shù)值本身的絕對(duì)值反碼:正數(shù):反碼與原碼相同負(fù)數(shù):符號(hào)位為1,其餘位對(duì)原碼取反補(bǔ)數(shù):正數(shù):原碼、反碼、補(bǔ)數(shù)相同負(fù)數(shù):最高位為1,其餘位為原碼取反,再對(duì)整個(gè)數(shù)加13126912457810119-5=49+7=16=(14)12數(shù)值的表示方法——原碼、反碼和補(bǔ)數(shù)

21原碼反碼補(bǔ)數(shù)+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數(shù)的範(fàn)圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)負(fù)數(shù)補(bǔ)數(shù)轉(zhuǎn)換成十進(jìn)位數(shù):最高位不動(dòng),其餘位取反加1例補(bǔ)數(shù):11111001

取反:10000110

加1:10000111=-7(用一位元組表示數(shù))22數(shù)據(jù)類型總表C數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void定義類型typedef字元類型char枚舉類型enum整型實(shí)型單精確度型float雙精度型double數(shù)組結(jié)構(gòu)體struct共用體union短整型short長(zhǎng)整型long整型int數(shù)據(jù)類型決定:1.數(shù)據(jù)占記憶體位元組數(shù)2.數(shù)據(jù)取值範(fàn)圍3.其上可進(jìn)行的操作2.1

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

int0~65535320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255說明:數(shù)據(jù)類型所占位元組數(shù)隨機(jī)器硬體不同而不同,上表以IBMPC機(jī)為例:請(qǐng)看int和unsignedint基本數(shù)據(jù)類型24識(shí)別字定義:用來標(biāo)識(shí)變數(shù)、常量、函數(shù)等的字元序列組成:只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線大小寫敏感不能使用關(guān)鍵字長(zhǎng)度:最長(zhǎng)32個(gè)字元命名原則:見名知意不宜混淆如l與I,o與0例:判斷下列識(shí)別字號(hào)合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123<>M.D.John3days#33char$123a>b2.2常量與變數(shù)

25一般用大寫字母是宏定義預(yù)處理命令,不是C語句直接常量:整型常量請(qǐng)點(diǎn)擊:實(shí)型常量請(qǐng)點(diǎn)擊:字元常量請(qǐng)點(diǎn)擊:字串常量請(qǐng)點(diǎn)擊:如#definePRICE30定義:程式運(yùn)行時(shí)其值不能改變的量(即常數(shù))分類:符號(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=300常量26三種形式:十進(jìn)位整數(shù):由數(shù)字0~9和正負(fù)號(hào)表示.如123,-456,0八進(jìn)制整數(shù):由數(shù)字0開頭,後跟數(shù)字0~7表示.如0123,011十六進(jìn)制整數(shù):由0x開頭,後跟0~9,a~f,A~F表示.如0x123,0Xff例12與12L例30000為int型

65536為longint型整型常量的類型根據(jù)其值所在範(fàn)圍確定其數(shù)據(jù)類型在整常量後加字母l或L,認(rèn)為它是longint

型常量問題:0123=()100x123=()100Xff=()1083291255問題:0123=()100x123=()100Xff=()10整型常量(整常數(shù))27表示形式:十進(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,e-5,1.2E-3.5

實(shí)型常量的類型默認(rèn)double型在實(shí)型常量後加字母f或F,認(rèn)為它是float型實(shí)型常量(實(shí)數(shù)或浮點(diǎn)數(shù))

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

字元常量的值:該字元的ASCII碼值<轉(zhuǎn)義字元及其含義:轉(zhuǎn)義字元含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉(zhuǎn)義字元含義換行垂直製錶回車響鈴單引號(hào)3位8進(jìn)制數(shù)代表的字元水準(zhǔn)製錶退格換頁反斜線雙引號(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ī)輸出:¥字元常量

29字元常量與字串常量不同定義:用雙引號(hào)(“”)括起來的字元序列存儲(chǔ):每個(gè)字串尾自動(dòng)加一個(gè)‘\0’

作為字串結(jié)束標(biāo)誌hello\0例字串“hello”在內(nèi)存中aa\0例‘a(chǎn)’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;字串常量

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

亂數(shù)概念:其值可以改變的量變數(shù)名與變數(shù)值變數(shù)定義的一般格式:

數(shù)據(jù)類型變數(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;變數(shù)的使用:先定義,後使用例1intstudent;stadent=19;//Undefinedsymbol‘stadent’infunctionmain

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

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

31占位元組數(shù)隨機(jī)器不同而不同,一般占一個(gè)機(jī)器字short≤int≤long可用sizeof(類型識(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;*/沒有字串變數(shù),用字符數(shù)組存放整型變數(shù)

32/*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例子33隱式轉(zhuǎn)換什麼情況下發(fā)生運(yùn)算轉(zhuǎn)換------不同類型數(shù)據(jù)混合運(yùn)算時(shí)賦值轉(zhuǎn)換------把一個(gè)值賦給與其類型不同的變數(shù)時(shí)輸出轉(zhuǎn)換------輸出時(shí)轉(zhuǎn)換成指定的輸出格式函數(shù)調(diào)用轉(zhuǎn)換------實(shí)參與形參類型不一致時(shí)轉(zhuǎn)換運(yùn)算轉(zhuǎn)換規(guī)則:不同類型數(shù)據(jù)運(yùn)算時(shí)先自動(dòng)轉(zhuǎn)換成同一類型2.3不同類型數(shù)據(jù)間的轉(zhuǎn)換34doublefloatlongunsignedintchar,short低高說明:必定的轉(zhuǎn)換運(yùn)算對(duì)象類型不同時(shí)轉(zhuǎn)換charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例2inti;floatf;doubled;longl;例135一般形式:(類型名)(運(yùn)算式)例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6

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

例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果:x=3.600000,i=3較高類型向較低類型轉(zhuǎn)換時(shí)可能發(fā)生精度損失問題顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)36C運(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)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:(.->)下標(biāo)運(yùn)算符:([])其他:(()-)2.4運(yùn)算符和運(yùn)算式37運(yùn)算符功能與運(yùn)算量關(guān)係要求運(yùn)算量個(gè)數(shù)要求運(yùn)算量類型運(yùn)算符優(yōu)先順序別結(jié)合方向結(jié)果的類型學(xué)習(xí)運(yùn)算符應(yīng)注意38基本算術(shù)運(yùn)算符:+-*/%結(jié)合方向:從左向右優(yōu)先順序:----->*/%----->+-(2)(3)(4)

說明:“-”可為單目運(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%2算術(shù)運(yùn)算符和運(yùn)算式2-2.51-110(

)39作用:使變數(shù)值加1或減1種類:前置++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=4自增、自減運(yùn)算符++--

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

(2)(3)(4)例-i++

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

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

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

41簡(jiǎn)單賦值運(yùn)算符符號(hào):=格式:變數(shù)識(shí)別字=運(yùn)算式作用:將一個(gè)數(shù)據(jù)(常量或運(yùn)算式)賦給一個(gè)變數(shù)複合賦值運(yùn)算符種類:+=-=*=/=%=《=》=&=^=|=含義:exp1op=exp2

exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例a=3;d=func();c=d+2;賦值運(yùn)算符和運(yùn)算式42結(jié)合方向:自右向左優(yōu)先順序:14左側(cè)必須是變數(shù),不能是常量或運(yùn)算式賦值運(yùn)算式的值與變數(shù)值相等,且可嵌套賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊運(yùn)算式值自動(dòng)轉(zhuǎn)換成其左邊變數(shù)的類型例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說明(1):

43

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

左側(cè)必須是變數(shù),不能是常量或運(yùn)算式賦值運(yùn)算式的值與變數(shù)值相等,且可嵌套賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊運(yùn)算式值自動(dòng)轉(zhuǎn)換成其左邊變數(shù)的類型例: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)))說明(2):

44形式:運(yùn)算式1,運(yùn)算式2,……運(yùn)算式n結(jié)合性:從左向右優(yōu)先順序:15逗號(hào)運(yùn)算式的值:等於運(yùn)算式n的值用途:常用於迴圈for語句中例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,3逗號(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=345關(guān)係運(yùn)算符種類:<<===>=>!=結(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=0關(guān)係運(yùn)算符和運(yùn)算式46例若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)47例注意區(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é)果為可改寫為:fabs(1.0/3.0*3.0-1.0)<1e-60關(guān)係運(yùn)算注意(2)48ab!a!ba&&ba||b真假真假假假真真邏輯運(yùn)算符種類:!&&||邏輯運(yùn)算真值表C語言中,運(yùn)算量:

0表示“假”,非0表示“真”,

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

1表示“真”,真假假假假假真真假假真真真假真真邏輯運(yùn)算符和運(yùn)算式(1)49!(2)&&(11)||(12)高低例a<=x&&x<=b

a>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)邏輯運(yùn)算符和運(yùn)算式(2)50!(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邏輯運(yùn)算符和運(yùn)算式(3)51!(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邏輯運(yùn)算符和運(yùn)算式(4)52一般形式:expr1?expr2:expr3執(zhí)行過程功能:相當(dāng)於條件語句,但不能取代一般if語句例if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b);例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);expr1取expr2值取expr3值非0=0例(a==b)?’Y’:’N’(x%2==1)?1:0(x>=0)?x:-x(c>=‘a(chǎn)’&&c<=‘z’)?c-’a’+’A’:c條件運(yùn)算符可嵌套

如x>0?1:(x<0?-1:0)優(yōu)先順序:13結(jié)合方向:自右向左

如a>b?a:c>d?c:d

a>b?a:(c>d?c:d)expr1、expr2、expr3類型可不同,運(yùn)算式值取較高的類型例x?‘a(chǎn)’:‘b’//x=0,運(yùn)算式值為‘b’;x?0,運(yùn)算式值為‘a(chǎn)’x>y?1:1.5//x>y,值為1.0;x<y,值為1.5條件運(yùn)算符與運(yùn)算式530111111111111111int型:最大:327671000000000000000最小:-327681111111111111111unsignedint型:最大:655350000000000000000最小:0條件運(yùn)算符與運(yùn)算式(1)3.1數(shù)據(jù)輸出

格式:putchar(c)參數(shù):c為字元常量、變數(shù)或運(yùn)算式功能:把字元c輸出到顯示器上返值:正常,為顯示的代碼值;出錯(cuò),為EOF(-1)C語言無I/O語句,I/O操作由函數(shù)實(shí)現(xiàn)

字元輸出函數(shù)

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

%[修飾符]格式字元

,用於指定輸出格式普通字元或轉(zhuǎn)義序列:原樣輸出格式字元格式輸出函數(shù)d,ix,Xoucse,Efg%%十六進(jìn)制無符號(hào)整數(shù)不帶符號(hào)十進(jìn)位整數(shù)十進(jìn)位整數(shù)指數(shù)形式浮點(diǎn)小數(shù)單一字元字串八進(jìn)制無符號(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%說明 格式字元要用小寫格式字元與輸出項(xiàng)個(gè)數(shù)應(yīng)相同,按先後順序一一對(duì)應(yīng)輸出轉(zhuǎn)換:格式字元與輸出項(xiàng)類型不一致,自動(dòng)按指定格式輸出表格.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附加格式說明符(修飾符)對(duì)字串,指定實(shí)際輸出位數(shù)例inta=1234;floatf=123.456;printf(“%08d\n”,a);printf(“%010.2f\n”,f);printf(“%0+8d\n”,a);printf(“0+10.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//000+1234//000+123.56//173,0173,7B,0X7B//0,65536例格式:getchar()功能:從鍵盤讀一字元返值:正常,返回讀取的代碼值;出錯(cuò),返回EOF(-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--->hex413.2數(shù)據(jù)輸入格式:scanf(“格式控制串”,地址表)功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的存儲(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=17格式輸入函數(shù)

附加格式說明符(修飾符)l修飾符功能hm*用於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修飾符功能一般以空格、TAB或回車鍵作為分隔符號(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、或回車遇寬度結(jié)束遇非法輸入如scanf(“%d%c%f”,&a,&b,&c);

若輸入1234a123o.26

則1234

a,‘a(chǎn)’

b,123

c

輸入函數(shù)留下的“垃圾”:例intx;charch;scanf(“%d”,&x);ch=getchar();printf(“x=%d,ch=%d\n”,x,ch);執(zhí)行:123

輸出:x=123,ch=10例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);printf(“x=%d,ch=%d\n”,x,ch);執(zhí)行:123

輸出:x=123,ch=10解決方法:(1)用getchar()清除(2)用函數(shù)fflush(stdin)清除全部剩餘內(nèi)容

(3)用格式串中空格或“%*c”來“吃掉”例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);或scanf(“%*c%c”,&ch);

說明:/*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),求面積4.1C語句概述

C語句:以“;”作分隔符號(hào),編譯後產(chǎn)生機(jī)器指令.C語句分類運(yùn)算式語句:運(yùn)算式加分號(hào)構(gòu)成??照Z句:;程式控制語句(9種):if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支迴圈輔助控制如total=total+limit;a=3;func();printf(“Hello,world!\n”);

:用{…}括起來的一組語句一般形式:

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

執(zhí)行語句部分;

}說明:“}”後不加分號(hào)語法上和單一語句相同複合語句可嵌套複合語句結(jié)構(gòu)化程式設(shè)計(jì)基本思想:任何程式都可以用三種基本結(jié)構(gòu)表示,限制使用無條件轉(zhuǎn)移語句(goto)結(jié)構(gòu)化程式:由三種基本結(jié)構(gòu)反復(fù)嵌套構(gòu)成的程式叫~優(yōu)點(diǎn):結(jié)構(gòu)清晰,易讀,提高程式設(shè)計(jì)品質(zhì)和效率三種基本結(jié)構(gòu)順序結(jié)構(gòu)ABAB流程圖N-S圖4.2

程式的三種基本結(jié)構(gòu)

PAB真假PBA真假kA1A2AiAnk=k2k=k1k=knk=ki......二分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)選擇結(jié)構(gòu)當(dāng)型迴圈結(jié)構(gòu)直到型迴圈結(jié)構(gòu)PA假真當(dāng)P為真AAP真假A直到P為真注:A,B,A1….An可以是一個(gè)簡(jiǎn)單語句,也可以是一個(gè)基本結(jié)構(gòu)迴圈結(jié)構(gòu)

if語句(條件選擇語句)if語句的三種形式形式一:格式:if(expression)statement執(zhí)行過程:exprstatement非0=0例:if(x>y)printf(“%d”,x);exprstatement1statement2非0=0形式二:格式:if(expression)statement1elsestatement2執(zhí)行過程:例:if(x>y)max=x;elsemax=y;4.3

選擇型程式設(shè)計(jì)三:格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0執(zhí)行過程:

例: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;選擇型程式設(shè)計(jì)形式如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);if後面的運(yùn)算式類型任意語句可以是複合語句

if(x)

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

if(x==0)例考慮下麵程式的輸出結(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!說明::一般形式: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語句嵌套/*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)係缺省{}時(shí),else總是和它上面離它最近的未配對(duì)的if配對(duì)if(……)if(……)if(……)else…...else…...else…...if~else配對(duì)原則:例: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ì)方法:加{}實(shí)現(xiàn)if~else正確配對(duì)方法一般形式:switch(運(yùn)算式){caseE1:

語句組1;

break;caseE2:

語句組2;

break;…….caseEn:

語句組n;

break;[default:

語句組;break;]}執(zhí)行過程:switch運(yùn)算式語句組1語句組2語句組n語句組…...E1E2Endefaultcaseswitch語句(開關(guān)分支語句):E1,E2,…En是常量運(yùn)算式,且值必須互不相同語句標(biāo)號(hào)作用,必須用break跳出case後可包含多個(gè)可執(zhí)行語句,且不必加{}switch可嵌套多個(gè)case可共用一組執(zhí)行語句如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..說明:例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}運(yùn)行結(jié)果:score為5時(shí),輸出:

Verygood!Good!Pass!Fail!dataerror!例子(1)/*ch4_5.c*/#include<stdio.h>main(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例子(2)根據(jù)輸入字母輸出字串概述C語言可實(shí)現(xiàn)迴圈的語句:用goto和if構(gòu)成迴圈while語句do~while語句for語句goto語句及用goto構(gòu)成迴圈goto語句一般格式:goto語句標(biāo)號(hào);

….…..標(biāo)號(hào):語句;4.4

迴圈型程式設(shè)計(jì)功能:無條件轉(zhuǎn)移語句說明:不能用整數(shù)作標(biāo)號(hào)只能出現(xiàn)在goto所在函數(shù)內(nèi),且唯一只能加在可執(zhí)行語句前面限制使用goto語句4.4

迴圈型程式設(shè)計(jì)(1)/*ch5_1.c*/#include<stdio.h>main(){inti,sum=0;i=1;loop:if(i<=100){sum+=i; i++;

gotoloop;}printf("%d",sum);}sum=0+1sum==1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050迴圈初值迴圈終值迴圈變數(shù)增值迴圈條件循環(huán)體例用if和goto語句構(gòu)成迴圈一般形式:while(運(yùn)算式)

循環(huán)體語句;執(zhí)行流程:expr循環(huán)體假(0)真(非0)whilewhile語句一般形式:while(運(yùn)算式)

循環(huán)體語句;執(zhí)行流程:expr循環(huán)體假(0)真(非0)whilewhile語句形式和執(zhí)行流程特點(diǎn):先判斷運(yùn)算式,後執(zhí)行循環(huán)體說明:循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類型語句下列情況,退出while迴圈條件運(yùn)算式不成立(為零)循環(huán)體內(nèi)遇break,return,goto無限迴圈:while(1)

循環(huán)體;While語句特點(diǎn)和說明用while迴圈求/*ch5_2.c*/#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}迴圈初值迴圈終值迴圈變數(shù)增值迴圈條件循環(huán)體例子/*ch5_21.c*/#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}運(yùn)行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例顯示1~10的平方一般形式:do

循環(huán)體語句;

while(運(yùn)算式);執(zhí)行流程:do循環(huán)體expr假(0)真(非0)whiledo~while語句特點(diǎn):先執(zhí)行循環(huán)體,後判斷運(yùn)算式說明:至少執(zhí)行一次循環(huán)體do~while可轉(zhuǎn)化成while結(jié)構(gòu)expr循環(huán)體假(0)真(非0)循環(huán)體While迴圈do~while語句特點(diǎn)和說明一般形式:for([expr1];[expr2];[expr3])

循環(huán)體語句;執(zhí)行流程:expr2循環(huán)體假(0)真(非0)forexpr1expr3for語句

:for(迴圈變數(shù)賦初值;迴圈條件;迴圈變數(shù)增值){

循環(huán)體語句;}說明:for語句中expr1,expr2,expr3類型任意,都可省略,但分號(hào);不可省無限迴圈:for(;;)for語句可以轉(zhuǎn)換成while結(jié)構(gòu)expr1;while(expr2){

循環(huán)體語句;

expr3;}for語句一般應(yīng)用形式例:#include<stdio.h>main(){inti=0;for(i=0;i<10;i++)putchar(‘a(chǎn)’+i);}運(yùn)行結(jié)果:abcdefghij例:#include<stdio.h>main(){inti=0;

for(;i<10;i++)putchar(‘a(chǎn)’+i);}例:#include<stdio.h>main(){inti=0;

for(;i<10;)putchar(‘a(chǎn)’+(i++));}例:#include<stdio.h>main(){inti=0;

for(;i<10;putchar(‘a(chǎn)’+i),i++)

;}例子0yxaa+ha+iha+(i+1)hbf(x)例(f0r)梯形法求數(shù)值積分三種迴圈可互相嵌套,層數(shù)不限外層迴圈可包含兩

溫馨提示

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