C語言程序設(shè)計項目式教程完整版課件全書電子教案教材課件(完整)_第1頁
C語言程序設(shè)計項目式教程完整版課件全書電子教案教材課件(完整)_第2頁
C語言程序設(shè)計項目式教程完整版課件全書電子教案教材課件(完整)_第3頁
C語言程序設(shè)計項目式教程完整版課件全書電子教案教材課件(完整)_第4頁
C語言程序設(shè)計項目式教程完整版課件全書電子教案教材課件(完整)_第5頁
已閱讀5頁,還剩199頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 一 章第四章目 兩個整數(shù)的四則運算項一學習目標 通過編寫計算任意兩個整數(shù)的四則運算程序,介紹 C 語言程序基本結(jié)構(gòu),調(diào)試運行流程,以及實現(xiàn)該功能所必需的 C 語言語法知識。在任務(wù)實現(xiàn)過程中:了解 C 語言程序的基本構(gòu)成與運行方法。理解常量、變量的區(qū)別以及整型、字符型數(shù)據(jù)的常量、變量表示方法。掌握算術(shù)運算符、關(guān)系運算符及算術(shù)表達式、關(guān)系表達式。掌握數(shù)據(jù)的輸入輸出函數(shù)及使用方法。具有使用 if-else 語句及 while 語句實現(xiàn)基本功能的能力。學習路徑任務(wù)一 指定兩個非零整數(shù)的基本運算任務(wù)名稱簡單的C語言程序結(jié)構(gòu) 學習一種編程語言,最佳途徑就是多閱讀代碼段,多編寫程序代碼,接下來通過最基本

2、的C語言程序的基本構(gòu)成學習基本格式和書寫規(guī)范,代碼示例如下所示:簡單的C語言程序結(jié)構(gòu)說明1注釋 程序注釋是書寫規(guī)范程序時很重要的一個內(nèi)容,注釋可以方便程序的閱讀和維護。注釋在編譯代碼時會被忽略,不會編譯到最后的可執(zhí)行文件中,所以注釋不會增加可執(zhí)行文件的大小。簡單的C語言程序結(jié)構(gòu)說明2預(yù)處理 include稱為文件包含命令,其意義是把雙引號或尖括號內(nèi)指定的文件包含到本程序來,成為本程序的一部分。被包含的文件通常是由系統(tǒng)提供的,其擴展名為.h的頭文件。C語言的頭文件中包括了各個標準庫函數(shù)的函數(shù)原型。因此,凡是在程序中調(diào)用一個庫函數(shù)時,都必須包含該函數(shù)原型所在的頭文,示例代碼如下所示:簡單的C語言程

3、序結(jié)構(gòu)說明3main()函數(shù) C語言程序是由若干個函數(shù)組成,每個程序有且僅有一個main()函數(shù)(主函數(shù)),不論其在程序中的位置,C語言程序總是從main()函數(shù)開始執(zhí)行,當main()函數(shù)執(zhí)行完畢時,亦即程序執(zhí)行完畢。 main后面的一對圓括號是必須的,其中可放置函數(shù)的參數(shù)列表,也可無參數(shù)。用括起來的部分,是主函數(shù)的函數(shù)體部分,示例代碼如下所示:簡單的C語言程序結(jié)構(gòu)說明4語句 C語言中以“;”作為語句結(jié)束的標志。函數(shù)體就是由若干語句組成的,同時語句也出現(xiàn)在函數(shù)之間,示例代碼如下所示:簡單的C語言程序結(jié)構(gòu) 學習一種編程語言,最佳途徑就是多閱讀代碼段,多編寫程序代碼,接下來通過最基本的C語言程序

4、的基本構(gòu)成學習基本格式和書寫規(guī)范,代碼示例如下所示:整型常量與整型變量 應(yīng)用程序運行過程中需要處理數(shù)據(jù),并需要部分空間臨時存放數(shù)據(jù),該技能點講解 C 語 言中整型、整型常量、整型變量的基本概念。(1)整型 整型用于描述現(xiàn)實生活中的整數(shù),例如 1,32,-55 等,基本類型符為 int。 (2)整型常量 整型常量就是整常數(shù),程序中不改變的整數(shù)數(shù)據(jù)都可以看成是整型常量。在 C 語言中, 十進制整型常量與日常數(shù)學中整數(shù)相同。另外還有八進制、十六進制。(3)整型變量的聲明和初始化:一般情況下,變量用來保存程序運行過程中輸入的數(shù)據(jù)、計算獲得的中間結(jié)果以及程序的最終結(jié)果。一個變量在使用之前應(yīng)該有一個名字,

5、在內(nèi)存中占據(jù)一定的存儲單元,變量必須“先聲明,后使用”。例如變量 r 聲明的格式如下所示:變量的命名 變量名屬于標識符,命名時,一定要符合標識符的命名規(guī)定,即只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須是字母或下劃線。如下所示:a,sum,_avg,b8,a_1(合法變量名)1a,s um,$_avg,b8,a_1#(都是不合法變量名)算術(shù)運算符和表達式(1)算術(shù)運算符 C 語言中的算術(shù)運算符主要用于執(zhí)行加、減、乘、除等算術(shù)運算。算術(shù)運算符分為單目運 算符和雙目運算符兩類,如表 1.1 所示。 注意 1:兩個整型數(shù)據(jù)相除結(jié)果也是整型數(shù)據(jù),即整除。 注意 2:取余運算 %,僅能用于整型

6、數(shù)據(jù),即運算量僅能是整數(shù)或整型變量。 算術(shù)運算符和表達式(2)表達式 表達式是用運算符、括號將操作數(shù)連接起來所構(gòu)成的式子。C 語言的操作數(shù)包括常量、變量和函數(shù)值等。特殊的情況,一個單個變量或常量也可叫做表達式。數(shù)據(jù)輸出程序中的數(shù)據(jù)輸入輸出是指外界(例如用戶等)與計算機之間的數(shù)據(jù)交換,從計算機把數(shù)據(jù)傳給外界稱之為輸出。常用的數(shù)據(jù)輸出是在顯示器上顯示信息,在 C 語言中,數(shù)據(jù)輸入輸出都是由庫函數(shù)實現(xiàn)的。(1)printf() 函數(shù) printf() 是格式輸出函數(shù),是 C 語言中使用最頻繁的輸出函數(shù)。它是一個標準庫函數(shù),它 的函數(shù)原型在頭文件“stdio.h”中。printf 函數(shù)的調(diào)用格式如下:

7、在 Visual Studio 2017 中運行 C 程序任務(wù)一任務(wù)實施本任務(wù):計算指定兩個非零整數(shù)(10 和 5)之和、之差、之積、之商。任務(wù)一任務(wù)拓展拓展任務(wù)名稱:指定長方形的長和寬,求長方形的面積。任務(wù)二 任務(wù)二 隨機輸入的兩個非零整數(shù)的基本運算scanf() 函數(shù)scanf() 函數(shù)是一個標準庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。scanf() 函數(shù)的一般格式如下所示:scanf() 函數(shù)格式說明 該函數(shù)的功能是按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。 格式控制字符串的作用與 printf() 函數(shù)相同,但不能顯示非格式字符串,也就是不能顯 示提示字符串。 地址

