版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
清華大學(xué)出版社陳秀玲等編著C
語言程序設(shè)計(上)C語言程序設(shè)計第1章C語言程序設(shè)計基礎(chǔ)C1第1章C語言程序設(shè)計根底
第2章根本數(shù)據(jù)類型、運算符和表達(dá)式
第3章程序控制清華大學(xué)出版社陳秀玲等編著C語言程序設(shè)計第1章C語言程序設(shè)計基礎(chǔ)C2第1章C語言程序設(shè)計根底清華大學(xué)出版社陳秀玲等編著C
語言程序設(shè)計C語言程序設(shè)計第1章C語言程序設(shè)計基礎(chǔ)C3說明:本課件的配套教材為:?C語言程序設(shè)計教程?清華大學(xué)出版社陳秀玲等編著如果選用本教材,并需要課后習(xí)題答案,請與出版社聯(lián)系。E-mail:通信地址:北京清華大學(xué)學(xué)研大廈A座4本章主要內(nèi)容C語言的開展及其根本特性C語言集成開發(fā)環(huán)境簡介C語言的根本結(jié)構(gòu)C語言的上機操作步驟51.1C語言的開展史及其根本特性主要內(nèi)容:C語言的開展歷史C語言的主要特性61.1.1C語言的開展開展過程B語言:Bell實驗室,1970年在PDP機器上用其編寫UNIX系統(tǒng)CPL語言:劍橋大學(xué),1963年BCPL語言:英國劍橋大學(xué),1967年C語言:Bell實驗室,1972~1973年用其改寫UNIX系統(tǒng)經(jīng)簡化進(jìn)一步簡化保持精練、接近硬件的優(yōu)點,克服數(shù)據(jù)類型過少的不足71.1.2C語言的特性〔1〕語言簡潔,表達(dá)能力強且使用方便靈活。只有32個關(guān)鍵字,9種控制語句〔2〕目標(biāo)程序質(zhì)量高。〔3〕可移植性好?!?〕數(shù)據(jù)類型豐富?!?〕具有結(jié)構(gòu)化的控制語句。〔6〕程序結(jié)構(gòu)清晰、緊湊?!?〕C語言允許編程人員定義各種類型的變量指針和函數(shù)指針。81.2C語言的集成開發(fā)環(huán)境主要內(nèi)容:C語言的安裝C語言的啟動和退出程序設(shè)計的概念及特點所謂集成,是指將源程序編寫、匯編、編譯、鏈接、調(diào)試等需要用到的程序集合到一個軟件中。91.2.1TurboC的安裝TurboC2.0可運行于X86系列兼容計算機。在Windows和DOS2.0,或更高版本上均可運行。101.2.2TurboC2.0的啟動與退出1.TurboC2.0的啟動當(dāng)啟動TurboC2.0時,只要在TC子目錄下鍵入TC,單擊Enter鍵,即可進(jìn)入TurboC2.0集成開發(fā)環(huán)境。112.TurboC2.0的退出(1)菜單法:選擇File/Quit項〔先選擇File主菜單項,再選擇并執(zhí)行Quit子項〕。(2)快捷鍵法:按下Alt+X鍵即可〔先按下Alt鍵并保持,再按下字母鍵X,然后同時放下〕。121.3C程序的根本結(jié)構(gòu)【例1.1】計算兩個變量x、y中的整數(shù)之和,并將其結(jié)果送入變量z中。main(){
intx,y,z;x=5;y=4;z=x+y;printf("z=%d\n",z);
}
main
為函數(shù)名程序從這里開始運行函數(shù)體開始函數(shù)體結(jié)束函數(shù)體內(nèi)定義x,y,z為x賦值輸出z的值執(zhí)行程序的輸出結(jié)果為:z=9
13C程序結(jié)構(gòu)〔續(xù)〕語句包括說明性語句、可執(zhí)行語句以;表示語句結(jié)束注釋可以出現(xiàn)在程序的任何位置
用/*和*/括起來,必須成對出現(xiàn)書寫格式C語言沒有行的概念,書寫格式自由。習(xí)慣小寫字母,縮進(jìn)格式。14第2章C根本數(shù)據(jù)類型、運算符和表達(dá)式C
語言程序設(shè)計C語言程序設(shè)計第2章C基本數(shù)據(jù)類型、運算符和表達(dá)式C清華大學(xué)出版社陳秀玲等編著15本章主要內(nèi)容本章介紹C語言的根底,包括:C語言的根本數(shù)據(jù)類型運算符和表達(dá)式數(shù)據(jù)類型間的轉(zhuǎn)換通常程序要對數(shù)據(jù)進(jìn)行操作處理:處理的對象是數(shù)據(jù)通過運算符和表達(dá)式進(jìn)行操作C語言程序設(shè)計第2章C基本數(shù)據(jù)類型、運算符和表達(dá)式C162.1C語言的根本數(shù)據(jù)類型常量與變量根本數(shù)據(jù)類型172.1.1常量、變量主要內(nèi)容:常量變量181.標(biāo)識符與關(guān)鍵字C語言中規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線,隨后的字符必須是字母、數(shù)字或下劃線。標(biāo)識符的長度可以是一個或多個字符。192.常量在運行程序的過程中值保持不變的量1〕整型常量十進(jìn)制:0~9八進(jìn)制:0~7,以0開頭十六進(jìn)制:0~9,A~F/a~f,以0x或0X開頭例如:100-80+12301002401000730x380x100X100XFF0x0a201〕整型常量整型常量的類型:根據(jù)值大小默認(rèn)類型。整型常量后面加l或L,那么認(rèn)為是longint型例如:123L、0L、432l、0x100l注意:十六進(jìn)制常量中可以使用大寫字母A~F,也可以使用小寫字母a~f。八進(jìn)制常量中不能出現(xiàn)數(shù)字8或9例如:018、0921非法212〕實型常量〔也稱為浮點型〕十進(jìn)制形式
1.01.+12.0-12.00.0指數(shù)形式
1e31.8e-3-123E-6-.1E-3等價于:1×1031.8×10-3
-123×10-6
-0.1×10-3指數(shù)只能是整數(shù),而尾數(shù)那么可以是整數(shù)也可以是小數(shù),無論指數(shù)或尾數(shù)均不能省略例如:1e、E.5、E-3非法實型常量的類型:默認(rèn)為double型,后面加F〔或f〕,那么強調(diào)表示該數(shù)是float類型例如:3.5f、1e2F223〕字符型常量可視字符常量
單引號括起來的單個可視字符例如:'a'、'A'、'+'、'3'、''等
轉(zhuǎn)義字符常量單引號括起來的\與可視字符組合,例如:\0字符串結(jié)束標(biāo)志\n回車換行\(zhòng)t跳到下一個輸出位置\"雙引號字符\dddddd為1到3位八進(jìn)制數(shù)所代表的字符\xhhhh為1到2位十六進(jìn)制數(shù)所代表的字符234〕字符串常量用雙引號括起的一個字符序列例如:"ABC"、"123"、"a"、"\n\t""\nluck"字符串常量的長度:所包含的字符個數(shù)
字符串常量的存儲方式:
\0kcul\na\0所占存儲單元數(shù):串長度+1例如:字符串結(jié)束標(biāo)記243.變量1〕變量的有關(guān)概念在程序運行過程中,其值改變的數(shù)據(jù),稱為變量,變量用標(biāo)識符表示,稱為變量名。變量必須“先定義后使用〞系統(tǒng)為變量分配存儲單元,存儲變量的值。編寫程序時通過變量名來存、取變量值。a5變量值為變量分配的存儲單元變量名例如:有變量a它的值是5252〕變量定義變量定義的一般格式:類型符變量名表列;例如:inti,j;
longk,m;floatx,y;charch1,ch2;必須使用合法的標(biāo)識符作變量名不能使用關(guān)鍵字為變量命名263〕變量的初始化:
允許在說明變量的時候?qū)ψ兞抠x初值。例如:inta=5,b=10+2;
doublex=23.568,y;charch1='a',ch2=66,ch3='\142';表示定義變量并對變量存儲單元賦值。錯誤的初始化:
inta=3+b,b=5;
floatm=n=2.16;
272.1.2C語言的數(shù)據(jù)類型C數(shù)據(jù)類型數(shù)組類型結(jié)構(gòu)體類型共用體類型枚舉類型整型字符型實型(浮點型)空類型單精度型雙精度型基本類型指針類型構(gòu)造類型本章討論根本類型數(shù)據(jù)語言程序設(shè)計
第2章C基本數(shù)據(jù)類型、運算符和表達(dá)式C281.根本類型---1〕整型表2.1各種整型數(shù)據(jù)所占位數(shù)及數(shù)的范圍數(shù)據(jù)類型類型符占內(nèi)存(位)占內(nèi)存(字節(jié))最小取值范圍基本型int162-32,768~32,767無符號整型unsignedint1620~655,35短整型short[int]162-32,768~32,767無符號短整型unsignedshort[int]1620~65,535長整型long[int]324-231~231-1無符號長整型unsignedlong[int]3240~232-129〔2〕表示方式。對于整型常數(shù),有3種表示方法,按不同的進(jìn)制區(qū)分:十進(jìn)制數(shù):280,37,108,-19。八進(jìn)制數(shù):以數(shù)字O開頭,后面跟具體的數(shù),例如O62,O129,O23,O521。十六進(jìn)制數(shù):以O(shè)X或Ox開頭的數(shù),例如Ox86a,OX6d,OxBF。30例如:【例2.1】求-10的補碼。分析如下:①取-10的絕對值:10,10的二進(jìn)制形式為:1010。②10的原碼為〔2個字節(jié)〕:0000000000001010。③按位取反:。④末位加1:。31根本數(shù)據(jù)類型-----2〕實型數(shù)據(jù)1〕實型數(shù)據(jù)的類型單精度實型數(shù)據(jù)float,分配4Byte雙精度實型數(shù)據(jù)double,分配8Byte長雙精度實型數(shù)據(jù)longdouble,分配10Byte2〕實型數(shù)據(jù)的存儲單精度實型指數(shù)局部小數(shù)局部
小數(shù)的符號位指數(shù)的符號位32表2.2各種數(shù)據(jù)所占位數(shù)及數(shù)的范圍數(shù)據(jù)類型類型符占內(nèi)存(位)占內(nèi)存(字節(jié))數(shù)值范圍有效位數(shù)單精度雙精度長雙精度FloatDoublelongdouble32648048103.4E-38~3.4E+381.7E-308~1.7E+3081.2E-493~1.2E+49327161933〔2〕表示方式。實型常數(shù)的表示方式如下。十進(jìn)制數(shù):例如6.2,.96,-387.29。指數(shù)形式:例如-2.3E3,-7.5E-3。34根本數(shù)據(jù)類型-----3)字符型數(shù)據(jù)字符型數(shù)據(jù)char,分配1Byte
字符型數(shù)據(jù)是指字母、數(shù)字、各種符號等用ASCII值表示的字符例如'a'是一個char類型數(shù)據(jù),稱作字符常量,存儲:0110000135字符型包括有符號字符型和無符號字符型兩種,如表2.3所示。表2.3字符型數(shù)據(jù)所占位數(shù)數(shù)據(jù)類型類型符占內(nèi)存(位)占內(nèi)存(字節(jié))數(shù)值范圍(ASCII碼值)有符號字符型無符號字符型charunsignedchar8811-128~127(有符號字符型)0~255(無符號字符型)36〔2〕表示方式。字符型有以下5種表示方式。①字符常量。字符常量是用單引號括起來的一個字符。例如‘a(chǎn)’、‘6’、‘=’、‘$’、‘?’都是合法的字符常量。②轉(zhuǎn)義字符。轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線“\〞開頭,后跟一個或幾個字符。表2.4轉(zhuǎn)義字符表37轉(zhuǎn)義字符含義ASCII碼值(十進(jìn)制)\a\b\f\n\r\t\v\\\?\'\"\0\ddd\xhh響鈴(BEL)退格(不換行)走紙換頁(FF)換行回車(CR)橫向跳格(即跳到下一個輸出區(qū),占8列)豎向跳格(垂直制表)反斜杠字符"\"問號字符單引號(撇號)字符雙引號字符空字符(NULL)1到3位八進(jìn)制數(shù)所代表的字符1到2位十六進(jìn)制數(shù)所代表的字符00700801201001300901109206303903400038③字符串常量。字符串常量是由一對雙引號括起來的字符序列。例如:"BOOK",“$20.5〞等都是合法的字符串常量。④字符變量。字符變量的取值是字符常量,即單個字符。字符變量的類型說明符是char。⑤符號常量。在C語言中可以用一個標(biāo)識符來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為:#define標(biāo)識符常量其中,#define是一條預(yù)處理命令,稱為宏定義命令。39【例2.3】閱讀并分析下面的程序:#include<stdio.h>#definePI3.14159main(){floats,r;r=5;s=PI*r*r;printf〔"s=%f\n",s);}分析:該程序用于求解半徑為5的圓的面積。其中宏定義命令應(yīng)在程序的命令行中給出;在程序中所有出現(xiàn)PI的地方均以3.14159代替;s=PI*r*r等效于s=3.14159*r*r。402.構(gòu)造類型構(gòu)造類型數(shù)據(jù)是根據(jù)已定義的一個或多個數(shù)據(jù)類型用構(gòu)造的方法定義的。3.指針類型指針是一種特殊的、同時又具有重要作用的數(shù)據(jù)類型。其值用來表示某個量在內(nèi)存儲器中的地址。4.空類型空類型void通常與指針或函數(shù)結(jié)合使用412.2C語言的運算符和表達(dá)式主要內(nèi)容:算術(shù)運算符和算術(shù)表達(dá)式賦值運算符和賦值表達(dá)式關(guān)系運算符和關(guān)系表達(dá)式邏輯運算符和邏輯表達(dá)式位運算符和位運算表達(dá)式條件運算符和條件表達(dá)式逗號運算符和逗號表達(dá)式其他運算符及其運算422.2.1根本運算符和表達(dá)式運算符作用:對運算對象完成規(guī)定的操作運算運算符類型:按運算對象分:單目、雙目、三目按功能分:算術(shù)、賦值、關(guān)系、邏輯條件、逗號、位、其他431.算術(shù)運算符及算術(shù)表達(dá)式
1〕算術(shù)運算符表2.5算術(shù)運算符操作符作用操作符作用+-*/加減,單目時表示負(fù)號運算乘除%++--求余數(shù)或取模自增1自減1442〕算術(shù)表達(dá)式由算術(shù)運算符和括號等連接起來的式子稱為算術(shù)表達(dá)式。45〔1〕優(yōu)先級①++、--運算符的優(yōu)先級高于+、-、*、/及求余運算符〔%〕。②=、-、*、/及求余運算〔%〕運算符的優(yōu)先級遵循先乘除后加減規(guī)那么?!?〕結(jié)合性①++、--自右向左的,即右結(jié)合性。②+、-、*、/及求余運算〔%〕運算符的結(jié)合性是自左向右,即左結(jié)合性。46自增自減運算++--是單目運算符有前綴和后綴兩種形式
前綴形式:先自增(自減)再引用;后綴形式:先引用再自增(自減);功能:前綴形式++a
等價于
a=a+1
--
a
等價于
a=a–1后綴形式a++
等價于a=a+1
a--
等價于a=a–1表達(dá)式的值會不同47例如:當(dāng)a=5時⑴++a表達(dá)式的值為6,且
a=6⑵
a++表達(dá)式的值為5,且
a=6⑶
b=++a
等價于
a=a+1;b=a表達(dá)式的值為6,且a=6,
b=6⑷b=a++等價于
b=a;a=a+1表達(dá)式的值為5,且a=6,
b=5
48說明:++和--的運算對象只能是變量〔或運算結(jié)果是變量的表達(dá)式〕,不能是常量〔或運算結(jié)果是數(shù)值的表達(dá)式〕。例如:5++、(a+2)++不合法。具有右結(jié)合性,結(jié)合方向為從右到左。例如:–a++等價于-(a++)如果有多個運算符連續(xù)出現(xiàn)時,C系統(tǒng)盡可能多的從左到右將字符組合成一個運算符例如:i+++j等價于(i++)+j-i+++-j等價于-(i++)+(-j)492.關(guān)系運算符和關(guān)系表達(dá)式表2.6關(guān)系運算符〔1〕優(yōu)先級共有兩個優(yōu)先級,其中>、<、>=、<=高于==和!=。并且>、<、>=、<=優(yōu)先級相同;==與!=優(yōu)先級相同;關(guān)系運算符的優(yōu)先級低于算術(shù)運算符?!?〕結(jié)合性關(guān)系運算符的結(jié)合性為自左向右,即右結(jié)合性。操作符作用操作符作用>>=<大于大于等于小于<===!=小于等于等于不等于50說明:關(guān)系運算的結(jié)果應(yīng)該是邏輯值。C語言用數(shù)值用1表示邏輯真,0表示邏輯假例如:7>5的值是1,5>7的值是0'a'>'b'的值是0,'a'<'b'的值是1即關(guān)系表達(dá)式的值:0或1實型數(shù)可進(jìn)行大于或小于比較,但通常不進(jìn)行==或!=的關(guān)系運算513.邏輯運算符和邏輯表達(dá)式表2.7邏輯運算符運算對象邏輯運算結(jié)果aba&&ba||b!a非0非0110非000100非001100001操作符作用&&(雙目)||(雙目)!(單目)邏輯與(相當(dāng)于AND或“同時“)邏輯或(相當(dāng)于OR或“或者“)邏輯非(相當(dāng)于NOT或“否定“)邏輯運算符的運算規(guī)那么52邏輯表達(dá)式〔1〕優(yōu)先級邏輯運算符的優(yōu)先級按由高到低的順序為“!〞、“&&〞、“||〞。〔2〕結(jié)合性邏輯運算符中“!〞運算自右至左;“&&〞和“||〞運算自左至右。2〕邏輯表達(dá)式用邏輯運算符將運算對象連接成的式子例如:0&&'b'a&&b||c&&da||b-5||c/4!x+y>=z53邏輯運算規(guī)那么從左到右依次進(jìn)行邏輯計算運算對象為非0表示邏輯真運算對象為0表示邏輯假邏輯運算的結(jié)果為0或1例如設(shè):a=15,b=0,c=-2a&&b&&c結(jié)果為0a||b||c結(jié)果為1(a+c)||b&&c結(jié)果為154關(guān)系與邏輯運算符的應(yīng)用表示數(shù)學(xué)公式a>b>c判斷a,b,c三條線段能否組成一個三角形
a,b不同時為負(fù)
a+b>c&&a+c>b&&b+c>aa>=0||b>=0!(a<0&&b<0)(a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a>b&&b>c55【例2.8】判斷2021年是否為閏年的邏輯表達(dá)式如下:(year%4==0)&&(year%100!=0)||(year%400==0)分析:上述表達(dá)式中涉及求余運算和邏輯運算,其優(yōu)先級由高到低順序如下:先算術(shù)運算后邏輯運算。因為2021%4==0為真〔即1〕,2021%100!=0為真〔即1〕,2021%400==0為假〔即0〕,又因為邏輯運算的優(yōu)先級為先“&&〞后“||〞,所以由表2.8可知,上式〔(year%4==0)&&(year%100!=0)〕||(year%400==0)的運算結(jié)果為1〔即2021年是閏年〕。564.賦值運算符和賦值表達(dá)式1〕簡單賦值運算賦值符號“=〞就是賦值運算符,它的作用是將一個表達(dá)式的值賦給一個變量。由賦值運算符“=〞連接的式子稱為賦值表達(dá)式。賦值表達(dá)式的一般形式為:變量=賦值表達(dá)式572〕復(fù)合算術(shù)賦值運算及賦值表達(dá)式〔1〕賦值運算符在賦值符“=〞之前加上一個雙目運算符,就構(gòu)成了復(fù)合算術(shù)賦值運算符?!?〕賦值表達(dá)式由賦值運算符或復(fù)合算術(shù)賦值運算符將一個變量和一個表達(dá)式連接起來的表達(dá)式稱為賦值表達(dá)式。復(fù)合算術(shù)賦值表達(dá)式的一般形式為:變量雙目運算符=表達(dá)式它等價于:變量=變量雙目運算符〔表達(dá)式〕。583〕賦值類型轉(zhuǎn)換如果表達(dá)式值的類型與被賦值變量的類型不一致,但都是數(shù)值型或字符型時,系統(tǒng)自動地將表達(dá)式的值轉(zhuǎn)換成被賦值變量的數(shù)據(jù)類型〔即把賦值號右邊的類型換成左邊的類型〕,然后再賦值。具體規(guī)定如下。〔1〕實型賦予整型,舍去小數(shù)局部。應(yīng)注意該實數(shù)不能超過整型的表示范圍?!?〕整型賦予實型,數(shù)值不變,但將以浮點形式存放,即增加小數(shù)局部〔小數(shù)局部的值為0〕〔3〕字符型賦予整型,由于字符型為1個字節(jié),而整型為2個字節(jié),故將字符的ASCII碼值放到整型量的低8位中,按原值的最高位補齊高8位,即進(jìn)行符號位擴展。〔4〕整型賦予字符型,只把低8位賦予字符量。59【例2.9】觀察以下程序運行結(jié)果,分析賦值類型的轉(zhuǎn)換。#include<stdio.h>main(){intia,ib=322;floatfx,fy=8.88;charc1=’\376’,c2;ia=fy;printf("int<--floatia=%d\n",ia);fx=ib;printf("float<--intfx=%f\n",fx);ia=c1;printf("int<--charia=%d\n",ia);c2=ib;printf("char<--intc2=%c\n",c2);}程序運行的結(jié)果為:int<--floatia=8float<--intfx=322.000000int<--charia=-2char<--intc2=B605.條件運算符和條件表達(dá)式條件運算符:?:條件表達(dá)式的一般形式表達(dá)式1?表達(dá)式2:表達(dá)式3例如:m<n?x:a+3a++>=10&&b-->20?a:bx=3+a>5?100:200C語言中唯一的三目運算符,要正確區(qū)分用?和:分隔的表達(dá)式涉及條件運算符的優(yōu)先級與結(jié)合性61條件運算符優(yōu)先級條件運算符優(yōu)先級高于賦值、逗號運算符,低于其他運算符例如:⑴m<n?x:a+3⑵a++>=10&&b-->20?a:b⑶x=3+a>5?100:200等價于:(m<n)?(x):(a+3)等價于:(a++>=10&&b-->20)
?a:b等價于:x=
((3+a>5)
?100:200)62條件運算符的結(jié)合性
條件運算符具有右結(jié)合性當(dāng)一個表達(dá)式中出現(xiàn)多個條件運算符時,應(yīng)該將位于最右邊的問號與離它最近的冒號配對,并按這一原那么正確區(qū)分各條件運算符的運算對象。例如:w<x?x+w:x<y?x:y
與w<x?x+w:(x<y?x:y)等價
與(w<x?x+w:x<y)?x:y不等價63運算符的優(yōu)先級和結(jié)合性優(yōu)先級指各種運算符號的運算優(yōu)先順序例如:算術(shù)運算優(yōu)先于關(guān)系運算算術(shù)運算中先*/后+-結(jié)合性指運算符號和運算對象的結(jié)合方向分為:從左向右(左結(jié)合)和從右向左(右結(jié)合)例如:算術(shù)運算符為左結(jié)合a-b+4賦值運算符為右結(jié)合a=b=5〔C語言規(guī)定見教材P297附錄B〕64表2.9運算符的優(yōu)先級及結(jié)合性優(yōu)先級運算符結(jié)合規(guī)則1()[]->從左至右2!~++---*&sizeof(type)從右至左345678*/%+―<<>><<=>>===!=&從左至右從左至右從左至右從左至右從左至右從左至右9101112131415^│&&||?:=+=-=*=/=%=&=^=│=>>=<<=·從左至右從左至右從左至右從左至右從右至左從右至左從左至右652.2.3位運算符位運算有6個運算符,即按位取反~,左移<<、右移>>、按位與&、按位或│和按位異或^。位運算符的運算對象只能是整型數(shù)據(jù)或字符型數(shù)據(jù),不能是實型數(shù)據(jù)運算對象一律按二進(jìn)制補碼參加運算,并按位進(jìn)行運算位運算的結(jié)果是一個整型數(shù)據(jù)66位邏輯運算符的運算規(guī)那么假設(shè)ai和bi均是一個二進(jìn)制位〔bit〕運算對象邏輯運算結(jié)果aibiai&biai|biai^bi?ai000001010111100110111100例如:假設(shè)a=10,b=010求a&b、a|b、a^b、?a671.按位與&按位與的運算規(guī)那么如下:0&0=01&0=00&1=01&1=1682.按位或│按位或的運算規(guī)那么如下:0│0=01│0=10│1=11│1=1693.按位異或^按位異或的運算規(guī)那么如下:0^0=01^0=10^1=11^1=0704.按位取反~按位取反~的運算規(guī)那么:~1=0~0=1715.左移位運算符<<左移位運算符“<<〞是雙目運算符。其功能是把“<<〞左邊的運算數(shù)的各二進(jìn)制位全部左移假設(shè)干位。由“<<〞右邊的數(shù)指定移動的位數(shù),高位丟棄,低位補0。726.右移位運算符>>右移位運算符“>>〞是雙目運算符。其功能是把“>>〞左邊的運算數(shù)的各二進(jìn)制位全部右移假設(shè)干位。由“>>〞右邊的數(shù)指定移動的位數(shù)。右移時,假設(shè)符號位為0,那么右邊填0;假設(shè)符號位為1,根據(jù)機器不同分為算術(shù)移位〔填充1〕和邏輯移位〔填充0〕。73其他運算符1.逗號運算符2.編譯時長度運算符〔sizeof〕3.引用結(jié)構(gòu)成員運算符〔·和->0〕4.圓括號()和方括號[]運算符5.指針運算符〔&和*〕741.逗號表達(dá)式運算逗號表達(dá)式的一般形式
表達(dá)式1,表達(dá)式2,……,表達(dá)式n逗號表達(dá)式的值從左向右,依次對表達(dá)式求值,最后得到表達(dá)式n
的值就是逗號表達(dá)式的值例如:⑴a=5,
a++,
a*3
表達(dá)式值為18,且a=6⑵t=1,t+5,t++表達(dá)式值為1,且t=2⑶x=(a=3*5,
a*4
)賦值表達(dá)式的值為60,且x=60,a=15752.長度運算符sizeof為單目運算符運算對象只能是變量名或數(shù)據(jù)類型標(biāo)識符
運算結(jié)果為該變量或該數(shù)據(jù)類型的長度76【例2.15】求各種數(shù)據(jù)類型在內(nèi)存中所占的位〔bit〕數(shù)。#include<stdio.h>#include<stdlib.h>main(){printf("char=%dbit\n",8*sizeof(char));printf("shortint=%dbit\n",8*sizeof(shortint));printf("int=%dbit\n",8*sizeof(10));printf("longint=%dbit\n",8*sizeof(10L));printf("f1oat=%dbit\n",8*sizeof(float));printf("double=%dbit\n",8*sizeof(2.3));printf("\"china\"=%dbit\n",8*sizeof("china"));return0;}77該程序在PC上的運行結(jié)果如下。char=8bitshortint=16bitint=32bitlongint=32bitf1oat=32bitdouble=64bit"china"=48bit783.引用結(jié)構(gòu)成員運算符〔·和->〕運算符“·〞和運算符“->〞均用于引用結(jié)構(gòu)和聯(lián)合的成員項。“·〞運算符用于結(jié)構(gòu)變量或聯(lián)合變量的成員項。而“->〞運算符用于引用結(jié)構(gòu)指針或聯(lián)合指針的目標(biāo)變量的成員項。794.圓括號()和方括號[]運算符在C語言中,圓括號()可用于表達(dá)式中,它的作用是增加括號內(nèi)運算符的優(yōu)先級。在訪問數(shù)組元素時,方括號[]內(nèi)的表達(dá)式提供了該數(shù)組元素的下標(biāo)值。805.指針運算符〔&和*〕1〕&2〕*811〕取地址運算符&為單目運算符運算對象只能是變量運算結(jié)果是變量的存儲地址例如有定義:inta,student;charch;可以對變量a、ch、student進(jìn)行&運算:&a&ch&student822〕*“*〞運算符與“&〞運算符互為逆運算,它返回位于這個地址內(nèi)的變量值,也是單目操作符。832.3運算中數(shù)據(jù)類型的轉(zhuǎn)換1.自動轉(zhuǎn)換具體規(guī)那么如下。〔1〕假設(shè)參與運算量的類型不同,那么先轉(zhuǎn)換成同一類型,然后進(jìn)行計算?!?〕轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進(jìn)行,以保證精度不降低。例如int型和long型運算時,先把int型轉(zhuǎn)換成long型后,再進(jìn)行計算?!?〕所有浮點運算都是以雙精度進(jìn)行的,即使僅含有float單精度量運算的表達(dá)式,也要轉(zhuǎn)換成double型后再進(jìn)行運算?!?〕char型和short型參與運算時,必須先轉(zhuǎn)換成int型?!?〕在賦值運算中,賦值運算符兩側(cè)量的數(shù)據(jù)類型不同時,賦值運算符右側(cè)量的類型將轉(zhuǎn)換為左側(cè)量的類型。如果右側(cè)量的數(shù)據(jù)類型長度比左邊長,將喪失一局部數(shù)據(jù),這樣會降低精度,喪失的局部按四舍五入向前一位舍入。84例如有定義:inta;char
ch;表達(dá)式:a-ch*2+35La-ch*2+35.852.3.2強制轉(zhuǎn)換強制轉(zhuǎn)換的一般形式(類型名)表達(dá)式例如:(int)('b'+3*x)%31/(float)a+6注意:(float)
22/5與(float)
(22/5)
不同錯誤的類型轉(zhuǎn)換:(int)b=a+5b=int
(3*a)86第3章程序控制
C
語言程序設(shè)計C語言程序設(shè)計第3章程序控制C清華大學(xué)出版社陳秀玲等編著87本章主要內(nèi)容結(jié)構(gòu)化程序設(shè)計根本結(jié)構(gòu);C語言根本語句;數(shù)據(jù)輸入與輸出;3種結(jié)構(gòu)程序設(shè)計;混合結(jié)構(gòu)程序設(shè)計。883.1程序控制根本結(jié)構(gòu)3.1.1結(jié)構(gòu)化程序設(shè)計思想結(jié)構(gòu)化程序設(shè)計由3種根本結(jié)構(gòu)組成:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。3.1.2程序設(shè)計步驟程序設(shè)計步驟主要有:〔1〕分析問題,建立模型;〔2〕設(shè)計算法,確定功能;〔3〕選擇語言,編寫程序;〔4〕調(diào)試程序,分析結(jié)果;〔5〕整理資料,撰寫文檔。89程序控制根本結(jié)構(gòu)順序結(jié)構(gòu)N-S結(jié)構(gòu)圖流程圖ABAB選擇結(jié)構(gòu)YNABP成立?PTFAB90程序控制根本結(jié)構(gòu)循環(huán)結(jié)構(gòu)NYP成立?A當(dāng)P成立時
A直到型循環(huán)
A當(dāng)P成立時YNAP成立?當(dāng)型循環(huán)N-S結(jié)構(gòu)圖流程圖913.2C語句概述表3.1C語句類型表達(dá)式語句函數(shù)調(diào)用語句控制語句復(fù)合語句空語句賦值語句92表達(dá)式后面加一個分號,構(gòu)成表達(dá)式語句x=3;y=y+5;x=a-b&&c||d;1.表達(dá)式語句賦值語句注意:分號是語句必不可少的一局部932.函數(shù)調(diào)用語句對程序中使用的變量、數(shù)組、函數(shù)等操作對象進(jìn)行定義、聲明的描述語句只起說明作用,不產(chǎn)生可執(zhí)行的機器指令代碼。
例如:printf("x=%d,y=%d\n",x,y);floatfunction(int,int);C程序由函數(shù)組成。函數(shù)的格式:函數(shù)名〔參數(shù)表〕{說明局部;執(zhí)行局部;}數(shù)據(jù)類型說明語句可執(zhí)行語句函數(shù)調(diào)用語句943.控制語句1.條件判斷語句
if語句 switch語句 2.循環(huán)控制語句
do…while() while()…for()…3.轉(zhuǎn)向語句
break、goto、continue、return954.復(fù)合語句用一對花括號“{}〞括起來的假設(shè)干條語句花括號中可以是說明語句、表達(dá)式語句、控制語句,也可以是復(fù)合語句例如:⑴if(a>b){max=a;min=b;}⑵{x=3;y=4;printf("%d%d",x,a);} 965.空語句例如“while((c=getchar())!='\n');〞本語句的功能是,只要從鍵盤輸入的字符不是回車鍵那么重新輸入。這里的循環(huán)體是“;〞即是空語句。976.賦值語句變量=表達(dá)式;例如“a=b=c=d=e=5;〞按照賦值運算符的右結(jié)合性,因此實際上等價于:e=5;d=e;c=d;b=c;a=b;983.3C程序中的數(shù)據(jù)輸入與輸出標(biāo)準(zhǔn)輸出輸入(printf和scanf)函數(shù)putchar()和getchar()函數(shù)puts()和gets()函數(shù)993.3.1.標(biāo)準(zhǔn)輸出函數(shù)函數(shù)調(diào)用的一般形式printf("格式控制字符串",輸出項表列)功能:按格式控制所指定的格式,在標(biāo)準(zhǔn)輸出設(shè)備上輸出參數(shù)2、…、參數(shù)n的值。例如有程序段:inta=123,b=100;printf("%d%d%d\n",a,b,a+b);printf("c=%d+%d=%d\n",a,b,a+b);100格式控制用雙引號括起的字符串,用于指定輸出數(shù)據(jù)的類型、格式、個數(shù)包括:普通字符和格式說明符照原樣輸出
printf("c=%d+%d=%d\n",a,b,a+b);格式說明符:指定輸出3個十進(jìn)制整型數(shù),分別為變量a、b、a+b的值101輸出格式說明符整型數(shù)據(jù)
%d以有符號十進(jìn)制形式輸出整型數(shù)%o以無符號八進(jìn)制形式輸出整型數(shù)%x以無符號十六進(jìn)制形式輸出整型數(shù)%u以無符號十進(jìn)制形式輸出整型數(shù)實型數(shù)據(jù)
%f以小數(shù)形式輸出實型數(shù)%e以指數(shù)形式輸出實型數(shù)%g按數(shù)值寬度最小的形式輸出實型數(shù)字符型數(shù)據(jù)
%c輸出一個字符%s輸出字符串其他
%%輸出字符%本身在%和格式符之間可以使用附加說明符102附加格式說明符l輸出長整型數(shù)(只可與d、o、x、u結(jié)合用)m指定數(shù)據(jù)輸出的寬度(即域?qū)挘?n對實型數(shù)據(jù),指定輸出n位小數(shù);對字符串,指定左端截取n個字符輸出+使輸出的數(shù)值數(shù)據(jù)無論正負(fù)都帶符號輸出-使數(shù)據(jù)在輸出域內(nèi)按左對齊方式輸出整數(shù)位數(shù)+小數(shù)位數(shù)+小數(shù)點自動對n位后小數(shù)四舍五入
例如:%ld——輸出十進(jìn)制長整型數(shù)%m.nf——右對齊,m位域?qū)?,n位小數(shù)或n個字符%-m.nf——左對齊103【例3.1】使用轉(zhuǎn)換說明符%c可以輸出單個字符。#include<stdio.h>main(){chara='O';
charb='K';chary='!';printf("%c%c%c\n",a,b,y);
}程序輸出:OK!104例3.2寫出以下程序的運行結(jié)果。main(){inta=125;longb=200;charc=’a’;printf("a1=%d,a2=%4d\n",a,a);printf("b1=%ld,b2=%5ld\n",b,b);printf("c1=%d,c2=%c\n",c,c);/*按%d格式輸出c的ASCII碼值*/}程序輸出:a1=125,a2=125b1=200,b2=200c1=97,c2=a105注意:printf函數(shù)格式控制中的格式說明符與輸出參數(shù)的個數(shù)和類型必須一一對應(yīng)。格式說明符的%和后面的描述符之間不能有空格。除%X、%E、%G外類型描述符必須是小寫字母。長整型數(shù)應(yīng)該用%ld〔或%lo、%lx、%lu〕格式輸出,否那么會出現(xiàn)輸出錯誤。printf函數(shù)的參數(shù)可以是常量、變量或表達(dá)式。在計算各參數(shù)值時,TurboC采用從右至左的順序求值。1062.標(biāo)準(zhǔn)輸入函數(shù)函數(shù)調(diào)用的一般形式scanf(格式控制,地址參數(shù)2…,地址參數(shù)n);功能:按格式控制指定的格式,從標(biāo)準(zhǔn)輸入設(shè)備(即鍵盤)交互輸入數(shù)據(jù),并依次存放到對應(yīng)地址參數(shù)指定的變量中(即將輸入值賦給變量)。
例如:scanf("%d%f",&a,&f);scanf("%o,%f",&b,&x);scanf("a=%d,b=%d",&a,&b);107格式控制用雙引號括起的字符串,用于指定輸入數(shù)據(jù)的類型、格式、個數(shù)以及輸入的形式
包括:普通字符和格式說明符照原樣輸入
scanf("a=%d,b=%d",&a,&b);格式說明符:指定輸入2個十進(jìn)制整型數(shù)賦給變量a和b108輸入格式說明符整型數(shù)據(jù)
%d輸入十進(jìn)制整型數(shù)%u輸入無符號的十進(jìn)制整型數(shù)%o輸入八進(jìn)制整型數(shù)%x輸入十六進(jìn)制整型數(shù)實型數(shù)據(jù)
%f輸入小數(shù)形式的單精度實型數(shù)%e輸入指數(shù)形式的單精度實型數(shù)字符型數(shù)據(jù)
%c輸入單個字符%s輸入一個字符串在%和格式符之間可以使用附加說明符109附加格式說明符l與d、o、x、u結(jié)合輸入長整型數(shù)與f結(jié)合輸入double型數(shù)m指定數(shù)據(jù)輸入的寬度(即域?qū)挘?忽略讀入的數(shù)據(jù)(即不將讀入數(shù)據(jù)賦給相應(yīng)變量)例如:%ld、%lo——輸入十進(jìn)制、八進(jìn)制長整型數(shù)%lf、%le——輸入雙精度實型數(shù)%mf——輸入m位數(shù)〔域?qū)挕?*d——忽略輸入的一個整型數(shù)對float和double型指整數(shù)位數(shù)+小數(shù)點+小數(shù)位數(shù)110例如:scanf("%d%d%d",&a,&b,&c);輸入3個整型十進(jìn)制數(shù),以空白符〔空格、tab鍵或回車鍵〕分隔scanf("%d,%o,%f",&a,&b,&x);輸入3個數(shù),以“,〞分隔scanf("a=%d,b=%d",&a,&b);輸入的形式是:a=32,b=28〔普通字符要照原樣輸入〕111程序:#include<stdio.h>main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);}當(dāng)程序運行時,假設(shè)輸入數(shù)據(jù):123<回車>,那么程序的運行結(jié)果為:123a=1,b=2,c=3112使用scanf函數(shù)應(yīng)注意:要求在程序運行中輸入數(shù)據(jù),輸入的數(shù)據(jù)個數(shù)和類型必須與格式說明符一一對應(yīng)。地址參數(shù)形式:&變量名〔除數(shù)組或指針變量〕格式控制中有普通字符時,必須照原樣輸入。格式控制中無普通字符時,輸入的數(shù)值型數(shù)據(jù)和字符串用空白符分隔,字符型數(shù)據(jù)不必分隔。double型數(shù)據(jù)輸入時,必須用%lf或%le格式實型數(shù)輸入時域?qū)挷荒苡胢.n形式的附加說明為了減少不必要的輸入量,除了逗號、分號、空格符以外,格式控制中盡量不要出現(xiàn)普通字符,也不要使用'\n'、'\t'等轉(zhuǎn)義字符113scanf("%c%c%c",&ch1,&ch2,&ch3);要輸入:abc不能輸入:abc注意數(shù)值型數(shù)據(jù)與char型數(shù)據(jù)的混合輸入注意〔續(xù)〕:格式符之間假設(shè)無普通字符,那么:輸入的數(shù)值型數(shù)據(jù)用空白符分隔輸入的char型數(shù)據(jù)不必分隔例如:scanf("%d%d",&m,&n);scanf("%c",&ch);錯誤輸入:3228a
正確輸入:3228a
1143.3.2putchar()和getchar()函數(shù)主要內(nèi)容:字符輸出函數(shù)字符輸入函數(shù)1151.字符輸出函數(shù)函數(shù)調(diào)用的一般形式putchar(ch)功能:在標(biāo)準(zhǔn)輸出設(shè)備〔即顯示器屏幕〕上輸出一個字符。例如:putchar('b');putchar('\n');putchar('\101');putchar(st);116說明putchar是C語言的標(biāo)準(zhǔn)庫函數(shù),使用時必須加編譯預(yù)處理命令:#include"stdio.h"
或
#include<stdio.h>【【例3.5】putchar()函數(shù)的應(yīng)用舉例。#include<stdio.h>main(){chara,b,c;a='H';b='I';c='!';putchar(a);putchar(b);putchar(c);}也可改為A=72;b=73;輸出結(jié)果:HI!例jc3_51172.字符輸入函數(shù)主要內(nèi)容:格式輸入函數(shù)118函數(shù)調(diào)用的一般形式getchar()功能:從標(biāo)準(zhǔn)輸入設(shè)備〔即鍵盤〕上交互輸入一個字符。例如:getchar();c=getchar();printf("%c\n",getchar());119例如:【例3.7】觀察下面程序中g(shù)etchar()與putchar()的使用。該程序的功能是:輸入一個小寫字母,轉(zhuǎn)變?yōu)榇髮懽帜篙敵觥?include<stdio.h>main(){chara;a=getchar();putchar(a-32);}輸出結(jié)果是:dD
120說明:getchar是C語言的標(biāo)準(zhǔn)庫函數(shù),使用時必須加編譯預(yù)處理命令:#include"stdio.h"
或
#include<stdio.h>getchar函數(shù)需要交互輸入,接收到輸入字符之后才繼續(xù)執(zhí)行程序。連續(xù)使用getchar函數(shù)時,要注意字符的輸入形式,例如執(zhí)行如下程序段:charch1,ch2;ch1=getchar();ch2=getchar();必須連續(xù)輸入兩個字符,中間不能有其他字符1213.3.3puts()和gets()函數(shù)puts()函數(shù)gets()函數(shù)1221.puts()函數(shù)putchar()函數(shù)的功能是向標(biāo)準(zhǔn)輸出設(shè)備〔通常指顯示器或打印機〕輸出一個字符,而puts()函數(shù)是向標(biāo)準(zhǔn)輸出設(shè)備輸出字符串,其一般調(diào)用格式為:puts(char*ch);其中ch為字符串或字符數(shù)組。功能:將ch表示的字符串向標(biāo)準(zhǔn)輸出設(shè)備輸出。1232.gets()函數(shù)getchar()函數(shù)的功能是從標(biāo)準(zhǔn)輸入設(shè)備〔通常指鍵盤〕輸入一個字符,而gets()函數(shù)是從標(biāo)準(zhǔn)輸入設(shè)備〔通常指鍵盤〕輸入一串字符。其一般調(diào)用格式為:gets(char*ch);其中ch為字符串或字符數(shù)組。功能:從標(biāo)準(zhǔn)輸入設(shè)備讀取字符串。1243.4順序結(jié)構(gòu)程序設(shè)計變量定義變量賦值運算處理輸出結(jié)果可用:變量初始化賦值語句輸入函數(shù)調(diào)用語句注意各個語句的順序所謂順序結(jié)構(gòu)就是按照程序編寫的先后順序來執(zhí)行,程序語句中前面的先執(zhí)行,后面的后執(zhí)行。125【例3.11】輸入一個攝氏溫度,要求輸出華氏溫度。公式為F=5/9*C+32其中C代表攝氏溫度,F(xiàn)代表華氏溫度。編程序如下。main(){floatC,F;printf("pleaseinputCvalue");/*在鍵盤上隨機輸入攝氏溫度的值前的提示說明*/scanf("%f",&C);/*從鍵盤上隨機輸入攝氏溫度的值*/F=5.0/9*C+32;printf("F=%5.2f\n",F);}運行程序,當(dāng)從鍵盤上輸入37↙〔↙表示回車〕,輸出為:pleaseinputCvalue37F=52.555557126【例3.12】編程序?qū)崿F(xiàn)兩個變量的值互換,設(shè)變量x=10,y=20。編程序如下。
main()
{intx,y,t;
printf("inputxandy:");/*輸入數(shù)據(jù)前的提示文本*/
scanf("%f,%f",&x,&y);
t=x;
x=y;
y=t;
printf("x=%f,y=%f\n",x,y);}
運行程序,當(dāng)輸入:10□20↙〔↙表示回車,□表示空格〕,輸出為:
inputxandy:1020x=20,y=10
運行程序,當(dāng)輸入:10□20↙〔↙表示回車,□表示空格〕,輸出為:
inputxandy:1020x=20,y=10
運行程序,當(dāng)輸入:10□20↙〔↙表示回車,□表示空格〕,輸出為:
inputxandy:1020x=20,y=10
運行程序,當(dāng)輸入:10□20↙〔↙表示回車,□表示空格〕,輸出為:inputxandy:1020x=20,y=10
inputxandy:1020x=20,y=10127舉例:【例3.14】三條邊,求三角形面積和周長。其中:設(shè)定義:整型變量a、b、c實型變量s、area128程序如下:運行程序,當(dāng)輸入5,6,7↙,輸出結(jié)果為:inputa,b,c5,6,7area=14.696939m=18.000000實際上還需要判斷a、b、c是否能構(gòu)成三角形,即應(yīng)該進(jìn)行選擇判斷處理圖3.10求三角形面積和周長的N-S框圖#include"math.h"/*程序中利用了求平方根函數(shù)sqrt()*/main(){floata,b,c,s,area,m;/*用a,b,c來表示三角形的三邊長,用area表示面積,m表示周長*/printf("inputa,b,c\n");scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s―a)*(s―b)*(s―c));m=a+b+c;printf("area=%fm=%f\n",area,m);}1293.5選擇結(jié)構(gòu)程序設(shè)計選擇結(jié)構(gòu)程序語句簡單if語句實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計if-else語句實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計if-elseif語句實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計switch語句實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計多種選擇結(jié)構(gòu)語句程序設(shè)計條件運算符實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計1303.5.1選擇結(jié)構(gòu)程序語句本節(jié)主要內(nèi)容1.if語句if語句的一般形式if語句的嵌套2.switch語句switch語句的一般形式break語句1311.if語句if語句的一般形式if語句的嵌套1321〕簡單分支語句語句一般格式if〔表達(dá)式〕語句;功能:計算表達(dá)式的值,如果是一個非0值〔即邏輯真〕,就執(zhí)行內(nèi)嵌語句,否那么〔即邏輯假〕跳過內(nèi)嵌語句,順序執(zhí)行后續(xù)語句。內(nèi)嵌語句,可為:賦值語句函數(shù)調(diào)用語句控制語句復(fù)合語句空語句可為算術(shù)、關(guān)系、邏輯、賦值等表達(dá)式133簡單分支語句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}
表達(dá)式非0
TF
語句N-S結(jié)構(gòu)圖語句流程圖NY表達(dá)式非0?1342〕if-else語句語句一般格式if〔表達(dá)式〕語句1;else語句2;功能:計算表達(dá)式的值,如果它的值是一個非0值〔邏輯真〕,就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否那么跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。1352〕if-else語句語句一般格式if〔表達(dá)式〕語句1;else語句2;功能:計算表達(dá)式的值,如果它的值是一個非0值〔邏輯真〕,就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否那么跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。1362〕if-else語句語句一般格式if〔表達(dá)式〕語句1;else語句2;功能:計算表達(dá)式的值,如果它的值是一個非0值〔邏輯真〕,就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否那么跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。1372〕if-else語句語句一般格式if〔表達(dá)式〕語句1;else語句2;功能:計算表達(dá)式的值,如果它的值是一個非0值〔邏輯真〕,就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否那么跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。1382〕if-else語句語句一般格式if〔表達(dá)式〕語句1;else語句2;功能:計算表達(dá)式的值,如果它的值是一個非0值〔邏輯真〕,就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否那么跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。1393〕ifelseif語句語句一般格式if〔表達(dá)式1〕語句1;elseif〔表達(dá)式2〕語句2;……elseif〔表達(dá)式m〕語句m;else語句n;功能:依次計算并判斷表達(dá)式i,為非0時執(zhí)行后面的語句,都為0時,執(zhí)行語句n無論執(zhí)行完那個語句分支,都轉(zhuǎn)到后續(xù)語句140多重分支語句的算法流程圖表達(dá)式2?表達(dá)式1?語句n語句1
語句2
語句m…YNYNNY表達(dá)式m?141多重分支語句的算法N-S結(jié)構(gòu)圖表達(dá)式1?
TF
表達(dá)式2?語句1TF
語句2…
表達(dá)式m?TF
語句m語句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;142
4)if語句嵌套的形式簡單if語句的嵌套形式if(表達(dá)式)if語句雙重〔或多重〕分支if語句的嵌套形式if(表達(dá)式)if語句elseif語句可以是各種形式的if語句可以是各種形式的if語句如果是簡單if語句,必須用“{}〞括起1432.switch語句1)簡單switch語句2)switch語句嵌套1441)簡單switch語句switch語句的一般形式switch〔表達(dá)式〕{case常量表達(dá)式1:語句序列1case常量表達(dá)式2:語句序列2……case常量表達(dá)式n:語句序列ndefault:語句序列n+1}功能:計算表達(dá)式的值,與常量表達(dá)式的值比較,等于第i個值時,順序執(zhí)行語句序列i、i+1、…、n+1假設(shè)與所有常量表達(dá)式值都不相等,執(zhí)行語句序列n+1。145switch語句的算法描述N-S結(jié)構(gòu)圖計算表達(dá)式常量表達(dá)式1語句序列1常量表達(dá)式2語句序列2…………常量表達(dá)式n語句序列ndefault語句序列n+1例如:switch(a){case5:printf("&");case2:printf("#");default:printf("$");}當(dāng)a等于5,輸出:$當(dāng)a等于2,輸出:#$當(dāng)a是其他值,輸出:$146說明:“case常量表達(dá)式i:〞等價于語句標(biāo)號,計算出的表達(dá)式值等于哪個語句標(biāo)號,就從哪個位置開始順序向下執(zhí)行語句序列?!嗾Z句位置影響運行結(jié)果例如:switch(a){case2:printf("#");default:printf("$");case5:printf("&");}switch與break語句結(jié)合才能實現(xiàn)程序的分支break;break;break;1472)switch語句嵌套switch語句的格式:switch(表達(dá)式11){case常量表達(dá)式11:語句11;switch〔表達(dá)式2〕{語句1;case常量表達(dá)式21:語句21;case常量表達(dá)式22:語句22;…}case常量表達(dá)式12:語句12;switch〔表達(dá)式3〕{語句2;case常量表達(dá)式31:語句31;case常量表達(dá)式32:語句32;…}…語句1n;default:語句1n+1;}148
3.5.2簡單if語句實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計【例3.15】求給定整數(shù)的絕對值。假設(shè)x≥0,那么x即為所求假設(shè)x<0,那么―x為x的絕對值。思路:149程序:#include"stdio.h"main(){intx,y;printf("pleaseinputx:");scanf("%d",&x);y=x;if(x<0)y=―x;printf("x=%d,|x|=%d\n",x,y);}1503.5.3if-else語句實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計【例3.17】輸入三角形三邊長,求三角形的面積和周長。#include<math.h>main(){floata,b,c,s,area,m;/*用a,b,c來表示三角形的三邊長,用area表示面積,m表示周長*/printf("inputa,b,c\n");scanf("%f,%f,%f",&a,&b,&c);if(a+b>candb+c>aanda+c>b){s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));m=a+b+c;printf("area=%fm=%f\n",area,m);elseprintf("Yourinputnotmeettherequirement,pleasereinput\n");}1513.5.4if-elseif語句實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計
【例3.19】輸入學(xué)生成績,輸出相應(yīng)的成績和等級〔90~100A級、80~89B級、70~79C級、60~69D級、0~59E級〕。152#include"stdio.h"main(){floatx;printf("pleaseinputx(0<=x<=100)\n");scanf("%f",&x);if(x>100||x<0)printf("x=%fdataerror!",x);elseif(x>=90)printf("x=%fisA\n",x);elseif(x>=80)printf("x=%fisB\n",x);elseif(x>=70)printf("x=%fisC\n",x);elseif(x>=60)printf("x=%fisD\n",x);elseprintf("x=%fisE\n",x);}1533.5.5switch語句實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計【例3.20】用switch語句實現(xiàn)例3.19。
main(){floatx;intb;
printf("pleaseinputx:\n");scanf("%f",&x);b=(int)(x)/10;
switch(b)
{case10:
case9:printf("x=%.2fisA\n",x);
case8:printf("x=%.2fisB\n",x);
case7:printf("x=%.2fisC\n",x);
case6:printf("x=%.2fisD\n",x);
case5:case4:case3:
case2:case1:case0:printf("x=%.2fisE\n",x);
default:printf("dataerror!\n");}}1543.5.6多種選擇結(jié)構(gòu)語句程序設(shè)計如果if的內(nèi)嵌語句中又使用了一個if語句,那么構(gòu)成if語句的嵌套。這里以switch語句嵌套為例進(jìn)行介紹。155【例3.21】輸入星期的第一個字母,判斷出對應(yīng)星期的英文(Monday~sunday〕,如果第一個字母有相同〔例如tuesday和thursday〕,那么再次輸入第二個字母,繼續(xù)判斷第二個字母,進(jìn)而判斷出對應(yīng)的星期的英文。156#include<stdio.h>main(){
char
c;
printf("please
enter
first
char:");
scanf("%c",&c);
switch(c)
{
case
’m’:
printf("today
is
mondy");
break;
case
’w’:
printf("today
is
wednesday");
break;
case
’f’:
printf("today
is
friday");
break;
case
’t’:
{printf("please
enter
second
char:");
scanf("%c",&c);
157switch(c){
case
’u’:printf("today
is
tuesday");
break;
case
’h’:printf("today
is
thursday");
break;
}
break;
case
’s’:{printf("please
enter
second
char:");
scanf("%c",&c);
switch(c){
case
’a’:printf("today
is
saturday");
case
’u’:printf("today
is
sunday");}
break;
}158再例如:⑴if(c<=100)
if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else
if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")與哪個if配對?1593.5.7條件運算符實現(xiàn)選擇結(jié)構(gòu)程序設(shè)計條件運算符的一般格式為:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>功能:先求出表達(dá)式1的值,如果為真(即非0〕,那么求表達(dá)式2的值,并將其作為整個表達(dá)式的結(jié)果;如果表達(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中地生會考試卷及答案
- 叉車考試實操試題及答案
- 護(hù)士衛(wèi)生招聘試題及答案
- 2025-2026人教版五年級期末語文測試
- 2025-2026七年級地理上學(xué)期測試湘教版卷
- 《東北草甸草原家畜混合放牧技術(shù)規(guī)程》征求意見稿
- 衛(wèi)生室藥房管理制度
- 回轉(zhuǎn)窯衛(wèi)生管理制度
- 品牌衛(wèi)生巾代理制度
- 外包工職業(yè)衛(wèi)生管理制度
- 2025年寵物疫苗行業(yè)競爭格局與研發(fā)進(jìn)展報告
- 企業(yè)安全生產(chǎn)責(zé)任培訓(xùn)課件
- 綠化防寒合同范本
- 2025年中國礦產(chǎn)資源集團所屬單位招聘筆試參考題庫附帶答案詳解(3卷)
- 煙草山東公司招聘考試真題2025
- 海爾管理會計案例分析
- 水果合同供貨合同范本
- 酒吧宿舍管理制度文本
- 數(shù)字化教學(xué)平臺的數(shù)據(jù)隱私保護(hù)策略
- TCD經(jīng)顱多普勒課件
- 2025年考研英語真題試卷及答案
評論
0/150
提交評論