• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            風(fēng)雨兼程

            ring my bells
            posts - 49, comments - 14, trackbacks - 0, articles - 0

            C語(yǔ)言程序設(shè)計(jì)教案



            教材類型:新世紀(jì)計(jì)算機(jī)基礎(chǔ)教育從書
            主教材:C程序設(shè)計(jì)(第二版)
            編者:譚浩強(qiáng) 著
            出版:清華大學(xué)出版社
            輔教材:C 程序設(shè)計(jì)解題與上機(jī)指導(dǎo)(第二版)
            編者:譚浩強(qiáng) 主編
            出版:清華大學(xué)出版社
            總學(xué)時(shí):102  周數(shù):17  周學(xué)時(shí):4+2








            目  錄
            1    C語(yǔ)言概述
            1.1     C語(yǔ)言出現(xiàn)的歷史背景
            1.2     C語(yǔ)言的特點(diǎn)
            1.3     簡(jiǎn)單的C程序介紹
            1.4     C程序的上機(jī)步驟
            1.5     Turbo C常用命令簡(jiǎn)介
            2    程序的靈魂-算法
            2.1    算法的概念
            2.2    簡(jiǎn)單算法舉例
            2.3    算法的特性
            2.4    怎樣表示一個(gè)算法
            2.5    結(jié)構(gòu)化程序設(shè)計(jì)方法
            3    數(shù)據(jù)類型、運(yùn)算符與表達(dá)式
            3.1     C的數(shù)據(jù)類型
            3.2     常量和變量
            3.3     整型數(shù)據(jù)
            3.4     實(shí)型數(shù)據(jù)
            3.5     字符型數(shù)據(jù)
            3.6     變量賦初值
            3.7     各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算
            3.8     算術(shù)運(yùn)算符和逗號(hào)表達(dá)式
            3.9     賦值運(yùn)算符和賦值表達(dá)式
            3.10 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式
            4    順序結(jié)構(gòu)程序設(shè)計(jì)
            4.1  C語(yǔ)句概念
            4.2  賦值語(yǔ)句
            4.3  數(shù)據(jù)輸入輸出的概念及在C語(yǔ)言中的實(shí)現(xiàn)
            4.4  字符數(shù)據(jù)的輸入與輸出
            4.5  格式輸入與輸出
            4.6  順序結(jié)構(gòu)程序設(shè)計(jì)舉例
            5    選擇結(jié)構(gòu)程序設(shè)計(jì)
            5.1     關(guān)系運(yùn)算符和關(guān)系表達(dá)式
            5.2     邏輯運(yùn)算符和邏輯表達(dá)式
            5.3     If語(yǔ)句
            5.4     Switch語(yǔ)句
            5.5     程序舉例
            6    循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
            6.1     概述
            6.2     goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán)
            6.3     while語(yǔ)句
            6.4     do-while語(yǔ)句
            6.5     for語(yǔ)句
            6.6     循環(huán)的嵌套
            6.7     幾種循環(huán)的比較
            6.8     break語(yǔ)句和continue語(yǔ)句
            6.9     程序舉例
            7    數(shù)組
            7.1     一維數(shù)組的定義和引用
            7.2     二維數(shù)組的定義和引用
            7.3     字符數(shù)組和字符串
            8    函數(shù)
            8.1     概述
            8.2     函數(shù)定義的一般形式
            8.3     函數(shù)參數(shù)和函數(shù)的值
            8.4     函數(shù)的調(diào)用
            8.5     函數(shù)的嵌套調(diào)用
            8.6     函數(shù)的遞歸調(diào)用
            8.7     數(shù)組作為函數(shù)參數(shù)
            8.8     局部變量和全局變量
            8.9     變量的存儲(chǔ)類別
            8.10 內(nèi)部函數(shù)和外部函數(shù)
            8.11 如何運(yùn)行一個(gè)多文件的程序
            9    預(yù)處理命令
            9.1 宏定義
            9.2 文件包含處理
            9.3 條件編譯
            11    指針
            10.1     地址和指10.2    針的概述
            10.3     變量的指10.4    針和指10.5    向變量的指10.6    針變量
            10.7     數(shù)組與指10.8    針
            10.9     字符串與指10.10    針
            10.11     指10.12    向函數(shù)的指10.13    針
            10.14     返回指10.15    針值的函數(shù)
            10.16     指10.17    針數(shù)組和指10.18    向指10.19    針的指10.20    針
            10.21     有關(guān)指10.22    針的數(shù)據(jù)類型和指10.23    針運(yùn)算小結(jié)
            12    結(jié)構(gòu)體與共用體
            11.1     結(jié)構(gòu)體概述
            11.2     定義結(jié)構(gòu)體類型變量的方法
            11.3     結(jié)構(gòu)體變量的引用
            11.4     結(jié)構(gòu)體變量的初始化
            11.5     結(jié)構(gòu)體數(shù)組
            11.6     指11.7    向結(jié)構(gòu)體類型數(shù)據(jù)的指11.8    針
            11.9     用指11.10    針處理鏈表
            11.11     共用體
            11.12     枚舉類型
            11.10 用typedef定義類型
            13    位運(yùn)算
            12.1     位運(yùn)算符和位運(yùn)算
            12.2     位運(yùn)算應(yīng)用舉例
            12.3     位段
            14    文件
            13.1     C文件概述
            13.2     文件類型指13.3    針
            13.4     文件的打開與關(guān)閉
            13.5     文件的順序讀寫
            13.6     文件的定位
            13.7     出錯(cuò)的檢測(cè)
            13.8     文件輸入輸出小結(jié)


             
            第1章    C語(yǔ)言概述
            1.1    C語(yǔ)言出現(xiàn)的歷史背景
            C語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)高級(jí)語(yǔ)言,即可用來寫系統(tǒng)軟件,也可用來寫應(yīng)用軟件。
            C語(yǔ)言是在B語(yǔ)言的基礎(chǔ)上發(fā)展起來的。
            早期的C語(yǔ)言運(yùn)行在UNIX操作系統(tǒng)上,后來運(yùn)行在DOS操作系統(tǒng)上,現(xiàn)在的C語(yǔ)言可運(yùn)行在Windos操作系統(tǒng)上。
            C語(yǔ)言有許多版本,我們使用的是Turbo C 2.0。
            P1,說明。
            1.2    C語(yǔ)言的特點(diǎn)
            C語(yǔ)言有許多優(yōu)于其它語(yǔ)言的特點(diǎn):
            (1)語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。
            C語(yǔ)言一共只有32個(gè)關(guān)鍵字,9個(gè)控制語(yǔ)句,書寫形式自由。
            P2,表1.1。
            (2)運(yùn)算符豐富。
                 C共有34種運(yùn)算符,如+、-等。
            P2,說明。
            (3)數(shù)據(jù)結(jié)構(gòu)豐富。
                 C有整型、實(shí)型等多種數(shù)據(jù)結(jié)構(gòu)。
            P3,說明。
            (4)具有結(jié)構(gòu)化的控制語(yǔ)句。
                 C有if…else、while等多種結(jié)構(gòu)化的控制語(yǔ)句。
            P3,說明。
            (5)語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。
                 如對(duì)數(shù)組下標(biāo)越界不作檢查等。
            P3,說明。
            (6)C語(yǔ)言可進(jìn)行位運(yùn)算。
                 這是C區(qū)別于其它高級(jí)語(yǔ)言的主要特點(diǎn)。
            P3,說明。
            (7)生成目標(biāo)代碼質(zhì)量高。
                 這也是C的優(yōu)于其它高級(jí)語(yǔ)言之處。
            P3,說明。
            (8)C程序可移植性好。
                 即C程序可基本不做修改移到不同的計(jì)算機(jī)上運(yùn)行。
            P3,說明。
            1.3    簡(jiǎn)單的C程序介紹
            P4,例1.1,見ex1-1.c。
            程序功能:打印一個(gè)字符串,并輸出一個(gè)換行符。
            P4,例1.2,見ex1-2.c。
            程序功能:求兩個(gè)數(shù)之和。
            P5,例1.3,見ex1-3.c。
            程序功能:求兩個(gè)數(shù)的較大者。
            分析這三個(gè)例子的執(zhí)行過程。
            說明:
            4    C程序是由函數(shù)組成的。在上面的例子中的函數(shù)有:main、printf、scanf和max。其中main是主函數(shù),printf、scanf是庫(kù)函數(shù),max是自定義函數(shù)。一個(gè)C程序一定要有一個(gè)主函數(shù)。庫(kù)函數(shù)是放在*.h的庫(kù)函數(shù)文件中,只要直接調(diào)用就可。自定義函數(shù)要由用戶先定義后調(diào)用。
            5    認(rèn)識(shí)一下C函數(shù)
            C函數(shù)定義的一般格式為:
            函數(shù)類型  函數(shù)名(形參類型 形式參數(shù),…)
            {
            數(shù)據(jù)聲明部分;
            函數(shù)執(zhí)行部分;
            }
            C函數(shù)調(diào)用的一般格式為:
            函數(shù)名(實(shí)際參數(shù),…)
            (3)一個(gè)C程序總是從main主函數(shù)開始執(zhí)行的,而不論main函數(shù)在程序中的位置如何。主函數(shù)可以調(diào)用子函數(shù),子函數(shù)還可以調(diào)用子子函數(shù)。因此C程序是層次結(jié)構(gòu)的。
            (4)C程序一行可以寫多個(gè)語(yǔ)句,每個(gè)語(yǔ)句以“;”結(jié)束。C程序是區(qū)分大小寫字母的。C程序本身沒有輸入輸出語(yǔ)句,其輸入輸出是由庫(kù)函數(shù)printf和scanf來完成的。/*…*/是C的注釋語(yǔ)句。
            1.4    C程序的上機(jī)步驟
            C程序編寫好后,要經(jīng)過編輯、編譯、連接與運(yùn)行四個(gè)步驟,這四個(gè)步驟的作用分別是:
            編輯:把C語(yǔ)言源程序輸入計(jì)算機(jī)并進(jìn)行修改存盤,生成*.c的源程序文件。
            編譯:用C編譯程序?qū)?.c的源程序文件進(jìn)行編譯,生成*.obj的二進(jìn)制文件。
            連接:把*.obj的二進(jìn)制文件與系統(tǒng)標(biāo)準(zhǔn)模塊進(jìn)行連接,生成*.exe的可執(zhí)行文件。
            運(yùn)行:執(zhí)行*.exe的可執(zhí)行文件,輸出執(zhí)行結(jié)果。
            以上步驟均可在Turbo C的工作平臺(tái)上進(jìn)行,啟動(dòng)Turbo C,就可以進(jìn)行編輯,打命令Ctrl+F9,就可以進(jìn)行編譯、連接和運(yùn)行,打命令A(yù)lt+F5,就可看到執(zhí)行結(jié)果。
            舉例說明,見ex1-1.c。
            1.5    Turbo C常用命令簡(jiǎn)介
            1.    啟動(dòng)和退出
            啟動(dòng):在DOS下打TC,或在Windows下創(chuàng)建快捷命令執(zhí)行。
            退出:Alt+X
            2.    程序的編輯
            簡(jiǎn)單編輯:Ins:插入/改寫           Backspace:刪除前一字符
                      Del:刪除當(dāng)前字符       Ctrl+Y:刪除一行
            塊操作:Ctrl+KB、Ctrl+KK:定義塊首、尾
                    Ctrl+KC、Ctrl+KV、Ctrl+KY:塊復(fù)制、塊移動(dòng)、塊刪除
                    Ctrl+KH:取消塊定義
            3.    程序載入與存盤
            F3:載入程序                   F6:切換窗口
            F2:存盤                       Alt+FN:新建程序
            4.    編譯和運(yùn)行
            Ctrl+F9:編譯連接執(zhí)行程序       Alt+F5:查看執(zhí)行結(jié)果
            Ctrl+F7:添加監(jiān)視表達(dá)式         F7:進(jìn)入子函數(shù)單步執(zhí)行
            F8:越過子函數(shù)單步執(zhí)行         Ctrl+F2:取消單步執(zhí)行

            舉例說明,見ex1-1.c。


             
            第2章    程序的靈魂-算法
             一個(gè)程序應(yīng)包括兩個(gè)方面的內(nèi)容:
            3    對(duì)數(shù)據(jù)的描述:即程序中的數(shù)據(jù)要指定它的類型和組織形式,也稱數(shù)據(jù)結(jié)構(gòu)。
            4    對(duì)操作的描述:即程序中對(duì)要做的事要指明它的操作步驟,也稱算法。
            算法是程序的靈魂,也就是說,要計(jì)算機(jī)解決實(shí)際中的問題,“怎么解”是程序設(shè)計(jì)的關(guān)鍵。
            2.1    算法的概念
            (1)算法的定義
            計(jì)算機(jī)算法:就是要計(jì)算機(jī)解決問題的操作步驟。
            P13,例。
            (2)算法的分類
            計(jì)算機(jī)算法可分為兩類:數(shù)值算法和非數(shù)值算法。
            P14,例。
            2.2    簡(jiǎn)單算法舉例
            P14,例2.1。
            注意:解決同一問題可有不同的算法,算法有優(yōu)劣之分。
            P15,例2.2。
            注意:循環(huán)是算法中常用的手段。
            2.3    算法的特性
            算法具有如下特性:
            (1)有窮性
            即經(jīng)過有限步就能夠完成。
            P14,例2.1。P15,例2.2。
            (2)確定性
            即每一步都是確定的。
            P14,例2.1。P15,例2.2。
            (3)有零個(gè)或多個(gè)輸入
            即一個(gè)算法必須輸入的數(shù)據(jù)可以是零個(gè)或多個(gè)。
            P14,例2.1。P15,例2.2。
            (4)有一個(gè)或多個(gè)輸出
            即一個(gè)算法可以輸出一個(gè)或多個(gè)數(shù)據(jù)。
            P14,例2.1。P15,例2.2。
            (5)有效性
            即算法中每一步驟都能有效地執(zhí)行,并得到確定的結(jié)果。
            P14,例2.1。P15,例2.2。
            2.4    怎樣表示一個(gè)算法
            算法的表示法有多種,敘述如下:
            (1)用自然語(yǔ)言表示
            即把算法用人們?nèi)粘J褂玫恼Z(yǔ)言表示出來。
            P14,例2.1。P15,例2.2。
            特點(diǎn):常常具有不確定性,不宜采用。
            (2)用流程圖表示
            即把算法用一些特定的符號(hào)和圖形表示出來。
            P20,例2.6,例2.7。
            特點(diǎn):這是一種較好的表示法,經(jīng)常采用。
            (3)用N-S圖表示
            即把算法用一些特定的符號(hào)和圖形表示出來。
            P26,例2.11,例2.12。
            特點(diǎn):這也是一種較好的表示法,經(jīng)常采用。
            (4)用偽代碼表示
            即把算法用一些稱為偽代碼的文字和符號(hào)表示出來。
            P29,例2.16,例2.17。
            特點(diǎn):這也是一種較好的表示法,經(jīng)常采用。
            (5)用計(jì)算機(jī)語(yǔ)言表示
            即把算法用某種計(jì)算機(jī)語(yǔ)言符號(hào)表示出來。
            P31,例2.20,例2.21。
            特點(diǎn):這當(dāng)然是一種很好的表示法,可以輸入計(jì)算機(jī)執(zhí)行。
            2.5    結(jié)構(gòu)化程序設(shè)計(jì)方法
            算法有三種基本結(jié)構(gòu),它們是:
            (1)順序結(jié)構(gòu):即算法的執(zhí)行是按順序一步接著一步的執(zhí)行。
            (2)選擇結(jié)構(gòu):即算法的執(zhí)行是對(duì)某些步驟可有選擇的執(zhí)行。
            (3)循環(huán)結(jié)構(gòu):即算法的執(zhí)行是對(duì)某些步驟可有限次的重復(fù)執(zhí)行。
            這三種基本結(jié)構(gòu)的流程圖見P23,圖2.14,圖2.15,圖2.16,圖2.17。用這三種基本結(jié)構(gòu)設(shè)計(jì)程序稱為結(jié)構(gòu)化程序設(shè)計(jì)。
            結(jié)構(gòu)化程序設(shè)計(jì)的方法指的是:
            1    自頂向下
            2    逐步細(xì)化
            3    模塊化設(shè)計(jì)
            4    結(jié)構(gòu)化編碼
            P32,例。


             
            第3章    數(shù)據(jù)類型、運(yùn)算符與表達(dá)式
            3.1     C的數(shù)據(jù)類型
            數(shù)據(jù)是程序的必要組成部分,也是程序處理的對(duì)象。C規(guī)定,在程序中使用的每一個(gè)數(shù)據(jù)必須屬于某一數(shù)據(jù)類型。
            C語(yǔ)言中所有的數(shù)據(jù)類型見P38。
            3.2    常量與變量
            在程序運(yùn)行過程中,值保持不變的量稱為常量,值可能發(fā)生變化的量稱為變量。
            3.2.1 常量與符號(hào)常量
            1. 常量
            常量是日常所說的常數(shù)、字符、字符串等。
            P38,例。
            2. 符號(hào)常量
            用#define定義的用標(biāo)識(shí)符來表示的常量。
            格式:#define 常量名 常量
            功能:定義一個(gè)符號(hào)常量
            P38,例3.1。
            說明:常量名必須是一個(gè)標(biāo)識(shí)符。
            3.2.2 變量
            1. 標(biāo)識(shí)符
            標(biāo)識(shí)符是用來表示符號(hào)常量、變量、數(shù)組、函數(shù)、過程、類型及文件的名字的。
            標(biāo)識(shí)符的命名規(guī)則:
            (1)以字母或下劃線開頭,由字母、數(shù)字和下劃線組成;
            (2)不能與關(guān)鍵字同名,最好不要與庫(kù)函數(shù)名同名;
            (3)長(zhǎng)度無限定,但不同版本的C編譯時(shí)有自己的規(guī)定;
            (4)區(qū)分大小寫。
            P40,例。
            2. 變量的聲明
            格式:類型名 變量名,… ;
            功能:聲明變量。
            說明:(1)變量名必須是一個(gè)標(biāo)識(shí)符,變量必須先聲明后使用;
            (2)變量一旦聲明,系統(tǒng)就為它開辟一個(gè)相應(yīng)類型的存儲(chǔ)空間;
            (3)變量所占用的存儲(chǔ)空間的首地址稱為該變量的地址。
            P40,例。
            3. 變量的賦值
            格式:變量名=表達(dá)式;
            功能:把=號(hào)右邊表達(dá)式的值賦給=號(hào)左邊的變量。
            P40,例。
            3.3    整型數(shù)據(jù)
            3.3.1 整型常量的表示方法
            整型常量常用三種形式表示:
            (1)十進(jìn)制:直接寫;
            (2)八進(jìn)制:前加0;
            (3)十六進(jìn)制:前加0X或0x。
            P41,例。
            3.3.2 整型變量
            1. 整型數(shù)據(jù)在內(nèi)存中的存放形式
            整型數(shù)據(jù)在內(nèi)存中采用定點(diǎn)表示。
            定點(diǎn)表示有原碼、反碼、補(bǔ)碼之分,一般在機(jī)內(nèi)使用補(bǔ)碼。
            原碼:最高位為符號(hào)位,小數(shù)點(diǎn)定在最低位之后,數(shù)值用二進(jìn)制表示。
            反碼:正數(shù)的反碼與原碼一樣,負(fù)數(shù)的反碼除符號(hào)位外各位取反。
            補(bǔ)碼:正數(shù)的補(bǔ)碼與原碼一樣,負(fù)數(shù)的補(bǔ)碼是反碼加1。
            例1:整數(shù)10的16位定點(diǎn)表示
                 因:(10)10=(1010)2
                 故:整數(shù)10的16位定點(diǎn)表示為
                 原碼:
            0    0    0    0    0    0    0    0    0    0    0    0    1    0    1    0
                 反碼:
            0    0    0    0    0    0    0    0    0    0    0    0    1    0    1    0
                 補(bǔ)碼:
            0    0    0    0    0    0    0    0    0    0    0    0    1    0    1    0
            例2:整數(shù)-10的16位定點(diǎn)表示
                 因:(-10)10=(-1010)2
                 故:整數(shù)-10的16位定點(diǎn)表示為
                 原碼:
            1    0    0    0    0    0    0    0    0    0    0    0    1    0    1    0
                 反碼:
            1    1    1    1    1    1    1    1    1    1    1    1    0    1    0    1
                 補(bǔ)碼:
            1    1    1    1    1    1    1    1    1    1    1    1    0    1    1    0
            現(xiàn)代計(jì)算機(jī)一般用補(bǔ)碼表示。
            2. 整型變量的分類
            (1)有三種整型變量
            整型:  int
            短整型:short [int]
            長(zhǎng)整型:long [int]
            (2)整型變量的分類
            每種整型變量都可以是無符號(hào)的,無符號(hào)前加unsigned,有符號(hào)前加signed或省缺,于是可有6類整型變量。
            P42,例。
            (3)整型變量占用的存儲(chǔ)空間及取值范圍
            P43,表3.1。
            3. 整型變量的聲明
            格式:[unsigned] int|short|long 變量名,…;
            功能:聲明整型變量。
            P44,例,例3.2。
            4. 整型數(shù)據(jù)的溢出
            int型的取值范圍為-32768~32767(-215~215-1),超出這個(gè)范圍稱為溢出,此時(shí)可能輸出難以理解的結(jié)果。
            P44,例,例3.3。
            3.3.3 整型常量的類型
            整型常量一般按整型數(shù)據(jù)的取值范圍自動(dòng)劃定,但也可強(qiáng)制規(guī)定它是什么類型,規(guī)則是:
            無符號(hào)整型后加u或U;
            長(zhǎng)整型后加l或L。
            P45,(1)~(5)
            3.4    實(shí)型數(shù)據(jù)
            3.4.1 實(shí)型常量的表示方法
            實(shí)型常量常用二種形式表示:
            (1)十進(jìn)制小數(shù)形式:直接寫,要有小數(shù)點(diǎn),前或后至少要有一個(gè)數(shù);
            (2)指數(shù)形式:用e或E的前后加數(shù)據(jù)表示,前面是一個(gè)小數(shù),后面是一個(gè)整數(shù)。
            P45,例。
            3.4.2 實(shí)型變量
            1. 實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式
            實(shí)型數(shù)據(jù)在內(nèi)存中采用浮點(diǎn)表示
            方法:設(shè)總位數(shù)為16,高12位為尾數(shù),低4位為階碼。尾數(shù)與階碼最高位為符號(hào)位,尾數(shù)小數(shù)點(diǎn)定在最高位之后,階碼小數(shù)點(diǎn)定在最低位之后。
            例1:實(shí)數(shù)10.0的16位浮點(diǎn)表示
                  因:(10.0)10=(0.1)10×10(2)10=(0.1)2×10(10)2
                  故:實(shí)數(shù)10.0的16位浮點(diǎn)表示為
            0    1    0    0    0    0    0    0    0    0    0    0    0    0    1    0
            例2:實(shí)數(shù)-10.0的16位浮點(diǎn)表示
                  因:(-10.0)10=(-0.1)10×10(2)10=(-0.1)2×10(10)2
                  故:實(shí)數(shù)-10.0的16位浮點(diǎn)表示為
            1    1    0    0    0    0    0    0    0    0    0    0    0    0    1    0
            注意:(1)位數(shù)一般實(shí)數(shù)是32位,表示法類似;
            (2)階碼與尾數(shù)的位數(shù)不同的計(jì)算機(jī)有不同的規(guī)定。
            (3)數(shù)據(jù)進(jìn)行轉(zhuǎn)化表示時(shí),尾數(shù)表示為±0.a…的形式,且a不為0,故表示是唯一的。
            (4)以上階碼與尾數(shù)是原碼表示,實(shí)際上應(yīng)轉(zhuǎn)成補(bǔ)碼。
            2. 實(shí)型變量的分類
            (1)有三種實(shí)型變量
            單精度:  float
            雙精度:  double
            長(zhǎng)雙精度:long double
            (2)占用的存儲(chǔ)空間及取值范圍
            P46,表3.2。
            (3)實(shí)型變量的聲明
            格式:float | double |long double 變量名,…;
            功能:聲明實(shí)型變量。
            P46,例。
            3. 實(shí)型數(shù)據(jù)的舍入誤差
            由于單精度實(shí)型只保留7位有效數(shù)據(jù),故實(shí)型數(shù)據(jù)超出7位時(shí)會(huì)造成舍入誤差。
            P47,例3.4。
            3.4.3 實(shí)型常量的類型
            實(shí)型常量一般按雙精度double來處理,但也可強(qiáng)制規(guī)定它是什么類型,規(guī)則是:
            單精度后加f或F;
            雙精度后加l或L。
            P47,例。
            3.5    字符型數(shù)據(jù)
            3.5.1 字符常量
            (1)一般字符常量
            是用單撇號(hào)括起來的一個(gè)字符。
            P48,例。
            (2)特殊字符常量
            是以反斜捍“\”開頭后跟一些字母或數(shù)字組成的字符。
            P48,表3.3。
            P49,例3.5。
            3.5.2 字符變量
            只有一種類型:char
            聲明格式:char變量名,…;
            字符變量可以用來存放一個(gè)字符。
            P49,例。
            3.5.3 字符數(shù)據(jù)在內(nèi)存中的存放形式
            字符型數(shù)據(jù)在計(jì)算機(jī)內(nèi)以ASCII碼的形式存放,每個(gè)字符占用一個(gè)字節(jié)。
            方法:查ASCII碼表,最高位填0。
            例:字符’a’的存儲(chǔ)形式
                  因:(a)字符=(97)10進(jìn)ASCII碼=(1100001)2進(jìn)ASCII碼
                  故:字符’a’的存儲(chǔ)形式為
            0    1    1    0    0    0    0    1
            P50,例3.6,例3.7。
            注意:一般字符的ASCII碼值范圍為0~127,無符號(hào)字符的ASCII碼值范圍為0~255。
            3.5.4 字符串常量
            (1)字符串常量
            是用雙撇號(hào)括起來的若干個(gè)字符。
            P52,例。
            (2)字符串常量的存儲(chǔ)
            字符串常量的存儲(chǔ)是每個(gè)字符占用一個(gè)字節(jié),尾部再加一個(gè)\0作為結(jié)束符。于是長(zhǎng)度為n的字符串占用n+1個(gè)字節(jié)的存儲(chǔ)空間。
            P52,例。
            3.6    變量賦初值
            格式:類型名 變量名=常量表達(dá)式,… ;
            功能:聲明變量并賦初值。
            P53,例。
            3.7    各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算
            各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算時(shí)會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換。
            規(guī)則:(1)char,short型轉(zhuǎn)為int型;
                 (2)float型轉(zhuǎn)為double型;
                 (3)不同類型由低向高轉(zhuǎn)換,即int →unsigned →long →double
            P54,圖3.10。
            P54,例。
            3.8    算術(shù)運(yùn)算符與算術(shù)表達(dá)式
            3.8.1 C的運(yùn)算符簡(jiǎn)介
            C語(yǔ)言的運(yùn)算符有13類,P55。
            學(xué)習(xí)運(yùn)算符注意如下幾點(diǎn):
            (1)運(yùn)算符的功能:如+號(hào)運(yùn)算的意義。
            (2)與運(yùn)算量的關(guān)系:如單目、雙目,運(yùn)算量的類型等。
            (3)運(yùn)算的優(yōu)先級(jí):如先* /后+-。
            (4)結(jié)合方向:如算術(shù)運(yùn)算從左到右,賦值從右到左。
            (5)結(jié)果的類型:如兩個(gè)整型數(shù)相加還是整型數(shù)。
            3.8.2 算術(shù)運(yùn)算符和算術(shù)表達(dá)式
            1. 基本的算術(shù)運(yùn)算符
            基本的算術(shù)運(yùn)算符有:+、-、*、/、%
            P55,例。
            注意:(1)+、-可作單目運(yùn)算符,也可作雙目運(yùn)算符。
                 (2)/ 運(yùn)算對(duì)整形是封閉的,如5/3的值是1。
            2. 算術(shù)運(yùn)算符的優(yōu)先級(jí)和結(jié)合方向
            (1)優(yōu)先級(jí):①單目+、-②*、/、%③雙目+、-
            (2)結(jié)合方向:從左到右
            P55,例。
            3. 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符
            格式:(類型標(biāo)識(shí)符)表達(dá)式
            功能:把表達(dá)式強(qiáng)制為類型標(biāo)識(shí)符指定的類型。
            優(yōu)先級(jí):與單目+-相同。
            注意:(1)強(qiáng)制轉(zhuǎn)換是一種單目運(yùn)算;
            (2)被強(qiáng)制轉(zhuǎn)換變量本身并未轉(zhuǎn)換。
            P56,例,例3.8。
            4. 自增、自減運(yùn)算符
            (1)運(yùn)算符:+ +、--
            (2)優(yōu)先級(jí):與單目+、-相同。
            (3)結(jié)合方向:從右到左
            P57,例。
            注意:(1)自增與自減運(yùn)算符只能用于變量;
            (2)前+ +、--:先增值后引用;
            后+ +、--:先引用后增值。
            5. 有關(guān)表達(dá)式使用中的問題說明
            表達(dá)式是把常量、變量、函數(shù)用各種運(yùn)算符連接起來的合法的式子。C中的表達(dá)式簡(jiǎn)練、高效,但有時(shí)會(huì)出現(xiàn)岐義性,使得程序理解有一定的困難,不同版本的C對(duì)表達(dá)式的解釋也有所不同。
            P58,(1)~(3)
            3.9    賦值運(yùn)算符和賦值表達(dá)式
            1. 賦值運(yùn)算符
            (1)運(yùn)算符:=
            (2)優(yōu)先級(jí):僅高于逗號(hào)“,”運(yùn)算,低于其它運(yùn)算。
            (3)結(jié)合方向:從右到左
            P59,例。
            2. 類型轉(zhuǎn)換
            當(dāng)賦值運(yùn)算兩邊的類型不一致,且都是數(shù)值類型或字符型時(shí),會(huì)自動(dòng)發(fā)生類型轉(zhuǎn)換,轉(zhuǎn)換以左邊變量的類型為準(zhǔn)。
            轉(zhuǎn)換規(guī)則:
            (1)實(shí)型賦給整型:舍去小數(shù)。
            (2)整型賦給實(shí)型:值不變。
            (3)雙精度賦給單精度:取其前7位有效數(shù)字,反之值不變。P59,例。
            (4)字符型賦給整型:低8位照搬,高8位視符號(hào)位補(bǔ)0或1。P60,例。
            (5)整型賦給字符型:低8位照搬,高8位丟失。P60,例。
            (6)整型賦給長(zhǎng)整型:值不變,反之低16位照搬。P60,例。
            (7)無符號(hào)型賦給有符號(hào)型:長(zhǎng)度相同時(shí)最高位變?yōu)榉?hào)位,長(zhǎng)度不同時(shí)高位補(bǔ)0或截去高位。P61,例。
            (8)有符號(hào)型賦給無符號(hào)型:長(zhǎng)度相同時(shí)最高位失去符號(hào)位,長(zhǎng)度不同時(shí)高位補(bǔ)0或截去高位。P61,例。
            P61,例3.9。
            3. 復(fù)合的賦值運(yùn)算
            (1)運(yùn)算符:+=、-=、*=、/=、%= 等
            (2)優(yōu)先級(jí):與賦值運(yùn)算“=”相同;
            (3)結(jié)合方向:從右到左。
            P62,例。
            4. 賦值表達(dá)式
            由賦值語(yǔ)句購(gòu)成的表達(dá)式稱為賦值表達(dá)式,這種表達(dá)式還可以嵌套,從右到左逐一進(jìn)行賦值運(yùn)算,表達(dá)式的值是最后一次賦值的值。
            P63,例。
            注意:(1)結(jié)合方向是從右到左的;
                 (2)復(fù)合的賦值運(yùn)算也可購(gòu)成賦值表達(dá)式;
                 (3)賦值表達(dá)式可出現(xiàn)在輸出的語(yǔ)句中。
            3.10    逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式
            1. 逗號(hào)運(yùn)算符
            (1)運(yùn)算符: ,
            (2)優(yōu)先級(jí):最低;
            (3)結(jié)合方向:從左到右。
            P63,例。
            2. 逗號(hào)表達(dá)式
            格式:表達(dá)式1,表達(dá)式2,… ,表達(dá)式n
            求解過程:從左到右逐一求表達(dá)式的值,整個(gè)表達(dá)式的值為最后一個(gè)表達(dá)式的值。
            P64,例。


             
            第4章    順序結(jié)構(gòu)程序設(shè)計(jì)
            4.1  C語(yǔ)句概述
            1. C的程序結(jié)構(gòu)
            一個(gè)C程序由若干個(gè)源程序文件組成;一個(gè)源程序由預(yù)處理命令、全局變量說明和若干個(gè)函數(shù)組成;一個(gè)函數(shù)由函數(shù)首部和函數(shù)體組成;一個(gè)函數(shù)體由局部變量聲明和執(zhí)行語(yǔ)句組成。
            P67,圖4.1。
            2. C程序的語(yǔ)句
            C程序的語(yǔ)句的語(yǔ)句分為5類:
            (1)控制語(yǔ)句
            用來控制程序流程的語(yǔ)句。
            P68,①~⑨
                 P68,例。
                 注意:( )表示其中是一個(gè)條件,~表示內(nèi)嵌語(yǔ)句。
            (2)函數(shù)調(diào)用語(yǔ)句
                 由一次函數(shù)調(diào)用加一個(gè)分號(hào)購(gòu)成的語(yǔ)句。
                 P68,例。
                 注意:函數(shù)有庫(kù)函數(shù)與自定義函數(shù)兩種,自定義函數(shù)要先定義后調(diào)用。
            (3)表達(dá)式語(yǔ)句
                 由一個(gè)表達(dá)式加一個(gè)分號(hào)購(gòu)成的語(yǔ)句。
                 P68,例。
                 注意:表達(dá)式語(yǔ)句與表達(dá)式的區(qū)別在于有無分號(hào)。
            (4)空語(yǔ)句
                 只由一個(gè)分號(hào)購(gòu)成的語(yǔ)句。
                 P68,例。
                 注意:空語(yǔ)句不做任何事情。
            (5)復(fù)合語(yǔ)句
                 把多個(gè)語(yǔ)句用{ }括起來的語(yǔ)句。
                 P69,例。
                 注意:復(fù)合語(yǔ)句構(gòu)成一個(gè)分程序,內(nèi)可包含數(shù)據(jù)聲明和執(zhí)行語(yǔ)句兩部分。
            4.2  賦值語(yǔ)句
            賦值語(yǔ)句是表達(dá)式語(yǔ)句的一種最常用的形式,與其它高級(jí)語(yǔ)言相比,C的賦值語(yǔ)句有其獨(dú)特之處:
            (1)在C中“=”是一個(gè)運(yùn)算符;
            (2)在C中賦值語(yǔ)句可以包括在其它表達(dá)式中。
            P69,例。
            4.3  數(shù)據(jù)輸入輸出的概念及在C語(yǔ)言中的實(shí)現(xiàn)
            (1)把數(shù)據(jù)從外部設(shè)備送到計(jì)算機(jī)內(nèi)存稱為輸入,把數(shù)據(jù)從計(jì)算機(jī)內(nèi)存送到外部設(shè)備稱為輸出。外部設(shè)備有鍵盤、顯示器、磁盤等。
            (2)C本身沒有輸入輸出的語(yǔ)句,C的輸入輸出是由一批庫(kù)函數(shù)來實(shí)現(xiàn)的。這些庫(kù)函數(shù)有:scanf、printf、getchar、putchar、gets、puts等,它們放在名為stdio.h的庫(kù)函數(shù)文件中。
            (3)一般要使用這些庫(kù)函數(shù)時(shí),要在程序頭加上
                     #include <stdio.h> 或 #include “stdio.h”
                 的預(yù)編譯命令,其作用是把這些庫(kù)函數(shù)包含到本程序中來。
                 P71,例。
            4.4  字符數(shù)據(jù)的輸入與輸出
            4.4.1 字符輸出函數(shù)putchar
            格式:putchar(字符變量);
            功能:把字符變量中的字符輸出到顯示器。
            注意:putchar函數(shù)一般作為一個(gè)語(yǔ)句來使用。
            P71,例4.1。見ex4-1.c。
            4.4.2 字符輸入函數(shù)getchar
            格式:getchar( )
            功能:從鍵盤輸入一個(gè)字符并通過函數(shù)名返回這個(gè)字符。
            注意:getchar函數(shù)一般在在表達(dá)式中使用。
            P72,例4.2。
            4.5  格式輸入與輸出
            4.5.1 格式輸出函數(shù)printf
            1. 一般格式
            格式:printf(格式控制,輸出表列);
            功能:按照“格式控制”中的格式要求輸出“輸出表列”的值。
            P72,例。
            (1)“格式控制”是一個(gè)用雙撇號(hào)括起來的字符串,它包括兩種信息:
            ①格式說明:由%和格式字符組成,不同的格式字符指明了不同的輸出方式。
            ②普通字符:即要原樣輸出的字符。
            P72,例。
            (2)“輸出表列”是要輸出的一些數(shù)據(jù),可以是表達(dá)式。
            P73,例。
            2. 格式字符
            (1)d格式符:用來輸出十進(jìn)制整數(shù)。
                 可有四種用法:%d,%md,%ld,%-d。
                 其中:m表示輸出寬度,l表示輸出長(zhǎng)整數(shù),-表示輸出左對(duì)齊。
            P73,例。
            (2)o格式符:用來輸出八進(jìn)制整數(shù)。
                 同樣可以附加m,l,- 等。
                 注意:符號(hào)位當(dāng)成數(shù)據(jù)輸出,不會(huì)輸出負(fù)數(shù)。
            P74,例。
            (3)x格式符:用來輸出十六進(jìn)制整數(shù)。
                 同樣可以附加m,l,- 等。
                 注意:符號(hào)位當(dāng)成數(shù)據(jù)輸出,不會(huì)輸出負(fù)數(shù)。
            P74,例。
            (4)u格式符:用來輸出無符號(hào)數(shù)據(jù)。
                 同樣可以附加m,l,- 等。
            P74,例4.3。
            (5)c格式符:用來輸出一個(gè)字符。
                 可以附加m,- 等。
            P74,例4.4。
            (6)s格式符:用來輸出一個(gè)字符串。
                 除了可以附加m,- 外,還可以寫成 %m.ns。
                 其中:m.n表示寬度為m,只輸出字符串左邊n個(gè)字符。
            P75,例4.5。
            (7)f格式符:用來小數(shù)形式輸出一個(gè)實(shí)數(shù)。
                 除了可以附加m,- 外,還可以寫成 %m.nf。
                 其中:m.n表示寬度為m,保留n位小數(shù)。
            P76,例4.6,例4.7,例4.8。
            (8)e格式符:用來指數(shù)形式輸出一個(gè)實(shí)數(shù)。
                 除了可以附加m,- 外,還可以寫成 %m.nf。
                 其中:m.n表示寬度為m,小(尾)數(shù)部分保留n位小數(shù)。
            P77,例。
            (9)g格式符:用來輸出一個(gè)實(shí)數(shù),形式自動(dòng)取小數(shù)和指數(shù)中的較短者。
            P77,例。
            P77,表4.1。
            4.5.2 格式輸入函數(shù)scanf
            1. 一般格式
            格式:scanf(格式控制,地址表列);
            功能:按照“格式控制”中的格式要求輸入數(shù)據(jù)到“地址表列”的相應(yīng)變量中。
            (1)“格式控制”是一個(gè)用雙撇號(hào)括起來的字符串,它包括兩種信息:
            ①格式說明:由%和格式字符組成,不同的格式字符指明了不同的輸入方式。
            ②普通字符:即要原樣輸入的字符。
            P72,例。
            (2)“地址表列”是要輸入的變量的地址,一般用地址運(yùn)算符&求得。
            P79,例4.9。
            2. 格式字符
            scanf函數(shù)的格式字符與printf函數(shù)類似,但有微小區(qū)別。
            P80,表4.3,表4.4。
            說明:P80,(1)~(4)。
            3. 使用scanf函數(shù)應(yīng)請(qǐng)注意的問題
            (1)“格式控制”后面是變量的地址,而不是變量。
                P81,例。
            (2)如果在“格式控制”中有格式說明符外的其它字符,要原樣輸入。
                P81,例。
            (3)用%c輸入字符時(shí),空格、回車符等都作為有效字符輸入。
                P82,例。
            (4)在輸入數(shù)據(jù)時(shí),遇到空格、回車、跳格、限寬、非法等會(huì)結(jié)束輸入。
                P82,例。
            4.6  順序結(jié)構(gòu)程序設(shè)計(jì)舉例
                P82,例4.10。見ex4-10.c。
                P83,例4.11。見ex4-11.c。
                P84,例4.12。見ex4-12.c。


             
            第5章    選擇結(jié)構(gòu)程序設(shè)計(jì)
            5.1     關(guān)系運(yùn)算符和關(guān)系表達(dá)式
            5.1.1 關(guān)系運(yùn)算符及其優(yōu)先次序
            (1)運(yùn)算符:>、>=、<、<=、= =、!=
            (2)優(yōu)先級(jí):①>、>=、<、<= ②= =、!=
                         低于算術(shù)運(yùn)算,高于賦值運(yùn)算
            (3)結(jié)合方向:從左到右
            P88,例。
            5.1.2 關(guān)系表達(dá)式
            用關(guān)系運(yùn)算符把兩個(gè)表達(dá)式連接起來的式子稱為關(guān)系表達(dá)式。
            關(guān)系表達(dá)式的值為真(1)或假(0)。
            P88,例。
            5.2     邏輯運(yùn)算符和邏輯表達(dá)式
            5.2.1 邏輯運(yùn)算符及其優(yōu)先次序
            (1)運(yùn)算符:&&、||、!
            (2)優(yōu)先級(jí):①!  ②&& ③||
                         !與單目+、-同級(jí),&&、||低于關(guān)系運(yùn)算
            (3)結(jié)合方向:! 從右到左,&&、|| 從左到右
            P89,例。
            5.2.2 邏輯表達(dá)式
            用邏輯運(yùn)算符把兩個(gè)表達(dá)式連接起來的式子稱為邏輯表達(dá)式。
            邏輯表達(dá)式的值為真(1)或假(0),判斷時(shí)非0是真、0是假。
            P89,例。
            注意:(1)a&&b&&c的判斷,a為0則表達(dá)式為0,a為1、b為0則表達(dá)式為0,a為1、b為1、c為0則表達(dá)式為0,否則表達(dá)式為1。
                 (2)a||b||c的判斷,a為1則表達(dá)式為1,a為0、b為1則表達(dá)式為1,a為0、b為0、c為1則表達(dá)式為1,否則表達(dá)式為0。
            P91,例。
            5.3     If語(yǔ)句
            5.3.1  if語(yǔ)句的三種形式
            1. 單分支if語(yǔ)句
            格式1:if (表達(dá)式) 語(yǔ)句
            功能1:如果表達(dá)式為真,則執(zhí)行語(yǔ)句。
            P91,例。
            2. 雙分支if語(yǔ)句
            格式2:if (表達(dá)式) 語(yǔ)句1
              else 語(yǔ)句2
            功能2:如果表達(dá)式為真,則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。
            P92,例。
            3. 多分支if語(yǔ)句
            格式3:if (表達(dá)式1)    語(yǔ)句1
                   else if (表達(dá)式2) 語(yǔ)句2
                   … …
                   else if (表達(dá)式n) 語(yǔ)句n
                   else 語(yǔ)句n+1
            功能3:如果直到表達(dá)式i為真,則執(zhí)行語(yǔ)句i,否則表達(dá)式全為假,則執(zhí)行語(yǔ)句n+1。
            P92,例。
            注意:(1)每個(gè)語(yǔ)句都是以分號(hào)結(jié)束的;
            (2)if或else后只能一個(gè)語(yǔ)句,如有多個(gè)語(yǔ)句要用{ }括起來。
            P93,例5.1,例5.2。
            5.3.2  if語(yǔ)句的嵌套
            if語(yǔ)句可以嵌套,原則是else與它最近的if配對(duì),如果在內(nèi)層嵌套中要使用單分支if語(yǔ)句,要用{ }把它括起來。
            P94,例,例5.3。
            5.3.3  條件運(yùn)算符
            1    運(yùn)算符:? :
            2    優(yōu)先級(jí):低于邏輯運(yùn)算,高于賦值運(yùn)算
            3    結(jié)合方向:從右向左
            (4) 條件表達(dá)式:
            格式:表達(dá)式1? 表達(dá)式2: 表達(dá)式3
            功能:若表達(dá)式1為真,則條件表達(dá)式取表達(dá)式2,否則取表達(dá)式3。
            P96,例。
            注意:表達(dá)式2與表達(dá)式3二者的類型取高的。P37。
            P98,例,例5.4。
            5.4     Switch語(yǔ)句
            格式:switch (表達(dá)式)
                  {case 常量表達(dá)式1:語(yǔ)句1
            case 常量表達(dá)式2:語(yǔ)句2
                    … …
            case 常量表達(dá)式n:語(yǔ)句n
             [default:語(yǔ)句n+1]
                   }
            功能:如果表達(dá)式的值等于常量表達(dá)式i,則執(zhí)行語(yǔ)句i及其后面的語(yǔ)句,否則如果都不等,則執(zhí)行語(yǔ)句n+1。
            P99,例。
            注意:(1)表達(dá)式可以是任何類型的;
                 (2)常量表達(dá)式的值不能相同;
                 (3)各case和default出現(xiàn)次序無關(guān);
                 (4)可用break中斷執(zhí)行后續(xù)語(yǔ)句;
            (5)多個(gè)case可共用一組執(zhí)行語(yǔ)句。
            P99,例。

            5.5     程序舉例
            P100,例5.5。見ex5-5-1.c,ex5-5-2.c。
            P101,例5.6。
            P103,例5.7。見ex5-7。


             
            第6章    循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
            6.1     概述
            在C語(yǔ)言中,構(gòu)成循環(huán)的語(yǔ)句有4種:
            1    用goto和if語(yǔ)句;
            2    用while語(yǔ)句;
            3    用do-while語(yǔ)句;
            4    用for語(yǔ)句。
            6.2     goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán)
            格式:goto 語(yǔ)句標(biāo)號(hào);
            功能:無條件轉(zhuǎn)到語(yǔ)句標(biāo)號(hào)指定的語(yǔ)句中去執(zhí)行。
            注意:(1)語(yǔ)句標(biāo)號(hào)應(yīng)是合法的標(biāo)識(shí)符,可放在任何語(yǔ)句的前面。
                 (2)用goto語(yǔ)句構(gòu)成循環(huán)不是一種很好的方法。
            P106,例,例6.1。
            6.3     while語(yǔ)句
            格式:while (表達(dá)式)
                    循環(huán)體;
            功能:當(dāng)表達(dá)式為真時(shí)執(zhí)行循環(huán)體的語(yǔ)句,直到表達(dá)式為假時(shí)退出循環(huán)。
            P107,例6.2。
            注意:(1)循環(huán)體只能一個(gè)語(yǔ)句,如有多個(gè)語(yǔ)句要用{ }括起來。
                 (2)循環(huán)體內(nèi)應(yīng)有使循環(huán)趨于結(jié)束的語(yǔ)句,否則構(gòu)成死循環(huán)。
            (3)循環(huán)體可能一次也沒執(zhí)行到,當(dāng)條件表達(dá)式為真時(shí)進(jìn)入循環(huán)體,故也稱當(dāng)型循環(huán)。
            6.4     do-while語(yǔ)句
            格式:do
                    循環(huán)體;
            while (表達(dá)式);
            功能:先執(zhí)行一次循環(huán)體,然后當(dāng)表達(dá)式為真時(shí)再執(zhí)行循環(huán)體,直到表達(dá)式為假時(shí)退出循環(huán)。
            P108,例6.3,例6.4。
            注意:(1)循環(huán)體只能一個(gè)語(yǔ)句,如有多個(gè)語(yǔ)句要用{ }括起來。
                 (2)循環(huán)體內(nèi)應(yīng)有使循環(huán)趨于結(jié)束的語(yǔ)句,否則構(gòu)成死循環(huán)。
            (3)循環(huán)體至少執(zhí)行一次,直到條件表達(dá)式為假時(shí)退出循環(huán),故也稱直到型循環(huán)。
            6.5     for語(yǔ)句
            格式:for (初值表達(dá)式;條件表達(dá)式;修正表達(dá)式)
                    循環(huán)體;
            功能:先執(zhí)行一次初值表達(dá)式,再執(zhí)行條件表達(dá)式,若為真則執(zhí)行循環(huán)體,然后執(zhí)行修正表達(dá)式,再次執(zhí)行條件表達(dá)式進(jìn)行判斷,直到條件表達(dá)式為假時(shí)退出循環(huán)。
            P110,例。
            注意:(1)循環(huán)體只能一個(gè)語(yǔ)句,如有多個(gè)語(yǔ)句要用{ }括起來。
                 (2)可以明顯看出循環(huán)體執(zhí)行的次數(shù),故也稱計(jì)數(shù)循環(huán)。
                 (3)三個(gè)表達(dá)式在一定的條件下都可省。
            P111,說明(1)~(7)。
            6.6     循環(huán)的嵌套
            四種循環(huán)可以互相嵌套,此時(shí)外層循環(huán)的每一取值,內(nèi)層循環(huán)要轉(zhuǎn)一圈。但是循環(huán)嵌套不得交叉進(jìn)行。
            P113,說明(1)~(6)。
            6.7     幾種循環(huán)的比較
            4    四種循環(huán)可以用來處理同一問題,但一般不用goto循環(huán)。
            5    while和do-while循環(huán)在循環(huán)體內(nèi)應(yīng)有使循環(huán)趨于結(jié)束的語(yǔ)句,for可用修正表達(dá)式來實(shí)現(xiàn)。
            6    while和do-while循環(huán)在循環(huán)前應(yīng)有初始化的操作,for可用初值表達(dá)式來實(shí)現(xiàn)。
            7    while和do-while及for循環(huán)可用break語(yǔ)句跳出循環(huán)和用continue語(yǔ)句結(jié)束本次循環(huán),而goto循環(huán)不可以用。
            6.8     break語(yǔ)句和continue語(yǔ)句
            6.8.1  break語(yǔ)句
            格式:break;
            功能:退出switch選擇或while、do-while、for循環(huán)結(jié)構(gòu)。
            P114,例。
            6.8.2  contiune語(yǔ)句
            格式:contiune;
            功能:本次while、do-while、for循環(huán)提前結(jié)束,進(jìn)入下次循環(huán)。
            P115,例。
            P115,例6.5。
            6.9     程序舉例
            P116,例6.6。見ex6-6。
            P116,例6.7。見ex6-7。
            P118,例6.8。
            P118,例6.9。見ex6-9。
            P119,例6.10。見ex6-10。


             
            第7章    數(shù)組
            數(shù)組是由相同類型的一組數(shù)據(jù)構(gòu)成的。前面我們所學(xué)的類型都是基本類型,而本章所學(xué)的數(shù)組是一種構(gòu)造類型。
            7.1     一維數(shù)組的定義和引用
            7.1.1 一維數(shù)組的定義
            格式:類型標(biāo)識(shí)符 數(shù)組名[常量表達(dá)式],…;
            其中:數(shù)組名是標(biāo)識(shí)符,常量表達(dá)式是元素個(gè)數(shù)。
            功能:定義一維數(shù)組,其數(shù)組名由其“數(shù)組名”指定,元素個(gè)數(shù)由“常量表達(dá)式”指定,元素類型由“類型標(biāo)識(shí)符”指定。
            P122,例。
            注意:(1)C語(yǔ)言中數(shù)組的下標(biāo)從0開始;
                 (2)常量表達(dá)式中可以有符號(hào)常量,但不能含有變量;
                 (3)數(shù)組一旦定義,系統(tǒng)為它分配一個(gè)連續(xù)的存儲(chǔ)空間。
            7.1.2 一維數(shù)組元素的引用
            格式:數(shù)組名[下標(biāo)表達(dá)式]
            功能:引用已定義的數(shù)組元素
            P123,例,例7.1。
            注意:(1)下標(biāo)可以是表達(dá)式。
                 (2)下標(biāo)的取值為0~常量表達(dá)式-1,超出范圍可能有不可預(yù)料的后果。
            7.1.3 一維數(shù)組的初始化
            在定義一維數(shù)組時(shí),可對(duì)數(shù)組進(jìn)行初始化。
            方法:在定義數(shù)組時(shí)在數(shù)組名后加上={初始值,初始值,…,初始值}
            P123,例。
            注意:(1)可對(duì)部分元素初始化。
                 (2)數(shù)組有進(jìn)行初始化時(shí)常量表達(dá)式可省。
            7.1.4 一維數(shù)組程序舉例
            P124,例7.2。
            P124,例7.3。見ex7-3.c。
            7.2     二維數(shù)組的定義和引用
            7.2.1 二維數(shù)組的定義
            格式:類型標(biāo)識(shí)符 數(shù)組名[常量表達(dá)式][ 常量表達(dá)式],…;
            功能:定義二維數(shù)組,其數(shù)組名由其“數(shù)組名”指定,每維下標(biāo)的取值范圍由該維的“常量表達(dá)式”指定,元素類型由“類型標(biāo)識(shí)符”指定。
            P125,例。
            注意:(1)多維數(shù)組的定義與二維數(shù)組類似;
                 (2)二維數(shù)組常用來描述數(shù)學(xué)中的矩陣;
                 (3)對(duì)于一個(gè)m×n的二維數(shù)組,二維數(shù)組與一維數(shù)組元素的對(duì)應(yīng):
                      二維中第i,j個(gè)元素←→一維中第i×n+j個(gè)元素
            P126,例。
            7.2.2 二維數(shù)組的引用
            格式:數(shù)組名[下標(biāo)表達(dá)式] [下標(biāo)表達(dá)式]
            功能:引用已定義的二維數(shù)組元素
            P126,例。
            注意:設(shè)a是一個(gè)m×n二維數(shù)組;則
                 (1)a[i] (對(duì)任意固定的i=0,1,…,m-1)是一個(gè)長(zhǎng)度為n的一維數(shù)組,它的數(shù)組名就是a[i],每個(gè)元素是a[i][j];
                 (2)a可認(rèn)為是一個(gè)長(zhǎng)度為m一維數(shù)組,它的數(shù)組名就是a,每個(gè)元素是a[i];
                 (3)由上可知,二維數(shù)組可認(rèn)為是一個(gè)元素是一維數(shù)組的一維數(shù)組。
            7.2.3 二維數(shù)組的初始化
            在定義二維數(shù)組時(shí),也可對(duì)數(shù)組進(jìn)行初始化。
            方法:在定義數(shù)組時(shí)在數(shù)組名后加上={{初始值,…},{初始值,…},…,{初始值,…}}或者加上={初始值,初始值,…,初始值}
            P127,例。
            注意:(1)可對(duì)部分元素初始化;
                 (2)二維以上數(shù)組有進(jìn)行初始化時(shí)第一維的常量表達(dá)式可省。
            P128,例。
            7.2.4 二維數(shù)組應(yīng)用舉例
            P128,例7.4。
            P129,例7.5。見ex7-5.c。
            7.3     字符數(shù)組和字符串
            7.3.1 字符數(shù)組
            字符數(shù)組:元素類型為字符型的數(shù)組稱為字符數(shù)組。
            格式:char 數(shù)組名[常量表達(dá)式],…;
            P130,例。
            注意:長(zhǎng)度為n的字符數(shù)組可用來存放n個(gè)字符。
            7.3.2 字符數(shù)組的初始化
            與普通數(shù)組一樣,可對(duì)字符數(shù)組進(jìn)行初始化。
            方法:在定義數(shù)組時(shí)在數(shù)組名后加上={字符,字符,…,字符}
            P130,例。
            注意:初始化時(shí)元素個(gè)數(shù)可不寫。
            7.3.3 字符數(shù)組的引用
            字符數(shù)組的每個(gè)元素存放的是一個(gè)字符。
            格式:數(shù)組名[下標(biāo)表達(dá)式]
            P131,例7.6,例7.7。
            7.3.4 字符串和字符串結(jié)束標(biāo)志
            (1)字符串
            由若干個(gè)字符兩邊用雙撇號(hào)括起來的稱字符串。
            字符串存放時(shí)應(yīng)在尾部加一個(gè)\0作為結(jié)束標(biāo)志。
            長(zhǎng)度為n的字符存儲(chǔ)時(shí)占用n+1個(gè)字節(jié)的存儲(chǔ)空間。
            P131,例。
            (2)用字符數(shù)組存放字符串
            長(zhǎng)度為n的字符數(shù)組可用來存放一個(gè)長(zhǎng)度為n-1的字符串。
            字符數(shù)組可用字符串進(jìn)行整體初始化,且此時(shí)會(huì)自動(dòng)在尾部加一個(gè)\0。
            P132,例。
            7.3.5 字符數(shù)組的輸入與輸出
            字符數(shù)組輸入輸出的方法有兩種:
            (1)逐個(gè)元素用scanf和printf函數(shù)輸入輸出
            格式:scanf(“%c”,&數(shù)組元素);
                  printf (“%c”,數(shù)組元素);
            功能:前者從鍵盤上取得一個(gè)字符送給相應(yīng)的數(shù)組元素;
            后者把數(shù)組元素中的字符輸出到顯示器上。
            P131,例7.6。
            (2)整個(gè)字符數(shù)組用scanf和printf函數(shù)輸入輸出
            格式:scanf(“%s”,數(shù)組名);
            printf (“%s”,數(shù)組名);
            功能:前者從鍵盤上取得一個(gè)字符串送給相應(yīng)的數(shù)組;
            后者把數(shù)組中的整個(gè)字符串輸出到顯示器上。
            P133,例。
            注意:(1)整個(gè)字符數(shù)組中的字符串輸出時(shí),\0本身不輸出, 且輸出不換行;
            (2)整個(gè)字符數(shù)組中的字符串輸出時(shí),是從首地址逐一輸出的,直到遇到第一個(gè)\0為止;
            (3)C語(yǔ)言中數(shù)組名表示該數(shù)組的首地址,故整個(gè)字符數(shù)組輸入時(shí)不能在數(shù)組名前加&;
                (4)整個(gè)字符數(shù)組輸入時(shí)遇空格而停止,且會(huì)自動(dòng)在尾部加一個(gè)\0。
            P133,例。
            7.3.6 字符串處理函數(shù)
            1. 字符串輸出函數(shù)puts
            格式:puts(字符數(shù)組名);
            功能:輸出字符數(shù)組中的字符串。
            P135,例。
            2. 字符串輸入函數(shù)gets
            格式:gets(字符數(shù)組名);
            功能:從鍵盤輸入一個(gè)字符串到字符數(shù)組中。
            P135,例。
            注意:(1)gets與puts一次只能輸入輸出一個(gè)字符串;
                 (2)gets輸入時(shí)不會(huì)遇空格而停止,而是遇換行符而停止,也會(huì)在尾部自動(dòng)加上一個(gè)\0;
            (3)puts輸出時(shí)也是到\0為止,還會(huì)把\0轉(zhuǎn)成換行符輸出。
            3. 字符串連接函數(shù)strcat
            格式:strcat(字符串1, 字符串2);
            功能:把字符串2的內(nèi)容連接到字符串1之后,函數(shù)返回字符串1。
            注意:連接時(shí)把第二個(gè)字符串的第一個(gè)字符覆蓋到第一個(gè)字符串的\0上
            P136,例。
            4. 字符串拷貝函數(shù)strcpy
            格式:strcpy(字符串1,字符串2);
            功能:把字符串2的內(nèi)容拷貝到字符串1中,函數(shù)返回字符串1。
            注意:(1)拷貝時(shí)也是到第一個(gè)\0為止,連同\0一起拷貝;
                 (2)對(duì)字符串不可有賦值語(yǔ)句:字符串1=字符串2;
            P136,例。
            5. 字符串比較函數(shù)strcmp
            格式:strcmp(字符串1,字符串2);
            功能:比較字符串1與的字符串2內(nèi)容:如果字符串1= =字符串2,則返回0;如果字符串1>字符串2,則返回正整數(shù);如果字符串1<字符串2,則返回負(fù)整數(shù)。
            注意:比較時(shí)是以字符的ASCII值進(jìn)行的。
            P137,例。
            6. 測(cè)字符串長(zhǎng)度函數(shù)strlen
            格式:strlen(字符串)
            功能:返回字符串的實(shí)際字符數(shù)。
            注意:(1)測(cè)字符串長(zhǎng)度包括空格,但不包括\0;
            (2)遇到\開頭的特殊字符也當(dāng)一個(gè)字符對(duì)待。
            P138,例。
            7. 字符換小寫函數(shù)strlwr
            格式:strlwr(字符串)
            功能:把字符串中的大寫字母換成小寫字母。
            8. 字符換大寫函數(shù)strupr
            格式:strupr(字符串)
            功能:把字符串中的小寫字母換成大寫字母。
            7.3.7 字符數(shù)組應(yīng)用舉例
            P138,例7.8。見ex7-8.c。
            P140,例7.9。見ex7-9.c。


             
            第8章    函數(shù)
            8.1     概述
            一個(gè)C程序是由函數(shù)組成的,所以函數(shù)是C語(yǔ)言中最重要的概念,本章專門討論函數(shù)的定義、函數(shù)的調(diào)用及參數(shù)傳遞等問題。
            P143,例8.1。
            說明:
            (1)一個(gè)源程序文件是由一個(gè)或多個(gè)C函數(shù)組成的,一個(gè)源程序文件是一個(gè)編譯單位。
            (2)一個(gè)C程序由一個(gè)或多個(gè)源程序文件組成,一個(gè)源程序文件可以為多個(gè)C程序共用。
            (3)一個(gè)C程序中一定要有一個(gè)名為main的主函數(shù),執(zhí)行時(shí)總是從主函數(shù)開始,其它函數(shù)只有被調(diào)用時(shí)才會(huì)執(zhí)行,執(zhí)行完畢返回到調(diào)用處繼續(xù)執(zhí)行,正常情況下總是在主函數(shù)結(jié)束執(zhí)行。
            (4)所有的函數(shù)是平行的,即在定義時(shí)是互相獨(dú)立的,主函數(shù)可以調(diào)用其它函數(shù),其它函數(shù)之間可以互相調(diào)用,但其它函數(shù)不能調(diào)用主函數(shù)。
            (5)從用戶使用的角度看,函數(shù)可分為標(biāo)準(zhǔn)函數(shù)(庫(kù)函數(shù))和用戶自定義函數(shù)。
            (6)從函數(shù)的形式看,函數(shù)可分為無參函數(shù)和有參函數(shù)。
            8.2     函數(shù)定義的一般形式
            1. 無參函數(shù)的定義形式
            格式:函數(shù)類型 函數(shù)名()
            {
            數(shù)據(jù)聲明部分;
            執(zhí)行語(yǔ)句部分;
            }
            說明:(1)函數(shù)名:函數(shù)名是函數(shù)調(diào)用的依據(jù),函數(shù)值的返回也是通過函數(shù)名實(shí)現(xiàn)的,函數(shù)名要符合標(biāo)識(shí)符的定義。
            (2)函數(shù)體:由數(shù)據(jù)聲明和執(zhí)行語(yǔ)句兩部分組成,數(shù)據(jù)聲明是對(duì)數(shù)據(jù)特征的描述,執(zhí)行語(yǔ)句是對(duì)數(shù)據(jù)處理的描述,函數(shù)的功能由它們實(shí)現(xiàn)。
            (3)函數(shù)類型:函數(shù)類型規(guī)定了函數(shù)返回值的類型,int或char可不寫,如不要返回值可定義為void型。
                  P144,例。
            2. 有參函數(shù)的定義形式
            格式:函數(shù)類型 函數(shù)名(形式參數(shù)表列)
            {
            數(shù)據(jù)聲明部分;
            執(zhí)行語(yǔ)句部分;
            }
            說明:(1)形式參數(shù)表列:由格式為“形參類型 形參名”組成的表列,規(guī)定了形參的類型及數(shù)目。
                 (2)形參是用來接收或傳遞函數(shù)調(diào)用時(shí)實(shí)參的數(shù)據(jù)的。
                  P145,例。
            3. 空函數(shù)的定義形式
            格式:函數(shù)類型 函數(shù)名()
            {  }
            說明:(1)空函數(shù)什么事情也不做,沒有什么實(shí)際作用。
                 (2)編寫程序時(shí)如果某處要寫一個(gè)函數(shù),可以先寫一個(gè)空函數(shù)放在那里,等后面再來補(bǔ)寫完整,這樣做對(duì)編程是有益的。
            4. 對(duì)函數(shù)聲明的傳統(tǒng)方式
            格式:函數(shù)類型 函數(shù)名(形式參數(shù)名表列)
            形式參數(shù)名表列類型說明;
            {
            數(shù)據(jù)聲明部分;
            執(zhí)行語(yǔ)句部分;
            }
            P146,例。這種方法現(xiàn)一般不用,只了解一下就可。
            8.3    函數(shù)參數(shù)和函數(shù)的值
            8.3.1 形式參數(shù)和實(shí)際參數(shù)
            函數(shù)定義時(shí)的參數(shù)稱為形式參數(shù),函數(shù)調(diào)用時(shí)的參數(shù)稱為實(shí)際參數(shù)。形式參數(shù)和實(shí)際參數(shù)負(fù)責(zé)函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞。
            P146,例8.2。
            說明:(1)函數(shù)定義中的形式參數(shù),在函數(shù)未調(diào)用時(shí)并不占用存儲(chǔ)空間,只有當(dāng)函數(shù)調(diào)用時(shí)才分配存儲(chǔ)空間,函數(shù)調(diào)用完畢這些存儲(chǔ)空間被釋放。
            (2)實(shí)際參數(shù)可以是常量、變量或表達(dá)式,但它們一般必須有確定的值,函數(shù)調(diào)用時(shí)它們的值被傳給形式參數(shù)。
            (3)實(shí)參和形參的類型要相同或賦值兼容。對(duì)變量參數(shù)而言,實(shí)參對(duì)形參的數(shù)據(jù)傳遞是“值傳遞”,即數(shù)據(jù)有傳入沒傳出。
            P146,例8.2。
            8.3.2 函數(shù)的返回值
            函數(shù)調(diào)用后一般通過函數(shù)名返回一個(gè)值,但有的函數(shù)可能不需要返回值。
            P146,例8.2。
            說明:(1)函數(shù)的返回值是由return語(yǔ)句獲得的;一個(gè)函數(shù)如果不需要返回值,可以不用return語(yǔ)句;一個(gè)函數(shù)也可以有多個(gè)return語(yǔ)句,執(zhí)行到哪一個(gè)就那個(gè)return語(yǔ)句起作用。
                      P148,例。
            (2)函數(shù)的類型指函數(shù)返回值的類型,由定義函數(shù)時(shí)的函數(shù)類型來確定。定義函數(shù)時(shí)return語(yǔ)句后表達(dá)式的類型要與函數(shù)的類型相一致。
            (3)如果定義函數(shù)時(shí)return語(yǔ)句后表達(dá)式的類型與函數(shù)的類型不相一致,則以函數(shù)的類型為準(zhǔn)進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
            P148,例8.3。
                 (4)如果函數(shù)沒有return語(yǔ)句,則函數(shù)調(diào)用后將返回一個(gè)不確定的值。為了明確表示不需返回值可把函數(shù)定義為void類型。
                     P149,例。
            8.4    函數(shù)的調(diào)用
            8.4.1 函數(shù)的一般調(diào)用方法
            格式:函數(shù)名(實(shí)際參數(shù)表列)
            功能:調(diào)用函數(shù)名指定的函數(shù)。
            說明:(1)如果函數(shù)定義時(shí)沒有形參,則不要實(shí)參,但()不能省。
                 (2)實(shí)參要與形參在數(shù)目、類型、次序上一一對(duì)應(yīng)。
                 (3)Turbo C中實(shí)參傳遞是從右到左進(jìn)行的。
            P150,例8.4。
            8.4.2 函數(shù)調(diào)用的方式
            按函數(shù)在程序中出現(xiàn)的位置來分,函數(shù)有三種調(diào)用方式:
            1. 函數(shù)語(yǔ)句
            就是把函數(shù)調(diào)用作為一個(gè)語(yǔ)句,此時(shí)函數(shù)的返回值無法使用。
            P151,例。
            2. 函數(shù)表達(dá)式
            就是把函數(shù)調(diào)用放在一個(gè)表達(dá)式中,此時(shí)函數(shù)的返回值參加表達(dá)式的運(yùn)算。
            P151,例。
            3. 函數(shù)參數(shù)
            就是把函數(shù)調(diào)用作為另一個(gè)函數(shù)調(diào)用的實(shí)參,此時(shí)函數(shù)的返回值將傳給另一個(gè)函數(shù)的形參。
            P151,例。
            8.4.3 函數(shù)的聲明
            1. 函數(shù)調(diào)用的條件
            (1)被調(diào)用的函數(shù)必須是已存在的函數(shù),即要么是庫(kù)函數(shù)要么是已定義好的函數(shù)。
            (2)如果是庫(kù)函數(shù),一般要在本文件頭用#include命令把有關(guān)庫(kù)函數(shù)文件(*.h)包含到本文件中來。
                 P152,例。
            (3)如果是用戶自定義函數(shù),函數(shù)定義必須在函數(shù)調(diào)用之前,否則要在函數(shù)調(diào)用之前進(jìn)行函數(shù)聲明。
                 P152,例8.5。
            2. 函數(shù)聲明的方法
            格式:函數(shù)類型 函數(shù)名(形參類型 形參,…);
            功能:聲明一個(gè)函數(shù),以便在程序中調(diào)用。
                 P152,例8.5。
            說明:(1)函數(shù)聲明就是把函數(shù)頭重抄一遍(故函數(shù)聲明也叫函數(shù)原型),形參可省或形參及形參類型都省。
                 P153,例。
                 (2)函數(shù)類型為int的函數(shù)調(diào)用之前還未定義也可不要聲明,但最好還是聲明一下。
                 P146,例8.2。
                 (3)如果函數(shù)定義出現(xiàn)在函數(shù)調(diào)用之前,則不需要作函數(shù)聲明。
                 P154,例。
                 (4)如果函數(shù)聲明在所有的函數(shù)之前,則不必每個(gè)函數(shù)中再作聲明,每個(gè)函數(shù)都可以調(diào)用這個(gè)函數(shù)。
                 P154,例。
            8.5    函數(shù)的嵌套調(diào)用
            在C語(yǔ)言中,函數(shù)不能嵌套定義,但可以嵌套調(diào)用。即主函數(shù)可以調(diào)用子函數(shù),子函數(shù)可以調(diào)用子子函數(shù)。
            P155,圖8.5。
            P155,例8.6。
            說明:P157,(1)~(4)
            8.6     函數(shù)的遞歸調(diào)用
            在C語(yǔ)言中,函數(shù)可以調(diào)用它本身,函數(shù)自己調(diào)用自己稱為函數(shù)的遞歸調(diào)用。遞歸調(diào)用有兩種情況:直接遞歸和間接遞歸。
            P158,圖8.9,圖8.10。
            P158,例8.7。
            注意:編寫遞歸程序的關(guān)鍵是寫出問題的遞歸描述。
            P160,例8.8。
            8.7     數(shù)組作為函數(shù)參數(shù)
            1. 數(shù)組元素作為函數(shù)的參數(shù)
            數(shù)組元素作為函數(shù)的參數(shù),其用法與普通變量相同,數(shù)組元素可以是一維的也可以是多維的。
            P164,例8.10。
            說明:數(shù)組元素其實(shí)與普通變量的性質(zhì)一樣,故數(shù)組元素作為函數(shù)的參數(shù),其傳遞是“值傳遞”。即變量的數(shù)據(jù)有傳入沒傳出。
            2. 一維數(shù)組名作為函數(shù)的參數(shù)
            一維數(shù)組名也可作為函數(shù)的參數(shù),這時(shí)實(shí)參和形參都是一維數(shù)組。
            P165,例8.11。
            說明:(1)實(shí)參數(shù)組與形參數(shù)組應(yīng)分別在它們所在函數(shù)中定義,但數(shù)組名可以不一樣。
            (2)實(shí)參數(shù)組與形參數(shù)組的類型要一致,否則出錯(cuò)。
            (3)形參數(shù)組定義中的元素個(gè)數(shù)不起作用,程序編譯時(shí)并不對(duì)形參數(shù)組的元素個(gè)數(shù)進(jìn)行檢查。
            (4)形參數(shù)組定義中的元素個(gè)數(shù)可空,并可另設(shè)一個(gè)變量形參用來傳遞數(shù)組元素個(gè)數(shù)。
            P166,例8.12。
            (5)數(shù)組名作為函數(shù)的參數(shù),是把實(shí)參數(shù)組的首地址傳給形參數(shù)組,即讓兩個(gè)數(shù)組共享同一存儲(chǔ)空間,其傳遞是“地址傳遞”,即對(duì)數(shù)組而言,其數(shù)據(jù)有傳入也有傳出。
            P166,例8.13。
            3. 多維數(shù)組名作為函數(shù)的參數(shù)
            二維數(shù)組名也可作為函數(shù)的參數(shù),這時(shí)實(shí)參和形參可以都是二維數(shù)組,也可以實(shí)參是二維數(shù)組而形參是一維數(shù)組。
            P168,例8.14。
            說明:(1)如果二維數(shù)組作為形參,其第一維的元素個(gè)數(shù)可空。
                 (2)如果二維數(shù)組作為實(shí)參而一維數(shù)組作為形參,則數(shù)據(jù)按二維數(shù)組與一維數(shù)組元素的對(duì)應(yīng)關(guān)系進(jìn)行傳遞。
            8.8     局部變量和全局變量
            8.8.1 局部變量
            在一個(gè)函數(shù)的內(nèi)部定義的變量稱為局部變量,它從定義時(shí)刻開始到本函數(shù)結(jié)束范圍內(nèi)有效。
            P169,例。
            說明:(1)主函數(shù)內(nèi)定義的變量也只在主函數(shù)內(nèi)有效。
                 (2)不同函數(shù)可以使用同名的變量,它們互相沒有關(guān)系。
                 (3)形式參數(shù)也是局部變量。
                 (4)在一個(gè)函數(shù)內(nèi)部中的復(fù)合語(yǔ)句可以定義自己的變量,它只在本復(fù)合語(yǔ)句內(nèi)有效。
            P169,例。
            8.8.1 全局變量
            在一個(gè)函數(shù)的外部定義的變量稱為全局(外部)變量,它從定義時(shí)刻開始到本文件結(jié)束范圍內(nèi)有效。
            P170,例。
            說明:(1)設(shè)全局變量的作用是增加了函數(shù)間數(shù)據(jù)聯(lián)系的渠道,最好全局變量第一個(gè)字母大寫。
            P170,例8.15。
                 (2)建議在不必要時(shí)不要作用全局變量,因?yàn)椋孩倏晒?jié)省存儲(chǔ)空間,②可使程序通用性強(qiáng),③可使程序可讀性強(qiáng)。
                 (3)如果全局變量與局部變量不同名,則全局變量與局部變量在本函數(shù)內(nèi)均有效,如果全局變量與局部變量同名,則當(dāng)進(jìn)入本函數(shù)時(shí),全局變量會(huì)隱藏起來,局部變量起作用,一旦退出本函數(shù),全局變量恢復(fù)原值。
            P172,例8.16。
            8.9    變量的存儲(chǔ)類別
            8.9.1 動(dòng)態(tài)存儲(chǔ)方式和靜態(tài)存儲(chǔ)方式
            靜態(tài)存儲(chǔ)方式:程序運(yùn)行期間分配固定的存儲(chǔ)空間;
            動(dòng)態(tài)存儲(chǔ)方式:程序運(yùn)行期間分配動(dòng)態(tài)的存儲(chǔ)空間。
            程序運(yùn)行期間用戶使用的存儲(chǔ)區(qū)域稱為用戶區(qū),C語(yǔ)言中用戶區(qū)由三部分組成:
            ①程序區(qū):用于存放用戶程序;
            ②靜態(tài)存儲(chǔ)區(qū):用于存放需要固定存儲(chǔ)空間的數(shù)據(jù);
            ③動(dòng)態(tài)存儲(chǔ)區(qū):用于存放隨時(shí)可能建立或撤消的數(shù)據(jù)。
            P173,例。
            8.9.2 自動(dòng)(auto)變量
            定義:在函數(shù)內(nèi)部定義的前加auto或省缺的變量。
            特征:放在動(dòng)態(tài)存區(qū),定義變量時(shí)建立,退出本函數(shù)時(shí)撤消。
            P173,例。
            說明:(1)自動(dòng)變量是局部變量
                 (2)自動(dòng)變量在賦值前其值是不確定的。
                 (3)在函數(shù)多次被調(diào)用的過程中,自動(dòng)變量的值是不保留的。
            8.9.3 局部靜態(tài)(static)變量
            定義:在函數(shù)內(nèi)部定義的前加static的變量。
            特征:放在靜態(tài)存區(qū),程序編譯時(shí)創(chuàng)建,結(jié)束執(zhí)行時(shí)撤消。
            P173,例8.17。
            說明:(1)靜態(tài)變量的存儲(chǔ)空間在整個(gè)程序運(yùn)行期間是固定的。
                 (2)靜態(tài)變量的初始化是在程序編譯時(shí)進(jìn)行的,未顯式初始化時(shí)自動(dòng)賦0或空串。
                 (3)在函數(shù)多次被調(diào)用的過程中,靜態(tài)變量的值具有繼承性。
                 (4)局部靜態(tài)變量只能在本函數(shù)中使用。
            P175,例8.18。
            8.9.4 寄存器(register)變量
            定義:在函數(shù)內(nèi)部定義的前加register的變量。
            特征:放在寄存器,定義變量時(shí)建立,退出本函數(shù)時(shí)撤消。
            P175,例8.19。
            說明:(1)只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量。
                 (2)寄存器變量與自動(dòng)變量性質(zhì)一樣,但速度快、數(shù)量有限。
                 (3)局部靜態(tài)變量不能定義為寄存器變量。
                      P176,例。
            8.9.5 外部變量及其擴(kuò)展(extern)
            定義:定義在所有函數(shù)之外的變量稱為外部變量。
            特征:(1)放在靜態(tài)存區(qū),程序編譯時(shí)創(chuàng)建,結(jié)束執(zhí)行時(shí)撤消。
                 (2)外部變量可以用extern來擴(kuò)展它的作用域。
            1. 作用域擴(kuò)充到本文件內(nèi)
            方法:在本文件要用的地方之前使用extern重聲明。
            P176,例8.20。
            2. 作用域擴(kuò)充到其它文件
            方法:在其它文件要用的地方之前使用extern重聲明。
            P176,例8.21。
            注意:含有多個(gè)文件的C程序的執(zhí)行見P183,8.11如何運(yùn)行一個(gè)多文件的程序。
            8.9.6 外部靜態(tài)(static)變量
            定義:在函數(shù)外部定義的前加static的變量。
            特征:放在靜態(tài)存區(qū),程序編譯時(shí)創(chuàng)建,結(jié)束執(zhí)行時(shí)撤消。
            P178,例。
            說明:(1)外部靜態(tài)變量具有靜態(tài)變量的所有性質(zhì);
            (2)外部靜態(tài)變量只能在本文件中使用,而不能被其它文件引用。
            8.9.7 關(guān)于變量的聲明和定義
            在C語(yǔ)言中,定義和聲明兩個(gè)詞是混淆的,實(shí)際上,我們可把聲明分為定義性聲明和引用性聲明。
            定義性聲明(簡(jiǎn)稱定義):是要分配存儲(chǔ)空間的。如int a;
            引用性聲明(簡(jiǎn)稱聲明):是不要分配存儲(chǔ)空間的。如extern a;
            P179,例。
            說明:一個(gè)變量定義只能一次,聲明可以多次。
            8.9.8 存儲(chǔ)類別小結(jié)
            可從不同的角度來分類歸納:
            (1)作用域:可分為全局的和局部的。
            (2)存放時(shí)間:可分為動(dòng)態(tài)存儲(chǔ)和靜態(tài)存儲(chǔ)。
            (3)存放位置:可分為動(dòng)態(tài)存區(qū)、靜態(tài)存區(qū)和寄存器。
            P180,小結(jié)。
            說明:(1)作用域、存放時(shí)間、存放位置是不同的概念,它們有區(qū)別也有聯(lián)系。
                 (2)static對(duì)局部變量和全局變量的作用不同。
            P181,例。
            8.10    內(nèi)部函數(shù)和外部函數(shù)
            8.10.1 內(nèi)部函數(shù)
            定義:在函數(shù)定義前加static的函數(shù),稱為內(nèi)部函數(shù)或靜態(tài)函數(shù)。
            說明:內(nèi)部函數(shù)只能在本文件中被調(diào)用,而不能被其它文件調(diào)用。
            P182,例。
            8.10.1 外部函數(shù)
            定義:在函數(shù)定義前加extern或省缺的函數(shù),稱為外部函數(shù)。
            說明:外部函數(shù)可以在其它文件中被調(diào)用,使用前要用extern重聲明。
            P177,例8.21。見ex8-21。
            P182,例8.22。
            8.11    如何運(yùn)行一個(gè)多文件的程序
            C程序可以由多個(gè)文件組成,由多個(gè)文件組成的C程序可有兩種編譯運(yùn)行方法:
            1. 用Turbo C的集成環(huán)境
            多個(gè)文件組成的C程序執(zhí)行的步驟為:
            4    先把多個(gè)文件的內(nèi)容編輯并存盤為file1.c,file2.c,…,filen.c
            5    在編輯狀態(tài)下建立一個(gè)項(xiàng)目文件,內(nèi)容為:file1.c file2.c …filen.c,并存盤為:file.prj
            6    把Project菜單的子菜單project neme的值修改為:file.prj
            7    打編譯執(zhí)行的命令Ctrl+F9,并用Alt+F5查看結(jié)果。
            P177,例8.21。見ex8-21-1.c,ex8-21-2.c,ex8-21.prj。
            P184,例8.22。
            注意:項(xiàng)目文件的內(nèi)容中文件之間用空格隔開,擴(kuò)展名.c可省,也可以寫成一列。
            2. 用#include命令
            多個(gè)文件組成的C程序執(zhí)行的步驟為:
            4    先把多個(gè)文件的內(nèi)容編輯并存盤為file1.c,file2.c,…,filen.c
            5    設(shè)file1.c中含有main函數(shù),則在file1.c的開頭加入如下#include命令:#include “file2.c”
            … … …
            #include “filen.c”
            8    打編譯執(zhí)行的命令Ctrl+F9,并用Alt+F5查看結(jié)果。
            P185,例8.22。
            注意:此時(shí)實(shí)際上編譯程序不再認(rèn)為是多個(gè)文件,而是用#include命令把其它文件包含到本文件中來一起進(jìn)行編譯。


             
            第9章    預(yù)處理命令
            C程序中可以加入一些預(yù)處理命令,其目的是改進(jìn)程序設(shè)計(jì)環(huán)境,提高編程效率。這類命令主要包括:宏定義、文件包含和條件編譯三種,為了區(qū)別一般的C語(yǔ)句,這類命令都以#開頭。
            9.1    宏定義
            9.1.1 不帶參數(shù)的宏定義
            格式:#define 宏名 宏體
            其中:宏名是一個(gè)標(biāo)識(shí)符,宏體是一個(gè)表達(dá)式字符串。
            功能:程序編譯時(shí),用宏體代替宏名。
            P187,例,例9.1。
            說明:P188,(1)~(9)
            P188,例,例9.2。
            9.1.2 帶參數(shù)的宏定義
            格式:#define 宏名(形參表) 宏體
            其中:宏名是一個(gè)標(biāo)識(shí)符,宏體是一個(gè)帶有形參的表達(dá)式字符串。
            功能:程序編譯時(shí),用實(shí)參代替形參,再用宏體代替宏名(形參表)。
            P190,例,例9.3。
            說明:P190,(1)~(2)
            9.1.3 帶參數(shù)的宏與函數(shù)的區(qū)別
            P191,(1)~(6)
            P191,例9.4,例9.5。
            9.2    文件包含處理
            格式1:#include “文件名”
            格式2:#include <文件名>
            其中:文件名一般是 *.h 的函數(shù)庫(kù)文件,也可以是 *.c 的源程序文件,且可帶盤符路徑。
            功能:把文件名指定的文件內(nèi)容包含到當(dāng)前文件中來。
            注意:使用格式1時(shí),編譯程序先在當(dāng)前目錄上找指定文件,如沒找到就到系統(tǒng)規(guī)定的目錄上找找指定文件。使用格式2時(shí),編譯程序只在系統(tǒng)規(guī)定的目錄上找找指定文件。
            P195,例9.6。
            說明:P196,(1)~(5)。
            9.3    條件編譯
            條件編譯是指某些程序段一定的條件下參加編譯或不參加編譯,有關(guān)條件編譯的預(yù)處理命令有三種格式:
            1    #ifdef格式
            格式:#ifdef 標(biāo)識(shí)符
                    程序段1
                  [#else
                    程序段2]
                  #endif
            功能:如果標(biāo)識(shí)符用#define命令定義過,則編譯程序段1,否則編譯程序段2。
            P197,例。
            2    #ifndef格式
            格式:#ifndef 標(biāo)識(shí)符
                    程序段1
                  [#else
                    程序段2]
                  #endif
            功能:如果標(biāo)識(shí)符未用#define命令定義過,則編譯程序段1,否則編譯程序段2。
            P198,例。
            3    #if格式
            格式:#if 表達(dá)式
                    程序段1
                  [#else
                    程序段2]
                  #endif
            功能:如果表達(dá)式的值為真,則編譯程序段1,否則編譯程序段2。
            P198,例。

            半期考試
            試卷講評(píng)

             
            第10章    指第11章    針
            指針是C語(yǔ)言中一個(gè)最重要而又較難掌握的一個(gè)概念,也是C語(yǔ)言優(yōu)于其它高級(jí)語(yǔ)言的關(guān)鍵所在。掌握指針的應(yīng)用,可以使程序簡(jiǎn)潔、緊湊、高效。
            10.1     地址和指10.2    針概述
            1. 地址與地址運(yùn)算
            地址:計(jì)算機(jī)中存儲(chǔ)單元的編號(hào)稱為地址。在內(nèi)存中每一個(gè)字節(jié)都有地址,一個(gè)存儲(chǔ)區(qū)域的地址是這個(gè)區(qū)域的第一個(gè)字節(jié)的地址。
            地址運(yùn)算符&:求出變量所占用存儲(chǔ)區(qū)域的地址
            P201,例。
            注意:(1)地址運(yùn)算符是單目運(yùn)算,與單目+、-相同;
            (2)結(jié)合方向同:從右到左。
            2. 指針與指針變量
            指針:一個(gè)存儲(chǔ)區(qū)域的地址稱為指針。
            指針變量:用來存放存儲(chǔ)區(qū)域的地址的變量稱為指針變量。
            P202,例。
            注意:(1)變量的值可以通過變量直接訪問,也可通過指針變量間接訪問;
                 (2)指針變量只能用來存放地址,不能存放其它類型數(shù)據(jù)。
            10.3    變量的指10.4    針和指10.5    向變量的指10.6    針變量
            1. 變量的指針和指向變量的指針變量
            指向變量的指針:一個(gè)變量的地址稱為指向該變量的指針。
            指向變量的指針變量:用來存放變量的地址的變量稱為指向該變量的指針變量。
            例:int a;則&a就是指向a的指針;若p為指針變量,且p=&a;則p是指向a的指針變量。
            2. 指針運(yùn)算符
            指針運(yùn)算符*:求出指針變量所指向存儲(chǔ)區(qū)域的值或所指向變量的值
            例:int a;若p為指針變量,且p=&a;則*p是p指向的存儲(chǔ)區(qū)域的值,即*p的值就是a的值。
            注意:(1)指針運(yùn)算符是單目運(yùn)算,與單目+、-相同;
            (2)結(jié)合方向同:從右到左。
            P203,例。
            10.2.1 指針變量的定義
            1. 指針變量的定義
            格式:類型名 *指針變量名,…;
            功能:定義指向類型名變量的指針變量。
            例:int *p;定義一個(gè)指向整形變量的指針p。
            P203,例。
            2. 指針變量的賦值
            格式:指針變量=&變量;
            功能:把=號(hào)右邊變量的地址賦給=號(hào)左邊的指針變量。
            P203,例。
            注意:(1)指針變量賦值后的圖表示。
                 (2)指向不同類型的指針不能互相賦值。
                 (3)加了#include “stdio.h”后,指針變量可賦值為NULL。
            10.2.2 指針變量的引用
            指針變量的引用主要用到地址運(yùn)算符&和指針運(yùn)算符*。
            P204,例10.1。見ex10-1.c。
            說明:P204,(1)~(4).
            注意:(1)若p=&a;則&*p為a的地址,即&a。P205。
                 (2)若p=&a;則*&a為a的值,即就是a。
                 (3)(*p)++與a++等價(jià),因*與++同級(jí),又結(jié)合方向?yàn)閺挠蚁蜃螅试诖?)不可省,否則變?yōu)?(p++)。若i=3;p=&i;則這兩個(gè)表達(dá)式的值都為3,但執(zhí)行后前者p仍指向i,且i的值會(huì)加1,后者p指向i的后一個(gè)區(qū)域,i的值未加1。見ex205.c。
            P206,例10.2。
            說明:此例中p1,p2的指向進(jìn)行變換,而a,b的值并未交換。
            10.2.3 指針作為函數(shù)參數(shù)
            用指針作為函數(shù)的參數(shù),可以實(shí)現(xiàn)“通過被調(diào)函數(shù)改變主調(diào)函數(shù)中變量的值”的目的。
            P207,例10.3。
            說明:此例中p1,p2的指向并未進(jìn)行變換,而它們指向的值進(jìn)行了交換。
            注意:(1)用指針作為函數(shù)的參數(shù),就其指針變量而言仍然是有傳入沒傳出,但它傳送的是地址,故這時(shí)是傳址調(diào)用,即對(duì)指針?biāo)赶虻闹凳怯袀魅胍灿袀鞒觯矢淖冎羔樦赶虻闹悼梢詫?shí)現(xiàn)上述目的。
                (2)用指針作為函數(shù)的參數(shù),不能通過改變形參指針的值來達(dá)到“改變主調(diào)函數(shù)中變量的值”的目的。P209。
            P210,例10.4。
            10.7    數(shù)組與指10.8    針
            10.3.1 指向數(shù)組元素的指針
            設(shè)a為元素個(gè)數(shù)為n的一維數(shù)組,p為指向數(shù)組a的元素類型的指針,如果p=a或p=&a[0],即p指向a[0],則p+i指向a[i],此時(shí)可把a(bǔ)[i]寫成p[i]。
            P211,例。
            注意:(1)一維數(shù)組名a表示數(shù)組a的首地址,即a[0]的地址,故a與&a[0]等價(jià)。
                 (2)一維數(shù)組a的第i個(gè)元素a[i]的地址可以用a+i表示,故a+i與&a[i]等價(jià)。
            10.3.2 通過指針引用數(shù)組元素
            設(shè)a為元素個(gè)數(shù)為n的一維數(shù)組,p為指向數(shù)組a的元素類型的指針,如果p=a或p=&a[0],則數(shù)組a的第i個(gè)元素有兩種表示法:
            a[i] 或p[i]        下標(biāo)表示法
            *(a+i)或*(p+i)      地址表示法
            P212,例。
            P212,例10.5。見ex10-5-1.c,ex10-5-2.c,ex10-5-3.c。
            說明:三種方法比較,P213,(1)~(3)
            注意:(1)可以改變p的值,但不能改變a的值;
                 (2)要注意指針的當(dāng)前值。P214,例10.6。
                 (3)指針值超出數(shù)組范圍時(shí)系統(tǒng)不提示出錯(cuò)。
                 (4)要注意指針變量的運(yùn)算。P215①~⑤。
            10.3.3 用數(shù)組名作為函數(shù)參數(shù)
            在函數(shù)的參數(shù)中,實(shí)參與形參可以都是數(shù)組,也可以都是指針,還可以一個(gè)是數(shù)組一個(gè)是指針。
            P216,例,P221,(1)~(4)。
            P217,例10.7。見ex10-7-1.c,ex10-7-2.c。
            P219,例10.8。
            注意:(1)用指針和數(shù)組作為參數(shù),它們傳送的是地址,故是傳址調(diào)用,它們所指向的數(shù)組的值是有傳入也有傳出的。
                 (2)當(dāng)數(shù)組作為形式參數(shù)時(shí),數(shù)組名不再是常量,與指針意義相同。
            P217,例。
            P222,例10.9。見ex10-9-1.c,ex10-9-2.c。
            P223,例10.10。
            10.3.4 多維數(shù)組與指針
            1. 多維數(shù)組元素的地址
            設(shè)a為元素個(gè)數(shù)為m×n的二維數(shù)組,則a+i表示第i行a[i]的地址,*(a+i)+j表示第i行第j個(gè)元素a[i][j]的地址,于是數(shù)組a的第i,j個(gè)元素有三種表示法:
            a[i][j]       下標(biāo)表示法
            *(a[i]+j)     下標(biāo)地址表示法
            *(*(a+i)+j)   二級(jí)地址表示法
            P225,例。
            P227,例10.11。
            注意:(1)二維數(shù)組名a表示數(shù)組a的第0行的地址,即a[0]的地址,故a與&a[0]等價(jià)。
                 (2)二維數(shù)組a的第i個(gè)元素a[i]表示第i行第0個(gè)元素的地址,即a[i][0]的地址,故a[i]與& a[i][0]等價(jià)。
            2. 指向多維數(shù)組元素的指針變量
            (1)指向數(shù)組元素的指針
            設(shè)a為元素個(gè)數(shù)為m×n的二維數(shù)組,p為指向a的元素類型的指針,如果p=a[0],即p指向a[0][0],則p+i×n+j指向a[i][j]。
            P228,例10.12。
            (2)指向一維數(shù)組的指針
            指向一維數(shù)組的指針稱為數(shù)組指針。
            格式:類型名 (*數(shù)組指針名)[常量表達(dá)式],…;
            功能:定義指向元素個(gè)數(shù)為常量表達(dá)式的一維數(shù)組的指針。
            注意:數(shù)組指針用來存放一維數(shù)組的首地址;
            P229,例10.13。
            (3)數(shù)組指針與二維數(shù)組的行
            數(shù)組指針可用來指向二維數(shù)組的行,故也稱行指針。
            設(shè)a為元素個(gè)數(shù)為m×n的二維數(shù)組,p為指向元素個(gè)數(shù)為n的一維數(shù)組的指針,如果p=a,即p指向a[0],則p+i指向a[i],* (p+i)+j指向a[i][j]。
            P229,例10.13。
            3. 用指向數(shù)組的指針作為函數(shù)的參數(shù)
            普通指針作為函數(shù)的參數(shù),因?yàn)榭梢宰宲+i指向a[i](一維數(shù)組元素),故可以用來傳遞一維數(shù)組元素的地址;同樣的道理,指向數(shù)組的指針作為函數(shù)的參數(shù),因?yàn)榭梢宰宲+i指向a[i](二維數(shù)組的行),故可以用來傳遞二維數(shù)組的行地址。
            P230,例10.14。
            P231,例10.15。
            10.9    字符串與指10.10    針
            10.4.1 字符串的表示形式
            在C語(yǔ)言中,字符串有兩種表示形式。
            1    用字符數(shù)組存放一個(gè)字符串;
            2    用字符指針指向一個(gè)字符串。
            P232,例10.16,例10.17。
            注意:(1)字符數(shù)組占有固定的存儲(chǔ)空間,字符數(shù)組名是常量,故不能賦值、不能自增減。
                 (2)字符指針只是用來存放字符串的首地址,字符指針是變量,故可以賦值、可以自增減。
            P234,例10.18,例10.19。
            10.4.2 字符串指針作為函數(shù)的參數(shù)
            把字符串從一個(gè)函數(shù)傳遞到另一個(gè)函數(shù),可有兩種方法。
            1    用存放一個(gè)字符串的字符數(shù)組;
            2    用指向一個(gè)字符串的字符指針。
            P235,例10.20。
            解法:(1)用字符數(shù)組作為形參,P235。
                 (2)用字符指針作為形參,P236。
                 (3)對(duì)copy_string函數(shù)的簡(jiǎn)化,P237,①~⑥。
            10.4.3 對(duì)使用字符指針和字符數(shù)組的討論
            (1)字符數(shù)組存放的是若干個(gè)字符,字符指針存放的是字符串的首地址。
            (2)字符數(shù)組不能對(duì)數(shù)組名賦值,字符指針可以對(duì)指針名賦值。P238。
            (3)字符數(shù)組和字符指針都可以初始化。P239。
            (4)字符數(shù)組定義后有分配存儲(chǔ)空間存放字符串,字符指針只分配一個(gè)單元存放字符地址(字符串的首地址)。P239。
            (5)字符數(shù)組名不能增值,字符指針名可以增值。P240,例10.21,例10.22。
            (6)當(dāng)字符數(shù)組存放一個(gè)字符串或字符指針指向一個(gè)字符串時(shí),可用作printf語(yǔ)句的格式控制。P240。
            10.11     指10.12    向函數(shù)的指10.13    針
            10.5.1 用函數(shù)指針調(diào)用函數(shù)
            一個(gè)函數(shù)是一個(gè)指令的序列,函數(shù)執(zhí)行時(shí)是從第一條指令開始直到最后一條指令結(jié)束,第一條指令的地址稱為函數(shù)的入口地址,函數(shù)名代表這個(gè)函數(shù)的入口地址。用來存放函數(shù)入口地址的指針稱為指向函數(shù)的指針,簡(jiǎn)稱函數(shù)指針。
            (1)指向函數(shù)的指針定義
            格式:類型名 (*函數(shù)指針變量名)( );
            功能:定義一個(gè)指向函數(shù)的指針。
            P241,例。
            (2)指向函數(shù)的指針的賦值和引用
            格式:函數(shù)指針變量=函數(shù)名;
                  (*函數(shù)指針變量)(實(shí)參,…)
            功能:前者是把函數(shù)的入口地址賦給指向函數(shù)的指針,后者是用指向函數(shù)的指針調(diào)用該函數(shù)。于是函數(shù)的調(diào)用方法有兩種:
                     函數(shù)名(實(shí)參,…)              用函數(shù)名調(diào)用
            (*函數(shù)指針變量)(實(shí)參,…)      用函數(shù)指針調(diào)用
            P242,例。
            P241,例10.23。
            注意:(1)用函數(shù)指針調(diào)用函數(shù),必須先給函數(shù)指針賦函數(shù)名;
            (2)函數(shù)指針雖然是變量,但p+n、p++、p--等無意義。
            10.5.2 用函數(shù)指針作為函數(shù)的參數(shù)
            有了函數(shù)指針,可以用一個(gè)語(yǔ)句調(diào)用不同的函數(shù);用函數(shù)指針作為函數(shù)的參數(shù),可以把不同的函數(shù)傳遞到同一個(gè)子函數(shù)。因此函數(shù)指針可以簡(jiǎn)化多個(gè)函數(shù)的調(diào)用。
            P243,例。
            P243,例10.24。
            10.14    返回指10.15    針值的函數(shù)
            一個(gè)函數(shù)的返回值可以是指針類型的,這樣的函數(shù)稱為返回指針值的函數(shù),簡(jiǎn)稱指針函數(shù)。
            格式:函數(shù)類型 *函數(shù)名(形式參數(shù)表列)
            {
            數(shù)據(jù)聲明部分;
            執(zhí)行語(yǔ)句部分;
            }
            功能:定義一個(gè)指向類型名的指針函數(shù)。
            P246,例10.25。
            P247,例10.26。
            注意:字符串運(yùn)算函數(shù)strcat、strcpy等都是返回指針的函數(shù)。
            P136。
            10.16    指10.17    針數(shù)組和指10.18    向指10.19    針的指10.20    針
            10.7.1 指針數(shù)組的概念
            數(shù)組的元素為指針類型的數(shù)組稱為指針數(shù)組。
            格式:類型名 *指針數(shù)組名[常量表達(dá)式],…;
            功能:定義指向類型名的指針數(shù)組。
            注意:(1)指向字符型的指針數(shù)組稱為字符指針數(shù)組;
            (2)m×n的二維字符數(shù)組可以用來存放m個(gè)長(zhǎng)度為n-1的字符串;
                      元素個(gè)數(shù)為m的字符指針數(shù)組可用來指向m個(gè)隨意長(zhǎng)度的字符串。
            P249,例。
            P249,例10.27。
            10.7.2 指向指針的指針
            (1)二級(jí)指針與多級(jí)指針
            指向指針的指針稱為二級(jí)指針。
            格式:類型名 **指針變量名,…;
            功能:定義二級(jí)指針。
            P251,例。
            注意:同理可以定義多級(jí)指針。
            (2)二級(jí)指針與多級(jí)指針的引用
            設(shè)p為二級(jí)指針,則*p為一級(jí)指針,**p為所指類型的變量。
            P251,例。
            注意:不同級(jí)別的指針不能互相賦值。
            P252,例10.28。
            P252,例10.29。
            *10.7.3 指針數(shù)組作為main的形參
            (1)main函數(shù)的參數(shù)
            main函數(shù)一般是不帶參數(shù)的,因?yàn)闆]有函數(shù)可以調(diào)用main函數(shù)。但main函數(shù)實(shí)際上也是可以帶參數(shù)的,一般格式為:
                main(int argc,char *argv[])
            其中:形參argc是一個(gè)整型變量,形參argv是一個(gè)字符指針數(shù)組。
            (2)DOS下執(zhí)行程序的命令行
            C源程序*.c被編譯連接后生成可執(zhí)行程序*.exe,可以DOS下通過命令行執(zhí)行該程序。命令行的一般格式為:
            可執(zhí)行程序名 參數(shù) 參數(shù) …↙
            其中:可執(zhí)行程序名、參數(shù)、參數(shù)等都是字符串,↙表示回車符。
            P253,例。
            (3)命令行與源程序的參數(shù)傳遞
            當(dāng)用戶鍵入命令行執(zhí)行時(shí),字符串:可執(zhí)行程序名、參數(shù)、參數(shù)、…將傳送給argv[0]、argv[1]、argv[2]、…。Argc將取得命令行中字符串的個(gè)數(shù)。
            P254,例。
            10.21    有關(guān)指10.22    針的數(shù)據(jù)類型和指10.23    針運(yùn)算小結(jié)
            10.8.1 有關(guān)指針的數(shù)據(jù)類型小結(jié)
            涉及到指針的類型主要有:
            變量,一級(jí)指針,一維數(shù)組,指針數(shù)組,數(shù)組指針,函數(shù),指針函數(shù),函數(shù)指針,二級(jí)指針等。
            P255,表10.2。
            10.8.2 指針運(yùn)算小結(jié)
            (1)指針與整數(shù)相加減
            設(shè)指針p是指向某類型的,這個(gè)類型占用c個(gè)字節(jié),i為整數(shù),則
            1    p++,2    p--,3    p+i,4    p-i,5    p+=i,6    p-=i等都是合法的;
            7    p+i的值(地址)=p的值(地址)+i×c
            P256,例。
            (2)指針變量的賦值
            可以給指針變量賦值的有:
            1    相應(yīng)類型變量的地址值;
            2    一維數(shù)組名或其元素的地址值;
            3    函數(shù)的入口地址;
            4    相應(yīng)類型指針變量。
            P256,例。
            (3)指針變量可以有空值
            空指針值用NULL表示,它是一個(gè)符號(hào)常量,它在stdio.h中,可以把它賦給指針變量,這時(shí)表示指針變量有確定值但沒有指向任何有用單元。
            P256,例。
            注意:定義了指針變量還末賦值前它是一個(gè)不確定的地址值,不是空指針值。
            (4)兩個(gè)指針的相減
            指向同一數(shù)組元素的兩個(gè)指針可以相減,其值為兩個(gè)指針?biāo)冈刂g的元素個(gè)數(shù)。
            P257,例。
            (5)兩個(gè)指針的比較
            指向同一數(shù)組元素的兩個(gè)指針可以比較大小,其大小取決于所指向元素的序號(hào),相等表示它們指向同一元素。
            P257,例。
            10.8.3 void指針類型
            指向void(空)類型的指針只能用來存放一個(gè)地址,但這個(gè)地址不與任何類型掛鉤。不同類型的指針之間不能相互賦值,但可強(qiáng)制轉(zhuǎn)換后進(jìn)行賦值。
            P257,例。


             
            第12章    結(jié)構(gòu)體與共用體
            11.1    結(jié)構(gòu)體類型概述
            結(jié)構(gòu)體是由不同類型的一組數(shù)據(jù)構(gòu)成的。與數(shù)組比較,數(shù)組是由相同類型的一組數(shù)據(jù)構(gòu)成的。結(jié)構(gòu)體與數(shù)組都是一種構(gòu)造類型。
            結(jié)構(gòu)體類型的定義:
            格式:struct 結(jié)構(gòu)體類型名
                  {類型名 成員名;
            …  …
            };
            其中:類型名 成員名;… … 稱為“成員表列”。
            功能:定義一個(gè)結(jié)構(gòu)體類型。
            P260,例。
            注意:這是我們所見的第一個(gè)用戶自定義類型,以前我們學(xué)過的類型全是C系統(tǒng)預(yù)定義的。數(shù)組類型雖然也是構(gòu)造類型,但不需用戶自定義類型。
            11.2    定義結(jié)構(gòu)體類型變量的方法
            定義了結(jié)構(gòu)體類型后,就可以用它來定義結(jié)構(gòu)體類型的變量。結(jié)構(gòu)體類型變量的定義方法有三種:
            1. 分步定義
            格式:struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量名,…;
            其中:結(jié)構(gòu)體類型名是事先已定義的。
            功能:用已定義的結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量。
            P261,例。
            2. 同時(shí)定義
            格式:struct 結(jié)構(gòu)體類型名
                  {類型名 成員名;
            …  …
            }結(jié)構(gòu)體變量名,…;
            其中:結(jié)構(gòu)體類型名事先是未定義的。
            功能:同時(shí)定義結(jié)構(gòu)體類型與結(jié)構(gòu)體變量。
            P262,例。
            3. 直接定義
            格式:struct
                  {類型名 成員名;
            …  …
            }結(jié)構(gòu)體變量名,…;
            其中:結(jié)構(gòu)體類型被定義但并未取名。
            功能:直接定義結(jié)構(gòu)體變量。
            P262,例。
            說明:
            (1)定義一個(gè)結(jié)構(gòu)體類型,系統(tǒng)并未為它分配存儲(chǔ)空間。用結(jié)構(gòu)體類型定義變量后才為變量分配存儲(chǔ)空間,其空間大小等于各成員所占空間之和。P261,例。
            (2)結(jié)構(gòu)體類型中的成員相當(dāng)于普通變量,但它們與普通變量屬于不同的層次,故成員與程序中的普通變量可以同名。P262,例。
            (3)成員也可以是結(jié)構(gòu)體變量,即結(jié)構(gòu)體類型可以嵌套。P262,例。
            (4)系統(tǒng)沒有預(yù)定義結(jié)構(gòu)體類型,要用結(jié)構(gòu)體類型,必須先定義后使用。
            P261,例。
            11.3    結(jié)構(gòu)體變量的引用
            定義了結(jié)構(gòu)體變量后,我們可以引用結(jié)構(gòu)體變量及其成員,引用結(jié)構(gòu)體變量的成員格式為:
            格式:結(jié)構(gòu)體變量.成員名
            功能:引用結(jié)構(gòu)體變量的一個(gè)成員
            說明:(1)“.”稱為成員運(yùn)算符,其優(yōu)先級(jí)最高,與( )相同。
                 (2)“結(jié)構(gòu)體變量.成員名”的類型與結(jié)構(gòu)體類型定義時(shí)的成員名類型相同。
            P263,例。
            引用規(guī)則:
            (1)結(jié)構(gòu)體變量不能整體輸入與輸出,必須要用成員引用的方法來進(jìn)行。P263,例。
            (2)如果成員本身又屬于一個(gè)結(jié)構(gòu)體類型,則要用多個(gè)成員運(yùn)算符,一級(jí)一級(jí)地找到最低一級(jí)的成員。P263,例。
            (3)結(jié)構(gòu)體變量的成員可象普通變量一樣進(jìn)行各種運(yùn)算。P264,例。
            (4)可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址。
            P264,例。
            (5)兩個(gè)相同類型的結(jié)構(gòu)體變量可以整體賦值,但結(jié)構(gòu)體變量不能整體賦給一組常量。P262,例。
            11.4    結(jié)構(gòu)體變量的初始化
            在定義結(jié)構(gòu)體變量時(shí),可對(duì)結(jié)構(gòu)體變量進(jìn)行初始化。
            方法:在定義結(jié)構(gòu)體變量時(shí)加上={初始值,初始值,…,初始值}
            P264,例11.1。
            注意:(1)結(jié)構(gòu)體變量不能整體賦給一組常量。
                 (2)兩個(gè)相同類型的數(shù)組不可以整體賦值。
            11.5    結(jié)構(gòu)體數(shù)組
            每個(gè)元素為結(jié)構(gòu)體類型的數(shù)組稱為結(jié)構(gòu)體數(shù)組。
            11.5.1 結(jié)構(gòu)體數(shù)組的定義
            與定義普通數(shù)組一樣,定義結(jié)構(gòu)體數(shù)組只要在定義變量的后面加[常量表達(dá)式]即可。如int a;     是定義整型變量a;
                   int a[5];   是定義整型數(shù)組a;
            因?yàn)槎x結(jié)構(gòu)體變量的方法有三種,故定義結(jié)構(gòu)體數(shù)組的方法也有三種:
            (1)分步定義
            (2)同時(shí)定義
            (3)直接定義
            P265,例。
            11.5.2 結(jié)構(gòu)體數(shù)組的初始化
            在定義結(jié)構(gòu)體數(shù)組時(shí),可對(duì)結(jié)構(gòu)體數(shù)組進(jìn)行初始化。
            方法:在定義結(jié)構(gòu)體數(shù)組時(shí)加上={{初始值,…},…,{初始值,…}}
            P266,例。
            11.5.3 結(jié)構(gòu)體數(shù)組的應(yīng)用舉例
            P266,例11.2。
            說明:(1)引用結(jié)構(gòu)體數(shù)組某一元素的成員要寫成:結(jié)構(gòu)體數(shù)組[i].成員名;
                 (2)注意leader[j].count++的運(yùn)算次序。
            11.6    指11.7    向結(jié)構(gòu)體類型數(shù)據(jù)的指11.8    針
            11.6.1 指向結(jié)構(gòu)體變量的指針
            用來存放結(jié)構(gòu)體變量的地址的指針稱為結(jié)構(gòu)體指針。
            1. 結(jié)構(gòu)體指針的定義
            與定義普通指針一樣,定義結(jié)構(gòu)體指針只要在定義變量的前面加個(gè)*即可。如 int a;     是定義整型變量a;
               int *a;    是定義整型指針a;
            因?yàn)槎x結(jié)構(gòu)體變量的方法有三種,故定義結(jié)構(gòu)體指針的方法也有三種:
            (1)分步定義
            (2)同時(shí)定義
            (3)直接定義
            P268,例11.3。
            2. 結(jié)構(gòu)體指針的引用
            定義了結(jié)構(gòu)體指針p后,可以用來存放結(jié)構(gòu)體變量s的地址,即p=&s;這時(shí),設(shè)s有成員num,則結(jié)構(gòu)體變量的成員有三種等價(jià)的表示法:
            1    s.num
            2    (*p).num
            3    p->num
            P268,例11.3。
            注意:“->”稱為指向運(yùn)算符,優(yōu)先級(jí)最高,與( )相同。
            P269,例。
            11.6.2 指向結(jié)構(gòu)體數(shù)組元素的指針
            結(jié)構(gòu)體指針可以用來存放結(jié)構(gòu)體數(shù)組的首地址或數(shù)組元素的地址。
            設(shè)p為結(jié)構(gòu)體指針,stu為結(jié)構(gòu)體數(shù)組,且p=stu或p=&stu[0],則p++指向結(jié)構(gòu)體數(shù)組stu的下一個(gè)元素。于是其下個(gè)元素的成員num可表示為:(*p). num或p->num。
            P269,例11.4。
            注意:(1)(++p)->num與(p++)->num的含義;
                 (2)p不能用來存放結(jié)構(gòu)體數(shù)組元素成員的地址,但可強(qiáng)制轉(zhuǎn)換。
            P270,例。
            11.9    用指11.10    針處理鏈表
            11.7.1 鏈表概述
            鏈表的定義:
            4    有一個(gè)首指針,指向第一個(gè)結(jié)點(diǎn);
            5    每個(gè)結(jié)點(diǎn)有一個(gè)或多個(gè)數(shù)據(jù)成員和一個(gè)指針成員,指針成員指向下一個(gè)結(jié)點(diǎn);
            6    末結(jié)點(diǎn)指針成員的值為NULL。
            P273,圖11.10。
            注意:(1)鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),如一個(gè)班的學(xué)生成績(jī)可用鏈表來存放,一個(gè)程序(指令的有序集)在計(jì)算機(jī)內(nèi)也是用鏈表的方式來存放的;
                 (2)鏈表結(jié)構(gòu)可以是動(dòng)態(tài)地分配存儲(chǔ)空間的,即結(jié)點(diǎn)是可以動(dòng)態(tài)的建立或刪除的;
                 (3)鏈表的一個(gè)結(jié)點(diǎn)是一個(gè)結(jié)構(gòu)體類型的存儲(chǔ)空間,可用結(jié)構(gòu)體類型來描述。
            P273,例。
            11.7.2 簡(jiǎn)單鏈表
            建立和輸出一個(gè)簡(jiǎn)單鏈表的步驟:
            2    定義一個(gè)含有數(shù)據(jù)成員和指針成員的結(jié)構(gòu)體類型;
            3    用這個(gè)結(jié)構(gòu)體類型定義若干個(gè)變量(即開創(chuàng)若干個(gè)結(jié)點(diǎn)空間)和一個(gè)首指針及一個(gè)遍歷指針;
            4    對(duì)這些變量的數(shù)據(jù)成員輸入數(shù)據(jù),并用首指針和這些這些變量的指針成員把結(jié)點(diǎn)連接成一個(gè)鏈表;
            5    用遍歷指針遍歷所有的結(jié)點(diǎn),輸出各結(jié)點(diǎn)數(shù)據(jù)成員的值。
            P274,例11.7。見ex11-7.c。
            注意:用這種方法建立鏈表還不是動(dòng)態(tài)分配存儲(chǔ)空間的,因?yàn)樾枰獛讉€(gè)結(jié)點(diǎn)必須事先用變量來定義,故稱為靜態(tài)鏈表。
            11.7.3 處理動(dòng)態(tài)鏈表所需的函數(shù)
            建立動(dòng)態(tài)鏈表需要如下幾個(gè)庫(kù)函數(shù):
            1. malloc函數(shù)
            原型:void *malloc(unsigned size);
            功能:在內(nèi)存開辟一個(gè)大小為為size個(gè)字節(jié)的存儲(chǔ)空間,并返回這個(gè)存儲(chǔ)空間的首地址。
            例:int *p;
                p=(int *)malloc(2);
            2. calloc函數(shù)
            原型:void *calloc(unsigned n,unsigned size);
            功能:在內(nèi)存開辟n個(gè)大小為為size個(gè)字節(jié)的存儲(chǔ)空間,并返回這個(gè)存儲(chǔ)總空間的首地址。
            例:int *p;
                p=(int *)calloc(5,2);
                通過p++可以遍歷這5個(gè)大小為兩個(gè)字節(jié)的存儲(chǔ)空間。
            3. free函數(shù)
            原型:void free(void *p);
            功能:釋放由malloc或calloc開辟的且由p指向的存儲(chǔ)空間,本函數(shù)無返回值。
            例:int *p;
                p=(int *)malloc(2);
                free(p);
            11.7.4 建立動(dòng)態(tài)鏈表
            建立一個(gè)動(dòng)態(tài)鏈表的步驟:
            4    用結(jié)構(gòu)體類型定義一個(gè)首指針、一個(gè)開辟指針和一個(gè)末指針;
            5    用開辟指針和malloc函數(shù)開辟一個(gè)結(jié)點(diǎn),并對(duì)這個(gè)結(jié)點(diǎn)的數(shù)據(jù)成員輸入數(shù)據(jù);
            6    當(dāng)這個(gè)結(jié)點(diǎn)的數(shù)據(jù)成員的值不為0,則用首指針或前一結(jié)點(diǎn)的指針成員指向它,并讓末指針也指向它;
            7    用開辟指針和malloc函數(shù)開辟一個(gè)新結(jié)點(diǎn),并對(duì)這個(gè)結(jié)點(diǎn)的數(shù)據(jù)成員輸入數(shù)據(jù),回到(3);
            8    置末結(jié)點(diǎn)的指針成員值為NULL。
            P276,例11.8。見ex11-8.c。
            注意:用這種方法建立鏈表是動(dòng)態(tài)分配存儲(chǔ)空間的,因?yàn)樾枰獛讉€(gè)結(jié)點(diǎn)事先并未確定,故稱為動(dòng)態(tài)鏈表。
            11.7.5 輸出動(dòng)態(tài)鏈表
            輸出一個(gè)動(dòng)態(tài)鏈表的步驟:
            2    用結(jié)構(gòu)體類型定義一個(gè)遍歷指針;
            3    用遍歷指針遍歷所有的結(jié)點(diǎn),輸出各結(jié)點(diǎn)數(shù)據(jù)成員的值。
            P279,例11.9。見ex11-8.c。
            11.7.6 動(dòng)態(tài)鏈表的刪除結(jié)點(diǎn)
            動(dòng)態(tài)鏈表刪除結(jié)點(diǎn)的步驟:
            3    用結(jié)構(gòu)體類型定義一個(gè)搜索指針和一個(gè)跟蹤指針;
            4    用搜索指針遍歷所有的結(jié)點(diǎn),目的是查找要?jiǎng)h除的結(jié)點(diǎn),并用跟蹤指針跟蹤搜索指針指向結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn);
            5    如果搜索指針找到要?jiǎng)h除的結(jié)點(diǎn),則讓跟蹤指針?biāo)附Y(jié)點(diǎn)的指針成員指向搜索指針?biāo)附Y(jié)點(diǎn)的后一結(jié)點(diǎn)(即刪除了搜索指針?biāo)傅慕Y(jié)點(diǎn))。
            P280,例11.10。見ex11-8.c。
            11.7.7 動(dòng)態(tài)鏈表的插入結(jié)點(diǎn)
            動(dòng)態(tài)鏈表插入結(jié)點(diǎn)的步驟:
            4    用結(jié)構(gòu)體類型定義一個(gè)插入指針、一個(gè)搜索指針和一個(gè)跟蹤指針;
            5    用搜索指針遍歷所有的結(jié)點(diǎn),目的是查找要插入的位置,并用跟蹤指針跟蹤搜索指針?biāo)附Y(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn);
            6    如果搜索指針找到要(前)插入結(jié)點(diǎn)的位置,則讓跟蹤指針?biāo)附Y(jié)點(diǎn)的指針成員指向插入指針?biāo)傅慕Y(jié)點(diǎn),讓插入指針?biāo)附Y(jié)點(diǎn)的指針成員指向搜索指針?biāo)傅慕Y(jié)點(diǎn)(即在搜索指針?biāo)附Y(jié)點(diǎn)之前插入新結(jié)點(diǎn))。
            P282,例11.11。見ex11-8.c。
            11.7.8 動(dòng)態(tài)鏈表的綜合操作
            動(dòng)態(tài)鏈表的綜合操作步驟:
            2    在所有函數(shù)外定義一個(gè)含有數(shù)據(jù)成員和指針成員的結(jié)構(gòu)體類型;
            3    在主函數(shù)中定義一個(gè)首指針,一個(gè)刪除數(shù)據(jù)變量和一個(gè)插入結(jié)點(diǎn);
            4    調(diào)用建立鏈表、輸出鏈表進(jìn)行鏈表的建立與輸出的操作;
            5    輸入必要的數(shù)據(jù),調(diào)用刪除結(jié)點(diǎn)、插入結(jié)點(diǎn)的子函數(shù)進(jìn)行刪除與插入的操作,并輸出操作之后的鏈表。
            P284,例。見ex11-8.c。
            11.11    共用體
            11.8.1 共用體類型的概念
            共用體類型一種與結(jié)構(gòu)體類型有點(diǎn)類似的構(gòu)造類型。
            格式:union 共用體類型名
                  {類型名 成員名;
            …  …
            };
            其中:類型名 成員名;… … 稱為“成員表列”。
            功能:定義一個(gè)共用體類型。
            與結(jié)構(gòu)體類型類似,共用體類型變量的定義有三種:(1)分步定義,(2)同時(shí)定義,(3)直接定義。
            P287,例。
            結(jié)構(gòu)體與共用體的區(qū)別:
            (1)結(jié)構(gòu)體每個(gè)成員占用不同的存儲(chǔ)空間,故結(jié)構(gòu)體變量占用的存儲(chǔ)空間是各成員占用空間的總和。
            (2)共用體每個(gè)成員占用相同的存儲(chǔ)空間,故共用體變量占用的存儲(chǔ)空間是各成員占用空間的最大者。
            P288,例。
            11.8.2 共用體變量的引用
            格式:共用體變量.成員名
            功能:引用共用體變量的一個(gè)成員
            說明:可見形式上引用方法與結(jié)構(gòu)體相同。
            P288,例。
            11.8.3 共用體類型數(shù)據(jù)的特點(diǎn)
            (1)每一瞬時(shí)只有一個(gè)成員起作用,其它成員不起作用。
            (2)起作用的成員是最后一次存放的成員,其它成員的值無意義。
            (3)各成員的地址是相同的。
            (4)不能對(duì)共用體變量賦值,也不能進(jìn)行初始化。
            (5)不能把共用體變量作為函數(shù)的參數(shù),但可以用指向共用體變量的指針。
            (6)定義共用體與結(jié)構(gòu)體類型時(shí)可以互相嵌套。
            P289,例。
            P289,例11.12。
            11.12    枚舉類型
            枚舉類型是可以把變量的可能值一一列出的一種構(gòu)造類型。
            格式:enum 枚舉類型名
                  {枚舉值,…,枚舉值};
            功能:定義一個(gè)枚舉類型。
            枚舉類型變量的定義也有三種:(1)分步定義,(2)同時(shí)定義,(3)直接定義。
            P291,例。
            定義了枚舉型變量后,可以使用枚舉型變量,但它的取值只可能是這些枚舉值之一。
            說明:
            3    枚舉值是常量,不能對(duì)枚舉值賦值。
            4    枚舉值的值就是定義它時(shí)的序號(hào)(從0開始,按次序遞增),定義時(shí)也可改變枚舉值的值。
            5    枚舉值可以作關(guān)系運(yùn)算,大小取決于它的序號(hào)。
            6    枚舉變量不能直接賦給一個(gè)整數(shù),但可強(qiáng)制轉(zhuǎn)換后進(jìn)行賦值。
            P291,例。
            P292,例11.13。
            11.13    用typedef定義類型
            用typedef可以定義新的類型名,主要有如下幾種情況:
            (1)簡(jiǎn)單的類型名替換
            格式:typedef 原類型名 新類型名
            P294,例。
            (2)定義一個(gè)類型名代表一個(gè)結(jié)構(gòu)體類型
            格式:typedef  strut
                  {成員列表;
            }類型名;
            P294,例。
            (3)定義一個(gè)類型名代表某一個(gè)數(shù)據(jù)類型
            格式:typedef 數(shù)組元素類型 類型名[元素個(gè)數(shù)];
            typedef 指針指向類型 *類型名;
            typedef 函數(shù)返回類型 (*類型名)( );
            P295,例。
            定義新類型名方法步驟小結(jié):
            1    先按定義變量的方法寫出定義體;
            2    將變量名換成新類型名;
            3    在最前面加上typedef;
            4    然后用可以用新類型名去定義變量。
            P295,例。


             
            第13章    位運(yùn)算
            可以進(jìn)行位運(yùn)算是C語(yǔ)言的重要特色,因此,C語(yǔ)言具有高級(jí)語(yǔ)言的特點(diǎn),又具有低級(jí)語(yǔ)言的功能。
            12.1    位運(yùn)算符和位運(yùn)算
            位運(yùn)算符共有6個(gè),見P298表12.1。
            說明:(1)~是單目運(yùn)算,其它是雙目運(yùn)算。
                 (2)運(yùn)算量只能是整型或字符型。
                 (3)優(yōu)先級(jí):① ~ ②<<,>>③ & ④ ^ ⑤ |
            12.1.1 按位與運(yùn)算&
            運(yùn)算規(guī)則:0&0=0,0&1=0,1&0=0,1&1=1。
            P298,例。
            按位與運(yùn)算的用途:
            (1)指定位清0:用一個(gè)原數(shù)指定位上為0的數(shù)進(jìn)行按位與運(yùn)算。
            (2)取指定位:用一個(gè)原數(shù)指定位上為1的數(shù)進(jìn)行按位與運(yùn)算。
            (3)保留指定位:與取指定位相同。
            P299,例。
            12.1.2 按位或運(yùn)算|
            運(yùn)算規(guī)則:0|0=0,0|1=1,1|0=1,1|1=1。
            P299,例。
            按位或運(yùn)算的用途:
            (1)指定位置1:用一個(gè)原數(shù)指定位上為1的數(shù)進(jìn)行按位或運(yùn)算。
            P300,例。
            12.1.3 按位異或運(yùn)算^
            運(yùn)算規(guī)則:0^0=0,0^1=1,1^0=1,1^1=0。
            P300,例。
            按位異或運(yùn)算的用途:
            (1)指定位翻轉(zhuǎn):用一個(gè)原數(shù)指定位上為1的數(shù)進(jìn)行按位異或運(yùn)算。
            (2)保留指定位:用一個(gè)原數(shù)指定位上為0的數(shù)進(jìn)行按位異或運(yùn)算。
            (3)交換兩個(gè)值:只要執(zhí)行a=a^b;b=b^a;a=a^b;則a,b值交換。
            P300,例。
            12.1.4 按位反運(yùn)算~
            運(yùn)算規(guī)則:~0=1,~1=0。
            P301,例。
            按位反運(yùn)算的用途:
            (1)最低位清0:只要執(zhí)行a=a&~1;則a的最低位被清0。
            P301,例。
            12.1.5 按位左移運(yùn)算<<
            運(yùn)算規(guī)則:低位補(bǔ)0,高位丟失。
            P302,例。
            按位反運(yùn)算的用途:
            (1)在不溢出的情況下,左移n位,相當(dāng)于原數(shù)乘以2n。
            P302,例。
            12.1.6 按位右移運(yùn)算>>
            運(yùn)算規(guī)則:(1)無符號(hào)數(shù),高位補(bǔ)0,低位丟失;
                     (2)有符號(hào)數(shù),補(bǔ)與高位相同的數(shù),低位丟失。
            P302,例。
            按位反運(yùn)算的用途:
            (1)右移n位,相當(dāng)于原數(shù)除以2n。
            P303,例。
            12.1.7 位運(yùn)算賦值
            位運(yùn)算賦值符有:
                 &=、|=、>>=、<<=、^=
            其意義與“+=”等類似,也是復(fù)合賦值運(yùn)算符。
            P303,例。
            12.1.8 不同長(zhǎng)度的位運(yùn)算
            運(yùn)算規(guī)則:(1)無符號(hào)數(shù),較短的高位補(bǔ)0,再參與運(yùn)算;
                     (2)有符號(hào)數(shù),較短的補(bǔ)與高位相同的數(shù),再參與運(yùn)算。
            P303,例。
            12.2    位運(yùn)算應(yīng)用舉例
            P303,例12.1。見ex12-1.c。
            P304,例12.2。
            12.3    位段
            1. 位段的定義
            位段是由若干個(gè)位組成的,C語(yǔ)言充許對(duì)由若干個(gè)位組成的位段進(jìn)行存取操作。位段用類似于結(jié)構(gòu)體成員的方式來描述,定義格式如下:
            格式:struct 結(jié)構(gòu)體類型名
                  {類型名 成員名:位數(shù);
            …  …
            };
            其中:“類型名 成員名:位數(shù)”是定義位段成員。
            功能:定義一個(gè)含有位段成員的結(jié)構(gòu)體類型。
            P306,例。
            注意:定義位段成員的類型名必須是unsigned或int。
            2. 位段的引用
            定義了含有位段成員的結(jié)構(gòu)體類型后,可以用來聲明這種結(jié)構(gòu)體類型的變量,方法仍有分步定義、同時(shí)定義、直接定義三種。
            P306,例。
            含有位段成員結(jié)構(gòu)體變量的位段成員的引用,方法與結(jié)構(gòu)體變量成員的引用一樣,用“.”成員運(yùn)算符。
            P307,例。見ex12-3.c。
            注意:位段成員值不能溢出;位段不能引用地址。
            說明P307(1)~(7)

             
            第14章    文件
            13.1    C文件概述
            文件:是存儲(chǔ)在外部介質(zhì)上的指令或數(shù)據(jù)的集合。
            分類:(1)文件可分為程序文件和數(shù)據(jù)文件;
                 (2)文件保存有ASCII形式和二進(jìn)制形式兩種;
                 (3)文件中數(shù)據(jù)的輸入輸出要有一個(gè)緩沖區(qū);
                 (4)緩沖區(qū)可由系統(tǒng)自動(dòng)開辟(緩沖文件系統(tǒng))和人工開辟(非緩沖文件系統(tǒng))。
            注意:本章只討論緩沖文件系統(tǒng)下數(shù)據(jù)文件的讀寫。
            P309,例。
            13.2    文件類型指13.3    針
            在C中,文件的讀寫是通過文件類型指針來進(jìn)行的。
            1. 文件類型
            文件類型是一個(gè)結(jié)構(gòu)體類型,已由系統(tǒng)預(yù)定義,且放在庫(kù)函數(shù)文件“stdio.h”中,名為FILE。
            P310,文件類型定義原型。
            注意:(1)要使用文件類型,程序頭要有:#include “stdio.h”
                 (2)FILE是系統(tǒng)預(yù)定義的,無須用戶定義,只能大寫。
            2. 文件指針
            格式:FILE *文件指針名;
            功能:定義一個(gè)文件指針。
            P311,例。
            注意:(1)文件指針是用來指向文件中的數(shù)據(jù)的,一般開始指向文件中的第一個(gè)數(shù)據(jù),即開始存放的是文件的起始地址。
                 (2)系統(tǒng)預(yù)定義了兩個(gè)文件指針:stdin和stdout,分別指向鍵盤和顯示器。
            13.4    文件的打開與關(guān)閉
            13.3.1 文件的打開
            格式:fopen(文件名,文件使用方式)
            其中:(1)文件名是一個(gè)字符串,指明了要打開的文件的路徑和名字;
                 (2)文件使用方式由特定字符串組成,含義見P312表13.1。
            功能:以指定的使用方式打開文件,為該文件開辟一個(gè)緩沖區(qū),并返回該文件的起始地址。
            P311,例。
            注意:(1)以讀的方式打開,若不存在該文件,或無法打開,則出錯(cuò),返回NULL;
                 (2)以寫的方式打開,若已存在該文件,則覆蓋;若不存在該文件,則新建;
                 (3)文件使用方式要與文件的類別(文本還是二進(jìn)制)相匹配。
            13.3.2 文件的關(guān)閉
            格式:fclose(文件指針)
            其中:文件指針是指向要關(guān)閉的文件的。
            功能:關(guān)閉文件指針?biāo)赶虻奈募⑨尫旁撐募木彌_區(qū)。
            P312,例。
            注意:fclose也有一個(gè)返回值,正常關(guān)閉返回0,否則返回EOF(-1)。
            13.5    文件的順序讀寫
            13.4.1 輸入和輸出一個(gè)字符
            1. 把一個(gè)字符寫到文件中
            格式:fputc(ch,fp)
            功能:把ch中的字符寫到fp指向的文件中。
            P314,例。
            注意:(1)fputc函數(shù)正常返回字符ch,輸出失敗返回EOF(-1)。
                 (2)fputc(ch,stdout)等價(jià)于putchar(ch)。
            2. 從文件中讀取一個(gè)字符
            格式:fgetc(fp)
            功能:從fp指向的文件中讀取一個(gè)字符。
            P314,例。
            注意:(1)fgetc函數(shù)正常返回一個(gè)字符,輸入失敗返回EOF(-1)。
                 (2)fgetc(stdin)等價(jià)于getchar()。
                 (3)可用feof(fp)來檢測(cè)是否讀到文末符,是返回1,不是返回0。
            3. fput和fget函數(shù)應(yīng)用舉例
            P315,例13.1。見ex13-1.c。
            P316,例13.2。見ex13-2.c。
            (下面的次序與書不同,見P332)
            13.4.2 輸入和輸出一個(gè)整數(shù)或一個(gè)字符串
            1. 輸入和輸出一個(gè)整數(shù)
            格式:putw(i,fp)
            功能:把i中的整數(shù)寫到fp指向的文件中。
            格式:getw(fp)
            功能:從fp指向的文件中讀取一個(gè)整數(shù)。
            P322,例。見ex13-6.c。
            注意:(1)有的C語(yǔ)言不提供putw與getw函數(shù),這時(shí)我們可以自己定義;
                 (2)Turbo C提供putw與getw函數(shù)。
            2. 輸入和輸出一個(gè)字符串
            格式:fputs(str,fp)
            功能:把字符串str寫到fp指向的文件中,但不寫\0。
            格式:fgets(str,n,fp)
            功能:從fp指向的文件中讀取n-1個(gè)字符到str中,包括\n并自動(dòng)加上\0。
            P323,例。
            (下面的內(nèi)容見P321)
            13.4.3 格式化輸入和輸出
            格式:fprintf(fp,格式控制,輸出表列)
            功能:把輸出表列中的數(shù)據(jù)按格式控制寫到fp指向的文件中,但不寫\0。
            格式:fscanf(fp,格式控制,輸入表列)
            功能:從fp指向的文件中按格式控制讀取數(shù)據(jù)到輸入地址表列的變量中,如果是字符串會(huì)自動(dòng)加上\0。
            P321,例。
            注意:(1)讀取時(shí)的格式要與寫入文件時(shí)的格式相匹配。
                 (2)fprintf(stdout,格式控制,輸出表列)等價(jià)于printf(格式控制,輸出表列)
                 (3)fscanf(stdin,格式控制,輸入表列) 等價(jià)于scanf(格式控制,輸入表列)
            (下面的內(nèi)容見P317)
            13.4.4 按記錄輸入和輸出
            格式:fwrite(buffer,size,count,fp)
            功能:從buffer指向的存儲(chǔ)區(qū)域中count次讀取大小size的數(shù)據(jù)寫到fp指向的文件中。
            格式:fread(buffer,size,count,fp)
            功能:從fp指向的文件中count次讀取大小size的數(shù)據(jù)送到buffer指向的存儲(chǔ)區(qū)域中。
            其中:buffer 為內(nèi)存中要讀寫數(shù)據(jù)的存儲(chǔ)地址;
                  size  為要讀寫數(shù)據(jù)的字節(jié)數(shù);
                  count 為要讀寫數(shù)據(jù)的次數(shù);
                  fp   為要進(jìn)行讀寫操作的文件指針。
            P318,例。
            注意:(1)按記錄讀寫只能是二進(jìn)制文件;
                 (2)函數(shù)的返回值是成功讀寫的次數(shù)。
            P318,例13.3。見ex13-3.c。
            (下面的內(nèi)容見P323)
            13.6    文件的定位
            13.5.1 指針重置文首函數(shù)rewind
            格式:rewind(fp);
            功能:使fp重新指向文件開頭。
            P323,例13.4。
            13.5.2 指針重定位函數(shù)fseek
            格式:fseek(fp,m,n);
            其中:(1)m為字節(jié)數(shù),要在后面加L;
                 (2)n為起始點(diǎn),可取0、1、2,見P324,表13.2。
            功能:使fp移到離起始點(diǎn)n的m個(gè)字節(jié)處。
            P324,例13.5。
            13.7    出錯(cuò)的檢測(cè)

            13.8    文件輸入輸出小結(jié)
            P326,表13.3。






            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            欧美牲交A欧牲交aⅴ久久| 日日狠狠久久偷偷色综合免费 | 久久人与动人物a级毛片| 99久久婷婷国产一区二区| 久久影院综合精品| 久久精品国产亚洲AV久| 一级做a爰片久久毛片免费陪| 国产成人精品久久| 免费观看久久精彩视频 | 久久青草国产精品一区| 久久超碰97人人做人人爱| 亚洲中文久久精品无码| 亚洲乱码精品久久久久.. | 亚洲一本综合久久| 99国产精品久久| 免费国产99久久久香蕉| 一级做a爰片久久毛片16| 国产精久久一区二区三区| 999久久久国产精品| 久久成人永久免费播放| 热RE99久久精品国产66热| 亚洲国产成人精品女人久久久| 性做久久久久久免费观看| 久久99九九国产免费看小说| 久久无码中文字幕东京热 | 夜夜亚洲天天久久| 久久精品国产99久久久香蕉| 久久亚洲国产精品123区| 思思久久99热只有频精品66| 亚洲∧v久久久无码精品| 99久久国产综合精品麻豆| 99国内精品久久久久久久| 婷婷久久综合九色综合绿巨人| 欧美亚洲国产精品久久| 久久久久亚洲AV片无码下载蜜桃| 国产精品久久成人影院| 久久99久久无码毛片一区二区| 怡红院日本一道日本久久| 99久久国产亚洲综合精品| 2021精品国产综合久久| 久久九九免费高清视频|