8、表列中給出各變量的地址。地址是由地址運算符“&”后跟變量名組成的。 在使用 scanf() 函數(shù)輸入數(shù)據(jù)時,遇到下面的情況時該數(shù)據(jù)認為結(jié)束:遇空格或按“回 車”鍵或“跳格”(Tab)鍵;按指定的寬度結(jié)束,如“%3d”,只取 3 列;遇到非法輸入例如 &a、 &b,分別表示變量 a 和變量 b 的地址。這個地址就是編譯系統(tǒng)在內(nèi)存中給 a,b 變量分配的地 址。在語言中,使用了地址這個概念,這是與其他語言不同的。應(yīng)該把變量的值和變量的地 址這兩個不同的概念區(qū)別開來。變量的地址是 C 編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址 是多少。任務(wù)二任務(wù)實施本任務(wù):由鍵盤輸入 2 個非零整數(shù),計算這 2 個整數(shù)

9、之和、之差、之積、之商。運行結(jié)果:任務(wù)二任務(wù)拓展拓展任務(wù)名稱:使用鍵盤輸入長方形的長和寬,計算并輸出長方形的面積。任務(wù)三 任務(wù)三 隨機輸入的整數(shù)的基本運算關(guān)系運算符關(guān)系運算符主要實現(xiàn)數(shù)據(jù)的比較運算,用于比較運算。包括大于 ()、小于 (=)、小于等于 (=)、等于 (=) 和不等于 (!=) 六種。由關(guān)系運算符將兩個表達式連接起來的式子,就叫關(guān)系表達式。關(guān)系表達式的值是一個邏輯值,即“真”或“假”,分別用 1 和 0 表示。C語言中的關(guān)系運算符如下所示。關(guān)系運算符的優(yōu)先級關(guān)系運算符都是雙目運算符,其結(jié)合性均為左結(jié)合。關(guān)系運算符的優(yōu)先級低于算術(shù)運算 符,高于賦值運算符。 在六個關(guān)系運算符中 、=

10、 的優(yōu)先級相同,高于 = 和 !=,而 = 和 != 的優(yōu)先級相同。流程圖 流程圖是一種常用的算法圖形表示方法。流程圖是用具有特定涵義的圖形符號(例如矩 形、菱形和平行四邊形等)通過“流程線(Flowline)”連接而成的。它可以清晰地反映程序的執(zhí) 行過程。流程圖的常用圖形符號,如下所示??刂平Y(jié)構(gòu)所有的程序無論長短,都只采用 3 種基本程序控制結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié) 構(gòu)。這 3 種結(jié)構(gòu)都具有如下特點:只有一個入口; 只有一個出口;每一條語句都應(yīng)當有一條從入口到出口的路徑通過,即每條語句都有機會被執(zhí)行; 沒有死循環(huán)??刂平Y(jié)構(gòu)順序結(jié)構(gòu)(1)順序結(jié)構(gòu) 顧名思義,順序結(jié)構(gòu)就是按照程序中語句

11、本身的先后次序,依次執(zhí)行。如圖 所示,先 執(zhí)行 A 操作 , 再執(zhí)行 B 操作 , 兩者就是順序執(zhí)行的關(guān)系??刂平Y(jié)構(gòu)選擇結(jié)構(gòu) 在編寫程序的時候,許多事情也是事先不固定的,例如,編寫程序求任意值的絕對值函數(shù),當自變量的值大于等于 0 時,其值就是其本身;當自變量的值小于 0 時,其值就是其相反數(shù)。自變量的值到底是多少,在編寫程序的時候是不知道的,所以在程序中必須有判斷環(huán)節(jié)來確定執(zhí)行不同操作。這種判斷環(huán)節(jié)就是選擇結(jié)構(gòu)。選擇結(jié)構(gòu)是先判斷指定的條件,再決定執(zhí)行哪個語句,如下所示,當條件成立,即為真時,執(zhí)行 A;否則,執(zhí)行 B。注意,只能執(zhí)行 A 或 B 之一。控制結(jié)構(gòu)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)分為當型循環(huán)結(jié)構(gòu)和

12、直到型循環(huán)結(jié)構(gòu)兩類。當型循環(huán)結(jié)構(gòu)是指先判斷循環(huán)條件,當循環(huán)條件成立,即為邏輯真時 , 反復執(zhí)行循環(huán)體;當循環(huán)條件不成立,即為邏輯假時,停止循環(huán),執(zhí)行循環(huán)體后面的語句,如下所示。直到型循環(huán)結(jié)構(gòu)是指先執(zhí)行循環(huán)體,再判斷循環(huán)條件是否成立,若成立,則反復執(zhí)行循環(huán)體;若不成立,則退出循環(huán),執(zhí)行循環(huán)體后面語句,如下所示。單一if結(jié)構(gòu) 選擇結(jié)構(gòu)中最基本的分支結(jié)構(gòu)是 if 語句,按形式分 if 語句可以分為單分支、雙分支和多分支等,單一 if 語句定義形式如下所示 當上述中“表達式”值為“邏輯真”時,執(zhí)行“語句”中內(nèi)容。例如計算整型變量 x 的絕對值,示例代碼如下所示:If-else結(jié)構(gòu) if 語句的第二種形

13、式為 if-else 結(jié)構(gòu)的雙分支。其定義形式如下所示 : 當“表達式”值為“邏輯真”時,執(zhí)行“語句 1”;當“表達式”值為“邏輯假”時,執(zhí)行“語句 2”。例如,判斷整型變量 x 是 5,則輸出“right”,否則輸出“error”,示例代碼如下所示:條件運算 條件運算符是 C 語言中唯一的三目運算符,要求有三個運算對象。由條件運算符組成的 表達式稱為條件表達式,其格式如下:條件表達式的求值規(guī)則為:如果表達式 1 的值為真,則以表達式 2 的值作為條件表達式的值,否則以表達式 3 的值作為整個條件表達式的值。條件運算符的運算優(yōu)先級低于關(guān)系運算符和算術(shù)運算符,但高于賦值符。因此條件表達式通常用于

14、賦值語句之中條件運算符 ? 和:是一對運算符,不能分開單獨使用。 條件運算符的結(jié)合方向是自右至左任務(wù)三任務(wù)實施 本任務(wù):由鍵盤輸入 2 個任意整數(shù)(考慮零不可以做除數(shù)),計算這 2 個整數(shù)之和、之差、之積、之商。任務(wù)三任務(wù)拓展拓展任務(wù)名稱:比較 x、y 的大小,如果 x 大則在屏幕中輸出“xy”,否則輸出“x2 & 21 的值為032 & 21 的值為112 & 23 的值為021 & 12 的值為0 |邏輯或:參與運算的兩個量只要有一個為真,結(jié)果就為真。 兩個量都為假時,結(jié)果為假。12 | 21 的值為132 | 21 的值為112 | 23 的值為021 | 12 的值為1單目!邏輯非:參

