版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C語言程序設(shè)計前言C語言是國內(nèi)外廣泛使用的程序設(shè)計語言之一。C語言具有表達(dá)能力強(qiáng),語言簡潔、緊湊,使用方便、靈活,易學(xué)易用等特點(diǎn)。它的數(shù)據(jù)類型豐富,具有現(xiàn)代語言的各種數(shù)據(jù)類型。C語言生成的代碼質(zhì)量高,并且其可移植性好,是計算機(jī)及相關(guān)專業(yè)人員學(xué)習(xí)計算機(jī)程序設(shè)計的首選語言。本書作為程序設(shè)計的入門教材,也適當(dāng)?shù)亟榻B了較高級編程部分,本書共分10章,包括:第一章C語言概述;第二章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式;第三章順序結(jié)構(gòu)設(shè)計;第四章選擇結(jié)構(gòu)設(shè)計;第五章循環(huán)結(jié)構(gòu)設(shè)計;第六章數(shù)組;第七章函數(shù);第八章指針;第九章結(jié)構(gòu)體和聯(lián)合體;第十章文件。本書在內(nèi)容安排上遵循深入淺出、循序漸進(jìn)的原則,重點(diǎn)是讓學(xué)生了解程序設(shè)計
2、語言的基本知識,掌握程序設(shè)計語言的基本方法,使學(xué)生具有使用C語言解決實際問題的初步能力??v觀C語言教材,大多數(shù)采用Turbo C2.0開發(fā)環(huán)境,也有個別介紹Visual C+6.0環(huán)境,由于目前大多都是使用Windows操作系統(tǒng)前言,Turbo C2.0不支持鼠標(biāo)操作也不能使用漢字,在使用上頗感不便;而Visual C+6.0又過于龐大,學(xué)生不能隨時隨地在任何電腦上使用,故此,本教材采用Dev-C+集成開發(fā)環(huán)境,它是一個Windows下的C和C+程序的集成開發(fā)環(huán)境,它使用MingW32/GCC編譯器,遵循C/C+標(biāo)準(zhǔn),其壓縮包只有不到9.5M,方便攜帶,是學(xué)習(xí)C或C+很好的開發(fā)工具,本書全部例
3、子均在該系統(tǒng)下調(diào)試通過。內(nèi)容簡介本書是為高職高專學(xué)生編寫的C語言教材,全書共分十章:C語言概述;數(shù)據(jù)類型、運(yùn)算符和表達(dá)式;順序結(jié)構(gòu)設(shè)計;選擇結(jié)構(gòu)設(shè)計;循環(huán)結(jié)構(gòu)設(shè)計;數(shù)組;函數(shù);指針;結(jié)構(gòu)體和聯(lián)系體;文件。本書力求使初學(xué)者能夠建立正確的C語言概念,學(xué)會基本的編程方法,形成對C語言的一個整體了解,本著精講多練的原則,書中盡量避免用大段文字來敘述概念,而是通過精心設(shè)計的圖形和大量例子來加以說明。目錄第1章 C語言程序設(shè)計 1.1 程序設(shè)計語言概述 1.1.1 程序設(shè)計語言 的發(fā)展 1.1.2 C語言簡史及特點(diǎn) 1.2 簡單的C程序介紹 1.2.1 源程序的書寫格式 1.2.2 C程序結(jié)構(gòu) 1.2.3
4、 C語言中的標(biāo)識符下一頁目錄 1.3 C程序的編輯、編譯、連接和運(yùn)行 1.3.1 C程序的運(yùn)行步驟 1.3.2 Dev-C+多國語言版開發(fā)環(huán)境簡介第2章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式 2.1 C語言的數(shù)據(jù)類型 2.2 常量 2.3 變量 2.4 變量的初始值上一頁下一頁目錄 2.5 數(shù)值型數(shù)據(jù)間的運(yùn)算 2.6 運(yùn)算符、表達(dá)式及常用數(shù)學(xué)函數(shù) 2.6.1 算術(shù)運(yùn)算符及算術(shù)表達(dá)式 2.6.2 常用數(shù)學(xué)函數(shù) 2.6.3 賦值運(yùn)算符及其表達(dá)式 2.6.4 其他運(yùn)算符第3章 順序結(jié)構(gòu)設(shè)計 3.1 結(jié)構(gòu)化程序概述上一頁下一頁目錄 3.2 C語言語句 3.3 字符的輸入與輸出 3.3.1 字符輸出 3.3.2 字
5、符輸入 3.4 格式數(shù)據(jù)的輸入與輸出 3.4.1 格式輸出 3.4.2 格式輸入 3.5 程序舉例上一頁下一頁目錄第4章 選擇結(jié)構(gòu)程序設(shè)計 4.1 關(guān)系運(yùn)算符及表達(dá)式 4.2 邏輯運(yùn)算符及表達(dá)式 4.3 if語句 4.4 switch語句 4.5 綜合應(yīng)用舉例第5章 循環(huán)結(jié)構(gòu)程序設(shè)計 5.1 while語句上一頁下一頁目錄 5.2 do-while語句 5.3 for語句 5.4 break和continue語句 5.5 多重循環(huán) 5.6 綜合應(yīng)用舉例第6章 數(shù)組 6.1 數(shù)組概述 6.2 一維數(shù)組上一頁下一頁目錄 6.2.1 一維數(shù)組的定義 6.2.2 一維數(shù)組的引用 6.2.3 一維數(shù)組的
6、初始化 6.2.4 一維數(shù)組的程序舉例 6.3 二維數(shù)組 6.3.1 二維數(shù)組的定義 6.3.2 二維數(shù)組的引用 6.2.3 二維數(shù)組的初始化上一頁下一頁目錄 6.2.4 一維數(shù)組的程序舉例 6.4 字符數(shù)組和字符串 6.4.1 字符數(shù)組與字符串的關(guān)系 6.4.2 字符數(shù)組的輸入與輸出 6.4.3 字符串處理函數(shù) 6.4.4 字符數(shù)組的程序舉例 6.4.5 字符串?dāng)?shù)組 6.5 綜合應(yīng)用舉例上一頁下一頁目錄第7章 函數(shù) 7.1 函數(shù)定義 7.2 函數(shù)參數(shù)和函數(shù)返回值 7.2.1 形式參數(shù)和實際參數(shù) 7.2.2 函數(shù)返回值 7.3 函數(shù)調(diào)用 7.3.1 函數(shù)調(diào)用的一般形式 7.3.2 函數(shù)調(diào)用的方
7、式上一頁下一頁目錄 7.3.3 對被調(diào)函數(shù)的聲明 7.3.4 函數(shù)的嵌套使用 7.4 遞歸函數(shù) 7.5 數(shù)組作函數(shù)參數(shù) 7.5.1 數(shù)組元素作函數(shù)的實參 7.5.2 數(shù)組名作函數(shù)參數(shù) 7.6 變量的存儲屬性 7.6.1 動態(tài)變量上一頁下一頁目錄 7.6.2 靜態(tài)變量 7.6.3 外部變量 7.6.4 內(nèi)部函數(shù)和外部函數(shù) 7.7 預(yù)處理 7.7.1 宏定義 7.7.2 文件包含 7.7.3 條件編譯第8章 指針上一頁下一頁目錄 8.1 指針的概念、定義和引用 8.1.1 指針的概念 8.1.2 指針變量的定義 8.1.3 指針變量的引用 8.2 指針與函數(shù) 8.2.1 指針變量作函數(shù)參數(shù) 8.2
8、.2 返回值為指針的函數(shù) 8.2.3 通過指針調(diào)用函數(shù)上一頁下一頁目錄 8.3 指針與數(shù)組 8.3.1 指針與數(shù)組的關(guān)系 8.3.2 數(shù)組名作函數(shù)參數(shù)的指針解釋 8.3.3 指針數(shù)組 8.3.4 多級指針 8.4 指針與字符串 8.4.1 字符串的表示形式 8.4.2 字符串指針作函數(shù)參數(shù)上一頁下一頁目錄 8.4.3 返回字符串的函數(shù) 8.4.4 字符指針數(shù)組 8.4.5 字符指針與字符數(shù)組的討論 8.5 指針數(shù)據(jù)類型小結(jié) 8.5.1 各種指針定義小結(jié) 8.5.2 指針運(yùn)算小結(jié) 8.5.3 void類型指針第9章 結(jié)構(gòu)體與聯(lián)合體上一頁下一頁目錄 9.1 結(jié)構(gòu)體定義 9.1.1 結(jié)構(gòu)體定義格式
9、9.1.2 結(jié)構(gòu)體變量 9.2 結(jié)構(gòu)體數(shù)組 9.3 結(jié)構(gòu)體與指針 9.3.1 結(jié)構(gòu)體指針 9.3.2 結(jié)構(gòu)體數(shù)組指針 9.4 結(jié)構(gòu)體與函數(shù)上一頁下一頁目錄 9.4.1 參數(shù)為結(jié)構(gòu)體類型 9.4.2 函數(shù)的返回值為結(jié)構(gòu)體類型 9.5 動態(tài)內(nèi)存管理 9.5.1 常用動態(tài)內(nèi)存管理函數(shù) 9.5.2 鏈表 9.6 聯(lián)合體 9.7 枚舉類型 9.8 用typedef 定義新類型名 上一頁下一頁目錄第10章 文件 10.1 文件概述 10.2 內(nèi)部文件和外部文件 10.3 文件的打開與關(guān)閉 10.3.1 文件的打開 10.3.2 文件的關(guān)閉 10.4 文件的讀/寫 10.4.1 讀/寫單個字符上一頁下一頁目
10、錄 10.4.2 讀/寫字符串 10.4.3 文件的格式化讀/寫 10.4.4 塊讀/寫 10.5 文件的定位 10.5.1 回繞 10.5.2 隨機(jī)定位上一頁第1章 C語言概述1.1 程序設(shè)計語言概述1.2 簡單的C程序介紹1.3 C程序的編輯、編譯、連接和運(yùn)行第1章 C語言概述本章要點(diǎn):(1)程序設(shè)計語言概述;(2)簡單的C程序介紹;(3)C程序的編輯、編譯、連接和運(yùn)行。返回1.1 程序設(shè)計語言概述1.1.1 程序設(shè)計語言的發(fā)展1.機(jī)器語言機(jī)器語言是指計算機(jī)本身自帶的指令系統(tǒng)。計算機(jī)的指令由二進(jìn)制序列組成,用來控制計算機(jī)進(jìn)行某種操作。指令由操作碼和地址碼兩部分組成。其中操作碼規(guī)定計算機(jī)要做
11、的運(yùn)算;地址碼告訴計算機(jī)是由哪些數(shù)來參加運(yùn)算,在什么地方能找到數(shù)據(jù),計算機(jī)的結(jié)果存放在哪里,等等。用機(jī)器語言編寫的程序不必通過任何翻譯處理,計算機(jī)就能夠直接識別和執(zhí)行。機(jī)器語言屬于低級語言。2.匯編語言匯編語言的指令與機(jī)器語言的指令基本上保持了一一對應(yīng)的關(guān)系。與機(jī)器語言比起來,匯編語言易記、易讀、易檢查、易修改,但卻不能被計算機(jī)直接識別和執(zhí)行,必須由翻譯程序翻譯成機(jī)器語言程序后才能執(zhí)行。匯編語言仍然是面向特定計算機(jī)的語言,也仍然是低級語言下一頁返回1.1 程序設(shè)計語言概述3.高級語言高級語言是接近人類自然語言和數(shù)學(xué)語言的程序設(shè)計語言,具有以下共同的特點(diǎn):(1)可以不了解機(jī)器語言代碼即可編程,是
12、不依賴于特定計算機(jī)的語言。(2)高級語言的一個執(zhí)行語句通常對應(yīng)多條機(jī)器指令。(3)高級語言接近自然語言和數(shù)學(xué)語言,容易被人們接收和掌握。(4)用高級語言編寫的程序,可移植性好。(5)源程序必須經(jīng)過翻譯才能被計算機(jī)識別和執(zhí)行。(6)具有結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)和模塊化程序設(shè)計思想。翻譯的方式有編譯和解釋兩種。編譯方式是把源程序從頭至尾整個的翻譯成目標(biāo)程序,然后執(zhí)行該目標(biāo)程序。解釋方式是把源程序逐句翻上一頁下一頁返回1.1 程序設(shè)計語言概述譯,譯出一句就立即執(zhí)行一句。解釋方式不產(chǎn)生目標(biāo)程序。4.面向?qū)ο蟮某绦蛟O(shè)計語言面向?qū)ο蟮某绦蛟O(shè)計語言最突出的特點(diǎn)是封裝性,在Windows中常見的組合框和命令按鈕(如
13、圖1.1所示)等都是對象。Visual C+、Delphi等都是具有代表性的面向?qū)ο蟮某绦蛟O(shè)計語言。1.1.2 C語言簡史及特點(diǎn)1.C語言的發(fā)展簡史C語言是在美國貝爾實驗室誕生的。貝爾實驗室的M.D.Ritchie和K.Thompson在開發(fā)UNIX操作系統(tǒng)時,希望有一種既有高級語言特性,又有低級語言特點(diǎn)的語言來描述系統(tǒng)軟件,但當(dāng)時存在的CPL、BCPL、B語言不是規(guī)模大、難以實現(xiàn),就是過于簡單,功能上一頁下一頁返回1.1 程序設(shè)計語言概述很弱。1977年出現(xiàn)了可移植C語言,1978年第七版的C語言成了當(dāng)時的標(biāo)準(zhǔn),稱標(biāo)準(zhǔn)C。1983年,美國國家標(biāo)準(zhǔn)化協(xié)會(ANSI)對C語言制定新的標(biāo)準(zhǔn),稱為A
14、NSIC ,這就是現(xiàn)行的C語言標(biāo)準(zhǔn)。目前,實用的C語言編譯系統(tǒng)種類繁多,如Turbo C,Microsoft C,Quick C等,雖然它們略有差異,但基本部分都是相同的。2.C語言的特點(diǎn)(1)表達(dá)能力強(qiáng)。(2)簡潔、緊湊、使用方便、靈活、易學(xué)易用。(3)數(shù)據(jù)類型豐富,具有現(xiàn)代語言的各種數(shù)據(jù)類型。(4)語言生成的代碼質(zhì)量高,其代碼效率僅比用匯編語言寫的代碼低10%20%。(5)C語言的可移植性好上一頁返回1.2 簡單的C程序介紹1.2.1 源程序的書寫格式例1.1 Hello程序main() printf(“Hello!n”); system(“pause”);說明:(1)main()是主函數(shù)
15、,相當(dāng)于其他語言中的主程序。(2)一對大括號是函數(shù)的開始與結(jié)束,被括起來的部分成為函數(shù)體,本函數(shù)有兩個語句。(3)printf()是C語言的輸出庫函數(shù),雙引號括起來的字符串按下一頁返回1.2 簡單的C程序介紹原樣輸出。其中以“”開始的字符稱“轉(zhuǎn)義字符”,“n”是換行符,即在輸出“Hello”后回車換行。如果再運(yùn)行一次該程序,兩次的輸出會分別在兩行上顯示出來。(4)system(“pause”)是調(diào)用操作系統(tǒng)的暫停,將會在屏幕上顯示“請按任意鍵繼續(xù)”,目的是方便觀察運(yùn)行結(jié)果。(5)每個語句后面都有一個分號。例1.2 兩個數(shù)相加main() int a,b,sum; scanf(“%d,%d”,&
16、a,&b); sum=a+b; printf(“sum=%dn”,sum);上一頁下一頁返回1.2 簡單的C程序介紹 system(“pause”);說明:(1)用“/*”和“*/”括起來的部分是注釋內(nèi)容。注釋只是給人看的,對編譯和運(yùn)行不起作用。(2)int a,b,sum;是定義變量部分,定義了3個int(整型)變量a,b,sum。經(jīng)定義后,程序為這些變量開辟該類型所需要的內(nèi)存單元,用來存入一個值。(3)scanf()是輸入函數(shù),也是庫函數(shù)。其作用是將鍵盤輸入的數(shù)據(jù)存入變量a和b中。&a和&b中“&”的含義是“取地址”,即將兩個數(shù)值分別存入到變量a和b的地址所標(biāo)志的內(nèi)存單元中。(4)scan
17、f()和printf()兩個函數(shù)中以“%”開始的字符是輸入輸出“格式描述字符”,用來指定輸入輸出時的數(shù)據(jù)類型和格式。上一頁下一頁返回1.2 簡單的C程序介紹(5)在scanf()和printf()中雙引號中除了轉(zhuǎn)義字符和格式字符以外的其他字符,在輸入時要求原樣輸入,在輸出時原樣輸出。(6)sum=a+b;是賦值語句,其作用是將“=”右邊的表達(dá)式的值計算出來,送給左邊的變量。(7)C程序書寫格式自由,允許在一行上寫多條語句,也允許把一條語句寫在多行上。1.2.2 C程序結(jié)構(gòu)C語言是基于函數(shù)的語言,C程序由函數(shù)組成。函數(shù)分為庫函數(shù)和自定義函數(shù)兩類。1.庫函數(shù)庫函數(shù)是系統(tǒng)已經(jīng)編寫好的,根據(jù)它們的不同
18、功能和性質(zhì)分門別類地上一頁下一頁返回1.2 簡單的C程序介紹存放在不同的文件中,稱之為庫文件或頭文件,其文件擴(kuò)展名為.h。庫函數(shù)的語法格式為: #include 或 #include“庫文件名”2.用戶自定義函數(shù)用戶自定義函數(shù)是由用戶根據(jù)需要自己在程序中編碼。其語法格式: 類型符 函數(shù)名(形式參數(shù)說明表) 變量定義部分 語句部分 在函數(shù)首部中,“類型符”是指當(dāng)函數(shù)結(jié)束時所得到的結(jié)果類型。“函數(shù)名”是給函數(shù)起的名字。“形式參數(shù)說明表”是指當(dāng)函數(shù)在執(zhí)行時所需要的“自變量”,它是作為函數(shù)計算的依據(jù)?!靶问絽?shù)”是變量,要上一頁下一頁返回1.2 簡單的C程序介紹對它進(jìn)行類型說明,“形式參數(shù)”可以有多個
19、,在書寫時它們中間用逗號分隔。函數(shù)體是被花括號“”括著的部分。它包括兩部分。(1)變量定義部分;(2)語句部分(也稱執(zhí)行部分);歸納起來,C程序的結(jié)構(gòu)形式如下: C程序=編譯預(yù)處理命令+C函數(shù)1+C函數(shù)2+C函數(shù)n1.2.3 C語言中的標(biāo)識符標(biāo)識符是用來命名一個名字的,如常量名、變量名、函數(shù)名、數(shù)組名、類型名等都必須是C語言中合法的標(biāo)識符。上一頁下一頁返回1.2 簡單的C程序介紹C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個字符必須為字母或下劃線。注意:大寫字母和小寫字母在C語言中被認(rèn)為是兩個不同的字符。因此count和COUNT是兩個不同的標(biāo)識符。上一頁返回1.3 C程序的編
20、輯、編譯、連接和運(yùn)行1.3.1 C程序的運(yùn)行步驟C程序運(yùn)行需要經(jīng)過4個步驟:(1)編輯。將源程序錄入到計算機(jī)中,并可以進(jìn)行修改?!?C”為擴(kuò)展名的源程序文件。(2)編譯。源程序不能直接執(zhí)行,需要經(jīng)過C編譯程序,它將把源程序“翻譯”成由機(jī)器指令組成的目標(biāo)程序文件,其擴(kuò)展名為“.OBJ”(3)連接。把各個OBJ文件以及系統(tǒng)提供的系統(tǒng)庫函數(shù)等進(jìn)行連接處理后,才能形成可執(zhí)行文件,其擴(kuò)展名為“EXE”。(4)運(yùn)行。運(yùn)行可執(zhí)行文件,得到運(yùn)行結(jié)果。以上步驟如圖1.2所示。下一頁返回1.3 C程序的編輯、編譯、連接和運(yùn)行1.3.2 Dev-C+多國語言版開發(fā)環(huán)境簡介Dev-C+是一個Windows下的C和C+
21、程序的集成開發(fā)環(huán)境。它使用MingW32/GCC編譯器,遵循C/C+標(biāo)準(zhǔn)。開發(fā)環(huán)境包括多頁面窗口、工程編輯器以及調(diào)試器等,在工程編輯器中集合了編輯器、編譯器、連接程序和執(zhí)行程序,提高高亮度語法顯示的,以減少編輯錯誤,還有完善的調(diào)試功能,能夠滿足初學(xué)者與編程高手的不同需求,是學(xué)習(xí)C或C+的首選開發(fā)工具。啟動Dev-C+后,顯示Dev-C+的集成開發(fā)環(huán)境窗口,如圖1.3所示。1.建立C語言源程序在圖1.3的集成開發(fā)環(huán)境中,選擇“文件”/“新建”/“源代碼”命令,或直接按Ctrl+N組合鍵,都會在集成開發(fā)環(huán)境的右側(cè)出現(xiàn)源代碼編輯窗口。初始時,源代碼文件名默認(rèn)是“未命名1”,如圖1.4所示。上一頁下一
22、頁返回2.編輯源代碼在代碼編輯窗口中輸入例1.1程序,其編輯方法如同使用記事本一樣。3.保存為C程序選擇“文件”/“保存”命令,或按Ctrl+S組合鍵,都會打開“保存文件”對話框,如圖1.5所示。在“保存文件”對話框中輸入文件名,由于Dev-C+既可以運(yùn)行C程序也可以運(yùn)行C+程序,所以還要選擇文件類型為“C source files”,指定保存的是C程序文件。4.編譯C語言源程序選擇“運(yùn)行”/“編譯”命令,或按Ctrl+F9組合鍵,都可以實現(xiàn)對源程序文件的編譯。編譯如果有錯誤,源代碼窗口和編譯窗口會出現(xiàn)圖1.6類似的效果,可以根據(jù)提示信息對程序進(jìn)行檢查,然后再重新編譯。1.3 C程序的編輯、編
23、譯、連接和運(yùn)行上一頁下一頁返回1.3 C程序的編輯、編譯、連接和運(yùn)行如果編譯沒有錯誤會出現(xiàn)編譯結(jié)束窗口,如圖1.7所示,單擊“關(guān)閉”按鈕編譯結(jié)束。5.運(yùn)行選擇“運(yùn)行”/“運(yùn)行”命令,或按Ctrl+F10組合鍵,都可以運(yùn)行程序,打開圖1.8所示的程序運(yùn)行窗口。按下任何一個鍵盤鍵,該窗口關(guān)閉,回到Dev-C+集成環(huán)境窗口。第4和第5步也可以合并成一步完成。選擇“運(yùn)行”/“運(yùn)行”命令,或按F9鍵。如果編譯沒有錯則直接運(yùn)行程序。上一頁返回圖1.1 對象示例返回圖1.2 C程序的運(yùn)行步驟返回圖1.3 Dev-C+的集成開發(fā)環(huán)境窗口返回圖1.4 源代碼文件編輯窗口返回圖1.5 “保存文件”對話框返回圖1.
24、6 編譯出現(xiàn)錯誤時的狀態(tài)返回圖1.7 編譯結(jié)束窗口返回圖1.8 程序運(yùn)行窗口返回第2章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式2.1 C語言的數(shù)據(jù)類型2.2 常量2.3 變量2.4 變量的初始值2.5 數(shù)值型數(shù)據(jù)間的運(yùn)算2.6 運(yùn)算符、表達(dá)式及常用的數(shù)學(xué)函數(shù)第2章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式本章要點(diǎn):(1)C語言的基本數(shù)據(jù)類型;(2)常量和變量;(3)不同數(shù)據(jù)類型運(yùn)算的規(guī)則;(4)算術(shù)運(yùn)算及表達(dá)式。返回2.1 C語言的數(shù)據(jù)類型數(shù)據(jù)是程序處理的對象。程序中對數(shù)據(jù)的描述,主要表現(xiàn)在對數(shù)據(jù)類型的定義上,編譯程序根據(jù)定義在內(nèi)存中分配適當(dāng)?shù)目臻g來存放數(shù)據(jù)。圖2.1給出了C語言的各種數(shù)據(jù)類型。表2.1列出了32位C語言編
25、譯系統(tǒng)中的基本數(shù)據(jù)類型、長度及取值范圍。返回2.2 常量在程序運(yùn)行過程中,其值不能被改變的量成為常量。常量有不同的類型。1.整型常量有3種: 十進(jìn)制整數(shù)。 八進(jìn)制整數(shù)。以0開頭的是八進(jìn)制數(shù)。 十六進(jìn)制整數(shù)。以0 x開頭的是十六進(jìn)制數(shù)。2.實行常量在C語言中也稱浮點(diǎn)數(shù),有兩種表現(xiàn)形式: 十進(jìn)制數(shù)形式。也稱小樹形式。 指數(shù)形式。也稱科學(xué)記數(shù)法。3.字符常量C語言中的字符常量是用單引號括起來的一個字符,C語言中把以反下一頁返回2.2 常量斜線“”開頭的字符稱為轉(zhuǎn)義字符,常見的轉(zhuǎn)義字符見表2.2。4.字符串常量在C語言中,字符串常量用雙引號括起來。我們把雙引號括起來的字符個數(shù)稱為字符串的長度?!啊笔强?/p>
26、字符串,長度為0。字符串在存儲時,除了要存儲雙引號里面的字符之外,C規(guī)定還要多存儲一個字符“0”,作為“字符串的結(jié)束標(biāo)志”。“0”是ASCII碼為0的字符,是一個空操作碼,它不引起任何控制動作,也不是一個可顯示的字符。比如字符串“CHINA”的長度為5,而實際需要6個存儲單元。其存儲情況如圖2.2所示。上一頁下一頁返回2.2 常量5.符號常量可以用一個標(biāo)識符來代表一個常量。符號常量的定義格式為: #define 符號常量名 常量一般符號常量名用大寫,以便與變量名相區(qū)分。上一頁返回2.3 變量在程序運(yùn)行過程中,其值可以改變的量稱為變量。要想在程序中使用變量,必須先進(jìn)行變量定義。其一般格式為: 數(shù)
27、據(jù)類型符 變量名表;變量名是用來標(biāo)識變量在內(nèi)存中所分配的單元。不同類型的變量,所分配的內(nèi)存單元的個數(shù)也不同。如char類型需要1個字節(jié)的存儲單元,而float類型則需要4個字節(jié)的存儲單元(見表2.1)。如有: short int value; value=10;在內(nèi)存中找到連續(xù)的兩個字節(jié)的自由內(nèi)存單元分配給變量value,然后將10存入這兩個字節(jié)中。如圖2.3所示。返回2.4 變量的初始值程序中用到的變量,要先定義后使用。在使用變量時,如果它出現(xiàn)在表達(dá)式中,必須要有一個初始值,否則該變量的值將是一個不確定的值。變量的初始值可以通過賦值語句、讀語句和變量初始化來獲得。變量的初始值也可以用變量初始
28、化來獲得,即在說明變量的同時給變量賦值。變量初始化的一般語法格式為: 數(shù)據(jù)類型符 變量名=常量表達(dá)式;其中“常量表達(dá)式”的值即作為變量的初始值。返回2.5 數(shù)值型數(shù)據(jù)間的運(yùn)算在C語言中,不同類型的數(shù)據(jù)可以在同一表達(dá)式中進(jìn)行混合運(yùn)算,但運(yùn)算前要進(jìn)行必要的類型轉(zhuǎn)換。轉(zhuǎn)換方式有兩種:一種是自動轉(zhuǎn)換,另一種是強(qiáng)制轉(zhuǎn)換。1.類型的自動轉(zhuǎn)化不同類型的數(shù)據(jù)在進(jìn)行運(yùn)算時,按圖2.4的轉(zhuǎn)換規(guī)則自動進(jìn)行。圖2.4中橫向向左的箭頭表示即使類型相同也必須轉(zhuǎn)換。如兩個字符型數(shù)據(jù)在進(jìn)行運(yùn)算時必定先轉(zhuǎn)換成整型;兩個float類型的數(shù)據(jù)在運(yùn)算時全部轉(zhuǎn)換為double類型,以提高運(yùn)算的精度。縱向的箭頭表示當(dāng)運(yùn)算對象為不同類型的
29、數(shù)據(jù)時轉(zhuǎn)換的方向,并不表示轉(zhuǎn)換過程。存儲的數(shù)據(jù)越小,類型的級別越低;否則越高。自動轉(zhuǎn)換總是從級別低的類型向高級別的類型轉(zhuǎn)換。下一頁返回2.5 數(shù)值型數(shù)據(jù)間的運(yùn)算2.類型的強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換的方法是在需要轉(zhuǎn)換的表達(dá)式前面加上用括號括起來的類型符。自動轉(zhuǎn)換一般不會使數(shù)據(jù)受到損失,而強(qiáng)制轉(zhuǎn)換就有可能使數(shù)據(jù)受損或結(jié)果難以理解,這是由于高級別的類型轉(zhuǎn)換為低級別的類型時造成的。類型轉(zhuǎn)換可按下面的方法進(jìn)行: 整型轉(zhuǎn)換為實型:補(bǔ)足小數(shù)位及精度。 實型轉(zhuǎn)換為整型:截斷小數(shù)位,只保留整數(shù)部分。 較長的整數(shù)轉(zhuǎn)換為較短的整數(shù):截斷高位,只保留低位數(shù)據(jù)。如圖2.5所示。 較短的數(shù)據(jù)轉(zhuǎn)換為較長的整數(shù):補(bǔ)足高位,數(shù)值不變。
30、等長的整形之間的轉(zhuǎn)換:各二進(jìn)制位不變。intunsigned時,原來的符號位不再作為符號,而變?yōu)閿?shù)據(jù)的一部分; unsigned int時,最高位被當(dāng)做符號位。如圖2.6所示。上一頁返回2.6 運(yùn)算符、表達(dá)式及常用數(shù)學(xué)函數(shù)運(yùn)算是對數(shù)據(jù)的加工。最基本的運(yùn)算形式常常可以用一些簡潔的符號記述,這些符號稱為運(yùn)算或操作符。被運(yùn)算的對象稱為運(yùn)算量或操作數(shù)。表達(dá)式就是用運(yùn)算符把運(yùn)算量連接起來所構(gòu)成的式子。C語言表達(dá)式分為算術(shù)表達(dá)式、賦值表達(dá)式、逗號表達(dá)式、條件表達(dá)式、關(guān)系表達(dá)式和邏輯表達(dá)式等。在求表達(dá)式的值時,C語言按照各運(yùn)算符的優(yōu)先級與結(jié)合性進(jìn)行運(yùn)算。表2.3概括了全部運(yùn)算符的優(yōu)先級和結(jié)合性規(guī)則。2.6.
31、1 算術(shù)運(yùn)算符及算術(shù)表達(dá)式由算術(shù)運(yùn)算符與運(yùn)算量構(gòu)成的表達(dá)式稱算術(shù)表達(dá)式。包括基本算術(shù)運(yùn)算符和自增自減運(yùn)算符兩大類。下一頁返回2.6 運(yùn)算符、表達(dá)式及常用數(shù)學(xué)函數(shù)1.基本算術(shù)運(yùn)算符有+(加)、-(減)、*(乘)、/(除)和%(取余)5個運(yùn)算符,前4個是四則運(yùn)算符。注意:兩個整數(shù)相除的結(jié)果仍為整數(shù)。2.自增、自減運(yùn)算符有+(自增)、-(自減)兩個運(yùn)算符,它們只能用在變量的前面或后面,分別稱為前綴形式和后綴形式。其作用是使變量的值增1或減1.2.6.2 常用數(shù)學(xué)函數(shù)C語言提供了豐富的數(shù)學(xué)函數(shù),函數(shù)存在于math.h頭文件中。常用的數(shù)學(xué)函數(shù)見表2.4.上一頁下一頁返回2.6 運(yùn)算符、表達(dá)式及常用數(shù)學(xué)函
32、數(shù)在使用數(shù)學(xué)函數(shù)之前,首先要用編譯預(yù)處理命令“#include”將math.h頭文件包含到用戶源程序中。為了在C程序中完成數(shù)學(xué)計算,經(jīng)常要使用數(shù)學(xué)公式。C語言要求把數(shù)學(xué)公式轉(zhuǎn)換為C語言能夠接受的式子,即C語言表達(dá)式。數(shù)學(xué)公式轉(zhuǎn)換為C語言表達(dá)式舉例見表2.52.6.3 賦值運(yùn)算符及其表達(dá)式1.賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符“=”,有它構(gòu)成的表達(dá)式稱賦值表達(dá)式。其語法格式為: 變量名=表達(dá)式其作用是將“=”右邊的表達(dá)式的值賦給左邊的變量。如果表達(dá)式值的類型與變量的,類型不同,將會把表達(dá)式的值自動轉(zhuǎn)換為變量的類型上一頁下一頁返回這種轉(zhuǎn)換是強(qiáng)制性的。2.復(fù)合賦值運(yùn)算符及其表達(dá)式賦值運(yùn)算符可以與所有的
33、雙目運(yùn)算符合在一起,構(gòu)成一種新的運(yùn)算符,稱復(fù)合的賦值運(yùn)算符。使用賦值運(yùn)算符有兩大好處:a.簡化程序,使程序的可讀性更好。b.提高程序的編譯效率。2.6.4 其他運(yùn)算符1.逗號運(yùn)算符由逗號運(yùn)算符與運(yùn)算量構(gòu)成的表達(dá)式稱為逗號表達(dá)式。其語法格式為2.6 運(yùn)算符、表達(dá)式及常用數(shù)學(xué)函數(shù)上一頁下一頁返回2.6 運(yùn)算符、表達(dá)式及常用數(shù)學(xué)函數(shù) 表達(dá)式1,表達(dá)式2,表達(dá)式n其求值過程是:從左向右逐個計算每一個表達(dá)式,把最右側(cè)表達(dá)式的值作為整個表達(dá)式的值。逗號運(yùn)算符是所有運(yùn)算符中優(yōu)先級最低的。2.求字節(jié)運(yùn)算符運(yùn)算符sizeof是用來計算變量或數(shù)據(jù)類型所占的內(nèi)存字節(jié)數(shù)。3.位運(yùn)算符C語言中提供了對位的運(yùn)算,是通過位
34、運(yùn)算符來實現(xiàn)的。所謂位運(yùn)算是指按位來進(jìn)行的運(yùn)算。所以應(yīng)該先把參與運(yùn)算的數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)再進(jìn)行相應(yīng)的運(yùn)算。位運(yùn)算符及其含義見表2.6.上一頁返回圖2.1 C語言的數(shù)據(jù)類型返回表2.1 32位C語言編譯系統(tǒng)中的基本數(shù)據(jù)類型、長度及取值范圍下一頁表2.1 32位C語言編譯系統(tǒng)中的基本數(shù)據(jù)類型、長度及取值范圍(續(xù)表)返回上一頁表2.2 轉(zhuǎn)義字符返回圖2.2 字符串“CHINA”在內(nèi)存的存儲形式返回圖2.3 變量的內(nèi)存分配與存儲(a)實際分配情況; (b)簡化表達(dá)返回圖2.4 類型自動轉(zhuǎn)換規(guī)則返回圖2.5 較長整數(shù)轉(zhuǎn)換為較短整數(shù)返回圖2.6 等長整形數(shù)據(jù)間的轉(zhuǎn)換返回表2.3 運(yùn)算符的優(yōu)先級及結(jié)合性返回
35、表2.4 math.h頭文件中的常用數(shù)學(xué)函數(shù)返回表2.5 數(shù)學(xué)公式轉(zhuǎn)換為C語言表達(dá)式舉例返回表2.6 位運(yùn)算符及其含義返回第3章 順序結(jié)構(gòu)設(shè)計3.1 機(jī)構(gòu)化程序概述3.2 C語言語句3.3 字符的輸入與輸出3.4 格式數(shù)據(jù)的輸入與輸出第3章 順序結(jié)構(gòu)設(shè)計本章要點(diǎn):(1)結(jié)構(gòu)化程序概述(2)C語言語句(3)數(shù)據(jù)的輸入輸出。返回3.1 結(jié)構(gòu)化程序概述結(jié)構(gòu)化程序設(shè)計方法,采用自頂向下逐步求精的設(shè)計原則和單入口單出口的結(jié)構(gòu)來構(gòu)造程序。自頂向下逐步求精,就是先把一個復(fù)雜的問題逐步分解和細(xì)化為許多小的、容易解決的模塊,然后再把模塊的功能逐步細(xì)化為一系列具體的處理步驟和將其實現(xiàn)的程序語句。結(jié)構(gòu)化程序支持三種
36、基本程序結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。圖3.1、圖3.2和圖3.3分別用流程圖的方法表示了這三種程序結(jié)構(gòu)。C語言是一種結(jié)構(gòu)化程序設(shè)計語言,其程序結(jié)構(gòu)也是由這三種程序結(jié)構(gòu)組成的。返回3.2 C語言語句語句是構(gòu)成程序的基本成分,用它可以描述程序的流程控制,對數(shù)據(jù)進(jìn)行處理。C語句可分為5大類。1.控制類語句在程序中主要是完成程序的流程控制,有以下幾種:if-else for while do-while continueswitch break goto return2.函數(shù)調(diào)用語句函數(shù)調(diào)用語句是在函數(shù)調(diào)用后面加分號構(gòu)成。3.表達(dá)式語句表達(dá)式語句是在表達(dá)式后面加分號構(gòu)成。4.空語句單獨(dú)的一個
37、分號即為空語句。 下一頁返回3.2 C語言語句5.復(fù)合語句復(fù)合語句也稱分程序或程序塊,用大括號括起來的一系列語句,在語法上等效于一個語句。即解決語法中只允許寫一個語句的地方,卻需要寫多個語句的要求。C語言本身并沒有提供輸入輸出語句,輸入和輸出操作是由庫函數(shù)來實現(xiàn)的。在使用系統(tǒng)提供的I/O庫函數(shù)時,要用預(yù)處理命令“#include”將“stdio.h”文件包含到用戶程序文件中。上一頁返回3.3 字符的輸入與輸出3.3.1 字符輸出將指定的字符顯示在顯示器上,使用字符輸出函數(shù)。其語法格式為: putchar(ch)其中,ch是要顯示的字符型數(shù)據(jù)。該函數(shù)通常單獨(dú)使用,即在它的后面加分號構(gòu)成函數(shù)語句。
38、putchar()函數(shù)的參數(shù)可以是常量、變量或表達(dá)式。3.3.2 字符輸入將鍵盤上的輸入以字符方式讀入,使用字符輸入函數(shù)。其語法格式為: getchar()該函數(shù)沒有參數(shù),函數(shù)的值就是從鍵盤上輸入的字符。該函數(shù)通常使返回3.4 格式數(shù)據(jù)的輸入與輸出用在表達(dá)式中,即將它的值參加某種運(yùn)算。getchar()和putchar()函數(shù)每次只能輸入輸出一個字符。要想一次輸入或輸出多個且為任意類型的數(shù)據(jù)就要使用scanf()和printf()函數(shù),這兩個函數(shù)將按照用戶描述的格式來完成數(shù)據(jù)的輸入與輸出。1.printf()函數(shù)的一般格式 printf(“格式控制”,輸出項表)(1)“格式控制”是用來描述輸出
39、結(jié)果格式的一個字符串。它包括3種字符: 普通字符:輸出時將原樣照印。 轉(zhuǎn)義字符:即以反斜線“”開始的字符,將會按其功能實現(xiàn)控制輸下一頁返回3.4 格式數(shù)據(jù)的輸入與輸出出 格式字符:即以百分號“%”開始的字符,它的作用是將數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。(2)“輸出項表”是輸出項的列表。輸出項可以是常量、變量或表達(dá)式,其個數(shù)、類型應(yīng)與“格式控制”字符串中的“格式字符”一一對應(yīng)。2.格式字符對不同類型的輸出項,應(yīng)該使用不同的格式字符。格式字符以“%”開始,常用的格式字符及作用見表3.13.4.2 格式輸入1.scanf()函數(shù)的一般格式上一頁下一頁返回3.4 格式數(shù)據(jù)的輸入與輸出 scanf(“格式控制
40、”,地址表)(1)“格式控制”是用來描述輸入數(shù)據(jù)格式的一個字符串。它包括以下兩種字符。 普通字符:輸入時需要原樣輸入。 格式字符:與printf()函數(shù)中的格式字符用法類似。(2)“地址表”是表示變量或數(shù)組的地址列表。變量的地址多數(shù)情況是在變量名的前面使用“取地址”運(yùn)算符(&)來獲得。“地址表”中地址的個數(shù)、類型應(yīng)與“格式控制”字符串中的“格式字符”一一對應(yīng)。2.使用scanf()函數(shù)時應(yīng)注意的幾個問題(1)“格式控制”字符串中如果沒有任何普通字符 數(shù)據(jù)中間使用一個或多個空格。 數(shù)據(jù)中間按跳格鍵(Tab)。 數(shù)據(jù)中間按回車鍵。上一頁下一頁返回3.4 格式數(shù)據(jù)的輸入與輸出(2)可以指定輸入數(shù)據(jù)所
41、占的列數(shù),系統(tǒng)自動按指定的列數(shù)截取所需的數(shù)據(jù)。(3)使用“%c”時相當(dāng)于寫成“%lc”,即不必在輸入時使用“數(shù)據(jù)分隔符”,否則它也會被當(dāng)做字符讀入。(4)輸入數(shù)據(jù)時不能規(guī)定精度。(5)在scanf()函數(shù)中不能使用“u”格式字符和“左對齊”附加字符。(6)scanf()函數(shù)中不能有提示,若要提示可以用printf()。(7)如果輸入的數(shù)據(jù)多于scanf()函數(shù)所要求的個數(shù),余下的數(shù)據(jù)可以為下一個scanf()函數(shù)接著使用。(8)在scanf()函數(shù)中某格式字符讀入數(shù)據(jù)時,遇以下情況時則認(rèn)為該數(shù)據(jù)結(jié)束。 遇“數(shù)據(jù)分隔符”。上一頁下一頁返回3.4 格式數(shù)據(jù)的輸入與輸出 遇寬度結(jié)束。 遇非法輸入。上
42、一頁返回圖3.1 順序結(jié)構(gòu)返回圖3.2 選擇結(jié)構(gòu)返回圖3.3 循環(huán)結(jié)構(gòu)(a)當(dāng)型 (b)直到型返回表3.1 printf()中常用的格式字符返回第4章 選擇結(jié)構(gòu)程序設(shè)計4.1 關(guān)系運(yùn)算符及其表達(dá)式4.2 邏輯運(yùn)算符及其表達(dá)式4.3 if語句4.4 switch語句第4章 選擇結(jié)構(gòu)程序設(shè)計本章要點(diǎn):(1)關(guān)系運(yùn)算符及其表達(dá)式(2)邏輯運(yùn)算符及其表達(dá)式(3)if語句(4)switch語句返回4.1 關(guān)系運(yùn)算符及其表達(dá)式1.關(guān)系運(yùn)算符C語言中有6種關(guān)系運(yùn)算符,它們的含義和優(yōu)先級見表4.1。關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。2.關(guān)系表達(dá)式由關(guān)系運(yùn)算符與運(yùn)算量構(gòu)成的表達(dá)式稱為關(guān)系表達(dá)式。
43、關(guān)系表達(dá)式用來對兩個運(yùn)算量進(jìn)行比較,比較的結(jié)果是一個邏輯量,即“真”或“假”。若比較的結(jié)果成立,則關(guān)系表達(dá)式的值為“真”,否則為“假”。在C語言中,邏輯值“真”“假”分別用整數(shù)1和0表示。返回4.2 邏輯運(yùn)算符及其表達(dá)式1.邏輯運(yùn)算符C語言中有3種邏輯運(yùn)算符,它們的含義和優(yōu)先級見表4.2。邏輯運(yùn)算符的優(yōu)先級低于關(guān)系運(yùn)算符,高于賦值運(yùn)算符。2.邏輯表達(dá)式用邏輯運(yùn)算符和運(yùn)算量構(gòu)成的表達(dá)式稱邏輯表達(dá)式。運(yùn)算量可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式和邏輯表達(dá)式,但通常是關(guān)系表達(dá)式。如: ?。╝b) 10 x&y3&28b) max=a; else max=b;可以用條件運(yùn)算符寫成條件表達(dá)式來處理,結(jié)果是一樣的:
44、 max=(ab)?a:b;其中“?:”即為條件運(yùn)算符,它是唯一的一個三目運(yùn)算符。由條件運(yùn)算符構(gòu)成的表達(dá)式稱為“條件表達(dá)式”,其語法格式為: 表達(dá)式1?表達(dá)式2:表達(dá)式3“表達(dá)式1”一般是關(guān)系表達(dá)式或邏輯表達(dá)式,是把它作為“條件”來使用的。當(dāng)條件成立時,條件表達(dá)式的值為“表達(dá)式2”的值,否則為“表達(dá)式3”的值。條件運(yùn)算符的優(yōu)先級僅僅高于賦值運(yùn)算符和逗號運(yùn)算符,低于所有其他運(yùn)算符。上一頁返回4.4 switch語句雖然用嵌套if以及if-else-if都能實現(xiàn)多種情況的判斷選擇,但是隨著嵌套層數(shù)的增多和if結(jié)構(gòu)內(nèi)語句的增多,會大大地降低程序的可讀性,并且容易出現(xiàn)邏輯混亂。因此,在C語言中可以使用
45、switch語句來專門處理多情況的判斷選擇。Switch語句在C語言中也稱為開關(guān)語句,其語法格式為: switch(表達(dá)式) case 常量1:語句組1 case 常量2:語句組2 case 常量n:語句組n default:語句組n+1 下一頁返回4.4 switch語句其執(zhí)行過程是:首先計算“表達(dá)式”的值,然后與case后面的“常量”逐個比較是否相等。如果表達(dá)式值與某個常量相等,就獲得了一個“入口”,即表示從此處開始執(zhí)行所有“語句組”直到switch最后面的右大括號“”,即“出口”。若表達(dá)式的值與所有case后面的常量都不相等,就執(zhí)行default后面的語句組。如圖4.5所示。(1)swi
46、tch后面的“表達(dá)式”可以是字符型、整型或枚舉型,但不可以是實型,若為常量則無分支可言。(2)“常量”必須是不同的,但無大小順序要求。(3)“語句組”可以是一條語句,也可以是多條語句,且不必用大括號括起來。breakt語句是中斷語句,其作用就是中斷switch的執(zhí)行。如果在switch的每個語句組后面都加上break,則改進(jìn)后的switch語句的執(zhí)行過程如圖4.6所示。上一頁返回表4.1 關(guān)系運(yùn)算符及其表達(dá)式返回表4.2 邏輯運(yùn)算符及其表達(dá)式返回表4.3 邏輯運(yùn)算符真值表返回圖4.1 混合運(yùn)算時運(yùn)算符的優(yōu)先級返回圖4.2 兩種if語句的執(zhí)行過程返回圖4.3 嵌套的if語句的執(zhí)行過程返回圖4.4
47、 if-else-if語句的執(zhí)行過程返回圖4.5 switch語句的執(zhí)行過程返回圖4.6 語句組后面帶有break的switch語句的執(zhí)行過程返回第5章 循環(huán)結(jié)構(gòu)程序設(shè)計5.1 while語句5.2 do-while語句5.3 for語句5.4 break和continue語句5.5 多重循環(huán)第5章 循環(huán)結(jié)構(gòu)程序設(shè)計本章要點(diǎn):(1)while語句;(2)do-while語句;(3)for語句;(4)break和continue語句;(5)多重循環(huán)。返回5.1 while語句while語句用來實現(xiàn)“當(dāng)型”循環(huán)。其語法格式為: while(表達(dá)式)語句其中“表達(dá)式”可以是任何合法的表達(dá)式,通常為關(guān)
48、系表達(dá)式或邏輯表達(dá)式,是循環(huán)的條件?!罢Z句”只能為一條語句,若有多條語句時則用大括號括起來,使之成為復(fù)合語句。當(dāng)“表達(dá)式”為真時執(zhí)行其后的“語句”;為假時,循環(huán)結(jié)束,其執(zhí)行過程如圖5.1所示。 返回5.2 do-while語句用do-while來實現(xiàn)“直到型”循環(huán)。其語法格式為: do 語句 while(表達(dá)式);其中“語句”只能為一條語句,若有多條語句時則用大括號括起來,使之成為復(fù)合語句?!氨磉_(dá)式”可以是任何合法的表達(dá)式,通常為關(guān)系表達(dá)式或邏輯表達(dá)式。先執(zhí)行“語句”,后判斷“表達(dá)式”是否為真。如果為真,返回到“語句”重新執(zhí)行;為假時,循環(huán)結(jié)束。其執(zhí)行過程如圖5.2所示。一般情況下,用whil
49、e語句和用do-while語句可以處理同一問題。do-while語句可以轉(zhuǎn)換為while語句。圖5.2可以改畫成圖5.3的形式,二者完全等價,虛線框部分就是一個while結(jié)構(gòu)。下一頁返回5.2 do-while語句但while與do-while之間存在著明顯的不同:while語句是先檢查條件,再決定是否執(zhí)行循環(huán)體;而do-while語句是先執(zhí)行循環(huán)體一次,后檢查條件,再決定是否繼續(xù)執(zhí)行循環(huán)體。當(dāng)循環(huán)變量的初值已經(jīng)使循環(huán)條件不成立時,它們之間的差別非常明顯。上一頁返回5.3 for語句for語句可以稱為“計數(shù)式”循環(huán)語句,即如果循環(huán)次數(shù)是確定的,用for語句比較方便。其語法格式為: for(表達(dá)
50、式1;表達(dá)式2;表達(dá)式3)語句執(zhí)行過程如下:(1)計算表達(dá)式1.(2)將表達(dá)式2作為條件。若條件不成立,則執(zhí)行“語句”,然后執(zhí)行第(3)步;若不成立則循環(huán)結(jié)束,轉(zhuǎn)到第(4)步。(3)計算表達(dá)式3,轉(zhuǎn)回到第(2)步繼續(xù)執(zhí)行。(4)執(zhí)行for語句下面的執(zhí)行過程。用for語句描述循環(huán)次數(shù)固定的循環(huán)比較方便。下一頁返回5.3 for語句for語句說明:(1)for循環(huán)中的“語句”只能是一個語句,若有多個語句需要循環(huán)時應(yīng)把它寫成復(fù)合語句。(2)表達(dá)式1和表達(dá)式3既可以是簡單的表達(dá)式,也可以是逗號表達(dá)式??梢耘c循環(huán)變量有關(guān),也可以無關(guān)。(3)for語句中的3個表達(dá)式可以全部或部分省略,但分號“;”不能省。
51、上一頁返回5.4 break和continue語句1.break語句break語句是中斷語句,其語法格式為: break;它只能用在switch或循環(huán)語句中,其作用是中止當(dāng)前的switch或循環(huán)語句。其執(zhí)行過程如圖5.5所示。在循環(huán)中,一般是當(dāng)某個條件成立時使用break語句。2.continue語句continue語句是繼續(xù)語句,其語法格式為: continue;它只能用在循環(huán)語句中,其作用是結(jié)束本次循環(huán),即跳過循環(huán)體中尚未執(zhí)行的語句,繼續(xù)進(jìn)行下一次循環(huán)。其執(zhí)行過程如圖5.6所示。 Continue一般出現(xiàn)在循環(huán)的if語句中。返回5.5 多重循環(huán)在一個循環(huán)中又包含了另一個循環(huán),稱為多重循環(huán)(
52、也稱循環(huán)的嵌套)。實現(xiàn)多重循環(huán)結(jié)構(gòu)仍使用前面講的3種循環(huán)語句,多重循環(huán)的嵌套層數(shù)可以是任意的。按照嵌套層數(shù),分為雙重(二重循環(huán))、三重循環(huán)等。在圖5.7中,圖5.7(a)是雙重循環(huán);圖5.7(b)是三重循環(huán);圖5.7(c)是兩個并列的循環(huán),是單循環(huán);圖5.7(d)是雙重循環(huán);圖5.7(e)中的循環(huán)出現(xiàn)了交叉,是錯誤的。處于內(nèi)部的循環(huán)叫做內(nèi)循環(huán),處于外部的循環(huán)叫做外循環(huán)。在設(shè)計多重循環(huán)時,要特別注意內(nèi)、外循環(huán)之間的關(guān)系,以及各語句擺放的位置。返回圖5.1 while語句的執(zhí)行流程返回圖5.2 do-while語句的執(zhí)行過程返回圖5.3 等價的do-while流程返回圖5.4 for循環(huán)的執(zhí)行過程
53、返回圖5.5 break的執(zhí)行過程返回圖5.6 continue的執(zhí)行過程返回圖5.7 循環(huán)嵌套的形式返回第6章 數(shù)組6.1 數(shù)組概述6.2 一維數(shù)組6.3 二維數(shù)組6.4 字符數(shù)組和字符串第6章 數(shù)組本章要點(diǎn):(1)一維數(shù)組;(2)二維數(shù)組;(3)字符數(shù)組和字符串。返回6.1 數(shù)組概述在C語言中表達(dá)式數(shù)列和矩陣是通過數(shù)組完成的。與數(shù)列名和矩陣名等價的是數(shù)組名,數(shù)列對應(yīng)于一維數(shù)組,而矩陣對應(yīng)于二維數(shù)組。但有一個區(qū)別,就是在所有的程序設(shè)計語言中無法把下標(biāo)寫的那么小。為了與數(shù)學(xué)上的概念統(tǒng)一,C語言把下標(biāo)寫在方括號“”里,這樣表示數(shù)學(xué)上的x1和y12在C語言中就可以分別寫成x1和y12了。所謂數(shù)組是
54、指一組有序數(shù)據(jù)的集合,用一個統(tǒng)一數(shù)組名標(biāo)識這一數(shù)組,用下標(biāo)來指示數(shù)組中元素的位置。數(shù)組是最簡單的一種構(gòu)造類型,其數(shù)組元素為同一類型,即可以為簡單類型,也可以是構(gòu)造類型。返回6.2 一維數(shù)組6.2.1 一維數(shù)組的定義定義一維數(shù)組的語法格式為: 類型符 數(shù)組名元素個數(shù);其中“數(shù)組名”應(yīng)為合法的標(biāo)識符;“元素個數(shù)”為常量或常量表達(dá)式,不能為變量或由變量組成的表達(dá)式。例如: int a5;定義了一個數(shù)組a,它有5個元素,每個元素的類型為int,可以稱a為整型數(shù)組。注意,在C語言中數(shù)組元素的序號(下標(biāo))是從0開始的。因此a數(shù)組所包含的5個元素是a0、a1、a2、a3、a4,而不含a5。下一頁返回6.2
55、一維數(shù)組6.2.2 一維數(shù)組的引用數(shù)組在定義之后即可引用,一般的引用格式為: a0=3*a3-an-2;數(shù)組元素實際是一種帶下標(biāo)的變量,它與簡單變量在使用上并無不同。請比較: int m,n,p,a5; m=10; a2=5; n=2*m; a1=a2*3; scanf(“%d”,&p); scanf(“%d”,&a4);數(shù)組元素最常用的形式是下標(biāo)用一個整形變量,如ai。如果i=0則ai表示引用了a0;而當(dāng)i=1時,則ai表示引用了a1。訪問數(shù)組中所有元素稱“遍歷數(shù)組”,遍歷數(shù)組時是通過循環(huán)來改變下標(biāo)的。 上一頁下一頁返回6.2 一維數(shù)組6.2.3 一維數(shù)組的初始化在定義數(shù)組時給元素賦初值。一
56、般語法為: 類型符 數(shù)組名元素個數(shù)=常量表;如有: int a5=1,2,3,4,5;由于定義數(shù)組時編譯系統(tǒng)為所有元素順序分配存儲單元,初始化時是把常量表中的常量按內(nèi)存分配順序依次存入相應(yīng)的數(shù)組元素,結(jié)果使a0a4分別得到了15,如圖6.1所示。整形數(shù)組a所占的內(nèi)存單元有5*4=20個字節(jié)。說明:(1)若給所有元素賦初值,“元素個數(shù)”可以省略。(2)可以只給一部分元素賦初值,但元素個數(shù)不能省略,未被賦初值的元素則為0。上一頁下一頁返回6.2 一維數(shù)組(3)若使全部元素都為0,可以將其定義為“全局變量”或“靜態(tài)變量”。(4)若數(shù)組在定義時未進(jìn)行初始化,則各元素的值是隨機(jī)的。上一頁返回6.3 二維
57、數(shù)組6.3.1 二維數(shù)組的定義二維數(shù)組定義的一般形式為: 類型符 數(shù)組名行數(shù)列數(shù);例如:int b23;定義了一個2*3的整型數(shù)組b,它有2行、3列共6個元素。這6個元素為:b00 b01 b02 b10 b11 b12C語言中,二維數(shù)組的排列順序是:按行存放,即在內(nèi)存中先順序存放第一行的元素,再存放第二行的元素。上面b數(shù)組的內(nèi)存安排如圖6.2所示,共占有24個字節(jié)的內(nèi)存單元。C語言允許使用多維數(shù)組。多維數(shù)組的定義格式為:數(shù)組名元素長度1元素長度2元素長度n;下一頁返回6.3 二維數(shù)組6.3.2 二維數(shù)組的引用二維數(shù)組元素引用的一般格式為: 數(shù)組名行下標(biāo)列下標(biāo)由于二維數(shù)組有兩個下標(biāo),要遍歷二維
58、數(shù)組一般得用雙重循環(huán)完成。通常外層的循環(huán)變量控制行下標(biāo),而內(nèi)層循環(huán)變量控制列下標(biāo)。6.3.3 二維數(shù)組的初始化在定義二維數(shù)組時給元素賦初值。一般語法為: 類型符 數(shù)組名行數(shù)列數(shù)=常量表;初始化時按數(shù)組元素的分配順序是依次存入常量表中的常量,結(jié)果使a00a12分別得到了16。上一頁下一頁返回6.3 二維數(shù)組說明 :(1)若給所有元素賦初值,“行數(shù)”可以省略,但“列數(shù)”不能省略。(2)可以采用分行賦值,以增加程序的可讀性。(3)可以只給一部分元素賦初值,未被賦初值的元素則為0。(4)若數(shù)組在定義時未進(jìn)行初始化,則各元素的值是隨機(jī)的。上一頁返回6.4 字符數(shù)組和字符串6.4.1 字符數(shù)組與字符串的關(guān)
59、系字符數(shù)組的定義、初始化與其他類型的數(shù)組類似。如: char s=C,h,i,n,a;其內(nèi)存分配及賦值情況如圖6.3所示。這樣的內(nèi)存分配與“China”字符串的內(nèi)存分配相似。只是少了字符串的結(jié)束標(biāo)志0。我們對上述數(shù)組s稍加改變?yōu)椋?char s=C,h,i,n,a,0;字符數(shù)組s存儲的就是一個字符串。如圖6.4所示。6.4.2 字符數(shù)組的輸入與輸出在使用字符數(shù)組時,可以用普通數(shù)組的方式一個元素一個元素的處理下一頁返回6.4 字符數(shù)組和字符串,也可以對字符數(shù)組整體處理。1.普通數(shù)組處理方式(1)當(dāng)字符數(shù)組中存儲的字符不是以0結(jié)束時,只能像普通的數(shù)組那樣,一個元素一個元素的處理。(2)當(dāng)字符數(shù)組中
60、存儲的字符是以0結(jié)束的,也可以像普通的數(shù)組那樣,一個元素一個元素的處理。2.字符數(shù)組的整體處理方式當(dāng)字符數(shù)組存儲的是字符串時,可以與“%s”格式字符配合,完成字符串的輸入/輸出。(1)輸出字符串輸出時,從下標(biāo)為0的元素開始輸出,當(dāng)遇到0時停止輸出,而0并不完全輸出。上一頁下一頁返回6.4 字符數(shù)組和字符串(2)輸入字符串Scanf函數(shù)中的輸入項是字符數(shù)組名,它已經(jīng)是數(shù)組的起始地址,此時不能再加地址運(yùn)算符“&”。6.4.3 字符串處理函數(shù)1.輸出字符串函數(shù)語法格式為: puts(字符串表達(dá)式)其功能是將“字符串表達(dá)式”輸出后并換行。2.輸入字符串函數(shù)語法格式為: gets(字符串變量)其功能是將
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度集成電路產(chǎn)品品牌推廣與市場營銷合同3篇
- 二零二五年度水果種植基地土地流轉(zhuǎn)合同3篇
- 2024美團(tuán)外賣店外賣配送區(qū)域合作合同范本3篇
- 2025年度零星土建工程合同糾紛調(diào)解合同4篇
- 二零二五版貴金屬保管與寄售服務(wù)合同2篇
- 2024中考語文復(fù)習(xí)方案原創(chuàng)閱讀議論文閱讀
- 2024這份簽訂勞動合同指南請查收
- 二零二五年度農(nóng)業(yè)科技合作合同會簽書3篇
- 二零二五年騰訊新聞客戶端品牌宣傳與推廣合同3篇
- 2025年度臨時倉儲空間共享租賃及增值服務(wù)合同4篇
- 常見老年慢性病防治與護(hù)理課件整理
- 履約情況證明(共6篇)
- 云南省迪慶藏族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 設(shè)備機(jī)房出入登記表
- 六年級語文-文言文閱讀訓(xùn)練題50篇-含答案
- 醫(yī)用冰箱溫度登記表
- 零售學(xué)(第二版)第01章零售導(dǎo)論
- 大學(xué)植物生理學(xué)經(jīng)典05植物光合作用
- 口袋妖怪白金光圖文攻略2周目
- 光伏發(fā)電站集中監(jiān)控系統(tǒng)通信及數(shù)據(jù)標(biāo)準(zhǔn)
- 三年級下冊生字組詞(帶拼音)
評論
0/150
提交評論