C語言程序設(shè)計(jì)譚浩強(qiáng)(第四版)期末復(fù)習(xí)重點(diǎn)_第1頁
C語言程序設(shè)計(jì)譚浩強(qiáng)(第四版)期末復(fù)習(xí)重點(diǎn)_第2頁
C語言程序設(shè)計(jì)譚浩強(qiáng)(第四版)期末復(fù)習(xí)重點(diǎn)_第3頁
C語言程序設(shè)計(jì)譚浩強(qiáng)(第四版)期末復(fù)習(xí)重點(diǎn)_第4頁
C語言程序設(shè)計(jì)譚浩強(qiáng)(第四版)期末復(fù)習(xí)重點(diǎn)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第一章 程序設(shè)計(jì)和 c 語言1.1.什么是計(jì)算機(jī)程序程序:一組計(jì)算機(jī)能識別和執(zhí)行的指令。只要讓計(jì)算機(jī)執(zhí)行這個(gè)程序,計(jì)算機(jī)就會自動(dòng)地、有條不紊地進(jìn)行工作 計(jì)算機(jī)的一切操作都是由程序控制的,離開程序,計(jì)算機(jī)將一事無成。1.2什么是計(jì)算機(jī)語言計(jì)算機(jī)語言:人和計(jì)算機(jī)交流信息的、計(jì)算機(jī)和人都能識別的語言。計(jì)算機(jī)語言發(fā)展階段:機(jī)器語言(由 0 和 1 組成的指令)符號語言(用英文字母和數(shù)字表示指令)高級語言(接近于人的自然語言和數(shù)學(xué)語言)面向過程的語言(非結(jié)構(gòu)化的語言、結(jié)構(gòu)化語言);面向?qū)ο蟮恼Z言1.3c 語言的發(fā)展及其特點(diǎn)c 語言是一種用途廣泛、功能強(qiáng)大、使用靈活的過程性編程語言,既可用于編寫應(yīng)用軟件,

