-
>
闖進(jìn)數(shù)學(xué)世界――探秘歷史名題
-
>
中醫(yī)基礎(chǔ)理論
-
>
當(dāng)代中國政府與政治(新編21世紀(jì)公共管理系列教材)
-
>
高校軍事課教程
-
>
思想道德與法治(2021年版)
-
>
毛澤東思想和中國特色社會主義理論體系概論(2021年版)
-
>
中醫(yī)內(nèi)科學(xué)·全國中醫(yī)藥行業(yè)高等教育“十四五”規(guī)劃教材
高等學(xué)校計算機(jī)基礎(chǔ)教育教材精選C程序設(shè)計案例教程(第3版)/張莉 版權(quán)信息
- ISBN:9787302518303
- 條形碼:9787302518303 ; 978-7-302-51830-3
- 裝幀:一般膠版紙
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>>
高等學(xué)校計算機(jī)基礎(chǔ)教育教材精選C程序設(shè)計案例教程(第3版)/張莉 本書特色
C程序設(shè)計案例教程(第3版)為在線教學(xué)版,北京市高等教育教學(xué)成果二等獎教材 C程序設(shè)計案例教程(第3版)為在線教學(xué)版,榮獲首批國家精品在線開放課程教材、北京市高等教育教學(xué)成果二等獎教材
高等學(xué)校計算機(jī)基礎(chǔ)教育教材精選C程序設(shè)計案例教程(第3版)/張莉 內(nèi)容簡介
C程序設(shè)計案例教程(第3版)C共有13章,通過案例全面解析C語言程序設(shè)計的知識要點、實現(xiàn)方法、基本原理,以及C語言的語義語法規(guī)范等,覆蓋了相關(guān)知識內(nèi)容與重點,主要包括計算機(jī)程序設(shè)計算法與實現(xiàn)、C語言程序設(shè)計結(jié)構(gòu)組成和編譯運行、Dev C++和Microsoft Visual studio 2017等常用IDE特點及使用、不同數(shù)據(jù)存儲類型及相關(guān)數(shù)據(jù)計算、各類程序流程控制命令與控制結(jié)構(gòu)、數(shù)組的創(chuàng)建定義與使用、函數(shù)定義與各類變量作用、編譯預(yù)處理與宏定義使用方法、數(shù)據(jù)存儲地址操作與指針變量、構(gòu)造類型與自定義類型定義與使用、鏈表結(jié)構(gòu)創(chuàng)建及應(yīng)用、按位運算及應(yīng)用、文件系統(tǒng)管理與數(shù)據(jù)文件操作使用等等,內(nèi)容完整,共享資源豐富。修訂版突出實用案例分析,系統(tǒng)學(xué)習(xí)掌握知識要點應(yīng)用與實踐。更適合學(xué)為中心線上線下混合式教學(xué)
高等學(xué)校計算機(jī)基礎(chǔ)教育教材精選C程序設(shè)計案例教程(第3版)/張莉 目錄
C程序設(shè)計案例教程(第3版)第1章計算機(jī)程序設(shè)計算法實現(xiàn)1
1.1程序設(shè)計概述1
1.1.1程序設(shè)計語言1
1.1.2程序設(shè)計過程3
1.2程序設(shè)計算法與實現(xiàn)4
1.3計算機(jī)程序算法的表示5
1.3.1自然語言描述5
1.3.2程序流程圖描述6
1.3.3NS圖描述8
1.3.4程序設(shè)計語言描述8
1.4程序算法實現(xiàn)案例分析12
1.5練習(xí)題15
第2章C語言程序設(shè)計結(jié)構(gòu)組成與編譯運行16
2.1C語言程序設(shè)計概述16
2.1.1C語言程序設(shè)計的發(fā)展16
2.1.2C語言程序設(shè)計的特點17
2.1.3C語言程序的組成結(jié)構(gòu)19
2.2C語言程序的編譯與運行21
2.2.1編輯、調(diào)試與編譯運行步驟21
2.2.2常用編譯運行環(huán)境22
2.3C語言的語義規(guī)范34
2.3.1C語言程序的基本規(guī)范34
2.3.2C語言的標(biāo)識符37
2.3.3C語言的關(guān)鍵字38
2.4練習(xí)題38
第3章數(shù)據(jù)存儲類型與相關(guān)運算39
3.1數(shù)據(jù)存儲方式39
3.1.1數(shù)據(jù)存儲與數(shù)制轉(zhuǎn)換39
3.1.2數(shù)據(jù)存儲類型與定義41
3.1.3存儲地址與占用空間43
3.1.4數(shù)據(jù)常量分類45
3.1.5程序變量定義49
3.2數(shù)據(jù)存儲方式與應(yīng)用50
3.2.1數(shù)據(jù)存儲的正負(fù)數(shù)問題50
3.2.2數(shù)據(jù)變量取值范圍51
3.2.3實型數(shù)據(jù)存儲方式55
3.2.4字符型數(shù)據(jù)存儲方式58
3.2.5各種存儲類型混合運算61
3.3運算符與表達(dá)式62
3.3.1運算符優(yōu)先級與強(qiáng)制類型轉(zhuǎn)換62
3.3.2算術(shù)運算符與算術(shù)表達(dá)式64
3.3.3賦值運算符與賦值表達(dá)式67
3.3.4逗號運算符與逗號表達(dá)式70
3.3.5關(guān)系運算符與關(guān)系表達(dá)式72
3.3.6邏輯運算符與邏輯表達(dá)式73
3.3.7條件運算符與條件表達(dá)式75
3.4練習(xí)題77
C程序設(shè)計案例教程(第3版)目錄第4章順序結(jié)構(gòu)程序設(shè)計79
4.1C程序設(shè)計流程控制79
4.1.1基本流程控制79
4.1.2順序結(jié)構(gòu)流程控制80
4.2基本順序結(jié)構(gòu)命令語句82
4.2.1賦值語句82
4.2.2空語句82
4.2.3復(fù)合語句83
4.2.4無條件轉(zhuǎn)向語句83
4.2.5函數(shù)調(diào)用語句84
4.2.6表達(dá)式語句85
4.3常用基本輸入輸出函數(shù)86
4.3.1字符類型輸入函數(shù)86
4.3.2字符類型輸出函數(shù)88
4.3.3格式化輸入輸出函數(shù)89
4.4練習(xí)題96
第5章條件分支結(jié)構(gòu)程序設(shè)計98
5.1條件分支結(jié)構(gòu)98
5.1.1簡單if分支結(jié)構(gòu)98
5.1.2ifelse分支結(jié)構(gòu)100
5.1.3嵌套的ifelse條件分支結(jié)構(gòu)102
5.1.4else if多路分支結(jié)構(gòu)106
5.2switchcase分支語句108
5.2.1switchcase分支結(jié)構(gòu)109
5.2.2switchcase分支語句的應(yīng)用111
5.3綜合案例分析115
5.4練習(xí)題120
第6章循環(huán)控制結(jié)構(gòu)程序設(shè)計122
6.1循環(huán)控制結(jié)構(gòu)122
6.1.1循環(huán)控制結(jié)構(gòu)組成要素122
6.1.2while循環(huán)控制結(jié)構(gòu)123
6.1.3dowhile循環(huán)控制結(jié)構(gòu)130
6.1.4for循環(huán)控制結(jié)構(gòu)133
6.2循環(huán)控制結(jié)構(gòu)的嵌套138
6.3循環(huán)控制結(jié)構(gòu)的輔助控制命令141
6.3.1無條件轉(zhuǎn)移命令goto141
6.3.2終止循環(huán)命令break142
6.3.3提前進(jìn)入下一次循環(huán)命令continue145
6.4幾種循環(huán)控制結(jié)構(gòu)的比較147
6.5循環(huán)控制結(jié)構(gòu)綜合案例分析147
6.6練習(xí)題153
第7章數(shù)組的定義及應(yīng)用155
7.1數(shù)組的性質(zhì)155
7.2一維數(shù)組的定義與引用157
7.2.1一維數(shù)組的定義157
7.2.2一維數(shù)組元素的引用158
7.2.3一維數(shù)組的初始化159
7.2.4一維數(shù)組應(yīng)用案例160
7.3多維數(shù)組的定義與引用166
7.3.1二維數(shù)組的定義與引用166
7.3.2二維數(shù)組程序算法案例171
7.3.3三維數(shù)組的定義與引用175
7.3.4多維數(shù)組的應(yīng)用176
7.4字符數(shù)組與字符串操作177
7.4.1字符數(shù)組的定義與初始化177
7.4.2字符串的處理及應(yīng)用179
7.4.3常用的字符串處理函數(shù)181
7.4.4字符數(shù)組應(yīng)用案例188
7.5練習(xí)題193
第8章函數(shù)與變量195
8.1C語言函數(shù)的分類與應(yīng)用195
8.1.1C語言函數(shù)分類195
8.1.2標(biāo)準(zhǔn)庫函數(shù)197
8.1.3自定義函數(shù)199
8.2自定義函數(shù)與函數(shù)類型202
8.3自定義函數(shù)參數(shù)與參數(shù)傳遞203
8.3.1形式參數(shù)和實際參數(shù)203
8.3.2數(shù)組作為函數(shù)參數(shù)205
8.4自定義函數(shù)的調(diào)用208
8.5函數(shù)的嵌套調(diào)用209
8.6函數(shù)的遞歸調(diào)用211
8.7函數(shù)變量的存儲與作用域215
8.7.1局部變量215
8.7.2全局變量217
8.8動態(tài)存儲變量和靜態(tài)存儲變量221
8.8.1程序變量的存儲類型221
8.8.2auto型變量223
8.8.3extern型變量224
8.8.4static型局部變量與全局變量224
8.8.5register型變量226
8.9全局函數(shù)和局部函數(shù)226
8.9.1局部函數(shù)227
8.9.2全局函數(shù)227
8.10函數(shù)與變量綜合案例分析230
8.11練習(xí)題237
第9章編譯預(yù)處理241
9.1編譯預(yù)處理命令241
9.2宏定義與宏代換242
9.2.1不帶參數(shù)的宏定義243
9.2.2帶參數(shù)的宏定義244
9.2.3宏定義作用域的終止248
9.3文件包含處理250
9.4條件編譯252
9.5練習(xí)題256
第10章地址與指針變量258
10.1變量的內(nèi)存地址與指針258
10.1.1指針變量的定義260
10.1.2指針變量的賦值261
10.1.3指針變量運算符及運算262
10.1.4指針變量作函數(shù)參數(shù)265
10.2數(shù)組與地址指針267
10.2.1指向數(shù)組的指針變量267
10.2.2指向數(shù)組元素的指針變量268
10.2.3數(shù)組名作函數(shù)參數(shù)271
10.2.4指針數(shù)組的指針變量作函數(shù)參數(shù)273
10.2.5多維數(shù)組與指針變量276
10.3字符串與指針變量280
10.3.1字符串處理方法280
10.3.2字符串指針作函數(shù)參數(shù)284
10.4函數(shù)的指針及指向函數(shù)的指針變量286
10.4.1函數(shù)指針變量的定義287
10.4.2用函數(shù)指針調(diào)用函數(shù)287
10.4.3用函數(shù)指針變量作函數(shù)參數(shù)288
10.4.4返回指針值的指針函數(shù)290
10.5指針數(shù)組與指向指針數(shù)組的指針變量292
10.5.1指針數(shù)組292
10.5.2指向指針的指針變量295
10.6main()命令行參數(shù)傳遞297
10.7指針變量綜合案例299
10.8練習(xí)題304
第11章構(gòu)造類型與自定義類型307
11.1結(jié)構(gòu)體類型與結(jié)構(gòu)體變量307
11.1.1結(jié)構(gòu)體類型的定義307
11.1.2結(jié)構(gòu)體類型變量的定義及引用309
11.2結(jié)構(gòu)體數(shù)組的定義及引用314
11.2.1結(jié)構(gòu)體數(shù)組的定義及初始化314
11.2.2結(jié)構(gòu)體數(shù)組的引用315
11.3指向結(jié)構(gòu)體類型數(shù)據(jù)的指針317
11.3.1指向結(jié)構(gòu)體變量的指針317
11.3.2指向結(jié)構(gòu)體數(shù)組的指針318
11.3.3結(jié)構(gòu)體類型作為函數(shù)參數(shù)320
11.4鏈表結(jié)構(gòu)及應(yīng)用324
11.4.1靜態(tài)鏈表的創(chuàng)建及引用325
11.4.2動態(tài)鏈表的創(chuàng)建及引用326
11.4.3單向動態(tài)鏈表的創(chuàng)建及引用328
11.4.4在單向動態(tài)鏈表中插入結(jié)點332
11.4.5從單向動態(tài)鏈表中刪除結(jié)點338
11.5共用體類型與共用體變量343
11.5.1共用體類型及共用體變量的定義344
11.5.2共用體變量的引用345
11.6枚舉類型與枚舉變量348
11.6.1枚舉類型的定義348
11.6.2枚舉類型變量348
11.7自定義數(shù)據(jù)類型說明符350
11.8練習(xí)題356
第12章位運算操作357
12.1位運算符及運算操作357
12.1.1位運算及運算符357
12.1.2按位與運算358
12.1.3按位或運算359
12.1.4按位異或運算360
12.1.5按位取反運算360
12.1.6按位左移運算361
12.1.7按位右移運算362
12.1.8復(fù)合賦值位運算363
12.2位段定義及應(yīng)用363
12.2.1位段的定義363
12.2.2位段的引用365
12.3位運算操作應(yīng)用案例366
12.4練習(xí)題368
第13章文件系統(tǒng)管理與操作369
13.1文件的組成結(jié)構(gòu)369
13.1.1文件的概念與構(gòu)成369
13.1.2文件系統(tǒng)操作形式371
13.2緩沖文件的操作與使用372
13.2.1緩沖文件結(jié)構(gòu)類型與文件指針372
13.2.2緩沖文件的標(biāo)準(zhǔn)庫函數(shù)373
13.3文件的打開與關(guān)閉374
13.3.1文件打開函數(shù)與操作模式374
13.3.2文件關(guān)閉函數(shù)的使用378
13.4文件中數(shù)據(jù)的讀寫操作379
13.4.1文件中字符數(shù)據(jù)的讀寫操作379
13.4.2文件中字符串?dāng)?shù)據(jù)的讀寫操作383
13.4.3文件中數(shù)值數(shù)據(jù)的讀寫操作386
13.4.4文件中數(shù)據(jù)的格式化讀寫操作388
13.5文件位置指針的定位391
13.5.1文件指針的定位操作391
13.5.2文件指針復(fù)位函數(shù)391
13.5.3文件指針當(dāng)前位置測試函數(shù)392
13.5.4定位指針函數(shù)393
13.6文件操作錯誤的檢測394
13.6.1文件讀寫操作檢測函數(shù)395
13.6.2文件錯誤狀態(tài)清除函數(shù)396
13.7其他緩沖型文件函數(shù)397
13.7.1文件結(jié)束符測試函數(shù)397
13.7.2磁盤文件刪除函數(shù)398
13.8文件操作管理綜合應(yīng)用案例分析400
13.9練習(xí)題403
附錄A常用字符的ASCII碼407
附錄B運算符的優(yōu)先級與結(jié)合性408
參考文獻(xiàn)409
高等學(xué)校計算機(jī)基礎(chǔ)教育教材精選C程序設(shè)計案例教程(第3版)/張莉 節(jié)選
第5章條件分支結(jié)構(gòu)程序設(shè)計生活中常常會根據(jù)不同情況采取不同的處理措施解決實際問題,反映在程序設(shè)計中,這類問題的求解算法體現(xiàn)為根據(jù)不同的判定條件控制程序流程執(zhí)行不同的程序段,其中判斷條件即求解表達(dá)式。本章主要內(nèi)容如下: 簡單if分支結(jié)構(gòu); ifelse分支結(jié)構(gòu); 嵌套的ifelse分支結(jié)構(gòu); else if多路分支結(jié)構(gòu); switchcase分支結(jié)構(gòu); 條件分支結(jié)構(gòu)綜合案例分析。 5.1條件分支結(jié)構(gòu) 條件分支結(jié)構(gòu)又稱條件判斷結(jié)構(gòu)或分支結(jié)構(gòu),是結(jié)構(gòu)化程序設(shè)計流程控制的基本結(jié)構(gòu)之一。當(dāng)程序設(shè)計算法實現(xiàn)需要判斷不同情況進(jìn)行相應(yīng)處理時,就要使用條件分支結(jié)構(gòu)控制程序流程走向。C程序設(shè)計條件分支結(jié)構(gòu)的語句包括if語句的3種形式,即簡單if語句、ifelse語句和else if語句,以及多分支語句switchcase等,在使用時可根據(jù)具體問題的復(fù)雜程度做適當(dāng)?shù)倪x擇。下面分別加以介紹。 5.1.1簡單if分支結(jié)構(gòu) C語言中if語句是*基本的條件分支語句,用來判定是否滿足指定的條件,并根據(jù)條件表達(dá)式的值執(zhí)行相應(yīng)的操作。 簡單if語句的一般形式如下: if () \[語句\];其中,尖括號表示其中的內(nèi)容為必選項,中括號表示其中的內(nèi)容為可選項。語句也可以是用大括號括起來的一組命令語句構(gòu)成的一條復(fù)合語句。 簡單if語句的執(zhí)行流程如圖51所示。 圖51簡單if語句的執(zhí)行流程 系統(tǒng)首先求解表達(dá)式。當(dāng)表達(dá)式值為真時,則執(zhí)行指定語句;否則跳過指定語句,接著執(zhí)行指定語句下面的語句。 C程序設(shè)計案例教程(第3版)第5章條件分支結(jié)構(gòu)程序設(shè)計例51編寫程序,比較兩個數(shù)的大小,按不同數(shù)據(jù)輸入情況輸出不同結(jié)果。 程序源代碼: /L5_1.c/ #include main() { int m,n; printf("Please input two numbers m,n="); scanf("%d,%d",&m,&n); if(m>n)/條件表達(dá)式m>n值為1時執(zhí)行/ printf("The first number is bigger\\n"); if(n>m) printf("The second number is bigger\\n"); if(n==m) printf("The two numbers are equal\\n"); getch(); }分別運行3次程序,各次運行輸出結(jié)果如圖52所示。 圖52輸入不同數(shù)據(jù)的輸出結(jié)果 該程序用簡單的if結(jié)構(gòu)對兩個變量m和n的值進(jìn)行比較,完成3種情況的選擇處理。從程序中可以看出,if結(jié)構(gòu)只在條件表達(dá)式為真時才執(zhí)行指定的操作。如果程序應(yīng)用只需實現(xiàn)單向分支結(jié)構(gòu),使用簡單if語句完成算法較為清晰、方便。 多個簡單的if結(jié)構(gòu)配合,也可以處理稍微復(fù)雜一點的問題,如實現(xiàn)簡單的排序算法。以3個變量排序為例,隨機(jī)輸入3個數(shù),分別賦予變量a、b、c,利用順序執(zhí)行的簡單if語句實現(xiàn)排序算法,要求按變量a、b、c值由小到大輸出結(jié)果。 程序源代碼: #include "stdio.h" main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) {t=a; a=b; b=t;}/借助臨時變量t,交換a、b兩個變量的值/ if(a>c)/值較小的a變量再與第三個變量c的值比較/ {t=a; a=c; c=t;}/至此a變量的值*小/ if(b>c)/剩余b變量的值再與c的值比較/ {t=b; b=c; c=t;}/至此b變量的值次小/ printf("%5.2f,%5.2f,%5.2f",a,b,c);/排序結(jié)果/ }程序中使用3個簡單if語句進(jìn)行變量值的兩兩比較,用if語句判別變量值的大小,根據(jù)條件進(jìn)行變量值的交換,每個if語句執(zhí)行后較小的變量再與其余的變量作比較,*后輸出排序結(jié)果。 5.1.2ifelse分支結(jié)構(gòu) ifelse分支結(jié)構(gòu)可實現(xiàn)同一表達(dá)式判斷下的兩路程序流程的選擇。ifelse語句的一般形式如下: if() \[語句1\]; else \[語句2\];同樣,ifelse中的控制語句也可以是用大括號括起來的一組語句構(gòu)成的一條復(fù)合語句。ifelse語句的執(zhí)行流程如圖53所示。 圖53ifelse語句的執(zhí)行流程系統(tǒng)先求解表達(dá)式。當(dāng)表達(dá)式值為真時,執(zhí)行語句1;當(dāng)表達(dá)式值為假時,執(zhí)行語句2。整個結(jié)構(gòu)只有一個入口和一個出口,符合結(jié)構(gòu)化程序設(shè)計規(guī)范。利用ifelse語句可以實現(xiàn)兩路程序流程的分支選擇。 例52編寫程序,輸入一個年份值,檢查該年是否為閏年,輸出結(jié)果。檢查某一年為閏年的自然語言描述是: 年份值能被4整除,但不能被100整除;或者年份值只能被400整除。表達(dá)式為x%4==0&&x%100!=0||x%400==0。 程序源代碼如下: /L5_2.c/ #include main() { int x; printf("Please input the year to determined= "); scanf("%d",&x); if(x%4==0&&x%100!=0||x%400==0)/滿足閏年條件/ printf("%d is a leap year\\n",x); else/不滿足閏年條件/ printf("%d is not a leap year\\n",x); }圖54ifelse選擇結(jié)構(gòu) 執(zhí)行上述程序時,根據(jù)輸入的x值進(jìn)行判斷。如果滿足閏年表達(dá)式,表達(dá)式值為1,則執(zhí)行選擇語句中if命令后面的語句;否則表達(dá)式值為0,執(zhí)行else命令后面的語句。編譯后運行兩次程序,運行結(jié)果如圖54所示。 如果ifelse條件分支的if和else后的命令語句執(zhí)行的是給同一個變量賦值操作,則該算法也可以用條件運算符“?:”取代ifelse語句,實現(xiàn)相同的功能。 例53編寫程序,從鍵盤輸入一個字符,如果是小寫字母,則將其轉(zhuǎn)換為大寫字母,否則原樣輸出該字符。 程序源代碼: /L5_3.c/ main() { char ch; printf("please input a character:\\n"); scanf ("%c",&ch); ch=(ch>='a' && chprintf("ch=%c\\n",ch); }編譯后分別運行兩次程序。如果輸入小寫字母r,判斷條件運算表達(dá)式為真,執(zhí)行運算符“?”后的賦值表達(dá)式,將ch-32的值賦給變量ch,得到的ch值為大寫字母R的ASCII碼值。如果輸入字符9,則由于不滿足條件運算表達(dá)式中的條件,執(zhí)行運算符“:”后的賦值表達(dá)式,圖55條件運算表達(dá)式實現(xiàn)選擇運算 因此直接輸出該字符。兩次運行程序后的輸入和對應(yīng)輸出結(jié)果如圖55所示。 與本例相似,選擇運算結(jié)果賦給同一個變量,如求*大值運算,源程序代碼如下: /L5_3_1.c/ #include main() { int a,b,c; scanf("%d,%d",&a,&b); c=(a>b)?a:b;/取a和b中大者賦給c / printf("The max number is %d",c); }程序運行后,輸入兩個數(shù)值,分別賦給兩個變量a和b,條件運算表達(dá)式運算取變量a或變量b中值較大者賦給變量c,輸出變量c值。 5.1.3嵌套的ifelse條件分支結(jié)構(gòu) ifelse結(jié)構(gòu)解決了程序流程按條件兩路分支的問題。當(dāng)按不同條件選擇兩個以上分支時,就需要使用if語句的嵌套結(jié)構(gòu),即if語句中還可包含if語句,形成層層嵌套的if語句。嵌套在ifelse結(jié)構(gòu)if命令語句之后的內(nèi)嵌ifelse結(jié)構(gòu)形式為if() \[語句1\]; if() \[語句2\]; else \[語句3\]; else \[語句4\];嵌套的if語句結(jié)構(gòu)邏輯關(guān)系是: 當(dāng)選擇條件的值為真時,才會判斷“”的值,也只有當(dāng)為真時,才會執(zhí)行語句2,此時和條件同時滿足,是邏輯與的關(guān)系。這就是if語句嵌套結(jié)構(gòu)的特點。 同樣,嵌套在ifelse結(jié)構(gòu)else命令語句之后的內(nèi)嵌ifelse結(jié)構(gòu)的一般形式為if() \[語句1\]; else if() \[語句2\]; else if() \[語句3\]; else if() \[語句4\]; else\[語句5\];程序流程圖如圖56所示。 圖56嵌套在else命令語句之后的內(nèi)嵌結(jié)構(gòu) 例54編寫程序,實現(xiàn)符號函數(shù)的算法,即從鍵盤輸入一個數(shù)值賦給變量x。如果x值小于0,符號函數(shù)值為-1;如果x值等于0,符號函數(shù)值為0;如果x值大于0,符號函數(shù)值為1。檢驗輸出結(jié)果。 數(shù)學(xué)表達(dá)式: sign(x)=-1,x0,x=0 1,x>0程序源代碼: /L5_4.c/ #include main() { int number,sign; printf("Please type in a number x="); scanf("%d",&number); if(numbersign=-1; else if(number==0)/else包含條件(number>0)和(number=0)/ sign=0; else/else只包含條件(number>0)/ sign=1; printf("sign(x)=%d\\n",sign); }圖57符號函數(shù)的運行結(jié)果 運行3次,輸入3個不同的數(shù),輸入和對應(yīng)的輸出結(jié)果如圖57所示。 案例中if與else成對匹配,書寫成有層次的縮進(jìn)形式易讀、易理解。習(xí)慣上嵌套的if語句盡可能在else之后,如果嵌套中只有if而沒有else,容易造成錯誤,這是因為else總是與前面*相近的不包含else的if語句匹配。為避免發(fā)生這種錯誤,習(xí)慣上應(yīng)將嵌套中的if語句用大括號{ }括起來,例如: if(表達(dá)式1){ if(表達(dá)式2) 語句1 } else 語句2該案例中的else與*外層的if匹配,邏輯上不易出錯。 實際上程序算法并不是唯一的,可以有不同的邏輯表達(dá)方式,只要*終結(jié)果正確即可。當(dāng)然,大型軟件開發(fā)還有程序優(yōu)化等問題,只是不在本書討論的范圍內(nèi)。現(xiàn)以符號函數(shù)為例再作一些案例分析,以進(jìn)一步理解if嵌套的邏輯關(guān)系。為便于案例分析,首先給出正確的程序源代碼: main() { int x,y; scanf("%d",&x); if(xelse if(x==0) y=0; else y=1; printf("x=%d, y=%d\\n", x, y); }該程序算法已通過運行驗證,算法邏輯正確。 將程序的if語句嵌套關(guān)系改為以下程序段: if(x>=0) if(x>0)y=1; else y=0; else y=-1;該段程序的**個if條件x>=0包含兩種情況,需要嵌套if條件x>0語句,內(nèi)嵌if語句的else命令意味著條件x==0,此處y等于0,算法正確。 若將程序的if語句嵌套關(guān)系改為以下程序段: y=-1; if(x!=0) if(x>0) y=1; else y=0;該段程序在ifelse之外先賦值y=-1。**個if條件x!=0也包含兩種情況,需要嵌套if條件x>0語句,滿足該條件則y=1。內(nèi)嵌if語句受外層if條件x!=0約束,else意味著條件xif(x!=0) {if(x>0) y=1;} else y=0;增加了一對大括號,使else與外層if匹配,else隱含條件為x==0,執(zhí)行y=0,整個程序段算法正確。 再看如下程序段: y=0; if(x>=0) if(x>0) y=1; else y=-1;該段程序在ifelse之外先賦值y=-1。**個if條件x>=0同樣包含兩種情況,需要嵌套if條件x>0語句,滿足該條件則y=1。內(nèi)嵌if語句受外層if條件x>=0約束,else意味著條件x=0,而y等于-1,算法出現(xiàn)邏輯錯誤。可將該程序的嵌套關(guān)系作以下修改: y=0; if(x>=0) {if(x>0) y=1;} else y=-1;增加了一對大括號,使else與外層if匹配,else隱含條件為x當(dāng)需要處理的分支選擇頭緒多且問題更加復(fù)雜時,可以在各種結(jié)構(gòu)形式的if語句中再嵌套一個或多個if語句,形成更加復(fù)雜的嵌套。使用嵌套if結(jié)構(gòu),可以在ifelse結(jié)構(gòu)中if命令后面嵌套,也可以在else命令后面嵌套。其組合形式可以表示為if (表達(dá)式1) if (表達(dá)式2) 語句1; else 語句2; else if (表達(dá)式3) 語句3; else if (表達(dá)式4) 語句4; else 語句5;其中的各if和else語句中又可以嵌套另外的ifelse語句。使用時注意if及else if 與else的配對關(guān)系,系統(tǒng)總是將else與其向上*接近的未配對的if匹配組合。使用內(nèi)嵌簡單if語句時還應(yīng)注意,簡單形式的if語句中不包含else語句,在嵌套邏輯上可以避免混亂。 5.1.4else if多路分支結(jié)構(gòu) 嵌套的if結(jié)構(gòu)豐富了程序流程按條件多路分支流程控制問題,當(dāng)按不同條件選擇更多分支流程時,可以使用if嵌套結(jié)構(gòu),也可以使用else if多路分支結(jié)構(gòu)。else if多路分支結(jié)構(gòu)的一般形式為if() 語句1; else if() 語句2; else if() 語句3; … else if() 語句n; else 語句n+1;else if多路分支結(jié)構(gòu)在邏輯關(guān)系上是由多個ifelse層層嵌套的ifelseifelse邏輯結(jié)構(gòu),其執(zhí)行流程如圖58所示。 圖58ifelseifelse多路分支結(jié)構(gòu)流程 ifelseifelse分支結(jié)構(gòu)中的每個else if表達(dá)式控制著一個分支流程,程序執(zhí)行時首先求解的值,當(dāng)值為真時,執(zhí)行語句1,執(zhí)行后跳出并結(jié)束該選擇結(jié)構(gòu);當(dāng)值為假時,則求解的值,當(dāng)值為真時,執(zhí)行語句2,執(zhí)行結(jié)束也跳出并結(jié)束所在選擇結(jié)構(gòu);同樣,當(dāng)值為假時,再繼續(xù)求解的值,當(dāng)值為真時,執(zhí)行語句后跳出選擇結(jié)構(gòu),否則繼續(xù)向下進(jìn)行判斷;以此類推,直到的值為真,執(zhí)行相關(guān)語句。如果所有的表達(dá)式值都為假,那么就執(zhí)行*后一個else后面的語句。 實際上,ifelseifelse形式的if語句是ifelse形式的if語句的嵌套使用,利用它能夠?qū)崿F(xiàn)多分支選擇,應(yīng)用時應(yīng)該注意每個else實際上是和其前面*接近的if配對使用的,通常中間各個else不能省略,但*后一個else可以省略,這時表示當(dāng)所有的表達(dá)式值都為假時不作任何處理,接著執(zhí)行選擇結(jié)構(gòu)之外的命令語句。 else if結(jié)構(gòu)執(zhí)行是從上到下對所有條件表達(dá)式逐一進(jìn)行判斷,只有遇到某個條件表達(dá)式值為真時,才會執(zhí)行與之對應(yīng)的語句,執(zhí)行后即跳出整個選擇結(jié)構(gòu)。如果沒有任何一個條件滿足,即所有表達(dá)式值均為假,則執(zhí)行*后一個else命令后的語句,這個else通常作為默認(rèn)條件使用。 例55編寫程序,判斷從鍵盤輸入字符的類屬范圍,輸出對應(yīng)的分類屬性提示。例如,輸入字符6,輸出該字符為數(shù)字的提示。 算法分析: 字符類別是根據(jù)鍵盤輸入字符的ASCII碼值來區(qū)分的。在ASCII碼表中,若輸入的字符ASCII碼值小于32,通常為控制字符;若為字符0~9,則為數(shù)字;若為字符A~Z,則為大寫字母;若為字符a~z,為小寫字母;其余則歸入其他字符。該程序算法屬于多條件選擇分類處理問題,適于else if多條件分支結(jié)構(gòu)實現(xiàn),程序流程圖如圖59所示。 圖59判斷輸入字符的ASCII碼值,選擇輸出語句
高等學(xué)校計算機(jī)基礎(chǔ)教育教材精選C程序設(shè)計案例教程(第3版)/張莉 作者簡介
張莉,中國農(nóng)業(yè)大學(xué)教授,碩士生導(dǎo)師;研究方向為信息系統(tǒng)建模、機(jī)器學(xué)習(xí)、教育認(rèn)知模型、計算機(jī)教育、智慧教育環(huán)境等;教材建設(shè)教學(xué)成果主要有:獲國家精品在線開放課程1門、教育部“十一五”國家級規(guī)劃教材1套、北京市精品教材2部、北京市高等教育教學(xué)成果獎1項、校級教學(xué)成果獎5項、校級精品教材2部、農(nóng)業(yè)部中華農(nóng)業(yè)教育優(yōu)秀教材1部、教育部寶鋼優(yōu)秀教師稱號等;學(xué)術(shù)兼職主要有:CCF教育工作委員會委員、ACM SIGCSE China 委員、CCF教育專業(yè)委員會委員、全國高等院校計算機(jī)教育研究會常務(wù)理事、全國高等院校計算機(jī)基礎(chǔ)教育研究會理事、北京市高教學(xué)會計算機(jī)教育研究會常務(wù)理事等
- >
上帝之肋:男人的真實旅程
- >
詩經(jīng)-先民的歌唱
- >
經(jīng)典常談
- >
人文閱讀與收藏·良友文學(xué)叢書:一天的工作
- >
唐代進(jìn)士錄
- >
山海經(jīng)
- >
朝聞道
- >
隨園食單