C語(yǔ)言程序設(shè)計(jì)PPT_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)PPT_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)PPT_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)PPT_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)PPT_第5頁(yè)
已閱讀5頁(yè),還剩429頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、c語(yǔ)言程序設(shè)計(jì) copyer:vigiking,1,第一章 計(jì)算機(jī)語(yǔ)言與c語(yǔ)言概述,1.1 計(jì)算機(jī)語(yǔ)言概念 計(jì)算機(jī)語(yǔ)言定義 計(jì)算機(jī)能夠識(shí)別和接受的語(yǔ)言。 要使計(jì)算機(jī)按自己的意圖工作,必須使用計(jì)算機(jī)所能接受、理解和執(zhí)行的指令指揮計(jì)算機(jī)工作,2,計(jì)算機(jī)語(yǔ)言的種類 機(jī)器語(yǔ)言 低級(jí)語(yǔ)言 匯編語(yǔ)言 (面向計(jì)算機(jī)) basic 入門語(yǔ)言 f77 科學(xué)計(jì)算 高級(jí)語(yǔ)言 foxpro 數(shù)據(jù)庫(kù)管理 (面向問(wèn)題 ) c 多用途,計(jì)算機(jī)語(yǔ)言,3,機(jī)器語(yǔ)言 最早問(wèn)世,用二進(jìn)制代碼構(gòu)成指令。 如: 100000 (+) 110000 (-) 用機(jī)器語(yǔ)言編程的缺點(diǎn): 繁瑣、不直觀、不易調(diào)試。 如計(jì)算y=2x2+3x-1需要

2、七八條指令。 移植性差。 依賴于計(jì)算機(jī),4,匯編語(yǔ)言 用符號(hào)構(gòu)成指令,如:mov、add 用匯編語(yǔ)言編程: 相對(duì)直觀,但仍繁瑣,仍是面向計(jì)算機(jī)的語(yǔ)言。 匯編語(yǔ)言是計(jì)算機(jī)間接接受的語(yǔ)言,5,高級(jí)語(yǔ)言 與低級(jí)語(yǔ)言相比,有根本性的區(qū)別: 是面向問(wèn)題的語(yǔ)言。 高級(jí)語(yǔ)言的一條指令(語(yǔ)句): y=2*x*x+3*x-1; 對(duì)應(yīng)于:y=2x2+3x-1 y=sin(x); 對(duì)應(yīng)于:y=sinx 用高級(jí)語(yǔ)言編程: 直觀、易懂、移植性好(不依賴于具體計(jì)算機(jī),6,上機(jī)運(yùn)行高級(jí)語(yǔ)言程序需經(jīng)過(guò)編譯: 編譯 執(zhí)行 要上機(jī)完成一個(gè)計(jì)算問(wèn)題,主要的任務(wù)就是用高級(jí)語(yǔ)言編寫出相應(yīng)的源程序。即至少要學(xué)會(huì)一種計(jì)算機(jī)語(yǔ)言,高級(jí)語(yǔ)言源

3、程序,機(jī)器指令 目的程序,結(jié)果,編譯程序,7,1.2 c語(yǔ)言的特點(diǎn) 集高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的優(yōu)點(diǎn)于一身: 能實(shí)現(xiàn)低級(jí)語(yǔ)言的大部分功能(如直接訪問(wèn)內(nèi)存物理地址、進(jìn)行位操作等)。 圖形功能強(qiáng)。 運(yùn)算符和數(shù)據(jù)結(jié)構(gòu)豐富。 語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。 生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高,8,1.3 簡(jiǎn)單的c程序介紹 例1: main() 主函數(shù)說(shuō)明 程序框架 printf(“abcdef”); 函數(shù)體 語(yǔ)句 程序的功能是輸出字符串:abcdef,9,例2:求兩數(shù)之和。 main() int a,b,c; a a=100; b=50; b c=a+b; c printf(“n c=%d”,c);

4、程序運(yùn)行結(jié)果:c=150,10,例3:求兩數(shù)中的最大值。 函數(shù)類型 函數(shù)名 形參 main() int max (int x,int y) int a,b,c; int z; scanf(“%d,%d”, a x b y c z (兩個(gè)函數(shù)組成,3,5,3,5,5,5,11,總結(jié)上例可知: (1) c程序由函數(shù)構(gòu)成。 (2) 函數(shù)由兩部分組成: 函數(shù)說(shuō)明部分:函數(shù)名、函數(shù)類型、形參名、形參類型。 函數(shù)體:實(shí)現(xiàn)函數(shù)的具體操作;由語(yǔ)句構(gòu)成。 (3) 程序總是從main函數(shù)開(kāi)始執(zhí)行。 (4) 書寫格式自由。 (5)語(yǔ)句必須有分號(hào)。,12,第二章 算法 2.1 算法的概念 要利用計(jì)算機(jī)處理問(wèn)題,光學(xué)習(xí)

5、語(yǔ)言的語(yǔ)法規(guī)則還不夠,最重要的是要學(xué)會(huì)針對(duì)各類型的問(wèn)題,擬定出有效的解題方法和步驟。解題方法和步驟就是算法,13,算法: 為了解決一個(gè)問(wèn)題而采取的有限步驟。 計(jì)算機(jī)算法: 如何使計(jì)算機(jī)一步一步地工作的具體過(guò)程,14,利用計(jì)算機(jī)處理問(wèn)題的步驟: 1)設(shè)計(jì)好算法算法設(shè)計(jì); 2)用計(jì)算機(jī)語(yǔ)言實(shí)現(xiàn)算法程序設(shè)計(jì)。 算法必須是“有效”的。 算法設(shè)計(jì)還要充分考慮算法的好壞。 衡量算法好壞的主要標(biāo)準(zhǔn): 程序簡(jiǎn)練。 執(zhí)行速度快。 占空間少,15,例:考慮 的算法。 算法:直接表達(dá)。 直接用語(yǔ)句 s=1+2+3+4+5+6+7+8+9+10,當(dāng)項(xiàng)數(shù)較多時(shí)該算法不適用,s=i,1,10,16,算法:迭代法(累加求和

6、法) s=1+2+3+4+5+6+7+8+9+10 算法步驟: s i 使s=0 + 使i=1 累加器 記數(shù)器 s+is i+1i 若i10轉(zhuǎn),否則轉(zhuǎn) 輸出s,0,1,1,2,3,3,6,4,10,5,該算法通用,是好算法,17,2.2 算法的表示 算法需要有統(tǒng)一的表示方法 常用的表示方法有: 自然語(yǔ)言 流程圖 結(jié)構(gòu)化流程圖 n-s流程圖,18,1、自然語(yǔ)言 對(duì)于計(jì)算 s=1+2+3+4+5+6+7+8+9+10 用自然語(yǔ)言表示為: 使s=0 (s為累加器) 使i=1 (i為計(jì)數(shù)器) s+is (累加求和公式) i+1i (計(jì)數(shù)器加1) 若i10轉(zhuǎn),否則轉(zhuǎn) 輸出s的值 特點(diǎn):通俗易懂、文字冗長(zhǎng)

7、、含義不大嚴(yán)格,19,2、流程圖 用流程圖符號(hào)表示算法。 常用的流程圖符號(hào) 起止框 輸入輸出框 處理框 流程線 判斷框,20,對(duì)于計(jì)算 s=1+2+3+4+5+6+7+8+9+10 用流程圖表示為,s+i s,i+1 i,s+i s,s+i s,i10,輸出s,0 s,1 i,直觀形象,易于理解,次序清楚,y,n,21,3、結(jié)構(gòu)化流程圖 傳統(tǒng)的流程圖有一個(gè)弊端:對(duì)流程線沒(méi)有嚴(yán)格的限制,對(duì)于較復(fù)雜的算法可能會(huì)變成亂麻一般(bs型算法)。 為克服這一弊端,提出了由三個(gè)基本結(jié)構(gòu)組成算法流程圖的思想: 結(jié)構(gòu)化流程圖,22,三個(gè)基本結(jié)構(gòu): 順序結(jié)構(gòu) 按固定順序(從上到下或從左到右)執(zhí)行的結(jié)構(gòu),a,b,a

8、,b,23,選擇結(jié)構(gòu) 根據(jù)條件p選擇執(zhí)行哪一個(gè)分支。 成立 不成立,p,a,b,a,b,成立,不成立,24,例:計(jì)算 y= 1/x 當(dāng)x0時(shí) y= 10000 當(dāng)x=0時(shí) 的算法流程圖圖: 選擇結(jié)構(gòu),輸入x,x=0,10000y,1/xy,輸出y,y,n,25,循環(huán)結(jié)構(gòu) 重復(fù)執(zhí)行某些操作的結(jié)構(gòu)。 分為兩種: 當(dāng)型循環(huán)和直到型循環(huán)。 當(dāng)型循環(huán) 直到型循環(huán),p1,a,a,p2,a,a,b,b,y,y,n,n,26,可以看出,每個(gè)基本結(jié)構(gòu)都只有一個(gè)入口和一個(gè)出口,因此,用三個(gè)基本結(jié)構(gòu)構(gòu)成的流程圖不會(huì)象亂麻一般,用三個(gè)基本結(jié)構(gòu)構(gòu)成的流程圖就成為結(jié)構(gòu)化流程圖,用結(jié)構(gòu)化流程圖描述的算法稱為結(jié)構(gòu)化算法,相應(yīng)

9、的程序設(shè)計(jì)就稱為結(jié)構(gòu)化程序設(shè)計(jì),27,觀察前例,0 s,1 i,s+i s,i+1 i,i10,輸出s,順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),y,n,28,4 n-s流程圖 n-s流程圖的三個(gè)基本結(jié)構(gòu),a,b,p,成立,不成立,a,b,a,b,當(dāng)p1,直到p2,順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu),29,例:計(jì)算 y= 1/x 當(dāng)x0時(shí) y= 10000 當(dāng)x=0時(shí) 的n-s流程圖,輸入x,x=0,是,否,10000y 1/xy,輸出y,30,例: 計(jì)算 s=1+2+3+4+5+6+7+8+9+10 的n-s流程圖: i10 直到i10 直到型 當(dāng)型,0 s,1 i,輸出s,1 i,0 s,s+i s,i+1 i,s+