15、與運算量為真時,結(jié)果為假;參與運算量為假時,結(jié)果為真。!1 的值是0!0 的值是1邏輯運算 (2)邏輯運算符的優(yōu)先級和結(jié)合性 三個邏輯運算符中,邏輯非“!”的優(yōu)先級最高,具有右結(jié)合性,其次是邏輯與“&”,最后是邏輯或“|”,邏輯與和邏輯或都具有左結(jié)合性。它們的優(yōu)先級為:! & |。當一個復雜的表達式中既有算術(shù)運算符、關(guān)系運算符,還有邏輯運算符時,它們之間的優(yōu)先級如下: 算術(shù)運算符 關(guān)系運算符 邏輯運算符。條件運算 條件運算符是C語言中唯一的三目運算符,要求有三個運算對象。由條件運算符組成的表達式稱為條件表達式。條件表達式的一般格式如下:條件表達式的求值規(guī)則為:若表達式1的值為真,則以表達式2的

16、值作為條件表達式的值,否則以表達式3的值作為整個條件表達式的值。條件運算符?和:是一對運算符,不能分開單獨使用。條件運算符的運算優(yōu)先級低于關(guān)系運算符和算術(shù)運算符,但高于賦值符。條件運算符的結(jié)合性是自右至左,例如條件表達式嵌套:ab?a:cd?c:d,應(yīng)理解為ab?a:(cd?c:d)。表達式1? 表達式2: 表達式3for和do-while語句 (1)for語句簡介 C語言中的for語句使用最為靈活,它完全可以代替while語句 。 其流程圖和執(zhí)行過程分析可以看出, 它相當于while循環(huán)中如下形式 for(表達式1;表達式2;表達式3) 循環(huán)體 表達式1;while(表達式2) 循環(huán)體表達式

17、3;for和do-while語句 該語句的執(zhí)行過程為:第一步:執(zhí)行表達式1;第二步:求表達式2的值,若其值為true(非0),則執(zhí)行一次循環(huán)體,若其值為false,(0),則結(jié)束循環(huán),轉(zhuǎn)而執(zhí)行循環(huán)體后面的語句;第三步:執(zhí)行表達式3,然后轉(zhuǎn)到第二步繼續(xù)執(zhí)行。 for循環(huán)含義for(sum=0,i=1;i=10;sum+=i,i+); 求1+2+3+4+5+6+7+8+9+10的和for(sum=0,i=1;i=10;sum+=i,i+=2);求1+3+5+7+9的和for(i=0;i+);從0開始,1,2,3不停向上遞增,永不停止for(;i & |。當一個復雜的表達式中既有算術(shù)運算符、關(guān)系運算

18、符,還有邏輯運算符時,它們之間的優(yōu)先級如下: 算術(shù)運算符 關(guān)系運算符 邏輯運算符。使用符號常量的原因 對于一個成熟的程序員來說,在一個程序中,反復多次使用的常量,都定義為符號常量,這是為什么呢?這主要是因為在程序中使用符號常量有明顯的好處。(1) 見名知意,清晰明了。為了便于記憶,常常用一個能夠表示意義的單詞或字母組合來為符號常量命名,增強了程序的可讀性。(2) 避免反復書寫,減少出錯率。如果一個程序中多次使用一個常量,就要多次書寫,而定義了符號常量,只需要書寫一次數(shù)值,在使用的地方用符號替代就可以了,能夠有效地減少出錯概率。(3) 一改全改,方便實用。當程序中多次出現(xiàn)同一個常量需要修改時,必

19、須逐個修改,很可能出錯。而用符號常量,在需要修改時,只需修改定義,就可以做到“一改全改”,非常方便。任務(wù)二 并排顯示2019年前3個月的日歷, 每行顯示每個月的同一周為什么要用數(shù)組 C語言引入了數(shù)組的概念,是為了方便在計算機中描述事物的某些特征及這些特征之間的聯(lián)系。數(shù)組相當于是由若干數(shù)據(jù)類型相同的變量組成的一個有序的集合,可以通過一個統(tǒng)一的數(shù)組名稱和一個位置編號的方式來訪問數(shù)組中的數(shù)據(jù)。下面通過介紹一個整型一維數(shù)組a,該數(shù)組中包含10個元素,用來表示10個學生成績。 通過數(shù)組名及其后面方括號內(nèi)的下標,就可以引用數(shù)組中該元素。數(shù)組中第一個元素是下標為0的元素。因此,數(shù)組a的第1個元素記為a0,數(shù)

20、組a的第2個元素記為a1,依次類推,數(shù)組a的第10個元素記為a9,一般來說,數(shù)組a的第n個元素記為an-1 一維數(shù)組的引用 聲明了數(shù)組以后,如何來使用數(shù)組中的元素呢?C語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組, 數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是一種變量,其標識方法為在數(shù)組名后跟一個下標,下標表示了元素在數(shù)組中的順序號。一維數(shù)組的引用格式如下: 引用一維數(shù)組時應(yīng)注意:(1) 數(shù)組名是表示要引用哪一個數(shù)組中的元素,這個數(shù)組必須已經(jīng)聲明。(2) 下標用一對中括號括起來,它表示要引用數(shù)組中的第幾個元素,可以是變量表達式也可以是常量表達式。如為小數(shù)時,C編譯將自動取整。舉例如下代碼所

21、示:數(shù)組名下標num3;numi+j;numi+;一維數(shù)組的引用 (3) C語言規(guī)定,數(shù)組下標從0開始。一個含有n個元素的數(shù)組,數(shù)組下標的取值范圍為0,n-1,舉例如下代碼所示: 其中,整型數(shù)組num的下標只能取0、1、2三個值,即可以引用數(shù)組元素num0、num1、num2。 如將上述程序段中第二行改為:num 3 =k;則錯誤,引用num3是超界的,它表示數(shù)組中的第四個元素。C語言編譯時并不指出“下標超界”的錯誤,而是把num2下面一個單元的內(nèi)容作為num3引用,從而引起程序潛在的錯誤。因此,引用數(shù)組元素時要特別小心。int num3,k=10;num0=k; 一維數(shù)組的初始化 與使用變量

22、一樣,一維數(shù)組在使用之間必須進行聲明。一維數(shù)組的聲明格式如下:數(shù)據(jù)類型 數(shù)組名常量表達式;(1) 數(shù)據(jù)類型用來聲明數(shù)組中各個數(shù)據(jù)元素的類型,如int、float、char等。在任何一個數(shù)組中,數(shù)據(jù)元素的類型都是一致的。(2) 數(shù)組名的命名規(guī)則與變量名的命名規(guī)則一樣。(3) 數(shù)組名中存放的是一個地址常量,它代表整個數(shù)組的首地址。同一數(shù)組中的所有元素,在內(nèi)存單元中按其下標的順序占用一段連續(xù)的存儲單元。一維數(shù)組的邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)是相同的,數(shù)組a 的存儲結(jié)構(gòu)為:(4) 常量表達式的值表示數(shù)組元素的個數(shù)。常量表達式必須是整數(shù)或者整數(shù)表達式而不能有變量。常量表達式是放在一對中括號中。一維數(shù)組的初始化 數(shù)

