本書是一種“以計(jì)算思維訓(xùn)練為核心,以能力培養(yǎng)為目標(biāo)”的C語(yǔ)言程序設(shè)計(jì)教材,基于“程序設(shè)計(jì) = 算法思維 + 語(yǔ)言藝術(shù) + 工程規(guī)范”的知識(shí)和能力框架,以及“前期以培養(yǎng)解題思路為主,語(yǔ)法知識(shí)夠用就行;后期補(bǔ)充必要的語(yǔ)法細(xì)節(jié)”的教學(xué)策略編寫。全書共9單元可分為4個(gè)部分。
第1部分是針對(duì)C程序設(shè)計(jì)的初級(jí)訓(xùn)練:第1單元介紹C語(yǔ)言程序設(shè)計(jì)首先應(yīng)當(dāng)掌握的一些基本概念和方法;第2、3單元在第1單元的基礎(chǔ)上介紹判斷結(jié)構(gòu)和重復(fù)結(jié)構(gòu);第4單元介紹窮舉、迭代、遞歸和模擬,奠定算法基礎(chǔ)。
第2部分是在第1部分的基礎(chǔ)上進(jìn)行數(shù)據(jù)類型的擴(kuò)展:第5單元介紹數(shù)組,第6單元介紹3種可定制數(shù)據(jù)類型——構(gòu)造體、共用體和枚舉,第7單元介紹指針及其應(yīng)用。
第3部分只有第8單元一個(gè)單元,介紹分治、回溯、貪心策略和動(dòng)態(tài)規(guī)劃,作為算法設(shè)計(jì)進(jìn)階,可以使讀者的程序設(shè)計(jì)能力提升到較高水平。
第4部分即第9單元介紹一些可能用得著的有關(guān)內(nèi)容,包括外部變量、內(nèi)聯(lián)函數(shù)、帶參宏定義、契約式編程與防御式編程、文件操作。
這樣的結(jié)構(gòu)可以滿足多種不同層次的教和學(xué)的需求,并兼顧自學(xué)。
作者在編寫本書時(shí)力求概念準(zhǔn)確、難點(diǎn)分散、例題經(jīng)典、習(xí)題豐富、題型全面、注重效果,并以C99作為藍(lán)本。
本書可以作為高等學(xué)校各專業(yè)的新一代程序設(shè)計(jì)課程教材,也可供從事程序設(shè)計(jì)相關(guān)領(lǐng)域的人員自學(xué)或參考。
以C99標(biāo)準(zhǔn)為藍(lán)本并兼顧C(jī)89標(biāo)準(zhǔn)。
? 零起點(diǎn),實(shí)例引導(dǎo),輕松入門,螺旋式深入、擴(kuò)展,適合不同層次的教學(xué)。
? 彰顯“程序設(shè)計(jì) = 計(jì)算思維 + 語(yǔ)言藝術(shù) + 工程規(guī)范”的程序設(shè)計(jì)教育理念。
? 按照“算法分析 + 代碼示例 + 語(yǔ)法說(shuō)明 + 測(cè)試設(shè)計(jì)”的思路組織各知識(shí)單元。
? 概念力求本質(zhì)性,示例力求典型性、說(shuō)明力求啟迪性,結(jié)構(gòu)力求便于梳理性。
? 習(xí)題類型多、題量大,覆蓋面寬。
第4版前言
(一)
當(dāng)今是一個(gè)信息時(shí)代。作為時(shí)代的寵兒,計(jì)算機(jī)在各行各業(yè)發(fā)揮著神奇的威力,而其靈魂來(lái)自程序設(shè)計(jì)。現(xiàn)在,程序設(shè)計(jì)不僅被視為計(jì)算機(jī)及相關(guān)專業(yè)的看家本領(lǐng),而且也成為這個(gè)時(shí)代文化的一部分,它所蘊(yùn)含的邏輯思維給所有想開(kāi)發(fā)腦力的人提供一種貼近時(shí)代的訓(xùn)練。為此,程序設(shè)計(jì)不僅作為計(jì)算機(jī)及其相關(guān)專業(yè)的必修課程被開(kāi)設(shè),而且?guī)缀跛械睦砉た茖I(yè),甚至一些文科和藝術(shù)類專業(yè)也在開(kāi)設(shè)。
屈指計(jì)算,程序設(shè)計(jì)課程已經(jīng)開(kāi)設(shè)半個(gè)多世紀(jì)了,但是教學(xué)效果卻不盡如人意。因此,程序設(shè)計(jì)課程的改革成為課程改革的一個(gè)難點(diǎn)。筆者從20世紀(jì)80年代開(kāi)始就將其作為自己努力的一個(gè)方向,并不斷進(jìn)行探索。
最早進(jìn)行的改革是將典型算法,如窮舉、迭代、遞歸和一些軟件工程的方法融入程序設(shè)計(jì)教學(xué)中。這些成果反映在筆者的第一本著作——《BASIC程序設(shè)計(jì)》(山西科學(xué)教育出版社,1985)中。之后,在這方面繼續(xù)探索,在程序設(shè)計(jì)教學(xué)中進(jìn)一步加入算法與數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,以使學(xué)生得到更加系統(tǒng)的思維訓(xùn)練。這些探索成果總結(jié)在由筆者主筆、譚浩強(qiáng)主編的《BASIC程序設(shè)計(jì)教程》(高等教育出版社,1988)中。但是,這本書引入的算法和數(shù)據(jù)結(jié)構(gòu)內(nèi)容過(guò)多,盡管到了21世紀(jì)最初幾年還有學(xué)校在使用它,但普遍反映其教學(xué)難度太大。
20世紀(jì)90年代中期,受國(guó)家考試中心邀請(qǐng),筆者在NIT(國(guó)家信息技術(shù)考試)主持C模塊的考試和教材編寫。受CIT(劍橋信息技術(shù)測(cè)試)教材的啟發(fā),將程序測(cè)試加入到筆者編寫的《程序設(shè)計(jì)(C語(yǔ)言)》(清華大學(xué)出版社,1999年)一書中,并且在這本書中將傳統(tǒng)的語(yǔ)法體系改為問(wèn)題體系。之后,在教學(xué)中不斷修正,同時(shí)把改革擴(kuò)展到面向?qū)ο蟪绦蛟O(shè)計(jì)(C++、Java)中。在C語(yǔ)言方面,筆者先后出版了《新概念C語(yǔ)言程序設(shè)計(jì)》(中國(guó)鐵道出版社,2003)、《C語(yǔ)言程序設(shè)計(jì)案例教程》(清華大學(xué)出版社,2004)、《新概念C程序設(shè)計(jì)教程》(南京大學(xué)出版社,2007)、《新概念C語(yǔ)言教程》(中國(guó)電力出版社,2011)、《新概念C程序設(shè)計(jì)大學(xué)教程》(清華大學(xué)出版社,2012)、《新概念C程序設(shè)計(jì)大學(xué)教程(C99版)》(清華大學(xué)出版社,2015)。
經(jīng)過(guò)幾十年的摸索,一套全新的C程序設(shè)計(jì)教學(xué)改革的框架逐漸明朗。
* 實(shí)現(xiàn)從語(yǔ)法體系向問(wèn)題體系的轉(zhuǎn)變。
* 建立“程序設(shè)計(jì) = 算法思維 + 語(yǔ)言藝術(shù) + 工程規(guī)范”的知識(shí)和能力框架。
* 樹(shù)立“以計(jì)算思維訓(xùn)練為核心,以能力培養(yǎng)為目標(biāo)”的指導(dǎo)思想。
* 采用“前期以培養(yǎng)解題思路為主,語(yǔ)法知識(shí)夠用就行;后期補(bǔ)充必要的語(yǔ)法細(xì)節(jié)”的教學(xué)策略。
* 按照“問(wèn)題分析—設(shè)計(jì)代碼—語(yǔ)法說(shuō)明”線索進(jìn)行局部安排。
令筆者欣慰的是,目前類似的書已經(jīng)陸續(xù)問(wèn)世,品種不斷增加,說(shuō)明C語(yǔ)言程序設(shè)計(jì)教學(xué)改革的隊(duì)伍在不斷壯大。
(二)
C語(yǔ)言是一種高效、靈活、可移植、功能強(qiáng)大的程序設(shè)計(jì)語(yǔ)言。C語(yǔ)言從20世紀(jì)70年代初創(chuàng)立,迄今經(jīng)久不衰,是程序設(shè)計(jì)語(yǔ)言歷史上壽命最長(zhǎng)的語(yǔ)言之一。
世界著名的TIOBE編程語(yǔ)言社區(qū)排行榜是編程語(yǔ)言流行趨勢(shì)的一個(gè)風(fēng)向標(biāo),每月更新,其數(shù)據(jù)取樣于互聯(lián)網(wǎng)上有經(jīng)驗(yàn)的程序員、商業(yè)應(yīng)用、著名搜索引擎(如谷歌、MSN等)的關(guān)鍵字排名、Alexa上的排名等。
表0.1為C語(yǔ)言于2017年5月發(fā)布的1987—2017三十年間,排名前十的編程語(yǔ)言位次變化情況。其中每年的位次是該年12個(gè)月的平均值。可以看出盡管其他程序設(shè)計(jì)語(yǔ)言跌宕起伏,但C一直平衡地牢居榜前。
表0.1 1987—2017年間排名前十的編程語(yǔ)言排名位次變化情況
當(dāng)然,C語(yǔ)言也在不斷發(fā)展之中。1978年美國(guó)電話電報(bào)公司(AT&T)的貝爾實(shí)驗(yàn)室正式發(fā)表了C語(yǔ)言。開(kāi)發(fā)者Brian W.Kernighan和Dennis M.Ritchie隨即編寫了著名的The C Programming Language一書,通常簡(jiǎn)稱為K&R C,也有人稱之為K&R C標(biāo)準(zhǔn)。但是,K&R C第一版在很多語(yǔ)言細(xì)節(jié)上不夠精確。
1983年美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(American National Standards Institute)制定了一個(gè)C語(yǔ)言標(biāo)準(zhǔn)并于同年發(fā)表,通常稱之為ANSI C,并在此基礎(chǔ)上不斷修訂,于1989年末提出了一個(gè)報(bào)告——[ANSI 89]。1990?年,國(guó)際標(biāo)準(zhǔn)化組織ISO(International Organization for Standardization)通過(guò)了此項(xiàng)標(biāo)準(zhǔn),將其作為ISO/IEC 9899:1990國(guó)際標(biāo)準(zhǔn),俗稱C89或C90。
1995年,ISO修訂C90,形成“1995基準(zhǔn)增補(bǔ)1(ISO/IEC/9899/AMD1:1995)”,俗稱C89修正案1或C95。1999年通過(guò)ISO/IEC 9899:1999,ISO對(duì)C語(yǔ)言標(biāo)準(zhǔn)進(jìn)行了更重要的改變,俗稱C99。2011年12月8號(hào),ISO 發(fā)布了 C 語(yǔ)言的新標(biāo)準(zhǔn)——ISO/IEC 9899:2011,俗稱C11。
但是,國(guó)內(nèi)C程序設(shè)計(jì)教材多數(shù)還基于C89甚至更早的標(biāo)準(zhǔn),這種落后使得教學(xué)脫離應(yīng)用,與世界潮流很不合拍。因此當(dāng)務(wù)之急是過(guò)渡到C99,這是編寫本書的一個(gè)主要?jiǎng)訖C(jī)。在出版本書之前,筆者已經(jīng)在清華大學(xué)出版社出版了《新概念C程序設(shè)計(jì)大學(xué)教程(C99版)》,本書在此基礎(chǔ)上進(jìn)一步完善而成。
目前支持C99并且簡(jiǎn)單易用的開(kāi)發(fā)平臺(tái)是DEV C++,它有兩款,即Orwell Dev-C++和wxDev-C++。截至本書定稿,Orwell Dev-C++的最新版本是5.7.0,wxDev-C++的穩(wěn)定版本是7.4.2,它們的下載地址分別如下。
http://bloodshed-dev-c.en.softonic.com/
http://sourceforge.net/projects/orwelldevcpp/?source=typ_redirect
http://wxdsgn.sourceforge.net/
收起全部↑
張基溫 研究和教學(xué)領(lǐng)域涉及計(jì)算機(jī)科學(xué)與技術(shù)、信息管理、信息經(jīng)濟(jì)學(xué)、電子政務(wù)與電子商務(wù)、新媒體、服務(wù)科學(xué),發(fā)表論文百余篇,出版著作百余種;先后擔(dān)任名古屋大學(xué)訪問(wèn)學(xué)者,山西財(cái)經(jīng)大學(xué)、江南大學(xué)、華東政法大學(xué)、福建工程學(xué)院、晉城學(xué)院、廣西職業(yè)技術(shù)學(xué)院等多所大學(xué)的專職、客座或兼職教授,北京大學(xué)博雅方略城市發(fā)展與信息化研究中心研究員,南京大學(xué)出版社總編顧問(wèn),太原高新技術(shù)區(qū)IT研究院實(shí)驗(yàn)室主任,山西省緊缺人才專家委員會(huì)副主任等職,中國(guó)信息經(jīng)濟(jì)學(xué)會(huì)常務(wù)理事,全國(guó)高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)常務(wù)理事兼課程建設(shè)委員會(huì)副主任,中國(guó)計(jì)算機(jī)學(xué)會(huì)教育專業(yè)委員會(huì)委員,教育部NIT考試委員會(huì)委員,江蘇省計(jì)算機(jī)基礎(chǔ)教學(xué)指導(dǎo)委員會(huì)委員,山西省新世紀(jì)專家學(xué)者協(xié)會(huì)副會(huì)長(zhǎng);為清華大學(xué)出版社、電子工業(yè)出版社、中國(guó)水利水電出版社、南京大學(xué)出版社等出版社主編了信息管理與信息系統(tǒng)專業(yè)、計(jì)算機(jī)實(shí)驗(yàn)與實(shí)踐、大學(xué)生信息素養(yǎng)等多個(gè)系列教材。在面向過(guò)程程序設(shè)計(jì)教學(xué)領(lǐng)域,從20世紀(jì)80年代初就開(kāi)始進(jìn)行有關(guān)研究和改革,嘗試將軟件工程方法和算法思想引入程序設(shè)計(jì),倡導(dǎo)“程序設(shè)計(jì) = 計(jì)算思維 + 語(yǔ)言藝術(shù) + 工程規(guī)范”的程序設(shè)計(jì)教育理念,推行“以思維訓(xùn)練為核心,程序測(cè)試與程序設(shè)計(jì)并行”、“前期重在邏輯思維和方法訓(xùn)練、語(yǔ)法夠用就行;后期進(jìn)行語(yǔ)法細(xì)節(jié)補(bǔ)充”的程序設(shè)計(jì)課程教學(xué)方法。他主筆并與他人聯(lián)合署名的《C語(yǔ)言程序設(shè)計(jì)教程》是*十一五規(guī)劃教材,并于2007年被評(píng)為*精品教材。
目??錄
第1單元 C程序起步 1
1.1 一個(gè)簡(jiǎn)單的計(jì)算器程序設(shè)計(jì) 1
1.1.1 用偽代碼描述的簡(jiǎn)單計(jì)算器程序算法 1
1.1.2 將偽代碼描述的算法逐步細(xì)化為C程序 2
1.1.3 C語(yǔ)言程序的編譯、鏈接與執(zhí)行 4
1.2 數(shù)據(jù)類型、標(biāo)識(shí)符與聲明 6
1.2.1 數(shù)據(jù)類型 6
1.2.2 C語(yǔ)言標(biāo)識(shí)符規(guī)則 6
1.2.3 聲明 7
1.3 表達(dá)式 8
1.3.1 字面量 8
1.3.2 數(shù)據(jù)實(shí)體 8
1.3.3 含有操作符的表達(dá)式及其求值規(guī)則 10
1.4 函數(shù) 13
1.4.1 用函數(shù)組織程序 13
1.4.2 函數(shù)定義、函數(shù)調(diào)用與函數(shù)返回 14
1.4.3 函數(shù)聲明 16
1.4.4 main(?)函數(shù) 16
1.4.5 庫(kù)函數(shù)與頭文件 17
1.4.6 printf(?)函數(shù)的基本用法 17
1.4.7 scanf(?)函數(shù)的基本用法 19
1.5 程序錯(cuò)誤與異常 21
1.5.1 程序中的語(yǔ)法錯(cuò)誤與編譯錯(cuò)誤信息 21
1.5.2 程序中的邏輯錯(cuò)誤及其測(cè)試 23
1.5.3 C語(yǔ)言的實(shí)現(xiàn)定義行為和未定義行為 24
1.5.4 C程序運(yùn)行異常與契約失敗 25
1.5.5 設(shè)計(jì)用戶友好的程序 26
1.6 知識(shí)鏈接A:整數(shù)類型 26
1.6.1 有符號(hào)整數(shù)類型與無(wú)符號(hào)整數(shù)類型 26
1.6.2 標(biāo)準(zhǔn)整數(shù)類型與擴(kuò)展整數(shù)類型 27
1.6.3 宏與整數(shù)類型的極值宏 28
1.6.4 整數(shù)常量使用的3種進(jìn)制 30
1.6.5 整數(shù)常量的標(biāo)識(shí) 30
1.7 知識(shí)鏈接B:浮點(diǎn)類型 31
1.7.1 浮點(diǎn)類型的值的特性:取值范圍與精度 31
1.7.2 浮點(diǎn)數(shù)據(jù)的舍入模式 32
1.7.3 浮點(diǎn)類型數(shù)據(jù)的操作限制 33
1.7.4 浮點(diǎn)類型常量的書寫格式 33
1.7.5 _Complex類型和_Imaginary類型 34
1.8 知識(shí)鏈接C:字符類型 34
1.8.1 字符編碼概述 34
1.8.2 char類型的基本特點(diǎn) 35
1.8.3 轉(zhuǎn)義字符 36
1.8.4 用scanf( )和printf( )輸入與輸出字符 36
1.8.5 用getchar(?)和putchar(?)輸入與輸出字符 37
習(xí)題1 38
第2單元 選擇程序設(shè)計(jì) 44
2.1 可選擇計(jì)算類型的計(jì)算器程序算法分析 44
2.1.1 粗略算法分析 44
2.1.2 計(jì)算函數(shù)calculate(?)的算法分析 45
2.1.3 判等操作符與關(guān)系操作符 46
2.2 if-else型選擇語(yǔ)句 46
2.2.1 用if-else實(shí)現(xiàn)的calculate(?)函數(shù) 46
2.2.2 if-else語(yǔ)句的特點(diǎn) 47
2.2.3 if-else if語(yǔ)句 48
2.2.4 瘸腿if-else語(yǔ)句嵌套 49
2.2.5 邏輯操作符與邏輯表達(dá)式 50
2.2.6 條件表達(dá)式 51
2.2.7 良好的程序書寫風(fēng)格 52
2.3 選擇結(jié)構(gòu)的測(cè)試 53
2.3.1 白箱測(cè)試法 53
2.3.2 使用double類型數(shù)據(jù)的calculate(?)代碼 54
2.3.3 等價(jià)分類法 55
2.4 switch型選擇語(yǔ)句 58
2.4.1 基于整數(shù)值匹配的選擇語(yǔ)句——switch語(yǔ)句 58
2.4.2 一個(gè)字符分類程序 59
2.4.3 用switch語(yǔ)句的calculate(?)函數(shù) 61
2.4.4 switch語(yǔ)句與if-else語(yǔ)句的比較 62
2.5 知識(shí)鏈接D:變量的作用域與生存期 63
2.5.1 標(biāo)識(shí)符的作用域 63
2.5.2 變量的生存期與存儲(chǔ)分配 66
2.6 知識(shí)鏈接E:const限定符 68
2.6.1 用const限定變量 68
2.6.2 用const限定函數(shù)參數(shù) 70
2.7 知識(shí)鏈接F:左值表達(dá)式與右值表達(dá)式 70
2.7.1 左值表達(dá)式和右值表達(dá)式的概念與鑒定 70
2.7.2 左值表達(dá)式的應(yīng)用 72
習(xí)題2 73
第3單元 循環(huán)程序設(shè)計(jì) 81
3.1 可連續(xù)計(jì)算的計(jì)算器算法分析 81
3.1.1 初步算法 81
3.1.2 算法細(xì)化 81
3.1.3 循環(huán)結(jié)構(gòu)的C語(yǔ)言實(shí)現(xiàn) 82
3.2 while語(yǔ)句 82
3.2.1 while語(yǔ)句的格式與特點(diǎn) 82
3.2.2 采用while語(yǔ)句的可連續(xù)型計(jì)算器主函數(shù) 83
3.2.3 逗號(hào)操作符 84
3.3 do-while語(yǔ)句 85
3.3.1 do-while語(yǔ)句的格式與特點(diǎn) 85
3.3.2 采用do-while語(yǔ)句的可連續(xù)型計(jì)算器主函數(shù) 85
3.4 for語(yǔ)句 86
3.4.1 for語(yǔ)句的格式與特點(diǎn) 86
3.4.2 采用for語(yǔ)句的可連續(xù)型計(jì)算器主函數(shù) 86
3.4.3 計(jì)數(shù)型循環(huán)語(yǔ)句 88
3.4.4 復(fù)合賦值操作符與自增、自減操作符 92
3.5 循環(huán)結(jié)構(gòu)的測(cè)試 93
3.5.1 基于路徑覆蓋的循環(huán)結(jié)構(gòu)測(cè)試 93
3.5.2 邊值分析法與循環(huán)結(jié)構(gòu)測(cè)試 93
3.5.3 基于因果分析的程序測(cè)試 95
3.6 break與continue 97
3.6.1 break與continue語(yǔ)法概要 97
3.6.2 實(shí)例:求素?cái)?shù) 98
3.7 知識(shí)鏈接G:表達(dá)式的副作用與序列點(diǎn) 100
3.7.1 表達(dá)式的副作用 100
3.7.2 序列點(diǎn)及其對(duì)表達(dá)式求值順序的影響 101
3.7.3 副作用編程對(duì)策 103
3.8 知識(shí)鏈接H:算術(shù)數(shù)據(jù)類型轉(zhuǎn)換 104
3.8.1 算術(shù)表達(dá)式中的數(shù)據(jù)類型轉(zhuǎn)換 104
3.8.2 普通算術(shù)轉(zhuǎn)換中的“提升拉齊”規(guī)則 104
3.8.3 傳送轉(zhuǎn)換中的數(shù)據(jù)類型轉(zhuǎn)換 106
3.8.4 數(shù)據(jù)的顯式類型轉(zhuǎn)換 107
3.8.5 數(shù)據(jù)類型轉(zhuǎn)換風(fēng)險(xiǎn) 108
習(xí)題3 112
第4單元 算法基礎(chǔ) 120
4.1 窮舉 120
4.1.1 搬磚問(wèn)題 121
4.1.2 推斷名次 123
習(xí)題4.1 127
4.2 迭代與遞推 131
4.2.1 用二分迭代法求方程在指定區(qū)間的根 132
4.2.2 猴子吃桃子問(wèn)題 135
4.2.3 用輾轉(zhuǎn)相除法求兩個(gè)正整數(shù)的最大公因子 137
習(xí)題4.2 140
4.3 遞歸 143
4.3.1 階乘的遞歸計(jì)算 143
4.3.2 漢諾塔 146
4.3.3 臺(tái)階問(wèn)題 149
習(xí)題4.3 150
4.4 模擬 151
4.4.1 產(chǎn)品隨機(jī)抽樣 152
4.4.2 用蒙特卡洛法求?的近似值 155
4.4.3 事件步長(zhǎng)法——中子擴(kuò)散問(wèn)題 156
4.4.4 時(shí)間步長(zhǎng)法——鹽水池問(wèn)題 158
習(xí)題4.4 162
第5單元 數(shù)組 165
5.1 一維數(shù)組 165
5.1.1 數(shù)組類型的特征 165
5.1.2 數(shù)組的定義 166
5.1.3 數(shù)組的初始化 167
5.1.4 下標(biāo)變量 168
5.1.5 變長(zhǎng)數(shù)組與常量數(shù)組 169
5.2 排序與查找 170
5.2.1 直接選擇排序 170
5.2.2 冒泡排序 172
5.2.3 二分查找 175
5.3 二維數(shù)組 176
5.3.1 二維數(shù)組的概念 176
5.3.2 二維數(shù)組的初始化 177
5.3.3 訪問(wèn)二維數(shù)組元素 179
5.4 字符串 180
5.4.1 字符串字面量 180
5.4.2 字符數(shù)組與C字符串變量 181
5.4.3 字符串的輸入與輸出 182
5.4.4 字符串操作的庫(kù)函數(shù) 185
習(xí)題5 188
第6單元 可定制數(shù)據(jù)類型 194
6.1 構(gòu)造體類型 194
6.1.1 構(gòu)造體類型的特征與定制 194
6.1.2 用typedef定義類型的別名 195
6.1.3 構(gòu)造體變量 196
6.1.4 構(gòu)造體變量的分量及其操作 199
6.1.5 構(gòu)造體數(shù)組 200
6.1.6 復(fù)合字面量 203
6.2 共用體類型 204
6.2.1 共用體類型的定制及其變量的定義 204
6.2.2 共用體類型與構(gòu)造體類型的比較 205
6.2.3 共用體變量的應(yīng)用舉例 207
6.3 枚舉類型 209
6.3.1 枚舉類型及其定義 209
6.3.2 枚舉變量及其聲明 210
6.3.3 對(duì)枚舉變量和枚舉元素的操作 210
6.3.4 用枚舉為類提供整型符號(hào)常量名稱 211
第5單元 數(shù)??組
數(shù)組(array)是一種聚合數(shù)據(jù)類型,它可以將相關(guān)的同類型數(shù)據(jù)按照某種順序組織成一個(gè)整體。
5.1 一 維 數(shù) 組
5.1.1 數(shù)組類型的特征
例5.1 一個(gè)小組有5位同學(xué),為了用計(jì)算機(jī)處理這5位同學(xué)的成績(jī),在C語(yǔ)言中如何表示?
對(duì)于這樣一個(gè)問(wèn)題,已經(jīng)具有前面介紹的C語(yǔ)言知識(shí)的人一定會(huì)說(shuō):使用下面的聲明定義5個(gè)變量就可以了。
float a,b,c,d,e;
但這是一種不好的方法。因?yàn)檫@些簡(jiǎn)單變量無(wú)法反映變量之間的關(guān)系。假如一個(gè)程序中的所有量(例如學(xué)生成績(jī)、學(xué)生年齡、學(xué)生身高、學(xué)生體重……)都用簡(jiǎn)單字母表示,就會(huì)造成閱讀程序時(shí)的混亂。于是,有人想了一個(gè)見(jiàn)名知義的命名變量的方法:
double stuScore1, stuScore2, stuScore3, stuScore4, stuScore5;
這個(gè)辦法比簡(jiǎn)單地使用一些字母好多了,但是它們?cè)谟糜谀承┤后w性數(shù)據(jù)時(shí)無(wú)法反映出個(gè)體與群體之間的聯(lián)系,例如這個(gè)群體有多大,在這個(gè)群體中個(gè)體與個(gè)體之間有什么樣的聯(lián)系性等,都表現(xiàn)不出來(lái)。此外,命名的工作量很大,也不能發(fā)揮計(jì)算機(jī)高速處理的優(yōu)勢(shì),不能使用重復(fù)結(jié)構(gòu)進(jìn)行計(jì)算處理(如進(jìn)行求和)。為了對(duì)類似的情況進(jìn)行有效管理和處理,高級(jí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言都提供了數(shù)組。
1. 數(shù)組類型的群體特征
數(shù)組類型具有以下3個(gè)群體性特征。
(1)數(shù)組的組成元素是同類型數(shù)據(jù),這個(gè)類型也稱為數(shù)組的元素類型或數(shù)組的基類型。
(2)數(shù)組的組成元素(element)具有邏輯順序,這種邏輯順序用下標(biāo)表示。例如,一組學(xué)生成績(jī)可以用數(shù)組stuScore存儲(chǔ),并分別用stuScore[0]、stuScore[1]、stuScore[2]、stuScore[3]、stuScore[4]等表示其中每個(gè)學(xué)生的成績(jī)。通常,被括在一對(duì)方括號(hào)中的數(shù)字稱為下標(biāo),表示這組數(shù)據(jù)之間的邏輯順序關(guān)系。
(3)數(shù)組中的各元素按照下標(biāo)的順序存儲(chǔ)在一段連續(xù)內(nèi)存單元中,所以數(shù)組也具有物理的順序性。
2. 數(shù)組的個(gè)性化參數(shù)
數(shù)組的個(gè)性化參數(shù)有以下3點(diǎn)。
(1)具體的數(shù)據(jù)類型。
(2)具體數(shù)組的大小。
(3)具體數(shù)組的名字具有唯一性。
其中前兩個(gè)參數(shù)是數(shù)組的存儲(chǔ)細(xì)節(jié),也是判斷兩個(gè)數(shù)組異同的依據(jù),只有兩個(gè)數(shù)組的元素類型和大小都相同時(shí)才認(rèn)為它們是同類型的數(shù)組,但不是同一數(shù)組。
5.1.2 數(shù)組的定義
數(shù)組定義就是根據(jù)數(shù)組公共屬性格式給出具體數(shù)組的個(gè)性化參數(shù)并進(jìn)行命名的過(guò)程,其格式如下:
數(shù)組基類型 數(shù)組名 [數(shù)組長(zhǎng)度表達(dá)式 ];