2、又能用于編寫系統(tǒng)軟 件。因此 c 語言問世以后得到迅速推廣。c 語言主要特點(diǎn):語言簡潔、緊湊,使用方便、靈活。(只有 37 個(gè)關(guān)鍵字、9 種控制語句;程序書寫形式自由,源程序短) 運(yùn)算符豐富。(34 種運(yùn)算符;把括號、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理;表達(dá)式類型多樣化)數(shù)據(jù)類型豐富。(包括:整型、浮點(diǎn)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型;c99 又?jǐn)U充了 復(fù)數(shù)浮點(diǎn)類型、超長整型、布爾類型;指針類型數(shù)據(jù),能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。)具有結(jié)構(gòu)化的控制語句。(如 ifelse 語句、while 語句、dowhile 語句、switch 語句、for 語句用函數(shù)作為程序

3、 的模塊單位,便于實(shí)現(xiàn)程序的模塊化;c 語言是完全模塊化和結(jié)構(gòu)化的語言)語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。(對數(shù)組下標(biāo)越界不做檢查;對變量的類型使用比較靈活,例如,整型 量與字符型數(shù)據(jù)可以通用;c 語言允許程序編寫者有較大的自由度,因此放寬了語法檢查)允許直接訪問物理地址,能進(jìn)行位操作,可以直接對硬件進(jìn)行操作。(c 語言具有高級語言的功能和低級語言的 許多功能,可用來編寫系統(tǒng)軟件;這種雙重性,使它既是成功的系統(tǒng)描述語言,又是通用的程序設(shè)計(jì)語言) 用 c 語言編寫的程序可移植性好。(c 的編譯系統(tǒng)簡潔,很容易移植到新系統(tǒng);在新系統(tǒng)上運(yùn)行時(shí),可直接編譯 “標(biāo)準(zhǔn)鏈接庫”中的大部分功能,不需要修改源

4、代碼;幾乎所有計(jì)算機(jī)系統(tǒng)都可以使用 c 語言)生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。1.4.1最簡單的c 語言程序舉例c 語言允許用兩種注釋方式:/:單行注釋,可單獨(dú)占一行,可出現(xiàn)在一行中其他內(nèi)容的右側(cè)。/*/:塊式注釋,可包含多行。1.4.2 c 語言程序的結(jié)構(gòu)c 語言程序的結(jié)構(gòu)特點(diǎn):1、 一個(gè)程序由一個(gè)或多個(gè)源程序文件組成(小程序往往只包括一個(gè)源程序文件,一個(gè)源程序文件中可以包括三 個(gè)部分:預(yù)處理指令、全局聲明、函數(shù)定義。)2、 函數(shù)是 c 程序的主要組成部分(一個(gè) c 程序是由一個(gè)或多個(gè)函數(shù)組成的;必須包含一個(gè) main 函數(shù)(只能有一 個(gè));每個(gè)函數(shù)都用來實(shí)現(xiàn)一個(gè)或幾個(gè)特定功能;被調(diào)用的

5、函數(shù)可以是庫函數(shù),也可以是自己編制設(shè)計(jì)的函數(shù)。) 3、一個(gè)函數(shù)包括兩個(gè)部分(函數(shù)首部、函數(shù)體(聲明部分、執(zhí)行部分)4、 程序總是從 main 函數(shù)開始執(zhí)行5、 c 程序?qū)τ?jì)算機(jī)的操作由 c 語句完成(c 程序書寫格式是比較自由的:一行內(nèi)可以寫幾個(gè)語句;一個(gè)語句可 以分寫在多行上。)6、數(shù)據(jù)聲明和語句最后必須有分號 7、c 語言本身不提供輸入輸出語句8、程序應(yīng)當(dāng)包含注釋,增加可讀性1.6程序設(shè)計(jì)的任務(wù)1.問題分析 2.設(shè)計(jì)算法 3.編寫程序 4.對源程序進(jìn)行編輯、編譯和連接 5.運(yùn)行程序,分析結(jié) 6.編寫程序文檔第二章 算法程序的靈魂一個(gè)程序主要包括以下兩方面的信息:(1) 對數(shù)據(jù)的描述。在程序

6、中要指定用到哪些數(shù)據(jù)以及這些數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,這就是數(shù)據(jù)結(jié)構(gòu)。 (2) 對操作的描述。即要求計(jì)算機(jī)進(jìn)行操作的步驟,也就是算法。數(shù)據(jù)是操作的對象,操作的目的是對數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果。著名計(jì)算機(jī)科學(xué)家沃思(nikiklaus wirth)提出一個(gè)公式:算法 + 數(shù)據(jù)結(jié)構(gòu) = 程序一個(gè)程序除了算法和數(shù)據(jù)結(jié)構(gòu)這主要要素外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行程序設(shè)計(jì),并且用某一種計(jì)算 機(jī)語言表示。算法、數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)方法和語言工具是一個(gè)程序設(shè)計(jì)人員應(yīng)具備的知識。2.1什么是算法廣義地說,為解決一個(gè)問題而采取的方法和步驟,就稱為“ 算法”。計(jì)算機(jī)算法可分為兩大類別:數(shù)值運(yùn)算算法

7、(目的是求數(shù)值解);非數(shù)值運(yùn)算算法(包括面十分廣泛,常見的是用于事務(wù)管理領(lǐng)域)2.3算法的特性一個(gè)有效算法應(yīng)該具有以下特點(diǎn):(1) 有窮性。一個(gè)算法應(yīng)包含有限的操作步驟,而不能是無限的。(2) 確定性。算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱兩可的。(3) 有零個(gè)或多個(gè)輸入。所謂輸入是指在執(zhí)行算法時(shí)需要從外界取得必要的信息。(4) 有一個(gè)或多個(gè)輸出。算法的目的是為了求解,“解” 就是輸出。沒有輸出的算法是沒有意義的。 (5) 有效性。算法中的每一個(gè)步驟都應(yīng)當(dāng)能有效地執(zhí)行,并得到確定的結(jié)果。流程圖是表示算法的較好的工具。2.4.3三種基本結(jié)構(gòu)和改進(jìn)的流程圖三種基本結(jié)構(gòu):(1)順序

8、結(jié)構(gòu) (2)選擇結(jié)構(gòu) (3)循環(huán)結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu) 直到型循環(huán)結(jié)構(gòu)2.4.5 用偽代碼表示算法偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法。用偽代碼寫算法并無固定的、嚴(yán)格的語法規(guī)則,可以用英文,也可以中英文混用。 2.4.6 用計(jì)算機(jī)語言表示算法1 1 1 1 1 1 - + - +l + -2 3 4 99 100要完成一項(xiàng)工作,包括設(shè)計(jì)算法和實(shí)現(xiàn)算法兩個(gè)部分。設(shè)計(jì)算法的目的是為了實(shí)現(xiàn)算法。例 2.19 將例 2.17 表示的算法(求多項(xiàng)式 #include int main( ) int sign=1;double deno = 2.0,sum = 1.0, term; w

9、hile (deno = 100) sign = -sign;term = sign/deno;sum = sum+term;deno = deno+1;printf (%fn,sum);return 0;的值)用 c 語言表示。592.5 結(jié)構(gòu)化程序設(shè)計(jì)方法采取以下方法保證得到結(jié)構(gòu)化的程序:(1)自頂向下;(2)逐步細(xì)化;(3)模塊化設(shè)計(jì);(4)結(jié)構(gòu)化編碼。3.1 順序程序設(shè)計(jì)舉例第三章 最簡單的 c 程序設(shè)計(jì) 5c = ( f - 32 )9例 3.1 有人用溫度計(jì)測量出用華氏法表示的溫度(如 f,今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如 c) 。c = ( f -32)解題思路:找到二者間

10、的轉(zhuǎn)換公式 f 代表華氏溫度,c 代表攝氏溫度算法: (n-s 圖)#include int main ( )float f,c;f=64.0;c=(5.0/9)*(f-32);定義 f 和 c 為單精度浮點(diǎn)型變量 指定 f 的值計(jì)算 c 的值printf(f=%fnc=%fn,f,c); 輸出 f 和 c 的值return 0;例 3.2 計(jì)算存款利息。有 1000 元,想存一年。有三種方法可選:(1)活期,年利率為 r1 (2)一年期定期,年利 率為 r2 (3)存兩次半年定期,年利率為 r3,請分別計(jì)算出一年后按三種方法所得到的本息和。 解題思路:確定計(jì)算本息和的公式。從數(shù)學(xué)知識可知:若

11、存款額為 p0,則:活期存款一年后本息和為:p1=p0(1+r1);一年期定期存款,一年后本息和為:p2=p0(1+r2);兩次半年定期存款,一年后 本息和為:p3=p0(1+r3/2)(1+r3/2)3.2.1算法:#include int main ( )float p0=1000, r1=0.0036,r2=0.0225,r3=0.0198, p1, p2, p3; p1 = p0 * (1 + r1);p2 = p0 * (1 + r2);p3 = p0 * (1 + r3/2) * (1 + r3/2);printf(”%fn%fn%fn”,p1, p2, p3);return 0;

12、常量與變量1.常量:在程序運(yùn)行過程中,其值不能被改變的量。整型常量:如 1000,12345,0,-345;實(shí)型常量:十進(jìn)制小數(shù)形式:如 0.34 -56.79 0.0,指數(shù)形式:如 12.34e3 (代表 12.34 103);字符常量:如?,轉(zhuǎn)義 字符:如n;字符串常量:如”boy”;符號常量:#define pi 3.14162.變量:在程序運(yùn)行期間,變量的值是可以改變的。變量必須先定義,后使用,定義變量時(shí)指定該變量的名字和類型。變量名和變量值是兩個(gè)不同的概念,變量名實(shí)際上是以一個(gè)名字代表的一個(gè)存儲地址。從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。3. 常

13、變量:const int a=3;4. 標(biāo)識符:一個(gè)對象的名字。語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線 3 種字符組成,且第一個(gè)字符必須為 字母或下劃線合法的標(biāo)識符:如 sum,average, _total, class, day, basic, li_ling不合法的標(biāo)識符:m.d.john,¥123,33,3d64,ab3.2.2數(shù)據(jù)類型所謂類型,就是對數(shù)據(jù)分配存儲單元的安排,包括存儲單元的長度(占多少字節(jié))以及數(shù)據(jù)的存儲形式。不同的類 型分配不同的長度和存儲形式。c 語言允許使用的數(shù)據(jù)類型:整型類型:基本整型(int 型):占 2 個(gè)或 4 個(gè)字節(jié)短整型(short int):vc+6

14、.0 中占 2 個(gè)字節(jié)長整型(long int):vc+6.0 中占 4 個(gè)字節(jié)基本類型 雙長整型(long long int):c99 新增的字符型布爾型浮點(diǎn)類型(單精度浮點(diǎn)型、雙精度浮點(diǎn)型、復(fù)數(shù)浮點(diǎn)型)枚舉類型空類型派生類型(指針類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、函數(shù)類型)3.2.3整型數(shù)據(jù)整型變量的符號屬性:整型變量的值的范圍包括負(fù)數(shù)到正數(shù);可以將變量定義為“無符號”類型;擴(kuò)充的整形類型:有符號基本整型 signed int;無符號基本整型 unsigned int;有符號短整型 signed short int;無符號短整型 unsigned short int;有符號長整型 s

15、igned long int;無符號長整型 unsigned long int有符號雙長整型 signed long long int;無符號雙長整型 unsigned long long int3.2.3字符數(shù)據(jù)類型字符是按其代碼(整數(shù))形式存儲的,c99 把字符型數(shù)據(jù)作為整數(shù)類型的一種。1.字符與字符代碼:大多數(shù)系統(tǒng)采用 ascii 字符集字母:a z,a z數(shù)字:09專門符號:29 個(gè):! ” # & ( ) *等空格符:空格、水平制表符、換行等不能顯示的字符:空(null)字符(以0表示)、警告(以a表示)、退格(以b表示)、回車(以r表示)等字符1和整數(shù)1 是不同的概念:字符1只是代

16、表一個(gè)形狀為1的符號,在需要時(shí)按原樣輸出,在內(nèi)存中以 ascii 碼形式存儲,占 1 個(gè) 字節(jié)0 0 1 1 0 0 0 1;整數(shù) 1 是以整數(shù)存儲方式(二進(jìn)制補(bǔ)碼方式)存儲的,占 2 個(gè)或 4 個(gè)字節(jié)0 0 0 0 0 0 0 0 |0 0 0 0 0 0 0 1 2.字符變量:用類型符 char 定義字符變量3.2.5 浮點(diǎn)型數(shù)據(jù)浮點(diǎn)型數(shù)據(jù)是用來表示具有小數(shù)點(diǎn)的實(shí)數(shù)。float 型(單精度浮點(diǎn)型):編譯系統(tǒng)為 float 型變量分配 4 個(gè)字節(jié);數(shù)值以規(guī)范化的二進(jìn)制數(shù)指數(shù)形式存放。 double 型(雙精度浮點(diǎn)型):編譯系統(tǒng)為 double 型變量分配 8 個(gè)字節(jié);15 位有效數(shù)字long

17、 double(長雙精度)型3.2.6 怎樣確定常量的類型字符常量:由單撇號括起來的單個(gè)字符或轉(zhuǎn)義字符。整型常量:不帶小數(shù)點(diǎn)的數(shù)值。系統(tǒng)根據(jù)數(shù)值的大小確定 int 型還是 long 型等。浮點(diǎn)型常量:凡以小數(shù)形式或指數(shù)形式出現(xiàn)的實(shí)數(shù)。c 編譯系統(tǒng)把浮點(diǎn)型常量都按雙精度處理;分配 8 個(gè)字節(jié) 3.2.7 運(yùn)算符和表達(dá)式3、算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性:用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接起來的、符合語法規(guī)則的式子,稱為算術(shù)表達(dá)式 運(yùn)算對象包括常量、變量、函數(shù)等語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性4、不同類型數(shù)據(jù)間的混合運(yùn)算:(1) +、-、*、/ 運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為 float

18、 或 double 型,結(jié)果是 double 型。系統(tǒng)將 float 型數(shù)據(jù)都先 轉(zhuǎn)換為 double 型,然后進(jìn)行運(yùn)算(2) 如果 int 型與 float 或 double 型數(shù)據(jù)進(jìn)行運(yùn)算,先把 int 型和 float 型數(shù)據(jù)轉(zhuǎn)換為 double 型,然后進(jìn)行 運(yùn)算,結(jié)果是 double 型(3) 字符型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字符的 ascii 代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算例 3.3 給定一個(gè)大寫字母,要求用小寫字母輸出。#include int main ( )char c1,c2;c1=a;c2=c1+32;printf(%cn,c2);printf(”%dn”,c2);retur

19、n 0;5、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的一般形式為:(類型名)(表達(dá)式)(double)a (將轉(zhuǎn)換成 double 類型)(int) (x+y) (將 x+y 的值轉(zhuǎn)換成 int 型)(float)(5%3)(將 5%3 的值轉(zhuǎn)換成 float 型)有兩種類型轉(zhuǎn)換:系統(tǒng)自動(dòng)進(jìn)行的類型轉(zhuǎn)換;強(qiáng)制類型轉(zhuǎn)換3.3.1 c 語句的作用與分類語句分為以下 5 類:(1) 控制語句: if、switch、for、while、dowhile、continue、break、return、goto 等(2) 函數(shù)調(diào)用語句 (3)表達(dá)式語句 (4)空語句 (5)復(fù)合語句在 c 程序中,最常用的語句是:

20、賦值語句;輸入輸出語句。其中最基本的是賦值語句。例 3.4 給出三角形的三邊長,求三角形面積。#include #include int main ( ) double a,b,c,s,area;a =3.67;b =5.43;c =6.21;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(a=%ftb=%ft%fn,a,b,c);printf(area=%fn,area);return 0;3.4.1 數(shù)據(jù)的輸入輸出舉例例 3.5 求 ax2 + bx + c = 0 方程的根。a、b、c 由鍵盤輸入,設(shè) b2 -4ac#include #i

21、nclude int main ( )double a,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,&a,&b,&c);disc=b*b-4*a*c;p =-b/(2.0*a);q =sqrt(disc)/(2.0*a);x1=p+q; x2=p-q;printf(x1=%7.2fnx2=%7.2fn,x1,x2);return 0;3.4.2 有關(guān)數(shù)據(jù)輸入輸出的概念幾乎每一個(gè) c 程序都包含輸入輸出,輸入輸出是程序中最基本的操作之一。(1) 所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的:從計(jì)算機(jī)向輸出設(shè)備(如顯示器、打印機(jī)等)輸出數(shù)據(jù)稱為輸出從輸入設(shè)備(如鍵盤、磁盤、光盤

22、、掃描儀等)向計(jì)算機(jī)輸入數(shù)據(jù)稱為輸入(2) 語言本身不提供輸入輸出語句,輸入和輸出操作是由 c 標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)來實(shí)現(xiàn)的。printf 和 scanf 不 是語言的關(guān)鍵字,而只是庫函數(shù)的名字(3) 在使用輸入輸出函數(shù)時(shí),要在程序文件的開頭用預(yù)編譯指令#include 或#include stdio.h 3.4.3 用 printf 函數(shù)輸出數(shù)據(jù)在 c 程序中用來實(shí)現(xiàn)輸出和輸入的,主要是 printf 函數(shù)和 scanf 函數(shù)。這兩個(gè)函數(shù)是格式輸入輸出函數(shù),用這 兩個(gè)函數(shù)時(shí),必須指定格式。1.printf 函數(shù)的一般格式,printf(格式控制,輸出表列)例如:printf(”i=%d,c=%

23、cn”,i,c);2.常用格式字符:格式符:用來輸出一個(gè)有符號的十進(jìn)制整數(shù)??梢栽诟袷铰暶髦兄付ㄝ敵鰯?shù)據(jù)的域?qū)抪rintf(”%5d%5dn”,12,-345);%d 輸出 int 型數(shù)據(jù);%ld 輸出 long 型數(shù)據(jù)。格式符。用來輸出一個(gè)字符,char ch=a;printf(”%c”,ch);或 printf(”%5c”,ch) 格式符。用來輸出一個(gè)字符串,printf(”%s”,”china”);f 格式符。用來輸出實(shí)數(shù),以小數(shù)形式輸出。1 不指定數(shù)據(jù)寬度和小數(shù)位數(shù),用%f;2 指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用%m.nf;3 輸出的數(shù)據(jù)向左對齊,用%-m.nfe 格式符。指定以指數(shù)形式輸出實(shí)

24、數(shù)。%e,vc+給出小數(shù)位數(shù)為位,指數(shù)部分占 5 列,小數(shù) 點(diǎn)前必須有而且只有 1 位非零數(shù)字。 printf(”%e ”,123.456);輸出: 1.234560 e+002。%m.ne,printf(”%13.2e”,123.456);輸出: 1.23e+002 (前面有 4 個(gè)空格)3.4.4 用 scanf 函數(shù)輸入數(shù)據(jù)1. scanf 函數(shù)的一般形式:scanf(格式控制,地址表列)2. scanf 函數(shù)中的格式聲明:與 printf 函數(shù)中的格式聲明相似;以開始,以一個(gè)格式字符結(jié)束,中間可以插 入附加的字符,scanf(a=%f,b=%f,c=%f,&a,&b,&c);3. 使用

25、 scanf 函數(shù)時(shí)應(yīng)注意的問題3.4.5 字符數(shù)據(jù)的輸入輸出1.用 putchar 函數(shù)輸出一個(gè)字符,從計(jì)算機(jī)向顯示器輸出一個(gè)字符,putchar 函數(shù)的一般形式為:putchar(c) 例 3.8 先后輸出 boy 三個(gè)字符。#include int main ( )char a=b,b=o,c=y;putchar(a);putchar(b);putchar(c);putchar (n);return 0;2.用 getchar 函數(shù)輸入一個(gè)字符,向計(jì)算機(jī)輸入一個(gè)字符,getchar 函數(shù)的一般形式為:getchar( )例 3.9 從鍵盤輸入 boy 三個(gè)字符,然后把它們輸出到屏幕。#i

26、nclude int main ( ) char a,b,c;a =getchar();b =getchar();c =getchar();putchar(a); putchar(b); putchar(c);putchar(n);return 0;2 2第四章 選擇結(jié)構(gòu)程序設(shè)計(jì)4.1 選擇結(jié)構(gòu)和條件判斷c 語言有兩種選擇語句:(1)if 語句,實(shí)現(xiàn)兩個(gè)分支的選擇結(jié)構(gòu);(2)switch 語句,實(shí)現(xiàn)多分支的選擇結(jié)構(gòu)例 4.1 在例 3.5 的基礎(chǔ)上對程序進(jìn)行改進(jìn)。題目要求是求 ax2 + bx + c = 0 方程的根。由鍵盤輸入 a,b,c。假設(shè) a,b,c 的值任意,并不保證 b - 4a

27、c 0。需要在程序中進(jìn)行判別,如果 b - 4ac 0,就計(jì)算并輸出方程的兩個(gè)實(shí)根,否則就輸出“方程無實(shí)根”的信息。#include #include int main ( )double a,b,c,disc,x1,x2,p,q;scanf(%lf%lf%lf,&a,&b,&c);disc=b*b-4*a*c;if (disc0)printf(“has not real rootsn”);else p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“real roots:nx1=%7.2fnx2=%7.2fn”,x1,x2);ret

28、urn 0;4.2.1 用 if 語句處理選擇結(jié)構(gòu)舉例例 4.2 輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大的順序輸出這兩個(gè)數(shù)。#include int main() float a,b,t;scanf(%f,%f,&a,&b);if(ab) t=a;a =b;b =t;printf(%5.2f,%5.2fn,a,b);return 0;例 4.3 輸入 3 個(gè)數(shù) a,b,c,要求按由小到大的順序輸出。#include int main() float a,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t;

29、if(bc) t=b; b=c; c=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c);return 0;4.2.2 if 語句的一般形式if (表達(dá)式) 語句 1 else 語句 2 最常用的 3 種 if 語句形式:1. if (表達(dá)式) 語句 1 (沒有 else 子句)2. if (表達(dá)式) 語句 1else 語句 2 (有 else 子句)3. if(表達(dá)式) 語句else if(表達(dá)式) 語句else if(表達(dá)式) 語句else if(表達(dá)式) 語句else 語句 m+1 (在 else 部分又嵌套了多層的 if 語句)說明:(1)整個(gè) if 語句可寫在多行

30、上,也可寫在一行上,但都是一個(gè)整體,屬于同一個(gè)語句;(2) “語句 1”“語句 m”是 if 中的內(nèi)嵌語句,內(nèi)嵌語句也可以是一個(gè) if 語句;(3) “語句 1”“語句 m”可以是簡單的語句,也可以是復(fù)合語句。4.3.1 關(guān)系運(yùn)算符及其優(yōu)先次序關(guān)系運(yùn)算符:用來對兩個(gè)數(shù)值進(jìn)行比較的比較運(yùn)算符語言提供種關(guān)系運(yùn)算符:(小于) =(小于或等于) 大于) =大于或等于)【優(yōu)先級相同(高)】 = (等于) != (不等于)【優(yōu)先級相同(低)】關(guān)系、算術(shù)、賦值運(yùn)算符的優(yōu)先級:算數(shù)運(yùn)算符 關(guān)系運(yùn)算符 賦值運(yùn)算符4.3.2 關(guān)系表達(dá)式關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個(gè)數(shù)值或數(shù)值表達(dá)式連接起來的式子;關(guān)系表達(dá)式的值是

31、一個(gè)邏輯值,即“真” 或“假”;在 c 的邏輯運(yùn)算中,以“”代表“真”,以“”代表“假”4.4.1 邏輯運(yùn)算符及其優(yōu)先次序3 種邏輯運(yùn)算符:&(邏輯與) |(邏輯或) !(邏輯非)&和|是雙目(元)運(yùn)算符!是一目(元)運(yùn)算符邏輯表達(dá)式(用邏輯運(yùn)算符將關(guān)系表達(dá)式或其他邏輯量連接起來的式子) 邏輯運(yùn)算的真值表邏輯運(yùn)算符的優(yōu)先次序:! & | (!為三者中最高)與其他運(yùn)算符的優(yōu)先次序:賦值運(yùn)算符 &和| 關(guān)系運(yùn)算符 算數(shù)運(yùn)算符 b)max=a;elsemax=b;條件運(yùn)算符的執(zhí)行順序:求解表達(dá)式 1;若為非 0(真)則求解表達(dá)式 2,此時(shí)表達(dá)式 2 的值就作為整個(gè)條件 表達(dá)式的值;若表達(dá)式 1 的值

32、為 0(假),則求解表達(dá)式 3,表達(dá)式 3 的值就是整個(gè)條件表達(dá)式的值條件運(yùn)算符優(yōu)先于賦值運(yùn)算符;條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆薄@?4.4 輸入一個(gè)字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后 得到的字符。#include int main()char ch;scanf(%c,&ch);ch=(ch=a & ch=z)?(ch+32):ch;printf(%cn,ch);return 0;4.6 選擇結(jié)構(gòu)的嵌套在 if 語句中又包含一個(gè)或多個(gè) if 語句稱為 if 語句的嵌套。一般形式: if( ) else 總是與它上面最 if()if( ) 語

33、句 1 近的未配對的 if 配對 else 語句 2 if()語句 1 內(nèi)嵌 ifelse內(nèi)嵌 if if( ) 語句 3 else 語句 2 限定了內(nèi)嵌 if 范圍 else 語句 4-1 (x 0)解題思路:方法 1 (1) 先后用 3 個(gè)獨(dú)立的 if 語句處理:輸入 x scanf(%d,&x);若 x 0, 則 y =-1 if(x 0, 則 y = 1 if(x0) y = 1;輸出 x 和 y printf(x=%d,y=%dn,x,y); 方法 2 (2) 用一個(gè)嵌套的 if 語句處理:輸入 x scanf(%d,&x);若 x 0, 則 y = -1 if(x0) y=-1;否

34、則 else若 x = 0, 則 y = 0 if(x=0) y=0;否則 y = 1 else y=1;輸出 x 和 y printf(x=%d,y=%dn,x,y);4.7 用 switch 語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)例 4.6 、例 4.7switch 語句的作用是根據(jù)表達(dá)式的值,使流程跳轉(zhuǎn)到不同的語句.switch 語句的一般形式 4.8 選擇結(jié)構(gòu)程序綜合舉例例 4.8 寫一程序,判斷某一年是否閏年。#include int main() int year,leap;printf(enter year:); scanf(%d,&year);if (year%4=0)if(year%100=

35、0)if(year%400=0) leap=1;else leap=0;else leap=1;else leap=0;if (leap) printf(%d is ,year);else printf(%d is not ,year);printf(a leap year.n);return 0;例 4.9 求 ax2 + bx + c = 0 方程的解。#include #include int main()double a,b,c,disc,x1,x2,realpart,imagpart;scanf(%lf,%lf,%lf,&a,&b,&c);printf(the equation );

36、if(fabs(a)=1e-6)printf(is not a quadraticn);elsedisc=b*b-4*a*c;if(fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(has distinct real roots:%8.4fand %8.4fn,x1,x2);else realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf( has complex roots:n);printf(%8.4f+%8.4fin“,realpart,imagpar

37、t);printf(%8.4f-%8.4fin,realpart,imagpart);return 0;例 4.10 運(yùn)輸公司對用戶計(jì)算運(yùn)輸費(fèi)用。路程(s km)越遠(yuǎn),每噸千米運(yùn)費(fèi)越低。 標(biāo)準(zhǔn)如下: #include s 250沒有折扣 int main()250s 500 2折扣 500s 1000 5折扣 int c,s;1000s 2000 8折扣 float p,w,d,f;2000s =3000) c=12;else c=s/250;n =1f = p * w * s * (1 - d / 100);printf(“freight=%10.2fn”,f);return 0; 第五章

38、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)大多數(shù)的應(yīng)用程序都會包含循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)、選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu),它們 是各種復(fù)雜程序的基本構(gòu)造單元。5.2用 while語句實(shí)現(xiàn)循環(huán)while 語句的一般形式如下:while ( 表達(dá)式 )語句循環(huán)體“100真”時(shí)執(zhí)行循環(huán)體語句n“假”時(shí)不執(zhí)行while 循環(huán)的特點(diǎn)是:先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語句。 例 5.1 求 1+2+3+100,即#include int main()int i=1,sum=0;while (i=100) sum=sum+i;i+;printf(sum=%dn,sum);return 0;5.3用 dowhile語句實(shí)

39、現(xiàn)循環(huán)do-while 語句的特點(diǎn):先無條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。一般形式為: do語句 while (表達(dá)式);例 5.2 用 dowhile 語句求: 1+2+3+100#include int main() int i=1,sum=0;dosum=sum+i;i+;while(i=100);printf(sum=%dn,sum);return 0;例 5.3 while 和 do-while 循環(huán)的比較。int i,sum=0; printf(“i=? ”); scanf(“%d”,&i); while(i=10)sum=sum+i;i+;當(dāng) while 后面 的表達(dá)式

40、的 第一次的值 為“真”時(shí), 兩種循環(huán)得到 的結(jié)果相同; 否則不相同。int i,sum=0; printf(“i=?”); scanf(“%d”,&i); dosum=sum+i;i+; while(i=10);printf(“sum=%dn,sum); printf( “sum=%dn,sum);5.4 用 for 語句實(shí)現(xiàn)循環(huán)for 語句不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況。 for 語句完全可以代替 while 語句。for 語句的一般形式為:for(表達(dá)式 1;表達(dá)式 2;表達(dá)式 3)語句設(shè)置初始條件,只執(zhí) 循環(huán)條件表達(dá)式,用來判定是

41、否 作為循環(huán)的調(diào)整器,例如 行一次??梢詾榱銈€(gè)、 繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前 使循環(huán)變量增值,它是在 一個(gè)或多個(gè)變量設(shè)置 先執(zhí)行此表達(dá)式,決定是否繼續(xù) 執(zhí)行完循環(huán)體后才進(jìn)行的。初值執(zhí)行。執(zhí)行循環(huán)。for 語句的執(zhí)行過程:(1) 先求解表達(dá)式 1(2) 求解表達(dá)式 2,若其值為真,執(zhí)行循環(huán)體,然后執(zhí)行下面第(3)步。若為假,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步 (3) 求解表達(dá)式 3(4) 轉(zhuǎn)回上面步驟(2)繼續(xù)執(zhí)行(5) 循環(huán)結(jié)束,執(zhí)行 for 語句下面的一個(gè)語句5.5循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。 3 種循環(huán)(while

42、 循環(huán)、dowhile 循環(huán)和 for 循環(huán))可以互相嵌套。5.7用 break 語句提前終止循環(huán)break 語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句例 5.4 在全系 1000 學(xué)生中,征集慈善募捐,當(dāng)總數(shù)達(dá)到 10 萬元時(shí)就結(jié)束,統(tǒng)計(jì)此時(shí)捐款的人數(shù),以及平均每人 捐款的數(shù)目。#include #define sum 100000int main() float amount,aver,total; int i;for (i=1,total=0;i=sum) break;aver=total / i ; printf(“num=%dnaver=%10.2fn”

43、,i,aver); return 0;5.7.2用 continue語句提前結(jié)束本次循環(huán)有時(shí)不希望終止整個(gè)循環(huán)的操作,而只希望提前結(jié)束本次循環(huán),而接著執(zhí)行下次循環(huán)。這時(shí)可以用 continue 語句。 例 5.5 要求輸出 100200 之間的不能被 3 整除的數(shù)。for(n=100;n=200;n+) if (n%3=0)continue;printf(%d ,n);5.7.3 break語句和 continue語句的區(qū)別continue 語句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行 break 語句結(jié)束整個(gè)循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立 例 5.6 輸出以下 4*5 的矩陣。1

44、2 3 4 52 4 6 8 103 6 9 12 154 8 12 16 20#include int main() int i,j,n=0;5.8for (i=1;i=4;i+)for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j);printf(n);ppreturn 0;循環(huán)程序舉例控制輸出 4 行控制每行中輸出 5 個(gè)數(shù)據(jù)例 5.7 用/4 1-1/3 +1/5-1/7+ 公式求的近似值,直到發(fā)現(xiàn)某一項(xiàng)的絕對值小于 10-6為止(該項(xiàng)不累計(jì)加)。#include #include int main() int sig

45、n=1; double pi=0,n=1,term=1; while(fabs(term)=1e-6) pi=pi+term;n=n+2;ssss =-sign;tttt =sign/n;pi=pi*4;printf(pi=%10.8fn,pi);12f =f + freturn 0;例 5.8 求費(fèi)波那西(fibonacci)數(shù)列的前 40 個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1、2 兩個(gè)數(shù)為 1、1。從第 3 個(gè)數(shù)開始, 該數(shù)是其前面兩個(gè)數(shù)之和。即:f =1f =1n n-1 n-2(n=1)(n=2) (n3)這是一個(gè)有趣的古典數(shù)學(xué)問題:有一對兔子,從出生后第3 個(gè)月起每個(gè)月都生一對兔子。小兔子

46、長到第 3 個(gè)月后 每個(gè)月又生一對兔子。假設(shè)所有兔子都不死,問每個(gè)月的兔子總數(shù)為多少?#include #include int main() int main() int f1=1,f2=1,f3; int i; int f1=1,f2=1; int i;printf(%12dn%12dn,f1,f2); for(i=1; i=20; i+)for(i=1; i=38; i+) printf(%12d %12d ,f1,f2); f3=f1+f2; if(i%2=0) printf(n);printf(%12dn,f3); f1=f1+f2;f1=f2; f2=f2+f1;f2=f3; re

47、turn 0;return 0; 例 5.9 輸入一個(gè)大于 3 的整數(shù) n,判定它是否素?cái)?shù)(prime,又稱質(zhì)數(shù))。#include int main() int n,i;printf(“n=?); scanf(%d,&n);for (i=2;i=n-1;i+)if(n%i=0) break;if(in) printf(%d is notn,n);else printf(%d isn,n);return 0;例 5.10 求 100200 間的全部素?cái)?shù)。for(n=101;n=200;n=n+2) k=sqrt(n);for (i=2;i=k+1) printf(%d ,n);m=m+1;if

48、(m%10=0) printf(“n”);例 5.11 譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收報(bào)人再按約定的規(guī)律將其譯回原文。 解題思路:問題的關(guān)鍵有兩個(gè):(1) 決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應(yīng)改為哪個(gè)字符處理的方法是:輸入一個(gè)字符給字符變量 c,先判定它是否字母(包括大小寫),若不是字母,不改變 c 的值;若是 字母,則還要檢查它是否w到z的范圍內(nèi)(包括大小寫字母)。如不在此范圍內(nèi),則使變量 c 的值改變?yōu)槠?后第 4 個(gè)字母。如果在w到z的范圍內(nèi),則應(yīng)將它轉(zhuǎn)換為 ad(或 ad)之一的字母。(2) 怎樣使 c 改變?yōu)樗付ǖ淖帜??辦法是改變它的 ascii 值例如字符變量 c 的原值是大寫字母a,想使 c 的值改變?yōu)閑,只需執(zhí)行“c=c+4”即可,因?yàn)閍的 ascii 值為 65,而e 的 ascii 值為 69,二者相差 4char c;c=getchar();while(c!=n) if(c=a & c=a & c=w & c=w & c=a & c=a & c=z & cz)c=c-26;printf(%c,c);第六章利用數(shù)組處理批量數(shù)據(jù)數(shù)組

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論