23、組聲明后,必須對其元素進行初始化。數(shù)組初始化是指在數(shù)組聲明時給數(shù)組元素賦予初值??梢栽谶\行時顯示地初始化數(shù)組,也可以像普通變量一樣,在聲明數(shù)組同時初始化數(shù)組元素。這種方法是在編譯階段進行的,可以減少運行時間,提高效率。一維數(shù)組的初始格式如下:數(shù)據(jù)類型 數(shù)組名常量表達式初值表任務(wù)三 顯示2019年全年日歷,每3個月一排, 每行顯示相鄰3個月的同一周二維數(shù)組的聲明 具有多個下標的數(shù)組稱為多維數(shù)組,其中最常用的是二維數(shù)組,主要用來表示數(shù)值表格。二維數(shù)組的聲明格式如下: 聲明二維數(shù)組時應(yīng)注意:(1) 與一維聲明基本相同,只多了一個常量表達式,表示二維。第一個常量表達式為行下標,聲明了這個數(shù)組的行數(shù),第

24、二個常量表達式為列下標,聲明了每行的列數(shù)。因此,元素個數(shù)=行數(shù)*列數(shù)。如上面二維數(shù)組a由34=12個元素組成。 數(shù)據(jù)類型 數(shù)組名常量表達式 常量表達式;二維數(shù)組的聲明(2) C語言把二維數(shù)組看成是一維數(shù)組,基元素又是一個一維數(shù)組。例如,a有三個元素a0,a1和a2,它們各自又可以看作為一個包含5個元素的一維數(shù)組(3) 二維數(shù)組的元素在內(nèi)存中按線性方式存放,即按行存放,先存放第一行的元素,再存放第二行的元素。數(shù)組a的存放順序為: a00 a01 a02 a03 a10 a11 a12 a23二維數(shù)組的引用 二維數(shù)組的引用格式如下:引用二維數(shù)組元素時,對數(shù)組下標的值要求與引用一維數(shù)組相同,即行或列

25、下標表達式的值只能從0到數(shù)組所規(guī)定的下標上界之間的整數(shù)。數(shù)組名下標二維數(shù)組的初始化 在聲明二維數(shù)組同時,可以用下列方法給數(shù)組元素初始化:(1) 按存放順序,舉例如下:二維數(shù)組的初始化 (2) 按行分段初始化,舉例如下: 結(jié)果與第一種方法相同,但更為直觀。有幾組用逗號分隔的大括號,就代表二維數(shù)組有幾行,而每組大括號有幾個用逗號分隔的數(shù)值,就代表該行有幾列。最后將所有的初始化內(nèi)容用一對大括號括起來。這種方法特別適用于對數(shù)組部分元素賦初值,系統(tǒng)自動將沒有賦值的元素賦值成0,舉例如下:二維數(shù)組的初始化 (3) 聲明同時對數(shù)組元素全部賦值,可省略第一維的長度,但必須指定其他維的長度,如下所示: 根據(jù)初值

26、的個數(shù),編譯系統(tǒng)會自動確定第一維的下標,如下所示: 編譯系統(tǒng)會根據(jù)初值數(shù)據(jù)的行數(shù)自動確定第一維下標的長度int a4=1,2,3,4,5,6,7,8,9,10,11,12;int a4=1,9,10; /*數(shù)組a中各元素如圖3-13(c)所示。*/字符數(shù)組與字符串的關(guān)系 用字符數(shù)組表示字符串時需注意:(1) 0代表字符串結(jié)束,處理字符數(shù)組時,一旦遇到該字符,剩下的字符就不再處理。(2) 在進行字符串處理時,0不作為字符串的有效字符進行處理,它只起到判別作用。(3) 0在字符數(shù)組中,仍占用一個單元,如字符串program的長度為7,但它卻占用了字符數(shù)組8個的單元的大小。因此,大小為n的字符數(shù)組最

27、多只能存放長度為n-1的字符串,需要預(yù)留出字符串結(jié)束符0的位置。字符數(shù)組的聲明 字符數(shù)組的聲明與前面介紹的類似。例如char c10; /*一維字符數(shù)組,每個元素占用1個字節(jié)內(nèi)存單元*/char c34 ; /*二維字符數(shù)組,每個元素占用1個字節(jié)內(nèi)存單元*/字符數(shù)組初始化字符數(shù)組可以使用這兩種方法來進行初始化。使用字符常量初始化數(shù)組,舉例如下(2) 使用字符串常量(字符串)初始化數(shù)組,舉例如下:char c10=C, , L, a, n, g, u, a, g, e; /*聲明同時對各個元素賦初值*/char c=C Language; /*此時數(shù)組c長度為11*/char c=C Langu

28、age; /*大括號也可以省略*/輸入輸出字符串 在C語言中,有兩個函數(shù)可以在控制臺(顯示器)上輸出字符串,它們分別是:puts():輸出字符串并自動換行,該函數(shù)只能輸出字符串。printf():通過格式控制符%s輸出字符串,不能自動換行。除了字符串,printf() 還能輸出其他類型的數(shù)據(jù)。同樣在C語言中,有兩個函數(shù)可以讓用戶從鍵盤上輸入字符串,它們分別是:scanf():通過格式控制符%s輸入字符串。除了字符串,scanf() 還能輸入其他類型的數(shù)據(jù)。gets():直接輸入字符串,并且只能輸入字符串。輸入輸出字符串 使用格式符“%c”,以單個字符形式輸入輸出在用鍵盤輸入字符串時,通常以回車

29、符或空格符結(jié)束一個字符串的輸入。如本例,當輸入“abcd abcd abcd”時,實際存入字符數(shù)組c中的字符只有“abcd”,這一點請注意。在未知字符串長度情況下,聲明字符數(shù)組長度時應(yīng)盡量長些,但這勢必會造成資源浪費。我們可以用字符串初始化字符數(shù)組,就顯得方便多了。輸入輸出字符串 使用格式符“%s”,以字符串整體形式輸入或輸出(1) 輸出字符串時不包括0。(2) 用“%s”格式將字符串整體輸出時,在printf函數(shù)中輸出項應(yīng)是字符數(shù)組名,而不是數(shù)組元素名。如printf(%s,ci)是錯誤的。(3) 如果數(shù)組長度字符串實際長度時,printf函數(shù)也只輸出到第一個0為止。(4) 使用scanf輸