10、i s,i+1 i,輸出s,31,第三章 數(shù)據(jù)類型、運(yùn)算符 與 表達(dá)式 3.1 c 的數(shù)據(jù)類型基本類型 (整型、實(shí)型、字符型、枚舉型)構(gòu)造類型 (略)指針類型 (略) 空類型 各類型包含常量與變量,32,3.2 常量與變量 常量與符號(hào)常量 常量 在程序運(yùn)行過(guò)程中其值保持不變的量。 符號(hào)常量 用來(lái)代表一個(gè)常量的標(biāo)識(shí)符。 #define pi 3.1415926,33,例: #define pi 3.1415926 main() float r=2,c; c=2*pi*r; printf(“%f”,c);,34,變量 其值可以改變的量。 變量的三要素: 變量名 每個(gè)變量有一個(gè)名字,作為識(shí)別該變量的

11、標(biāo)識(shí)符。 變量的值 每個(gè)變量有一個(gè)值,變量的值是隨時(shí)可以改變的,35,變量的存儲(chǔ)單元 每個(gè)變量占據(jù)一個(gè)內(nèi)存單元,用于存放變量的值。 變量名 a 變量值 存儲(chǔ)單元,3,36,變量的命名規(guī)則: 由字母、數(shù)字和下劃線組成 以字母或下劃線開(kāi)頭 a、x1、y_2、_b1、_1c 合法 1x、a+2、 不合法 變量必須先定義后使用。 程序中何時(shí)使用常量?何時(shí)使用變量,37,3.3 整型數(shù)據(jù) 整型常量 即整常數(shù),c的整常數(shù)有三種形式: 十進(jìn)制整數(shù) 與數(shù)學(xué)中的整數(shù)一致,如:100,123,15等。 八進(jìn)制整數(shù) 以0開(kāi)頭的整數(shù),如:010,07,020等。 十六進(jìn)制整數(shù) 以0 x開(kāi)頭的整數(shù),如:0 x10,0

12、xff,0 x2a等,38,整型變量 用于存放整數(shù)的變量。 分4種類型: 基本型:int a 16位,可表示的數(shù)值范圍:-3276832767 短整型:short int b 16位,可表示的數(shù)值范圍:-3276832767 長(zhǎng)整型:long int c 32位,數(shù)值范圍:-21474836482147483647,39,無(wú)符號(hào)型:加上 unsigned 只存放正數(shù)。 如:unsigned int x 變量x為無(wú)符號(hào)整數(shù),16位全表示數(shù)碼, 數(shù)值范圍:065535 在程序設(shè)計(jì)中,如果要使用整型變量,必須首先選擇以上類型符來(lái)定義變量,然后才能使用,40,例: main() 定義 int a,b,

13、c; a=100; b=50; 使用 c=a+b; printf(“%d”,c); 一般根據(jù)什么原則選擇變量的類型,41,3.4 實(shí)型數(shù)據(jù) 實(shí)型常量 可使用兩種形式表示: 小數(shù)形式:如 1.23, 3.1415926 15.48 指數(shù)形式:如 1e-20 1.23e5,42,實(shí)型變量 用于存放實(shí)數(shù)的變量 分單精度和雙精度兩種: float a,b 定義a和b為單精度型變量 32位,7位有效數(shù)字,10-381038 double x,y 定義x和y為雙精度型變量 64位,15位有效數(shù)字,10-30810308,43,例: main() float r,c; double r,c; r=5; c=

