C程序設(shè)計(jì)及應(yīng)用教程第2章數(shù)據(jù)類(lèi)型與流程控制_第1頁(yè)
C程序設(shè)計(jì)及應(yīng)用教程第2章數(shù)據(jù)類(lèi)型與流程控制_第2頁(yè)
C程序設(shè)計(jì)及應(yīng)用教程第2章數(shù)據(jù)類(lèi)型與流程控制_第3頁(yè)
C程序設(shè)計(jì)及應(yīng)用教程第2章數(shù)據(jù)類(lèi)型與流程控制_第4頁(yè)
C程序設(shè)計(jì)及應(yīng)用教程第2章數(shù)據(jù)類(lèi)型與流程控制_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C程序設(shè)計(jì)及應(yīng)用教程第2章數(shù)據(jù)類(lèi)型與流程控制Contents本章目錄C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)章節(jié)內(nèi)容概覽01C語(yǔ)言基本數(shù)據(jù)類(lèi)型02運(yùn)算符與表達(dá)式03順序結(jié)構(gòu)與輸入輸出04條件分支結(jié)構(gòu)05循環(huán)結(jié)構(gòu)與流程控制CHAPTER01C語(yǔ)言基本數(shù)據(jù)類(lèi)型從整型、浮點(diǎn)型到字符型,理解數(shù)據(jù)存儲(chǔ)的底層邏輯DataTypesC語(yǔ)言數(shù)據(jù)類(lèi)型體系概覽C語(yǔ)言數(shù)據(jù)類(lèi)型體系以基本類(lèi)型為核心原子單元,通過(guò)構(gòu)造類(lèi)型實(shí)現(xiàn)數(shù)據(jù)組合,借助指針類(lèi)型直接操作內(nèi)存地址。基本數(shù)據(jù)類(lèi)型int整型—存儲(chǔ)整數(shù),通常占4字節(jié),范圍約±21億,是最常用的數(shù)值類(lèi)型float/double—浮點(diǎn)型存儲(chǔ)小數(shù),float精度約7位,double精度約15位char字符型—占1字節(jié),本質(zhì)為0-255整數(shù),通過(guò)ASCII編碼映射為可顯示字符int·float·char構(gòu)造數(shù)據(jù)類(lèi)型數(shù)組—相同類(lèi)型元素的有序集合,通過(guò)下標(biāo)訪問(wèn),支持一維和多維結(jié)構(gòu)struct結(jié)構(gòu)體—將不同類(lèi)型數(shù)據(jù)組合為邏輯整體,如學(xué)生信息記錄enum枚舉—為整型常量賦予語(yǔ)義化名稱(chēng),提高代碼可讀性與維護(hù)性array·struct·enum指針與特殊類(lèi)型pointer指針—存儲(chǔ)變量?jī)?nèi)存地址,支持動(dòng)態(tài)內(nèi)存分配和函數(shù)參數(shù)傳遞void空類(lèi)型—不表示任何數(shù)據(jù),用于函數(shù)返回值和無(wú)類(lèi)型指針聲明typedef—為現(xiàn)有類(lèi)型創(chuàng)建別名,簡(jiǎn)化復(fù)雜類(lèi)型聲明并增強(qiáng)代碼可移植性pointer·voidDATATYPES·CLANGUAGE整型數(shù)據(jù):常量表示與變量定義整型數(shù)據(jù)支持十進(jìn)制、八進(jìn)制和十六進(jìn)制三種常量表示法,變量通過(guò)short/int/long修飾符控制存儲(chǔ)寬度,signed/unsigned決定是否有符號(hào)。選擇合適的整型規(guī)格是避免溢出和優(yōu)化內(nèi)存的關(guān)鍵。常見(jiàn)整型修飾符存儲(chǔ)規(guī)格對(duì)比類(lèi)型字節(jié)數(shù)有符號(hào)范圍無(wú)符號(hào)范圍shortint2-32,768~32,7670~65,535int4-2,147,483,648~2,147,483,6470~4,294,967,295longint4/8平臺(tái)相關(guān)平臺(tái)相關(guān)longlongint8-9.2×101?~9.2×101?0~1.8×101?不同整型修飾符決定了變量的存儲(chǔ)空間和數(shù)值范圍,選擇時(shí)需兼顧精度需求與內(nèi)存效率01三種常量表示法十進(jìn)制直接書(shū)寫(xiě)如123;八進(jìn)制以0開(kāi)頭如0173(=十進(jìn)制123);十六進(jìn)制以0x開(kāi)頭如0x7B02變量存儲(chǔ)寬度shortint占2字節(jié)、int通常4字節(jié)、longint占4或8字節(jié)、longlongint固定8字節(jié)03unsigned修飾符將符號(hào)位用于數(shù)值存儲(chǔ),unsignedint范圍從-21億~21億變?yōu)?~42億,適合計(jì)數(shù)器場(chǎng)景04后綴標(biāo)記常量后加u表示無(wú)符號(hào)、加l表示長(zhǎng)整型,如123UL即無(wú)符號(hào)長(zhǎng)整型,編譯器據(jù)此確定類(lèi)型匹配DataTypes·FloatingPoint浮點(diǎn)型數(shù)據(jù):精度控制與常見(jiàn)陷阱浮點(diǎn)型數(shù)據(jù)通過(guò)float/double/longdouble三檔精度滿(mǎn)足不同計(jì)算需求,但二進(jìn)制浮點(diǎn)表示法天然存在精度損失。在涉及金額計(jì)算、條件判斷等場(chǎng)景時(shí),必須采用epsilon比較法而非直接等值判斷,否則將引發(fā)難以排查的邏輯錯(cuò)誤。精度分檔float占4字節(jié)約7位有效數(shù)字,double占8字節(jié)約15–16位,longdouble占10–16字節(jié)提供更高精度。4/8/16B類(lèi)型后綴浮點(diǎn)常量默認(rèn)視為double,若需float類(lèi)型須加f或F后綴如3.14f,避免隱式類(lèi)型轉(zhuǎn)換。3.14f安全比較浮點(diǎn)比較不應(yīng)使用==運(yùn)算符,而應(yīng)判斷兩數(shù)之差的絕對(duì)值是否小于預(yù)設(shè)閾值epsilon如1e-6。ε=1e-6科學(xué)計(jì)數(shù)1.23e-4等價(jià)于0.000123,e后必須為整數(shù),適合表示極大或極小的數(shù)值。1.23e-4FUNDAMENTALS·DATATYPES字符型數(shù)據(jù):ASCII編碼與整數(shù)本質(zhì)字符型char本質(zhì)是1字節(jié)整數(shù),通過(guò)ASCII編碼與可顯示字符建立映射關(guān)系。理解這一底層機(jī)制是處理文本數(shù)據(jù)的前提。01字符常量存儲(chǔ):用單引號(hào)括起如'A',實(shí)際存儲(chǔ)其ASCII碼值65,占1字節(jié)內(nèi)存,可視為-128~127的整數(shù)1byte02算術(shù)運(yùn)算能力:'A'+1等于'B'、'a'-'A'等于32,大小寫(xiě)轉(zhuǎn)換正是基于ASCII碼值差32的規(guī)律Δ3203轉(zhuǎn)義字符體系:以反斜杠開(kāi)頭表示特殊含義——'\n'換行、'\t'制表、'\0'字符串結(jié)束符、'\\'反斜杠本身\n\004字符串內(nèi)存模型:雙引號(hào)括起如"Hello",編譯器自動(dòng)在末尾添加'\0'結(jié)束符,因此"A"實(shí)際占2字節(jié)+1\0Syntax·DataTypes常量與變量:定義規(guī)則與命名規(guī)范C語(yǔ)言要求變量先定義后使用,常量通過(guò)直接量或#define宏定義聲明。標(biāo)識(shí)符命名必須遵循字母/數(shù)字/下劃線組合且不以數(shù)字開(kāi)頭的規(guī)則,良好的命名習(xí)慣是代碼可讀性和可維護(hù)性的基礎(chǔ)。常量定義常量分為直接常量如123、3.14、'A'和符號(hào)常量,符號(hào)常量通過(guò)#definePI3.14159定義,編譯前預(yù)處理器會(huì)進(jìn)行文本替換#define變量定義變量定義格式為"類(lèi)型名變量名"如intcount,定義時(shí)可初始化如intcount=0,未初始化的局部變量值不確定intcount=0標(biāo)識(shí)符規(guī)則標(biāo)識(shí)符由字母、數(shù)字、下劃線組成,首字符必須是字母或下劃線,不能與32個(gè)C語(yǔ)言關(guān)鍵字如int、return重名A-Z_0-9const修飾符const定義只讀變量如constintMAX=100,編譯時(shí)檢查類(lèi)型安全,比#define宏定義更具調(diào)試優(yōu)勢(shì)constintCLANGUAGE·TYPESYSTEM數(shù)據(jù)類(lèi)型混合運(yùn)算與轉(zhuǎn)換規(guī)則C語(yǔ)言在混合類(lèi)型運(yùn)算時(shí)自動(dòng)將低精度類(lèi)型向高精度方向提升,遵循char/short→int→unsigned→long→float→double的轉(zhuǎn)換鏈。理解自動(dòng)轉(zhuǎn)換方向與強(qiáng)制轉(zhuǎn)換的截?cái)囡L(fēng)險(xiǎn),是避免精度丟失和溢出錯(cuò)誤的關(guān)鍵。自動(dòng)類(lèi)型轉(zhuǎn)換優(yōu)先級(jí)從低到高層級(jí)數(shù)據(jù)類(lèi)型說(shuō)明1char,short首先提升為int(整型提升)2int基本整型,參與后續(xù)比較3unsignedint無(wú)符號(hào)整型優(yōu)先級(jí)高于有符號(hào)4longint長(zhǎng)整型,范圍更大5float單精度浮點(diǎn)6double雙精度浮點(diǎn),最高精度混合運(yùn)算時(shí)數(shù)據(jù)類(lèi)型自動(dòng)向高精度方向轉(zhuǎn)換,賦值時(shí)則向左側(cè)變量類(lèi)型轉(zhuǎn)換01自動(dòng)轉(zhuǎn)換方向char和short先提升為int,再按unsigned→long→float→double逐級(jí)轉(zhuǎn)換,結(jié)果取最高精度類(lèi)型02強(qiáng)制類(lèi)型轉(zhuǎn)換語(yǔ)法為(類(lèi)型名)表達(dá)式,如(int)3.9截?cái)酁?,僅臨時(shí)改變不修改原變量03賦值轉(zhuǎn)換規(guī)則右側(cè)表達(dá)式類(lèi)型自動(dòng)轉(zhuǎn)換為左側(cè)變量類(lèi)型,高精度向低精度賦值可能發(fā)生截?cái)嗷蚓葋G失04整數(shù)除法陷阱7/2結(jié)果為3而非3.5,需寫(xiě)7.0/2或(float)7/2才能得到浮點(diǎn)結(jié)果CHAPTER02運(yùn)算符與表達(dá)式掌握算術(shù)、賦值、關(guān)系、邏輯四大運(yùn)算符及其優(yōu)先級(jí)規(guī)則CLANGUAGE·OPERATORS算術(shù)運(yùn)算符與賦值運(yùn)算符C語(yǔ)言算術(shù)運(yùn)算符涵蓋加減乘除和取余五種基本運(yùn)算,自增自減運(yùn)算符的前綴/后綴形式在復(fù)雜表達(dá)式中行為不同。基本算術(shù)運(yùn)算+-*/%五種基本運(yùn)算,其中%取余運(yùn)算符僅適用于整數(shù)類(lèi)型,例如7%3的計(jì)算結(jié)果為15operators自增與自減前綴++i先加后用,后綴i++先用后加,在循環(huán)控制與函數(shù)參數(shù)傳遞場(chǎng)景中行為差異顯著++ivsi++復(fù)合賦值運(yùn)算+=-=*=/=%=簡(jiǎn)化代碼書(shū)寫(xiě),如x+=5等價(jià)于x=x+5,編譯器可優(yōu)化為單條機(jī)器指令+=shorthand運(yùn)算符優(yōu)先級(jí)括號(hào)優(yōu)先級(jí)最高,其次為*/%,再次為+/-,同級(jí)運(yùn)算符按從左到右的順序結(jié)合求值()highestOperators關(guān)系運(yùn)算符與邏輯運(yùn)算符關(guān)系運(yùn)算符返回整型0或1表示假或真,邏輯運(yùn)算符通過(guò)&&、||、!組合多個(gè)條件。短路求值機(jī)制使得&&左假或||左真時(shí)跳過(guò)右側(cè)計(jì)算,這一特性既優(yōu)化了執(zhí)行效率,也為安全的指針檢查和條件守衛(wèi)提供了語(yǔ)言層面的支持。關(guān)系運(yùn)算符包括>、<、>=、<=、==、!=六種,結(jié)果為int型0或1。注意==判斷相等與=賦值的區(qū)別。==vs=邏輯與&&兩側(cè)均為真結(jié)果才為真,具有短路特性——左操作數(shù)為假時(shí)直接返回0,不計(jì)算右操作數(shù)。Short-circuit邏輯或||任一側(cè)為真結(jié)果即為真,左操作數(shù)為真時(shí)直接返回1,不計(jì)算右操作數(shù)。Lazyeval邏輯非!單目運(yùn)算符,將非零值轉(zhuǎn)為0、零值轉(zhuǎn)為1,優(yōu)先級(jí)高于所有雙目運(yùn)算符。UnaryOperators&Precedence條件運(yùn)算符、逗號(hào)運(yùn)算符與優(yōu)先級(jí)總結(jié)條件運(yùn)算符?:是C語(yǔ)言唯一的三目運(yùn)算符,可替代簡(jiǎn)單if-else賦值。逗號(hào)運(yùn)算符優(yōu)先級(jí)最低,用于串聯(lián)多個(gè)表達(dá)式。掌握運(yùn)算符優(yōu)先級(jí)層次是正確理解和編寫(xiě)復(fù)雜表達(dá)式的基礎(chǔ),必要時(shí)使用括號(hào)明確運(yùn)算順序。條件運(yùn)算符語(yǔ)法為條件?表達(dá)式1:表達(dá)式2條件為真時(shí)取表達(dá)式1的值,否則取表達(dá)式2的值。三目結(jié)構(gòu)使代碼簡(jiǎn)潔緊湊。max=a>b?a:b;Ternary?:逗號(hào)運(yùn)算符從左到右依次計(jì)算各表達(dá)式整個(gè)逗號(hào)表達(dá)式的值為最后一個(gè)表達(dá)式的值。優(yōu)先級(jí)最低,常用于for循環(huán)初始化或串聯(lián)多個(gè)操作。for(i=0,j=0;i<n;i++,j++)LowestPrecedence優(yōu)先級(jí)層次從高到低依次為:?jiǎn)文俊阈g(shù)→移位→關(guān)系→位運(yùn)算→邏輯→條件→賦值→逗號(hào)同級(jí)運(yùn)算符按結(jié)合性決定求值順序,多數(shù)為左結(jié)合,賦值和單目為右結(jié)合。8Levels括號(hào)明確順序?qū)嶋H編程不必死記優(yōu)先級(jí)表對(duì)不確定的運(yùn)算順序使用括號(hào)明確表達(dá),既提高代碼可讀性,也便于后續(xù)維護(hù)修改。result=(a+b)*(c-d);Use()CHAPTER03順序結(jié)構(gòu)與輸入輸出掌握printf、scanf格式化輸入輸出與字符輸入輸出函數(shù)CLanguageFundamentals順序結(jié)構(gòu)與C語(yǔ)句分類(lèi)順序結(jié)構(gòu)按語(yǔ)句書(shū)寫(xiě)順序依次執(zhí)行,是程序設(shè)計(jì)的默認(rèn)執(zhí)行方式。C語(yǔ)言語(yǔ)句分為控制語(yǔ)句、函數(shù)調(diào)用語(yǔ)句、表達(dá)式語(yǔ)句、空語(yǔ)句和復(fù)合語(yǔ)句五類(lèi),復(fù)合語(yǔ)句通過(guò)花括號(hào)將多條語(yǔ)句組合為邏輯整體,是構(gòu)建分支和循環(huán)體的基礎(chǔ)。順序執(zhí)行按書(shū)寫(xiě)順序自上而下依次執(zhí)行,每條語(yǔ)句執(zhí)行且僅執(zhí)行一次自上而下表達(dá)式語(yǔ)句由表達(dá)式加分號(hào)構(gòu)成,單獨(dú)表達(dá)式不是語(yǔ)句,必須加分號(hào)才能執(zhí)行a=5;復(fù)合語(yǔ)句用花括號(hào)將多條語(yǔ)句組合為邏輯整體,在分支和循環(huán)中作為單一語(yǔ)句塊{...}空語(yǔ)句僅含一個(gè)分號(hào),用于語(yǔ)法要求語(yǔ)句但無(wú)需操作的場(chǎng)合,如空循環(huán)體占位;CStandardLibraryprintf格式化輸出函數(shù)詳解printf通過(guò)格式控制字符串實(shí)現(xiàn)精確的輸出格式控制,格式說(shuō)明符配合寬度、精度修飾符可滿(mǎn)足各類(lèi)輸出需求。01格式說(shuō)明符%d整數(shù)、%f浮點(diǎn)數(shù)、%c字符、%s字符串、%x十六進(jìn)制、%e科學(xué)計(jì)數(shù)02寬度修飾%8d右對(duì)齊、%-8d左對(duì)齊、%08d補(bǔ)零,寬度不足時(shí)自動(dòng)擴(kuò)展不截?cái)?3精度修飾%.2f保留2位小數(shù)、%8.2f總寬8列、%.5s截取字符串前5個(gè)字符04特殊輸出%%輸出百分號(hào)、\n換行、\t制表,返回值為成功輸出的字符數(shù)常用printf格式控制符速查表格式符含義示例輸出%d十進(jìn)制整數(shù)123%f浮點(diǎn)數(shù)(默認(rèn)6位小數(shù))3.141593%8.2f總寬8列,保留2位小數(shù)3.14%-10s字符串左對(duì)齊占10列Hello%c單個(gè)字符A格式控制符通過(guò)%+修飾符+格式字符的組合精確控制輸出格式CStandardLibrary·stdio.hscanf格式化輸入函數(shù)詳解scanf通過(guò)格式控制字符串從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),變量前必須加取地址符&。輸入緩沖區(qū)殘留是最常見(jiàn)陷阱,需通過(guò)空格跳過(guò)或getchar清空來(lái)避免誤讀。01基本用法與取地址符scanf("%d",&x)從鍵盤(pán)讀取整數(shù)存入變量x,變量前必須加&取地址符(字符數(shù)組除外)。&x02格式字符串精確匹配scanf("%d,%d",&a,&b)要求用戶(hù)輸入如3,5,逗號(hào)等普通字符必須原樣輸入,不可省略。%d,%d03輸入緩沖區(qū)陷阱讀取數(shù)值后換行符殘留在緩沖區(qū),后續(xù)scanf("%c",&ch)會(huì)誤讀'\n'而非預(yù)期字符。\n04解決方案在%c前加空格如scanf("%c",&ch)自動(dòng)跳過(guò)前導(dǎo)空白,或用getchar()消耗殘留換行符。"%c"CSTANDARDI/O字符輸入輸出:getchar與putchargetchar和putchar是C語(yǔ)言最基礎(chǔ)的字符級(jí)輸入輸出函數(shù),每次處理一個(gè)字符。它們雖然功能簡(jiǎn)單,但在逐字符文本處理、輸入緩沖區(qū)清理和簡(jiǎn)單交互場(chǎng)景中比格式化函數(shù)更高效,是構(gòu)建復(fù)雜輸入處理邏輯的基礎(chǔ)組件。getchar()讀取字符從標(biāo)準(zhǔn)輸入讀取一個(gè)字符并返回其int型ASCII碼值,遇到文件末尾返回EOF(通常為-1)。EOF/intputchar(c)輸出字符將字符c輸出到標(biāo)準(zhǔn)顯示設(shè)備,參數(shù)可以是字符變量、字符常量或ASCII碼整數(shù)值。stdout逐字符處理循環(huán)典型應(yīng)用:while((c=getchar())!='\n')逐字符讀取一行輸入,常用于統(tǒng)計(jì)字符數(shù)或簡(jiǎn)單文本加密。while循環(huán)緩沖區(qū)殘留清理getchar()常用于消耗輸入緩沖區(qū)中的殘留換行符,避免影響后續(xù)的字符或字符串讀取操作。緩沖區(qū)CHAPTER04條件分支結(jié)構(gòu)從if-else到switch-case,讓程序具備判斷與決策能力CONTROLFLOWif語(yǔ)句:?jiǎn)畏种А㈦p分支與多分支if語(yǔ)句通過(guò)條件表達(dá)式控制程序執(zhí)行路徑,單分支處理?xiàng)l件滿(mǎn)足的場(chǎng)景,if-else處理二選一邏輯,if-elseif鏈?zhǔn)浇Y(jié)構(gòu)處理多條件判斷。始終使用花括號(hào)包裹語(yǔ)句塊是避免懸空else和邏輯錯(cuò)誤的最有效編程習(xí)慣。單分支if條件非零時(shí)執(zhí)行語(yǔ)句塊,為零時(shí)跳過(guò),適合單一條件檢查如輸入合法性驗(yàn)證if(expr)stmt雙分支if-else條件為真執(zhí)行if分支否則執(zhí)行else分支,適合二選一邏輯如判斷奇偶、正負(fù)if/else多分支if-elseif-else依次判斷多個(gè)互斥條件,執(zhí)行首個(gè)為真的分支,最后的else處理所有未匹配情況if/elseif/else常見(jiàn)錯(cuò)誤將==寫(xiě)成=導(dǎo)致賦值而非比較;省略花括號(hào)引發(fā)懸空else問(wèn)題;條件表達(dá)式忘記加括號(hào)==vs=CONTROLFLOWif語(yǔ)句嵌套與條件運(yùn)算符if語(yǔ)句嵌套時(shí)else始終匹配最近的未配對(duì)if,必須用花括號(hào)明確作用域以避免邏輯歧義。條件運(yùn)算符?:是if-else賦值場(chǎng)景的簡(jiǎn)寫(xiě)形式,代碼更緊湊但不適合復(fù)雜邏輯,選擇時(shí)需權(quán)衡簡(jiǎn)潔性與可讀性。嵌套規(guī)則else始終與最近的、同一作用域內(nèi)未配對(duì)的if匹配,使用花括號(hào)可改變默認(rèn)配對(duì)關(guān)系,確保邏輯清晰可控nearestif懸空else問(wèn)題省略花括號(hào)時(shí)else可能匹配到非預(yù)期的if,建議所有if語(yǔ)句塊都使用花括號(hào)包裹,消除歧義{}required條件運(yùn)算符格式為條件?值1:值2,條件非零取值1否則取值2,如max=(a>b)?a:b,簡(jiǎn)潔高效ternary嵌套使用可嵌套如score≥90?'A':score≥80?'B':'C',但層數(shù)不宜過(guò)多以免降低可讀性,建議最多兩層≤2layersCONTROLFLOWswitch-case語(yǔ)句:多路分支的清晰方案switch語(yǔ)句基于整型表達(dá)式的值進(jìn)行多路跳轉(zhuǎn),語(yǔ)法比多層if-else更清晰。每個(gè)case后必須加break防止貫穿執(zhí)行,default分支處理未匹配情況。整型表達(dá)式switch后表達(dá)式必須是int或char等整型,編譯器據(jù)此生成跳轉(zhuǎn)表,執(zhí)行效率優(yōu)于多分支if-else鏈。整型常量表達(dá)式在編譯期確定,支持枚舉類(lèi)型。int·charbreak終止每個(gè)case后必須加break終止當(dāng)前分支,否則會(huì)發(fā)生"貫穿"(fall-through),繼續(xù)執(zhí)行下一個(gè)case的代碼。故意貫穿時(shí)需添加注釋說(shuō)明意圖。break;default兜底default分支處理所有未匹配情況,語(yǔ)法上可選但建議始終添加,提高代碼健壯性和可維護(hù)性。通常放置于switch末尾作為最終保障。default:適用邊界不適合范圍判斷如成績(jī)分段,此時(shí)應(yīng)使用if-elseif鏈;case標(biāo)簽必須是編譯期可確定的整型常量,不能是變量或浮點(diǎn)數(shù)。≠rangeDecisionStructure分支結(jié)構(gòu)選型:if與switch的適用場(chǎng)景if-else適合范圍判斷和復(fù)雜邏輯組合,switch適合基于整型表達(dá)式的離散值多路分支。正確的選型不僅影響代碼可讀性,還關(guān)系到編譯器的優(yōu)化效果——switch可生成跳轉(zhuǎn)表實(shí)現(xiàn)O(1)查找,而if-else鏈需要逐級(jí)比較。選擇if-else的場(chǎng)景01范圍判斷:如成績(jī)分段score≥90為A、80-89為B,switch無(wú)法直接處理范圍條件02復(fù)雜邏輯:浮點(diǎn)數(shù)比較或a>0&&b<100等組合條件,switch僅支持整型等值判斷03優(yōu)先級(jí)判斷:條件非互斥或需要優(yōu)先級(jí)時(shí),if-elseif的書(shū)寫(xiě)順序即為判斷優(yōu)先級(jí)選擇switch的場(chǎng)景01離散等值判斷:基于單個(gè)整型或字符變量的等值判斷,如星期幾、月份、菜單選項(xiàng)02多分支可讀性:分支超過(guò)4個(gè)時(shí)switch可讀性?xún)?yōu)于長(zhǎng)鏈if-elseif,編譯器可優(yōu)化為跳轉(zhuǎn)表03Fall-through合并:多個(gè)case共享同一段代碼時(shí),可利用fall-through特性減少代碼重復(fù)CHAPTER05循環(huán)結(jié)構(gòu)與流程控制掌握f(shuō)or、while、do-while三種循環(huán)及其控制語(yǔ)句C·LoopControlwhile循環(huán):先判斷后執(zhí)行while循環(huán)先判斷條件表達(dá)式,為真時(shí)執(zhí)行循環(huán)體,為假時(shí)退出循環(huán)。這種"先判斷后執(zhí)行"的機(jī)制使得循環(huán)體可能一次都不執(zhí)行,適合循環(huán)次數(shù)不確定、依賴(lài)外部條件的場(chǎng)景如輸入驗(yàn)證和事件等待。01while(表達(dá)式){循環(huán)體}基本語(yǔ)法while(表達(dá)式){循環(huán)體}——表達(dá)式非零時(shí)執(zhí)行循環(huán)體,執(zhí)行完再次判斷,直到表達(dá)式為零退出。02while(0)可能零次執(zhí)行——如果初始條件就不滿(mǎn)足(如while(0)),循環(huán)體直接被跳過(guò),一次都不執(zhí)行。03while(scanf("%d",&n)!=EOF)典型應(yīng)用——while(scanf("%d",&n)!=EOF)持續(xù)讀取輸入直到文件末尾,適合在線評(píng)測(cè)系統(tǒng)的數(shù)據(jù)讀取。04while(1)避免死循環(huán)——必須在循環(huán)體內(nèi)修改條件變量或通過(guò)break退出,如while(1)配合if條件和break實(shí)現(xiàn)可控循環(huán)。CLANGUAGE·LOOPCONTROLdo-while循環(huán):先執(zhí)行后判斷do-while循環(huán)先執(zhí)行循環(huán)體再判斷條件,保證循環(huán)體至少執(zhí)行一次。這一特性使其成為交互式菜單、輸入驗(yàn)證等"至少需要執(zhí)行一次"場(chǎng)景的首選結(jié)構(gòu)。語(yǔ)法結(jié)構(gòu)do{循環(huán)體}while(表達(dá)式);——先執(zhí)行循環(huán)體,再判斷表達(dá)式,非零繼續(xù)循環(huán),為零退出。先執(zhí)行核心特性循環(huán)體至少執(zhí)行一次,即使條件首次判斷就為假,適合需要先執(zhí)行再驗(yàn)證的場(chǎng)景。≥1次典型應(yīng)用交互式菜單循環(huán)——先顯示菜單并讀取選擇,再判斷是否繼續(xù),保證菜單至少顯示一次。交互菜單注意事項(xiàng)結(jié)尾分號(hào)不可省略——do-while是C語(yǔ)言中唯一以分號(hào)結(jié)尾的復(fù)合語(yǔ)句,遺漏將導(dǎo)致編譯錯(cuò)誤。分號(hào);CLANGUAGE·LOOPfor循環(huán):最常用的計(jì)數(shù)循環(huán)for循環(huán)將初始化、條件判斷和調(diào)整語(yǔ)句集中在一個(gè)語(yǔ)法結(jié)構(gòu)中,特別適合已知循環(huán)次數(shù)的場(chǎng)景如數(shù)組遍歷。前閉后開(kāi)區(qū)間的循環(huán)變量設(shè)計(jì)與數(shù)組下標(biāo)天然匹配,是C語(yǔ)言編程的核心范式之一。語(yǔ)法結(jié)構(gòu)for(初始化;條件;調(diào)整)—先初始化,再判斷條件,為真則執(zhí)行循環(huán)體后執(zhí)行調(diào)整,循環(huán)往復(fù)。語(yǔ)法三要素前閉后開(kāi)設(shè)計(jì)推薦i=0;i<10的區(qū)間設(shè)計(jì),與數(shù)組下標(biāo)0到n-1完美匹配,減少邊界錯(cuò)誤。i=0;i<n表達(dá)式可省略for(;;)等價(jià)于while(1)無(wú)限循環(huán),省略調(diào)整時(shí)需在循環(huán)體內(nèi)自行更新變量。for(;;)變量作用域C99標(biāo)準(zhǔn)允許在初始化部分定義變量如for(inti=0;...),該變量?jī)H在循環(huán)內(nèi)有效。C99ControlFlow三種循環(huán)的對(duì)比與選擇策略for、while和do-while三種循環(huán)在功能上可以互相轉(zhuǎn)換,但各自的語(yǔ)法特點(diǎn)使其適合不同的場(chǎng)景。選擇正確的循環(huán)類(lèi)型不僅影響代碼可讀性,更能讓程序意圖一目了然——for表示計(jì)數(shù)循環(huán),while表示條件循環(huán),do-while表示至少執(zhí)行一次的循環(huán)。三種循環(huán)結(jié)構(gòu)特性對(duì)比特性for循環(huán)while循環(huán)do-while循環(huán)判斷時(shí)機(jī)先判斷后執(zhí)行先判斷后執(zhí)行先執(zhí)行后判斷最少執(zhí)行次數(shù)0次0次1次適用場(chǎng)景已知次數(shù)的計(jì)數(shù)循環(huán)條件控制的不確定循環(huán)至少執(zhí)行一次的交互循環(huán)初始化/調(diào)整位置集中在for語(yǔ)句頭部分散在循環(huán)前和循環(huán)體內(nèi)分散在循環(huán)前和循環(huán)體內(nèi)代碼可讀性計(jì)數(shù)意圖明確條件邏輯清晰至少一次語(yǔ)義明確三種循環(huán)功能等價(jià)但適用場(chǎng)景不同,選擇時(shí)應(yīng)以代碼意圖的清晰表達(dá)為首要原則LoopNesting循環(huán)嵌套:多層重復(fù)任務(wù)的實(shí)現(xiàn)循環(huán)嵌套通過(guò)在外層循環(huán)體內(nèi)嵌入內(nèi)層循環(huán)實(shí)現(xiàn)多層重復(fù)任務(wù),典型應(yīng)用如矩陣遍歷和乘法表打印。內(nèi)層循環(huán)必須完整包含于外層,循環(huán)變量不得重名,將最長(zhǎng)循環(huán)置于最內(nèi)層可減少跨層切換開(kāi)銷(xiāo)。嵌套規(guī)則內(nèi)層循環(huán)必須完整包含在外層循環(huán)體內(nèi),禁止交叉嵌套。內(nèi)外層循環(huán)變量名稱(chēng)不得相同,避免命名沖突導(dǎo)致邏輯錯(cuò)誤。Rule典型應(yīng)用雙層循環(huán)遍歷二維數(shù)組如矩陣乘法,外層控制行索引,內(nèi)層控制列索引,實(shí)現(xiàn)行列式數(shù)據(jù)的系統(tǒng)化處理。矩陣遍歷性能優(yōu)化將最長(zhǎng)的循環(huán)放在最內(nèi)層減少跨層切換開(kāi)銷(xiāo),避免在循環(huán)體內(nèi)重復(fù)計(jì)算不變量,提升執(zhí)行效率。Performance嵌套層數(shù)控制超過(guò)三層嵌套時(shí)應(yīng)考慮拆分函數(shù)或優(yōu)化算法,過(guò)深的嵌套顯著降低代碼可讀性,增加維護(hù)難度。≤3層LOOPCONTROLbreak與continue:循環(huán)控制語(yǔ)句break立即終止當(dāng)前層整個(gè)循環(huán),continue僅跳過(guò)本次循環(huán)剩余代碼進(jìn)入下一次迭代。兩者在for循環(huán)中行為清晰,但在while/do-while中使用continue時(shí)需特別注意循環(huán)變量更新位置,否則極易引發(fā)死循環(huán)。01break語(yǔ)句break立即終止當(dāng)前層的循環(huán)或switch分支,程序跳到循環(huán)體之后的第一條語(yǔ)句繼續(xù)執(zhí)行。在嵌套循環(huán)中break只退出最內(nèi)層循環(huán),如需退出多層需使用標(biāo)志變量或goto語(yǔ)句。02continue語(yǔ)句continue跳過(guò)本次循環(huán)剩余代碼:for循環(huán)跳至調(diào)整語(yǔ)句(如i++),while/do-while跳至條件判斷。while循環(huán)中使用continue須確保循環(huán)變量更新在continue之前,如i++放在continue后面將導(dǎo)致死循環(huán)。ControlFlowgoto語(yǔ)句:爭(zhēng)議與適用場(chǎng)景goto語(yǔ)句實(shí)現(xiàn)無(wú)條件跳轉(zhuǎn),因破壞結(jié)構(gòu)化而被爭(zhēng)議,但在多層循環(huán)退出和C語(yǔ)言錯(cuò)誤處理中提供簡(jiǎn)潔性,初學(xué)者應(yīng)優(yōu)先使用替代方案。語(yǔ)法基礎(chǔ)gotolabel;跳轉(zhuǎn)到同一函數(shù)內(nèi)的label:標(biāo)簽處,標(biāo)簽名遵循標(biāo)識(shí)符規(guī)則,跳轉(zhuǎn)不能跨越變量定義。爭(zhēng)議根源goto破壞結(jié)構(gòu)化編程的三種基本結(jié)構(gòu)——順序、選擇、循環(huán),使代碼流程難以追蹤和維護(hù)。合理使用場(chǎng)景多層嵌套循環(huán)中快速跳出,C語(yǔ)言函數(shù)中統(tǒng)一的錯(cuò)誤處理和資源釋放(如Linux內(nèi)核風(fēng)格)。替代方案大多數(shù)goto場(chǎng)景可通過(guò)break配合標(biāo)志變量、循環(huán)條件調(diào)整或函數(shù)封裝來(lái)替代,代碼結(jié)構(gòu)更清晰。CASESTUDY綜合案例:流程控制結(jié)構(gòu)的協(xié)同應(yīng)用實(shí)際程序中各種流程控制結(jié)構(gòu)并非孤

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論