30、入整個字符串時,輸入項是字符數(shù)組名,不要再加地址符&,并且它應(yīng)該是已經(jīng)被聲明過。如:scanf(%s,ci)或scanf(%s,&ci)都是錯誤的。(5) 利用scanf函數(shù)輸入多個字符串以空格分隔。字符串處理函數(shù) gets()函數(shù)gets()函數(shù)使用時格式如下所示:(1) 與使用scanf的“%s”格式輸入字符串不同,gets()函數(shù)接受的字符串可以包含空格。(2) scanf()函數(shù)可以采用多個“%s”格式可以同時輸入多個字符串,而gets()函數(shù)一次只能輸入一個字符串,以回車符作為字符輸入結(jié)束。gets(字符數(shù)組名);字符串處理函數(shù)puts()函數(shù)puts()函數(shù)使用時格式如下所示: 作

31、用:將數(shù)組中的以0結(jié)束的字符串輸出,輸出完畢自動換行。它的功能與printf()的“%s”格式的功能基本相同,只是每次只能輸出一個字符串。puts(字符數(shù)組名);字符串處理函數(shù)strcat()字符串連接函數(shù)strcat()字符串連接函數(shù)使用時格式如下所示: 作用:將字符數(shù)組1中的字符串結(jié)束符0刪除,將字符數(shù)組2連接到字符數(shù)組1后面,并返回字符數(shù)組1的首地址。strcat(字符數(shù)組1,字符數(shù)組2);字符串處理函數(shù)strcpy()函數(shù)strcpy()函數(shù)使用時格如下所示: 作用:把字符串數(shù)組2的內(nèi)容拷貝到字符數(shù)組1中,拷貝結(jié)束后,系統(tǒng)會自動在字符數(shù)組1中加入結(jié)束符0。strcpy(字符數(shù)組1,字符

32、數(shù)組2);字符串處理函數(shù) strcmp()函數(shù)strcmp()函數(shù)使用時格式如下所示: 作用:比較兩個字符串的大小,比較時對兩個字符串自左至右逐個字符按ASCII碼值大小比較,直到出現(xiàn)不同字符或0為止。比較結(jié)果由函數(shù)值返回。字符串1 字符串2,函數(shù)返回值是正整數(shù),為兩個字符串中第一個不同字符的ASCII碼值的差值。在字符串比較時,字符串結(jié)束符0也參加比較。字符串1字符串2,函數(shù)返回值是負整數(shù),其它同上。字符串1=字符串2,函數(shù)返回值為0。 C語言規(guī)定,不能使用“= =”比較兩個字符串,只能用strcmp() 函數(shù)來處理。strcmp(字符數(shù)組1,字符數(shù)組2 );字符串處理函數(shù) strlen()

33、函數(shù)strlen()函數(shù)使用時格式如下所示: 作用:測試字符串長度,函數(shù)的返回值為字符實際長度,不包含“0”。strlen(字符數(shù)組名/字符串);任務(wù)四 輸入年份,顯示該年的日歷,每3個月一排,每行顯示相鄰3個月的同一周任務(wù)技能 變量(1)變量的作用域 函數(shù)形參變量只在被調(diào)用期間才分配內(nèi)存單元,調(diào)用結(jié)束立即釋放。這一點表明形參變量只有在函數(shù)內(nèi)才是有效的,離開該函數(shù)就不能再使用了。這種變量有效性的范圍稱變量的作用域。不僅對于形參變量,語言中所有的變量都有自己的作用域。變量說明的方式不同,其作用域也不同。在C語言中,按作用域范圍不同可分為局部變量和全局變量。任務(wù)技能 變量(2)局部變量 局部變量也

34、稱為內(nèi)部變量。局部變量是在函數(shù)體內(nèi)聲明的變量。其作用域僅限于函數(shù)內(nèi),離開聲明它的函數(shù)后就失去作用。任務(wù)技能 變量關(guān)于局部變量的作用域的幾點說明:(1) main()中定義的變量也只能在main()中使用,不能在其它函數(shù)中使用。同時,main()中也不能使用其它函數(shù)中定義的變量,因為main()也是一個函數(shù),它與其它函數(shù)是平行關(guān)系。這一點與其它語言不同的,應(yīng)予以注意。(2) 形參變量是屬于被調(diào)函數(shù)的局部變量,實參變量是屬于主調(diào)函數(shù)的局部變量。(3) 允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發(fā)生混淆。(4) 在復合語句中也可定義變量,其作用域只在復合

35、語句范圍內(nèi)。任務(wù)技能 變量(3)全局變量 全局變量也稱為外部變量,它是在任何一個函數(shù)體外定義的變量,它不屬于任何函數(shù),它屬于整個源程序文件,即其作用域是從其定義之處到整個源程序結(jié)束。在一個函數(shù)中既可以使用本函數(shù)中的局部變量,又可以使用有效的全局變量。在一個函數(shù)之前定義的全局變量,在該函數(shù)內(nèi)使用可不再加以說明。任務(wù)技能 變量關(guān)于局部變量和全局變量的幾點說明:(1) 對于局部變量的定義和聲明,可以不加區(qū)分。但對于全局變量則不然,全局變量的定義和聲明有不同的涵義。全局變量的定義必須在所有函數(shù)體之外,且只能有一次。(2)全局變量可加強函數(shù)模塊之間的數(shù)據(jù)聯(lián)系, 但是又使函數(shù)要依賴這些變量,因而使得函數(shù)的

36、獨立性降低。從模塊化程序設(shè)計的觀點來看這是不利的, 因此在不必要時盡量不要使用全局變量。(3)在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內(nèi),全局變量不起作用。(4)外部變量和全局變量是對同一類變量的兩種不同角度的提法。全局變量是從它的作用域提出的,外部變量從它的存儲方式提出的,表示了它的生存期。當一個源程序由若干個源文件組成時, 在一個源文件中定義的外部變量在其它的源文件中也有效。(5)程序在內(nèi)存中存在期間,外部變量始終存在,不會隨著函數(shù)的調(diào)用或退出而存在或消失。任務(wù)技能 變量(4)變量的存儲類型 變量的存儲方式可分為靜態(tài)存儲和動態(tài)存儲兩種。靜態(tài)存儲變量通常是在變量定義時就

37、分配存儲單元并一直保持不變, 直至整個程序結(jié)束。動態(tài)存儲變量是在程序執(zhí)行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數(shù)的形參,在函數(shù)定義時并不給形參分配存儲單元,只是在函數(shù)被調(diào)用時,才予以分配,調(diào)用函數(shù)完畢立即釋放。如果一個函數(shù)被多次調(diào)用,則反復地分配、 釋放形參變量的存儲單元。從以上分析可知,靜態(tài)存儲變量是一直存在的,而動態(tài)存儲變量則時而存在時而消失。這種由于變量存儲方式不同而產(chǎn)生的特性稱變量的生存期。 生存期表示了變量存在的時間。生存期和作用域是從時間和空間這兩個不同的角度來描述變量的特性,這兩者既有聯(lián)系,又有區(qū)別。一個變量究竟屬于哪一種存儲方式,并不能僅從其作用域來判