14、2*3.1415926*r; printf(“%f”,c);,44,3.5 字符型數(shù)據(jù) 字符常量 用單引號(hào)括起來(lái)的一個(gè)字符。 a,x,*,1等 除此外,以開(kāi)頭的字符如n,t等 稱為轉(zhuǎn)義字符,祥見(jiàn)書表3.3,45,字符型變量 用于存放字符的變量。 char c1,c2 定義c1和c2為字符型變量 c1=a; c2=b; 字符賦值 字符型變量存放一個(gè)字符,占據(jù)一個(gè)字節(jié),46,字符型數(shù)據(jù)的存儲(chǔ)形式 存放ascii碼 不是 而是 如字符a在內(nèi)存中存放97,b 存放98。 與整數(shù)的存儲(chǔ)形式一致,它們之間可以通用 一個(gè)字符數(shù)據(jù)既可以作字符用,也可以作整數(shù)用(取其ascii代碼)。 如:32+a相當(dāng)于 32

15、+97 若 int x; char c; 則 x=a; c=97; x=97; c=a; 都允許,a,97,47,字符串常量 用雙引號(hào)括起來(lái)的字符序列。 如:”abcde”,”china” ”a”也屬字符串。 注意”a”與a的區(qū)別。 對(duì)于: char c; c=”a”; 用法錯(cuò)誤,48,字符串中每個(gè)字符各占一個(gè)字節(jié),并且在字符串結(jié)尾加上一個(gè)結(jié)束標(biāo)記0 如:”china” 在內(nèi)存中占6個(gè)字節(jié)。 c h i n a 0 c語(yǔ)言中專門的字符串變量,可用字符數(shù)組存放(以后介紹,49,3.6 變量賦初值 在定義變量的同時(shí)給相應(yīng)的變量賦初值。 如: int a=3; a float b=5.2; char

16、 c=a; int x=y=z=6; 效果: 在給變量分配內(nèi)存單元的同時(shí)在相應(yīng)的單 元中存放初值,3,50,3.7 各數(shù)值型數(shù)據(jù)間的混合運(yùn)算 整型、實(shí)型、字符型數(shù)據(jù)間可以進(jìn)行混合運(yùn)算,如: 10-a*1.5 運(yùn)算時(shí),參加運(yùn)算的兩個(gè)數(shù)據(jù)如果類型不同,則首先將其類型轉(zhuǎn)換成一致再運(yùn)算,轉(zhuǎn)換規(guī)則是: 將優(yōu)先級(jí)低的類型轉(zhuǎn)換到優(yōu)先級(jí)高的類型,51,數(shù)據(jù)類型的優(yōu)先級(jí): 高 double float long unsignde 低 int char,52,3.8 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 基本的算術(shù)運(yùn)算符 + - * / % 算術(shù)表達(dá)式 用算術(shù)運(yùn)算符將運(yùn)算對(duì)象連接起來(lái)的式子 用于表達(dá)數(shù)學(xué)公式的式子 如:2*x+

17、y-1/a 表達(dá)式經(jīng)過(guò)運(yùn)算最終得到一個(gè)值: 算術(shù)表達(dá)式的值,53,運(yùn)算符的優(yōu)先級(jí)與結(jié)合性 優(yōu)先級(jí): 在對(duì)表達(dá)式求值時(shí),如果存在多個(gè)運(yùn)算符,則運(yùn)算的先后次序按運(yùn)算符的優(yōu)先級(jí)別從高到底進(jìn)行。 運(yùn)算符的優(yōu)先級(jí)關(guān)系為: 高:* / % 低:+ - 如:a-2*x 先算 * 2*(a+2) 有括號(hào)的情況,54,結(jié)合性: 如果在一個(gè)運(yùn)算對(duì)象兩邊的運(yùn)算符的優(yōu)先級(jí)相同,則按規(guī)定的“結(jié)合方向”處理。 如:a-b+c b與-結(jié)合是從左到右,稱“左結(jié)合性”。 b與+結(jié)合是從右到左,稱“右結(jié)合性”。 每個(gè)運(yùn)算符都有相應(yīng)的優(yōu)先級(jí)和結(jié)合性。 基本算術(shù)運(yùn)算符都是左結(jié)合性,55,計(jì)算表達(dá)式例: 2+a-1/2.0 1+3/2

18、-1 構(gòu)造表達(dá)式例 2x2+3x-1,a+b a-b,a+b a-b x+y x-y,a+b/a-b ,a+b)/(a-b,2*x*x+3*x-1 (*不能省,a+b)/(a-b)/(x+y)/(x-y,a+b)/(a-b)/(x+y)/(x-y,a+b)/(a-b)/(x+y)*(x-y,56,強(qiáng)制類型轉(zhuǎn)換 可以用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式的值轉(zhuǎn)換成所需類型: 如: (int)(x+y) (float)(7%3,57,應(yīng)用舉例: int a=200,b=300,c; c=a*b/100; ? 可知,有自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換, 當(dāng)自動(dòng)轉(zhuǎn)換達(dá)不到目的時(shí),可用強(qiáng)制轉(zhuǎn)換,c=(long)a*b/10

19、0,c=(long)(a*b)/100,58,自增、自減運(yùn)算符 自增運(yùn)算符:+ 使變量值加1 自減運(yùn)算符:- 使變量值減1 兩種用法: +i, -i 先加(減)后用 i+, i- 先用后加(減) 兩種用法對(duì)i效果一樣,但表達(dá)式的值不同。 例:假設(shè)i的原值為5: j=+i; j=? j=i+; j=,59,注意: +和-只能用于變量。 如:3+和(a+1)+ 不合法 +和-為右結(jié)合性。 (-i)+ -i+ -(i+) 若i的原值是5,則該表達(dá)式的值是多少,60,例:分析執(zhí)行下列語(yǔ)句后的結(jié)果: a=5; a b c d b=a+; c=-a-b+; d=(a+)-(+b)+c,5,5,6,5,0,

20、6,7,2,6,1,61,兩種特殊情況: k=(i+)+(i+)+(i+) i+j 是 i+(+j) 還是 (i+)+j ? i+雖然與i=i+1等效,但使用自增自減運(yùn)算符的代碼優(yōu)化程度好,因而經(jīng)常使用;但用時(shí)需特別小心,62,3.9 賦值運(yùn)算符和賦值表達(dá)式 賦值運(yùn)算符 “=”稱賦值運(yùn)算符,其作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。 如: a=5 不要理解為“等號(hào)”。 執(zhí)行賦值運(yùn)算的結(jié)果,是將右邊的數(shù)據(jù)存入左邊變量所對(duì)應(yīng)的內(nèi)存單元中,63,賦值規(guī)則 如果賦值運(yùn)算符兩側(cè)的類型不一致,則在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換規(guī)則為: 實(shí)型整變量 舍去小數(shù)部分。 int a=5.5; a中為5。 整型實(shí)變量 數(shù)值不變,

21、以浮點(diǎn)形式存儲(chǔ)。 字符型整變量 放在整形變量低8位。保持原值不變?cè)瓌t。 int a=a,64,復(fù)合賦值運(yùn)算符 在賦值運(yùn)算符前加上其它運(yùn)算符,可以構(gòu)成復(fù)合賦值運(yùn)算符。 a+=3 a=a+3 b-=x+5 b=b-(x+5) x*=c-6 x=x*(c-6) y/=a*4 y=y/(a*4) k%=b-2 k=k%(b-2) 屬于高效率運(yùn)算符,65,賦值表達(dá)式 主要實(shí)現(xiàn)賦值運(yùn)算的表達(dá)式。 一般形式: = 如: a=5 y=2*x+3 a=a+1 不是衡等 作用:將右邊表達(dá)式的值賦給左邊的變量。 賦值表達(dá)式的值取左邊變量的值,66,賦值表達(dá)式右邊的可以是任何表達(dá)式,如: a=(b=5) 賦值表達(dá)式中

22、包含賦值表達(dá)式 賦值運(yùn)算符的優(yōu)先級(jí)低于所有算術(shù)運(yùn)算符,且是右結(jié)合性。 a=(b=5) 與 a=b=5 等效,67,例:計(jì)算以下表達(dá)式的值: a=b=c=5 a=5+(c=6) a=(b=4)+(c=6) a=(b=4.5)+(c=6.5) (a、b、c為整型變量) a+=a-=a*a (設(shè)a的原值為3,68,賦值表達(dá)式是c語(yǔ)言中的一個(gè)重要成分,在賦值表達(dá)式后加一分號(hào)就成為常用的賦值語(yǔ)句。如 y=2*x+1; 賦值表達(dá)式作為表達(dá)式的一種,可以出現(xiàn)在任何表達(dá)式中,如: x+2-(b/3-(a=k-5)+b,69,3.10 逗號(hào)表達(dá)式 逗號(hào)也是一種運(yùn)算符,用它對(duì)兩個(gè)表達(dá)式實(shí)現(xiàn)連接運(yùn)算。 3+5,6+

23、8 稱逗號(hào)表達(dá)式。 逗號(hào)表達(dá)式的一般形式: 表達(dá)式1,表達(dá)式2 取表達(dá)式2的值作為整個(gè)逗號(hào)表達(dá)式的值。 如: a=3*5,a*4 逗號(hào)表達(dá)式的值為:60,70,一個(gè)逗號(hào)表達(dá)式又可以與另一個(gè)表達(dá)式組成一個(gè)新的逗號(hào)表達(dá)式,如: (a=3*5,a*4),a+5 因此,逗號(hào)表達(dá)式的一般形式可以擴(kuò)展為: 表達(dá)式1,表達(dá)式2,表達(dá)式3,, 表達(dá)式n 取表達(dá)式n的值作為整個(gè)逗號(hào)表達(dá)式的值。 逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低,且是左結(jié)合性。 逗號(hào)運(yùn)算符只起到連接作用,沒(méi)有實(shí)際操作,71,第四章 最簡(jiǎn)單的c程序設(shè)計(jì),c 程序最基本的成分是語(yǔ)句 目前我們已掌握的語(yǔ)句: 變量說(shuō)明語(yǔ)句: int a,b,c; 表達(dá)式語(yǔ)句: x

24、+y; 特別地: a=5; 賦值語(yǔ)句,72,可以編寫簡(jiǎn)單程序如: main() int x,y; x=5; y=2*x*x+3*x-1; 該程序語(yǔ)法上完整,但還缺少輸出,73,數(shù)據(jù)的輸出 用輸出函數(shù)實(shí)現(xiàn),其中的兩種輸出函數(shù): 1.putchar 函數(shù) (字符輸出函數(shù)) 用于輸出一個(gè)字符。 如: putchar (a); putchar (100); char c=b; putchar (c,74,例:輸出單詞boy的完整程序: #include “stdio.h” 注意該語(yǔ)句的作用 main() char a, b, c; a=b; b=o; c=y; putchar (a); putchar

25、 (b); putchar (c);,75,2. printf函數(shù)(格式輸出函數(shù)) 任意類型、任意格式、任意個(gè)數(shù)。 例如: int a=100,b=56; printf(“a=%d,b=%d”,a,b); 普通字符 格式說(shuō)明 格式控制 輸出表列 輸出結(jié)果:a=100,b=56 “%” 后的字符稱格式字符,不同格式字符對(duì)應(yīng)不同的數(shù)據(jù)類型,76,d格式符:按整數(shù)格式輸出 幾種用法: %d 不指定寬度,按實(shí)際寬度輸出 %md 按指定寬度輸出,m為寬度 %ld 用于輸出長(zhǎng)整型數(shù),77,例: int a=125,b=453; long c=65535; printf(“a=%d,b=%5d,c=%ld”

26、,a,b,c); 輸出結(jié)果: a=125,b= 453,c=65535,78,ld也可以按指定寬度輸出: printf(“c=%8ld”,c); 輸出結(jié)果:c = 65535 注意:格式字符的類型要與對(duì)應(yīng)的輸出對(duì)象的類型一致,79,c格式符:用于輸出字符 char c=a; printf(“c=%c,%c”,c,b); 輸出結(jié)果:c=a,b 輸出對(duì)象既可以是字符變量、字符常量,還可以是整型表達(dá)式,80,如: int a=100; char b=a; printf(“n%d,%c”,a,a); printf(“n%c,%d”,b,b); 輸出結(jié)果: 100,d a,65,81,s格式符:用于輸出

27、字符串 %s 不指定寬度 %-ms 指定寬度,左靠齊 %ms 指定寬度,右靠齊 %m.ns 指定寬度m,只取左端n個(gè)字符, 右靠齊 %-m.ns 指定寬度m,只取左端n個(gè)字符, 左靠齊,82,例: printf(“1:%s”,”abcd”); printf(“2:%8s”,”abcd”); printf(“3:%-8s”,”abcd”); printf(“4:%8.3s”,”abcd”); printf(“5:%-8.3s”,”abcd”); 1:abcd2: abcd3:abcd 4: abc5:abc,83,f格式符:按小數(shù)形式輸出實(shí)數(shù) %f 由系統(tǒng)指定寬度(6位小數(shù)) %m.nf 指定寬

28、度m,小數(shù)位數(shù)n,右靠齊 %-m.nf 指定寬度m,小數(shù)位數(shù)n,左靠齊 注意:寬度包括符號(hào)和小數(shù)點(diǎn),84,例: float a=3.141592654,b=14.326795, c=-125.2468; printf(“na=%f,b=%8.3f,c=%-10.2f”,a,b,c); 輸出結(jié)果: a=3.141592,b= 14.326,c=-125.24,85,完整前面的程序,main() int x,y; x=5; y=2*x*x+3*x-1; printf(“n y=%d”,y);,86,程序設(shè)計(jì)例,編寫程序計(jì)算如圖中的電流i. 假設(shè) u=220,r1=30,r2=60,r3=45,u,

29、i,r1,r2,r3,87,算法設(shè)計(jì): i=u/r1+u/r2+u/r3 程序設(shè)計(jì): main(),i=u/r1+u/r2+u/r3,int u=220,r1=30,r2=60,r3=45; float i,printf(“n i=%f”,i,88,正確的程序: main() int u=220,r1=30,r2=60,r3=45; float i; i=(float)u/r1+(float)u/r2+(float)u/r3; printf(“n i=%f”,i);,89,考慮通用: main() int u,r1,r2,r3; float i; 輸入 u,r1,r2,r3 i=(float)

30、u/r1+(float)u/r2+(float)u/r3; printf(“n i=%f”,i);,90,數(shù)據(jù)的輸入 getchar函數(shù)(字符輸入) #include “stdio.h” main() char c; c=getchar(); 等待鍵盤輸入 putchar(c);,91,scanf 函數(shù)(格式輸入,與printf函數(shù)相反。 用于輸入若干任意類型的數(shù)據(jù)。 scanf(“%d%d%d”, 格式控制 地址列表,92,scanf(“%d%d%d”, 執(zhí)行此函數(shù)時(shí),等待從鍵盤輸入三個(gè)整數(shù)給a,b,c 若從鍵盤輸入 3 5 8 則系統(tǒng)即從鍵盤緩沖區(qū)取出這三個(gè)數(shù)分別賦給a,b,c 注意與pr

31、intf的區(qū)別,注意格式的匹配,93,如: scanf(“%3d%2d%4d,94,在鍵盤輸入時(shí),用分隔符把每個(gè)數(shù)據(jù)隔開(kāi),標(biāo)準(zhǔn)的分隔符是空格。 如:123 150 23 若想用逗號(hào)作分隔符,則: scanf(“%d,%d,%d”, 不要隨便使用普通字符,如使用: scanf(“a=%d,b=%d c=%d”, float i; scanf(“%d%d%d%d”,96,求三角形面積,include “math.h” main() float a,b,c,area,s; scanf ( “%f,%f,%f”, 使用數(shù)學(xué)函數(shù),97,使用三角函數(shù),include “math.h” main() flo

32、at x, y; scanf ( “%f”,98,第五章 選擇結(jié)構(gòu)程序設(shè)計(jì),對(duì)于如下的函數(shù)計(jì)算,算法上屬于一個(gè)選擇結(jié)構(gòu)。 y= 用于實(shí)現(xiàn)選擇結(jié)構(gòu)的主要是if語(yǔ)句,1/x 當(dāng)x0時(shí),10000 當(dāng)x=0時(shí),99,if語(yǔ)句的最常見(jiàn)形式為: if(關(guān)系表達(dá)式)語(yǔ)句1; else 語(yǔ)句2; 如: if(x!=0) y=1/x; else y=10000; 其中 x!=0 就是一個(gè)關(guān)系表達(dá)式 != 就是一個(gè)關(guān)系運(yùn)算符,100,51 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 1、關(guān)系運(yùn)算符 用于進(jìn)行比較運(yùn)算的運(yùn)算符。共有六種: = = = != 優(yōu)先級(jí)與結(jié)合性: 前4種大于后兩種。 低于算術(shù)運(yùn)算符而高于賦值運(yùn)算符。 左結(jié)合

33、性,101,2、關(guān)系表達(dá)式 一般形式: 表達(dá)式關(guān)系運(yùn)算符表達(dá)式 如:ab a+bb+c 經(jīng)過(guò)關(guān)系運(yùn)算后最終有一個(gè)值-關(guān)系表達(dá)式的值。 關(guān)系表達(dá)式的值只有 0(假)或1(真,102,例:設(shè) a=2, b=4, c=1 計(jì)算以下關(guān)系表達(dá)式的值: ab a+bb+c ab 可以是字符表達(dá)式 (x=2)(y=5) 可以是賦值表達(dá)式 (a(bc) 甚至可以是關(guān)系表達(dá)式 ab= =bc,103,例:假設(shè) x=3, y=5, z=1, 計(jì)算以下關(guān)系表達(dá)式的值: x+zy xz=xz yxz (x=y-2)x+1,104,52 邏輯運(yùn)算符和邏輯表達(dá)式 有時(shí),只用一個(gè)簡(jiǎn)單的關(guān)系表達(dá)式無(wú)法完整地表達(dá)一個(gè)條件,如:

34、 y= 其中的條件需要用邏輯表達(dá)式來(lái)表達(dá): x!=0 else y=10000,114,if(表達(dá)式1)語(yǔ)句1; else if(表達(dá)式2)語(yǔ)句2; else if(表達(dá)式3)語(yǔ)句3; else 語(yǔ)句n; if(score=100) printf(“a”); else if(score=90) printf(“b”); else if(score=80) printf(“c”); else if(score=70) printf(“d”); else if(score=60) printf(“e”); else printf(“f”,115,對(duì)于,1/x 當(dāng)x0時(shí),10000 當(dāng)x=0時(shí),一般

35、用: if(x!=0) y=1/x; else y=10000,也可用: y=10000; if(x!=0) y=1/x,y, y=1/x; if(x=0)y=10000,116,例:(習(xí)題5.5,x (x1,2x-1 (1x10,3x-11 (x10,y,117,main() float x,y; scanf(“%f”,118,說(shuō)明: 語(yǔ)句中的表達(dá)式可以是任意表達(dá)式: if(x) y=1/x; else y=10000; 一個(gè)if結(jié)構(gòu)不可分割: if(x) y=1/x; z=10; else y=10000; 一個(gè)分支中包含多個(gè)語(yǔ)句時(shí),要用 : if(a0) x=1; y=2; else x

36、=10; y=20,119,分支程序設(shè)計(jì)舉例(基本技巧和算法) 例:從鍵盤輸入三個(gè)整數(shù)到變量a,b,c,輸出其中最大的數(shù)。 兩種典型算法: 枚舉法(將各種可能性枚舉出來(lái))。 選擇法(先假設(shè)后判斷更新,120,選擇法 main() int a,b,c,max; scanf(“%d,%d,%d”,121,例:從鍵盤輸入三個(gè)整數(shù)到變量a,b,c,要求按從大到小的順序輸出。 兩種典型算法: 枚舉法(將各種可能的排列枚舉出來(lái))。 換位法(將a,b,c中的數(shù)據(jù)換位,122,換位法 main() int a,b,c,t; scanf(“%d,%d,%d”,3,5,8,5,3,8,5,5,3,a,b,c,12

37、3,2、if語(yǔ)句的嵌套 在if語(yǔ)句中,又包含一個(gè)或多個(gè)if語(yǔ)句: if(score=80) if(score=90) printf(“a”); else printf(“b”); else if(score=60) printf(“c”); else printf(“d”); 注意else與if的匹配,124,3、條件運(yùn)算符 如果兩個(gè)分支的內(nèi)容都是給同一個(gè)變量賦值,則可用簡(jiǎn)單的條件運(yùn)算符處理: if(ab) max=a; else max=b; 可用: max=ab ? a : b; 賦值運(yùn)算符右邊為一條件表達(dá)式。 條件表達(dá)式的一般形式: 表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3,125,條件表達(dá)

38、式的執(zhí)行過(guò)程: ab ? a : b 優(yōu)先級(jí):低于關(guān)系運(yùn)算符,高于賦值運(yùn)算符。 結(jié)合性:右結(jié)合性,表達(dá)式1,條件表達(dá)式 取表達(dá)式3的值,條件表達(dá)式 取表達(dá)式2的值,非0,0,126,例:求a,b,c中的最大值: max= ab ? (ac?a:c) : (bc?b:c),127,54 switch語(yǔ)句(多分支) 適用于根據(jù)一個(gè)表達(dá)式的值就可確定走哪個(gè)分支的情況。 switch(表達(dá)式) 常量表達(dá)式1: 語(yǔ)句1 常量表達(dá)式2: 語(yǔ)句2 常量表達(dá)式n: 語(yǔ)句n default: 語(yǔ)句n+1,128,例:成績(jī)分檔: switch(score/10) case 10: printf(“a”); cas

39、e 9: printf(“b”); case 8: printf(“c”); case 7: printf(“e”); case 6: printf(“f”); default : printf(“g”); 注:應(yīng)使用break,129,switch(score/10) case 10: printf(“a”); break; case 9: printf(“b”); break; case 8: printf(“c”); break; case 7: printf(“e”); break; case 6: printf(“f”); break; default : printf(“g”);,

40、130,55 程序舉例 (習(xí)題5.10) 有4個(gè)圓塔,圓心分別為:(2,2),(-2,2),(-2,-2),(2,-2),圓半徑為1。這4個(gè)塔的高度為10m,塔以外無(wú)建筑物。今輸入任一點(diǎn)的坐標(biāo),求該點(diǎn)的建筑高度(塔外的高度為0,131,算法設(shè)計(jì): 條件“在某一圓內(nèi)” : “在圓1內(nèi)或在圓2內(nèi)或在圓3內(nèi)或在圓4內(nèi)” 若設(shè)變量c1、c2、c3、c4分別代表是否在相應(yīng)的圓內(nèi),則以上條件為: c1|c2|c3|c4,10 在某一圓內(nèi),0 在圓外,x,y,h,132,c1=(x-2)2+(y-2)21 c2=(x+2)2+(y-2)21 c3=(x+2)2+(y+2)21 c4=(x-2)2+(y+2)

41、21,133,main() int h,c1,c2,c3,c4; float x,y; scanf(“%f%f”,134,第六章 循環(huán)控制 61 概述 所謂循環(huán)控制,就是如何實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的控制問(wèn)題。有4種方法: 用goto語(yǔ)句和if構(gòu)成循環(huán)。 用while語(yǔ)句。 用do-while語(yǔ)句。 用for語(yǔ)句,135,62 用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán) 例: 對(duì)于計(jì)算 s=1+2+3+4+5+6+7+8+9+10,0 s,1 i,s+i s,i+1 i,i10,輸出s,y,n,136,s=0; i=1; lable:s+=i; i+; if(i=10) goto lable; printf(“%d

42、”,s),語(yǔ)句標(biāo)號(hào),無(wú)條件轉(zhuǎn)向語(yǔ)句,goto 語(yǔ)句可以構(gòu)造循環(huán),但不主張用,因?yàn)樗菀灼茐慕Y(jié)構(gòu)化程序設(shè)計(jì),goto 語(yǔ)句可以構(gòu)造循環(huán), 但不主張用,因?yàn)樗菀灼?壞結(jié)構(gòu)化程序設(shè)計(jì),137,63 while語(yǔ)句 while語(yǔ)句是專門用于實(shí)現(xiàn)循環(huán)控制的語(yǔ) 句之一。 其一般形式為: while (表達(dá)式) 語(yǔ)句 含義:當(dāng)表達(dá)式的值為非0時(shí),執(zhí)行循環(huán)體,否則執(zhí)行后續(xù)語(yǔ)句,語(yǔ)句關(guān)鍵,表達(dá)循環(huán)條件的表達(dá)式,循環(huán)體,語(yǔ)句關(guān)鍵字,138,執(zhí)行過(guò)程: while (表達(dá)式) 語(yǔ)句,表達(dá)式,循環(huán)體,0,非0,139,i10,s=0 i=1,s=s+i i=i+1,例:用while語(yǔ)句實(shí)現(xiàn)前面算法: main()

43、int i=1,s=0; while(i=10) s=s+i; i+; printf(“n %d”,s);,注意與if語(yǔ)句的區(qū)別。 循環(huán)體中要有使循環(huán)條件趨于成立的條件,y,n,140,while(i=10) s=s+i; i+; 可簡(jiǎn)寫為: while(i=10) s+=i,141,非0(真,0(假,表達(dá)式,循環(huán)體,64 do-while語(yǔ)句 do-while語(yǔ)句主要用于實(shí)現(xiàn)直到型循環(huán)。 其一般形式為: do 循環(huán)體 while(表達(dá)式); 執(zhí)行過(guò)程,142,真,s=0 i=1,i10,s=s+i i=i+1,假,例:用do-while語(yǔ)句實(shí)現(xiàn)前面算法: main() int i=1,s=0

44、; do s+=i+; while(i=10); printf(“n%d”,s); 注意與while語(yǔ)句的區(qū)別,143,假,表達(dá)式2,求解表達(dá)式1,循環(huán)體,求解表達(dá)式3,真,65 for 語(yǔ)句 for語(yǔ)句是一種使用最為靈活, 并且是用得最多的循環(huán)控制語(yǔ)句, 其一般形式為: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體 大體含義: 對(duì)于()的情況執(zhí)行循環(huán)體內(nèi)容,144,例:用for語(yǔ)句實(shí)現(xiàn)前面的算法: s=0; for(i=1;i=10;i+) s+=i; 標(biāo)準(zhǔn)形式,表達(dá)式1,表達(dá)式2,表達(dá)式3,循環(huán)體,可以理解: 循環(huán)變量i從初值1開(kāi)始到終值10,步長(zhǎng)為1,重復(fù)執(zhí)行循環(huán)體,145,for語(yǔ)句

45、的常見(jiàn)變化: s=0; i=1; for(;i=10;i+)s+=i; s=0; for(i=1;i=10;)s+=i+; s=0;i=1; for(;i=10;)s+=i,省略表達(dá)式1,省略表達(dá)式3,省略表達(dá)式1和3,146,s=0; i=1; for(;) s+=i+; if(i10) break; s=10;i=10; for(;-i;) s+=i,省略表達(dá)式2,表達(dá)式2是任意表達(dá)式,147,s=0; for(i=1,j=10;ij;i+,j-) s+=i+j; 1 2 3 4 5 6 7 8 9 10 在程序設(shè)計(jì)中不要過(guò)分追求它的多變性,i,j,用逗號(hào)表達(dá)式,148,例:求n! n!=

46、1*2*3(n-1)*n 參照累加求和 main() int i,n=5,s=1; for(i=1;i=n;i+)s*=i; printf(“n s=%d”,s); 注意s的初值。 注意當(dāng)n較大時(shí)的情況。 求和與連乘都是最常用的算法,要熟練掌握,149,例:求自然數(shù)1-100中能被3整除的數(shù)之和。 main() int i,s=0; printf(“n %d”,s); 求能被3整除但不被7整除的數(shù)之和,for(i=1;i=100;i+) s+=i,for(i=1;i=100;i+) if(i%3=0)s+=i,for(i=3;i=100;i+=3) s+=i,for(i=3;i=100;i+=

47、3) if (i%7)s+=i,150,例:求任意100個(gè)數(shù)中的最大值。 main() int i,a,max; max=? for(i=1;imax) max=a; printf(“n max=%d”,max); 循環(huán)體中沒(méi)有引用循環(huán)變量。i的作用? 求任意個(gè)數(shù)中的最大值,for(i=1; ;i,if(a=-9999)break,max=-32768,151,外重循環(huán),內(nèi)重循環(huán),執(zhí)行200次,要掌握多重循環(huán)執(zhí)行的全過(guò)程,66 循環(huán)的嵌套 循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)(多重循環(huán))。 for(i=1;i=10;i+) for(j=1;j=20;j+) s+=i+j;,152,以上多重循環(huán)結(jié)

48、構(gòu)可以簡(jiǎn)寫為: for(i=1;i=10;i+) for(j=1;j=20;j+) s+=i+j,153,例:找出行號(hào)乘以列號(hào)等于100的座位。 main() int i,j; for(i=1;i=30;i+) for(j=1;j=20;j+) if(i*j=100) printf(“n%d,%d”,i,j);,注意循環(huán)的關(guān)系,154,例:百錢買百雞問(wèn)題。 給定100塊錢,要求正好買100只雞,已知公雞5元/只,母雞3元/只,小雞1元/3只,問(wèn)公雞、母雞和小雞應(yīng)各買多少只? 若考慮用方程組: x+y+z=100 5x+3y+z/3=100 是一多解問(wèn)題,155,用測(cè)試法求解的程序: main(

49、) int x,y,z; for(x=1;x=100;x+) for(y=1;y=100;y+) for(z=1;z=100;z+) if(x+y+z=100,156,程序可進(jìn)一步簡(jiǎn)化為: main() int x,y,z; for(x=1;x=20;x+) for(y=1;y=33;y+) z=100-x-y; if(5*x+3*y+z/3.0=100) printf(“n%d,%d,%d”,x,y,z);,用測(cè)試法求解問(wèn)題的典型例子,157,測(cè)試法求解的程序設(shè)計(jì)有兩個(gè)要點(diǎn): 通過(guò)循環(huán)列出所有可能的解。 對(duì)所有列出的可能的解進(jìn)行條件測(cè)試,158,例:判斷一個(gè)數(shù)m是否為素?cái)?shù)。 main() i

50、nt i,m; scanf(“%d”,用測(cè)試法求解,159,例:(習(xí)題6.6) 打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。如:153是一水仙花數(shù),因?yàn)?153=13+53+33,160,main() int i,j,k,n; for(n=100;n=999;n+) i=? j=? k=? if(i*i*i+j*j*j+k*k*k=n) printf(“n%d”,n); 通過(guò)循環(huán)列出n的所有可能的范圍,i=n/100,k=n%10,j=n/10%10,161,main() int i,j,k,n; for(i=1;i=9;i+) for(j=0;j

51、=9;j+) for(k=0;k=9;k+) n=i*100+j*10+k; if(i*i*i+j*j*j+k*k*k=n) printf(“n%d”,n); 通過(guò)循環(huán)列出i,j,k的所有可能的范圍,162,例:(習(xí)題6.4,求s,i! =1!+2!+3!+4!+19!+20,20,i=1,163,main() int i,j; float t,s=0; for(i=1;i=20;i+) s+=?; printf(“n s=%f”,s); 用兩重循環(huán)實(shí)現(xiàn),s+=t,t=1; for(j=1;j=i;j+) t*=j,164,用遞推法: 遞推公式:ti=ti-1.i,求s,i! =1!+2!+3

52、!+4!+19!+20,20,i=1,1+(i-1)!.i = 1+ti-1.i,20,i=2,20,i=2,165,main() int i,j; float t=1,s=t; for(i=2;i=20;i+) t=t*i; s+=t; printf(“n s=%f”,s);,166,例: 遞推公式,s,i,1,1,20,+ + + + +,1! 2! 3! 4! 20,1 1 1 1 1,ti= ti-1 / i,167,main() int i,j; float t=1,s=t; for(i=2;i=20;i+) t=t*i; s+=t; printf(“n s=%f”,s);,t=t/

53、i,168,習(xí)題6.3: s=a+aa+aaa+aaaa+aaaaa 2+22+222+2222+22222 遞推公式:ti= ti-1,ti= ti-1 * 10+a,169,main() int i,j,a=2; float t=a,s=t; for(i=2;i=5;i+) t=t*10+a; s+=t; printf(“n s=%f”,s);,170,例:求方程 2x3+3x2-4x+1=0的根。 簡(jiǎn)單迭代法基本思想: 將原方程f(x)化為:x2=g(x1) x2=(2x13+3x12+1)/4 迭代公式,171,迭代過(guò)程,假定一個(gè)x1,x2=g(x1,不成立,x2-x1,x1=x2,輸

54、出x2,成立,172,main() float x1,x2; scanf(“%f”,x1=x2,173,牛頓迭代法基本思想: 牛頓迭代公式 f(x1)=f(x1)/(x1-x2) x2=x1-f(x1)/ f(x1,x1,x2,y,x,f (x1,f (x2,174,main() float x1,x2,f1,f; scanf(“%f”,175,例:求定積分: 數(shù)值積分,f (x,a,b,x,sinx,x,dx,a,b,等分n,h,b-a,n,第i個(gè)矩形:x=,x=a+(i-1).h,176,include “math.h” main() int n,i; float a,b,x,y,h,s=

55、0; scanf(“%f%f%d”,177,第七章 數(shù) 組 71 數(shù)據(jù)結(jié)構(gòu)與數(shù)組的概念 影響程序設(shè)計(jì)的因素除算法外還有數(shù)據(jù)結(jié)構(gòu)。 數(shù)據(jù)結(jié)構(gòu)概念 編寫一個(gè)程序除了重視算法的設(shè)計(jì)外,還需重視數(shù)據(jù)類型的選擇,即選擇合適的數(shù)據(jù)類型來(lái)存放要處理的數(shù)據(jù)。在程序設(shè)計(jì)中,數(shù)據(jù)類型就稱為數(shù)據(jù)結(jié)構(gòu),選擇合適的數(shù)據(jù)類型實(shí)際上就是進(jìn)行數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),178,在程序設(shè)計(jì)中有格言: 數(shù)據(jù)結(jié)構(gòu)+算法=程序 說(shuō)明數(shù)據(jù)結(jié)構(gòu)與算法同等重要,算法依賴于數(shù)據(jù)結(jié)構(gòu),對(duì)于同一個(gè)問(wèn)題的求解,可以采用不同的數(shù)據(jù)結(jié)構(gòu)和不同的算法,對(duì)不同的數(shù)據(jù)結(jié)構(gòu)有不同的算法,其復(fù)雜程度也會(huì)不同,選擇合適的數(shù)據(jù)結(jié)構(gòu),可以降低算法的復(fù)雜程度。因此,在程序設(shè)計(jì)中應(yīng)

56、重視數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),179,例:求任意100個(gè)數(shù)中的最大值。 main() int i,a,max; max=-32768 for(i=1;imax) max=a; printf(“n max=%d”,max);,用一個(gè)簡(jiǎn)單變量作為數(shù)據(jù)結(jié)構(gòu),合理,算法簡(jiǎn)單,180,對(duì)于三個(gè)數(shù)的排序: main() int a,b,c,t; scanf(“%d,%d,%d”, 對(duì)于很多個(gè)數(shù)的排序用變量會(huì)很復(fù)雜而用數(shù)組會(huì)使算法很簡(jiǎn)單,仍可用變量作為數(shù)據(jù)結(jié)構(gòu),181,數(shù)組的概念 int a10 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 一組具有同樣類型的數(shù)據(jù)的集合 統(tǒng)一用一個(gè)名字代表-數(shù)組名(代表

57、一組數(shù),數(shù)組元素,下標(biāo),數(shù)組名,182,數(shù)組中的各成員稱數(shù)組元素,由數(shù)組名加下標(biāo)唯一地確定。 將一組數(shù)用一個(gè)名字代表,便于管理。 只有一個(gè)下標(biāo)的數(shù)組稱為一維數(shù)組; 可有二維數(shù)組、三維數(shù)組、七維數(shù)組,183,72 一維數(shù)組的定義和引用 定義 一般形式: 類型符 數(shù)組名常量表達(dá)式; int a10; float b10; 類型符 數(shù)組名 長(zhǎng)度 作用:分配一組連續(xù)的內(nèi)存單元,184,說(shuō)明: 數(shù)組必須先定義后使用。 數(shù)組名的命名規(guī)則與變量相同。 常量表達(dá)式表示元素的個(gè)數(shù)(長(zhǎng)度),下標(biāo) 從0開(kāi)始。 常量表達(dá)式不能包含變量,即不允許作動(dòng)態(tài)定義,185,引用 逐個(gè)引用其元素,不能進(jìn)行整體引用。 引用的一般形

58、式: 數(shù)組名下標(biāo) 如:a0=50; a1=100; a2=a0+a1; 與 a2=a0+a1有根本性的區(qū)別:下標(biāo)可變,186,例:從鍵盤輸入10個(gè)數(shù)。 用變量:(不方便) scanf(“%d%d%d%d%d%d%d%d%d%d”, 用循環(huán)控制輸入個(gè)數(shù)和下標(biāo)的變化。 注意下標(biāo)的變化范圍,187,初始化 在定義數(shù)組的同時(shí)給數(shù)組賦初值。 inta10=0,1,2,3,4,5,6,7,8,9; int a10=0,1,2,3,4; int a=0,1,2,3,4,188,應(yīng)用舉例 (1)對(duì)100個(gè)學(xué)生的分?jǐn)?shù)統(tǒng)計(jì)最高分、最低分和平均分。 兩種方法: 用變量作為存放初始數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu) 用數(shù)組作為存放初始數(shù)

59、據(jù)的數(shù)據(jù)結(jié)構(gòu),189,main() int i,a,max,min; float aver=0; max=0; min=100; for(i=0;imax) max=a; if(amin) min=a; aver+=a; aver/=100; printf(“n %d,%d,%f”,max,min,aver);,用變量,190,main() int i,a100,max,min; float aver=0; for(i=0;imax) max=ai; if(aimin) min=ai; aver+=ai; aver/=100; printf(“n %d,%d,%f”,max,min,aver)

60、;,用數(shù)組,找最大最小的位置,max=0; min=0,if(aiamax) max=i; if(aiamin) min=i,191,2)統(tǒng)計(jì)高于平均分的人數(shù),main() int i,a,n; float aver=0; for(i=0;i100;i+) scanf(“%d,n=0; for(i=0;iaver)n+; printf(“n %d”,n);,用變量,數(shù)據(jù)結(jié)構(gòu)不合理,192,main() int i,a100,n; float aver=0; for(i=0;iaver)n+; printf(“n %d”,n);,用數(shù)組,193,1(3)對(duì)100個(gè)學(xué)生的分?jǐn)?shù)統(tǒng)計(jì)出每分一檔人數(shù)。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論