38、斷,還應(yīng)有明確的存儲類型說明。在語言中,對變量的存儲類型說明有四種:自動變量(auto)、靜態(tài)變量(static)、外部變量(extern)和寄存器變量(register)。自動變量和寄存器變量屬于動態(tài)存儲方式,外部變量和靜態(tài)變量屬于靜態(tài)存儲方式。在介紹了變量的存儲類型之后,可以知道對一個變量的說明不僅應(yīng)說明其數(shù)據(jù)類型,還應(yīng)說明其存儲類型。任務(wù)技能 變量自動變量 自動變量具有以下特點:(1) 自動變量的作用域僅限于定義該變量的個體內(nèi)。在函數(shù)中定義的自動變量,只在該函數(shù)內(nèi)有效。在復合語句中定義的自動變量只在該復合語句中有效。(2) 自動變量屬于動態(tài)存儲方式,只有在定義該變量的函數(shù)被調(diào)用時才給它分

39、配存儲單元,開始它的生存期。函數(shù)調(diào)用結(jié)束,釋放存儲單元,結(jié)束生存期。因此函數(shù)調(diào)用結(jié)束之后,自動變量的值不能保留。在復合語句中定義的自動變量,在退出復合語句后也不能再使用,否則將引起錯誤。(3) 由于自動變量的作用域和生存期都局限于定義它的個體內(nèi)( 函數(shù)或復合語句內(nèi)), 因此不同的個體中允許使用同名的變量而不會混淆。 即使在函數(shù)內(nèi)定義的自動變量也可與該函數(shù)內(nèi)部的復合語句中定義的自動變量同名。例如,例9-6中的變量k。任務(wù)技能 變量靜態(tài)變量 靜態(tài)變量的類型說明符是static,屬于靜態(tài)存儲方式。但是屬于靜態(tài)存儲方式的量不一定就是靜態(tài)變量,例如外部變量雖屬于靜態(tài)存儲方式,但不一定是靜態(tài)變量,必須由

40、static加以定義后才能成為靜態(tài)外部變量,或稱靜態(tài)全局變量。靜態(tài)局部變量具有以下特點:靜態(tài)局部變量在函數(shù)內(nèi)定義,但不象自動變量那樣,當調(diào)用時就存在,退出函數(shù)時就消失。靜態(tài)局部變量始終存在著,也就是說它的生存期為整個源程序。靜態(tài)局部變量的生存期雖然為整個源程序,但是其作用域仍與自動變量相同,即只能在定義該變量的函數(shù)內(nèi)使用該變量。退出該函數(shù)后,盡管該變量還繼續(xù)存在,但不能使用它。對基本類型的靜態(tài)局部變量若在說明時未賦以初值,則系統(tǒng)自動賦予0值。而對自動變量不賦初值,則其值是不定的。任務(wù)技能 變量靜態(tài)全局變量全局變量的聲明之前加上static就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式,靜

41、態(tài)全局變量當然也是靜態(tài)存儲方式。靜態(tài)全局變量和非靜態(tài)全局變量的區(qū)別在于非靜態(tài)全局變量的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的;而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯誤。從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍。因此static這個說明符在不同的地方所起的作用是不同的,

42、應(yīng)予以注意。任務(wù)技能 變量寄存器變量上述各類變量都存放在存儲器內(nèi),因此當對一個變量頻繁讀寫時,必須要反復訪問內(nèi)存儲器,從而花費大量的存取時間。為此,語言提供了另一種變量,即寄存器變量。這種變量存放在CPU的寄存器中,使用時,不需要訪問內(nèi)存,而直接從寄存器中讀寫, 這樣可提高效率。寄存器變量的說明符是register。對于循環(huán)次數(shù)較多的循環(huán)控制變量及循環(huán)體內(nèi)反復使用的變量均可定義為寄存器變量。對寄存器變量還要說明以下幾點:(1) 只有局部自動變量和形參才可以定義為寄存器變量。因為寄存器變量屬于動態(tài)存儲方式,凡需要采用靜態(tài)存儲方式的量不能定義為寄存器變量。s(2) 在Turbo C中,實際上是把寄

43、存器變量當成自動變量處理的。因此速度并不能提高。 而在程序中允許使用寄存器變量只是為了與標準C保持一致。(3) 即使能真正使用寄存器變量的機器,由于CPU中寄存器的個數(shù)是有限的,因此使用寄存器變量的個數(shù)也是有限的。當今的優(yōu)化編譯系統(tǒng)能夠自動將使用頻繁的變量放在寄存器中,不需要程序設(shè)計者指定。在實際上用register聲明變量是不必要的。任務(wù)總結(jié) 本項目通過編寫萬年歷程序,介紹符號常量的用法、體現(xiàn)數(shù)組在程序中的重要性以及變量的使用方式,實現(xiàn)可以在屏幕上顯示任意指定年份的日歷。第 一 章第四章目計算個人所得稅項四學習目標了解浮點型相關(guān)知識掌握結(jié)構(gòu)體的含義掌握結(jié)構(gòu)體數(shù)組的定義和使用掌握引入文件的意義

44、 具有文件基本操作的能力學習路徑任務(wù)一 計算個人所得稅后輸出浮點型 (1)浮點型概念 浮點型用于描述現(xiàn)實生活中的實數(shù),例如 1.2、123.45 等,基本類型為 float??梢愿鶕?jù)取值 的范圍和數(shù)據(jù)精度的不同,通常情況下,將浮點數(shù)分為單精度(float)和雙精度(double)。浮點型 (2)浮點型常量 浮點型也稱為實型。浮點型常量也稱為實數(shù)或者浮點數(shù)。在 C 語言中,實數(shù)只采用十進 制。它有二種形式:十進制小數(shù)形式和指數(shù)形式。 1) 十進制數(shù)形式:由數(shù)碼 0 9 和小數(shù)點組成。 2)指數(shù)形式:由十進制數(shù),加階碼標志“e”或“ E”以及階碼(只能為整數(shù),可以帶符號)組 成。其一般格式為:a

45、E n(a 為十進制數(shù), n 為十進制整數(shù),表示階碼),其值為 a10n。1.0、15.8、5.678、- 0.13、500.、- 267.8230 等均為合法的實數(shù)。3.2E5 (等于 3.2105),4.7E-2 (等于 4.710-2),0.6E7 (等于 0.6107浮點型 (3)浮點型變量 C 語言中浮點型變量指的就是實數(shù)變量(存放可以帶小數(shù)的數(shù)據(jù)的變量), 分為兩類: float(單精度型)和 double(雙精度型) 。 float d; /* 聲明浮點型變量 d*/double real; /* 聲明雙精度型變量 real*/格式輸出函數(shù) printf() (1)其中類型符號用

46、以表示輸出數(shù)據(jù)的類型 C 語言中浮點型變量指的就是實數(shù)變量(存放可以帶小數(shù)的數(shù)據(jù)的變量), 分為兩類: float(單精度型)和 double(雙精度型) 。 格式輸出函數(shù) printf() (2)精度:精度格式符以“.”開頭,后跟十進制整數(shù)。本項的意義是:如果輸出數(shù)字,則表 示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個數(shù);若實際位數(shù)大于所定義的精度數(shù), 則截去超過的部分。表達式中的類型轉(zhuǎn)換(1)自動轉(zhuǎn)換 在某種范圍內(nèi)整型數(shù)據(jù)可以和字符型數(shù)據(jù)通用,而整型是浮點型的一種特殊形式。因此, 整型、浮點型和字符型數(shù)據(jù)之間可混合運算。例如:3.45+10+a-2.5*c,是合法的。在混合運 算時,

47、編譯系統(tǒng)先將不同數(shù)據(jù)類型數(shù)據(jù)自動轉(zhuǎn)換成同一類型,再進行運算。 表達式中的類型轉(zhuǎn)換自動轉(zhuǎn)換遵循以下規(guī)則:若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進行運算。轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低。所有的浮點運算都是以雙精度進行的,即使僅含 float 單精度量運算的表達式,也要先轉(zhuǎn)換成 double 型,再作運算。 char 型和 short 型參與運算時,必須先轉(zhuǎn)換成 int 型。 在賦值運算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量 的類型。表達式中的類型轉(zhuǎn)換(2)強制類型轉(zhuǎn)換 除了自動類型轉(zhuǎn)換之外,程序設(shè)計人員還可以根據(jù)運算的要求,在程序中強行將數(shù)據(jù)的

48、類 型進行轉(zhuǎn)換,稱為強制類型轉(zhuǎn)換。強制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運算來實現(xiàn)的,其一般格式如下:(類型說明符) (表達式)表達式中的類型轉(zhuǎn)換格式說明強制類型轉(zhuǎn)換符的功能是把表達式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型。 類型說明符和表達式都必須加括號(單個變量可以不加括號)。無論是強制轉(zhuǎn)換或是自動轉(zhuǎn)換,都只是為了本次運算的需要而對變量的數(shù)據(jù)長度進行 的臨時性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時對該變量定義的類型 if-else 嵌套結(jié)構(gòu) 在程序設(shè)計中,經(jīng)常使用級聯(lián)的 if-else-if 實現(xiàn)多路分支結(jié)構(gòu)一般格式:if ( 表達式 1) 語句 1; else if ( 表達式 2) 語句 2; else i

49、f ( 表達式 3) 語句 3; else if ( 表達式 m) 語句 m; Else 語句 m+1 if-else 嵌套結(jié)構(gòu) 在程序設(shè)計中,經(jīng)常使用級聯(lián)的 if-else-if 實現(xiàn)多路分支結(jié)構(gòu)一般格式:條件語句使用小結(jié) 一個表達式的返回值都可以用來判斷真假,除非沒有任何返回值的 void 型和返回無法判 斷真假的結(jié)構(gòu)。當表達式的值不等于 0 時,它就是“真”,否則就是假。一個表達式可以包含 其他表達式和運算符,并且基于整個表達式的運算結(jié)果可以得到一個真或假的條件值。因此, 當一個表達式在程序中被用于檢驗其真或假的值時,就稱為一個條件。 條件語句使用小結(jié) (1) if 語句 if (表達式

50、) 語句 1;如果表達式的值為非 0,則執(zhí)行語句 1,否則跳過語句繼續(xù)執(zhí)行下面的 語句。如果語句 1 有多于一條語句要執(zhí)行時, 必須使用 和 把這些語句包括在其中, 此時 條件語句形式為:if(表達式) 語句 1; 條件語句使用小結(jié) (2) if-else 語句 除了可以指定在條件為真時執(zhí)行某些語句外,還可以在條件為假時執(zhí)行另外一段代碼。 在 C 語句中利用 else 語句來達到這個目的。ifelse 語句格式為:if( 表達式 ) 語句 1; else 語句 2條件語句使用小結(jié) (3)if-else 嵌套 條件語句可以嵌套,這種情況經(jīng)常碰到,但條件嵌套語句容易出錯,其原因主要是不知道 哪個

51、if 對應(yīng)哪個 else。其語句格式為:if( 表達式 1) 語句 1; else if( 表達式 2) 語句 2; else if( 表達式 3) 語句 3; else 語句 n條件語句使用小結(jié) (4)switch-case 語句 執(zhí)行 switch 開關(guān)語句時,將變量逐個與 case 后的常量進行比較,若與其中一個相等,則執(zhí)行該 常量下的語句,若不與任何一個常量相等,則執(zhí)行 default 后面的語句。其語句格式為: switch( 變量 ) case 常量 1: 語句 1 或空; break; case 常量 2: 語句 2 或空; break; case 常量 n: 語句 n 或空;

52、break; default: 語句 n+1 或空; 任務(wù)二 將稅率表存放在結(jié)構(gòu)體數(shù)組中,然后再計算 個人所得稅并輸出結(jié)構(gòu)體的意義 首先考慮解決下面一個問題,輸入一個學生的學號、姓名、性別、班級以及他的數(shù)學、外語 和語文的三科課程成績,求出他的總分和平均分。 問題分析:通過該項目的問題描述,可知通過順序結(jié)構(gòu)就可以編寫出這個項目的解決程 序,用四個字符數(shù)組變量分別表示學號、姓名、性別、班級;用三個浮點類型變量表示學生的三 科成績,然后通過計算求出總分和平均分并輸出即可。結(jié)構(gòu)體類型的定義 C 語言提供了一個重要的構(gòu)造數(shù)據(jù)類型結(jié)構(gòu)體類型,來解決復雜事物表示問題,它將多個數(shù)據(jù)項集合到一個數(shù)據(jù)類型中,每

53、個數(shù)據(jù)項目被稱為數(shù)據(jù)成員,它們可以是不同的數(shù)據(jù)類型,既可以是基本數(shù)據(jù)類型,也可以是另一種構(gòu)造數(shù)據(jù)類型。結(jié)構(gòu)體數(shù)據(jù)類型的一般定義 如下:struct 結(jié)構(gòu)體名 數(shù)據(jù)類型 1 成員名 1; 數(shù)據(jù)類型 2 成員名 2; 數(shù)據(jù)類型 3 成員名 3; 數(shù)據(jù)類型 n 成員名 n; ;結(jié)構(gòu)體類型變量的定義 上面聲明了一個結(jié)構(gòu)體類型,它相當于一個模型,其中并無具體數(shù)據(jù),只有定義了具有結(jié) 構(gòu)體類型的變量之后,才能在其中存放具體的數(shù)據(jù)。在 C 語言中,可以使用三種方式定義結(jié)構(gòu) 體類型的變量: (1) 直接聲明結(jié)構(gòu)體類型變量 這種方式要求在 struct 后不使用結(jié)構(gòu)體名,例如:struct st1,st2;結(jié)構(gòu)體

54、類型變量的定義(2)先定義結(jié)構(gòu)體類型,再單獨聲明結(jié)構(gòu)體類型變量這種方式要求先定義結(jié)構(gòu)體類型,再由一條單獨的語句聲明變量,例如:struct student ; struct student st1,st2;結(jié)構(gòu)體類型變量的定義(3) 定義類型的同時聲明變量 這種方式將類型的定義和變量的聲明放在一起,例如:struct student st1,st2;關(guān)鍵字 typedef 的用法 在結(jié)構(gòu)體類型變量的第二種聲明方式中,要用關(guān)鍵字 struct 和結(jié)構(gòu)體名共同來聲明變量, 尤其當結(jié)構(gòu)體名稱較長時,記憶起來不方便,C 語言提供了關(guān)鍵字 typedef 來簡化類型定義,提高程序的可讀性。 C 語言允許

55、用 typedef 來說明一種新類型名,其一般格式如下: typedef 原類型名 新類型名結(jié)構(gòu)體變量的引用和初始化 (1)結(jié)構(gòu)體變量的引用 聲明完一個結(jié)構(gòu)體類型的變量之后,就可以在程序中使用它了。但是,要注意的是:不能 將一個結(jié)構(gòu)體變量作為一個整體來直接使用,只能通過引用變量中的成員來實現(xiàn)對結(jié)構(gòu)體變 量的使用。引用結(jié)構(gòu)體變量中成員的格式為: 結(jié)構(gòu)體變量名 . 成員名結(jié)構(gòu)體數(shù)組的聲明 結(jié)構(gòu)體類型是將多個不同基類型的數(shù)據(jù)組合在一起表示特定的學生,當需要對一個班級 的 30 名學生數(shù)據(jù)進行處理的時候,顯然就要用到數(shù)組了,這就是結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組的 每個元素都是具有相同結(jié)構(gòu)類型的下標結(jié)構(gòu)體變量。

56、在實際應(yīng)用中,經(jīng)常用結(jié)構(gòu)體數(shù)組來表 示具有相同數(shù)據(jù)結(jié)構(gòu)的一類數(shù)據(jù)。 結(jié)構(gòu)體數(shù)組的聲明(1)先定義結(jié)構(gòu)體類型,再聲明結(jié)構(gòu)體數(shù)組 這種方式先定義一個結(jié)構(gòu)體類型,然后用該類型名聲明數(shù)組,這是一種間接定義方式。 struct student char sno8; char sname10; char sex2; char cname30; ; struct student st3;結(jié)構(gòu)體數(shù)組的聲明(2)在聲明結(jié)構(gòu)體類型的同時聲明結(jié)構(gòu)體數(shù)組,這是一種直接聲明方式。 struct student char sno8; char sname10; char sex2; char cname30; st30;

57、結(jié)構(gòu)體數(shù)組的初始化和其他類型數(shù)組一樣,對結(jié)構(gòu)體數(shù)組可以進行初始化,其一般格式如下: struct 結(jié)構(gòu)體類型名 成員定義列表; 結(jié)構(gòu)體數(shù)組名 = , , ;struct student char sno8; char sname10; char sex2; char cname30; st2=20070101,Zhang san,1,class one,20070201,Li si,1, class two結(jié)構(gòu)體數(shù)組的應(yīng)用實例 例如求出 3 個學生中最高分數(shù)的學生姓名和成績信息。設(shè)學生信息只有姓名信息和 成績信息兩個成員,學生姓名在數(shù)組定義時初始化,輸入學生的成績,要求最后輸出分數(shù)最高 的學生

58、姓名和成績。 數(shù)組名作為函數(shù)參數(shù) C 語言規(guī)定,一個數(shù)組名代表數(shù)組的內(nèi)存首地址,即數(shù)組的第一個元素的地址,它實際上 是一個地址值。要向函數(shù)傳遞整個數(shù)組時,給出數(shù)組名和數(shù)組大小就可以了。 數(shù)組名作函數(shù)參數(shù)時應(yīng)注意: (1) 應(yīng)該在調(diào)用函數(shù)和被調(diào)用函數(shù)中分別聲明數(shù)組,且數(shù)據(jù)類型必須一致,否則結(jié)果將 出錯。 (2) 形參數(shù)組可以不指定大小,但需另設(shè)一個參數(shù)傳遞數(shù)組的個數(shù)。因為 C 編譯對形參 數(shù)組大小不做檢查,只將實參數(shù)組首地址傳遞給形參數(shù)組。 (3) 傳遞數(shù)組名時,實參數(shù)組的內(nèi)容并沒有復制到形參數(shù)組中,而是把數(shù)組的首地址傳遞 給被調(diào)函數(shù)。這樣被調(diào)函數(shù)中的數(shù)組就指向內(nèi)存中相同的數(shù)組。 任務(wù)三 計算個

59、人所得稅,長期存放稅率表,并顯示文件概述及基本操作 (1)文件的概念 計算機作為一種先進的數(shù)據(jù)處理工具,它所面對的數(shù)據(jù)信息量十分龐大。僅依賴于鍵盤 輸入和顯示輸出等方式是完全不夠的,通常,解決的辦法就是將這些數(shù)據(jù)記錄在某些介質(zhì)上, 利用這些存儲介質(zhì)的特性,攜帶數(shù)據(jù)或長久地保存數(shù)據(jù)。這種記錄在外部存儲介質(zhì)上的數(shù)據(jù) 的集合稱為“文件”。文件概述及基本操作 (2)文件的分類 C 語言中數(shù)據(jù)文件保存在外部存儲介質(zhì)上有兩種形式:ASCII 碼文件和二進制文件。 ASCII 碼文件 ASCII 碼文件也稱為文本文件,由一個個字符首尾相接而成,其中每個字符占 1 字節(jié),存放的是字符的 ASCII 碼。二進制

60、文件 二進制文件用二進制數(shù)代表數(shù)據(jù),其中的數(shù)據(jù)是按其在內(nèi)存中的存儲形式存放的。當數(shù) 據(jù)以二進制形式輸出到文件中時,數(shù)據(jù)不經(jīng)過任何轉(zhuǎn)換。文件概述及基本操作 (3)文件的存取方式 順序存取無論對文件進行讀或?qū)懖僮鳎偸菑奈募拈_頭開始,依先后次序存取文件中的 數(shù)據(jù)。存取完第一字節(jié),才能存取第二字節(jié);存取完第 n-1 字節(jié),才能存取第 n 字節(jié)。 隨機存取也稱直接存取,可以直接存取文件中指定的數(shù)據(jù)??梢灾苯哟嫒≈付ǖ牡?i 個 字節(jié)(或字符),而不管第 i-1 字節(jié)是否已經(jīng)存取。在 C 語言中,可以通過調(diào)用庫函數(shù)去指定 開始讀寫的字節(jié)號,然后直接對此位置上的數(shù)據(jù)進行讀寫操作。文件概述及基本操作 (4

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論