版權(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ì) A課程輔導(dǎo)(4)- 第 4 章 數(shù)組和字符串 主要內(nèi)容:一、數(shù)組的概念二、一維數(shù)組三、二維數(shù)組四、使用 typedef 語(yǔ)句定義數(shù)組類型五、數(shù)組的應(yīng)用六、字符串、數(shù)組的概念數(shù)組: 具有相同數(shù)據(jù)類型的一組數(shù)據(jù)。數(shù)組分類: 按照數(shù)據(jù)之間的結(jié)構(gòu):一維數(shù)組、二維數(shù)組、三維數(shù)組等。 按照數(shù)據(jù)類型:數(shù)值數(shù)組、字符數(shù)組、結(jié)構(gòu)數(shù)組、指針數(shù)組等。 一維數(shù)組:順序排列的一組數(shù)據(jù), 每個(gè)數(shù)據(jù)在數(shù)組中用單個(gè)下標(biāo)來(lái)區(qū)分位置。 如12 , 34, 56, 34, 58, 44, 56就是順序排列的一組數(shù)據(jù),在 C語(yǔ)言中用 一個(gè)一維數(shù)組來(lái)表示(存儲(chǔ)) ,它包含有 7 個(gè)整數(shù),每個(gè)整數(shù)對(duì)應(yīng)的下標(biāo)依 次為 06
2、,也就是說(shuō),它們?cè)跀?shù)組中的下標(biāo)位置依次為 06。數(shù)組中的每個(gè) 數(shù)據(jù)又稱為元素,則 12為數(shù)組中下標(biāo)為 0的元素, 34是數(shù)組中下標(biāo)為 1 的 元素,依次類推。二維數(shù)組: 具有行列結(jié)構(gòu)的一組表格數(shù)據(jù)。每個(gè)數(shù)據(jù)既對(duì)應(yīng)有行下標(biāo),又對(duì) 應(yīng)有列下標(biāo)。如 3 , 5, 7, 4, 5, 9, 2, -3, 6就是一個(gè)二維結(jié)構(gòu)的 數(shù)據(jù),它分為 3行3列,第 1 行的三個(gè)元素為 3、5和7,第2行的三個(gè)元素 為4、5和9,第3行的三個(gè)元素為 2、-3 和6;每行中的 3個(gè)元素又對(duì)應(yīng)不 同的列號(hào),如第 1 行的三個(gè)元素 3、5和 7的列號(hào)分別為 1、2和 3。二維表 格數(shù)據(jù)在C語(yǔ)言中用一個(gè)二維數(shù)組來(lái)表示,其中行
3、、列下標(biāo)都從 0開(kāi)始。剛 才所說(shuō)的二維表格數(shù)據(jù)在二維數(shù)組中對(duì)應(yīng)的行下標(biāo)為 0-2,列下標(biāo)也為 0-2。 數(shù)組元素: 數(shù)組中的一個(gè)數(shù)據(jù),用數(shù)組名和下標(biāo)來(lái)表示。如 a5 、 b2ij 等,其中a和b2分別是一維數(shù)組名和二維數(shù)組名,5為該元素的下標(biāo),它是 數(shù)組a中的第6個(gè)元素,i和j分別是行下標(biāo)和列下標(biāo),該元素是二維數(shù)組 b2 中第 i+1 行和第 j+1 列位置上的元素。數(shù)組長(zhǎng)度:數(shù)組中所含元素的個(gè)數(shù)。如一個(gè)數(shù)組 a中有10個(gè)元素,則a數(shù) 組的長(zhǎng)度等于 10。一個(gè)二維數(shù)組的長(zhǎng)度是它的行數(shù)與列數(shù)的乘積。 假定一個(gè) 二維數(shù)組有 5行和 6列數(shù)據(jù),則數(shù)組長(zhǎng)度為 30,即包含有 30個(gè)數(shù)據(jù)。 下標(biāo)范圍:對(duì)
4、于一維數(shù)組來(lái)說(shuō),只有一個(gè)下標(biāo),若數(shù)組中包含有 N個(gè)元素, 則下標(biāo)范圍是0N-1。對(duì)于二維數(shù)組來(lái)說(shuō),若數(shù)組中包含有 M行x N列數(shù)據(jù),則行下標(biāo)的范圍是 0M-1 ,列下標(biāo)的范圍是 0N-1二、一維數(shù)組一維數(shù)組定義格式< 類型關(guān)鍵字 > <數(shù)組名> < 常量表達(dá)式 > =< 初值表>類型關(guān)鍵字 為已存在的一種數(shù)據(jù)類型。 數(shù)組名 是用戶定義的一個(gè)標(biāo)識(shí)符, 用 它來(lái)表示一個(gè)數(shù)組。 常量表達(dá)式 只能是通過(guò) #define 命令定義的符號(hào)常量,不能 是通過(guò) const 語(yǔ)句定義, 常量表達(dá)式 的值是一個(gè)整數(shù), 由它標(biāo)明該一維數(shù)組的長(zhǎng) 度,即數(shù)組中所含元素的個(gè)
5、數(shù)。 每個(gè)元素具有 類型關(guān)鍵字 所指定的類型。 初值表 是用逗號(hào)分開(kāi)的一組表達(dá)式,每個(gè)表達(dá)式的值將被依次賦給數(shù)組中的相應(yīng)元素。一維數(shù)組的存儲(chǔ)空間分配 一個(gè)數(shù)組被定義后,系統(tǒng)將在內(nèi)存中為它分配一塊能夠存儲(chǔ) n 個(gè)數(shù)據(jù)元素的 存儲(chǔ)空間,其中n為數(shù)組長(zhǎng)度。所以數(shù)組所占用的存儲(chǔ)空間的字節(jié)數(shù)應(yīng)等于元素 的個(gè)數(shù) n 乘于元素類型的長(zhǎng)度。如對(duì)于一個(gè)含有 10 個(gè) int 型元素的數(shù)組,它將 對(duì)應(yīng) 10*4=40 個(gè)字節(jié)的存儲(chǔ)空間。一維數(shù)組定義舉例 int a20;/定義整型數(shù)組a,含20個(gè)int元素,a0-a19(2) double bMS; /假定MS為已定義的符號(hào)常量,b0-bMS-1(3) int c
6、5=1,2,3,4,0; /c0=1,c1=2,c2=3,c3=4,c4=0(4) char d= a, b, c , d; /d0=a,d1= b,d2= c ,d3= d(5) int e8=1,4,7;/e0=1,e1=4,e2=7,e3-e7=0(6) char f10= B, A, S, I , C; /f0=B,.,f5-f9=0,'0'(7) float h15, h210;/定義 2個(gè)單精度數(shù)組(8) short int x=1, y=2, z, w4=25+x, -10, x+2*y, 44;/ 既定義有簡(jiǎn)單變量,又定義有數(shù)組, w0=26,w1=-10,w2
7、=5維數(shù)組元素的訪問(wèn)定義了一個(gè)數(shù)組, 就相當(dāng)于同時(shí)定義了它所含的每個(gè)元素。 數(shù)組中的每個(gè)元 素又稱為 下標(biāo)變量 ,是通過(guò)下標(biāo)運(yùn)算符(即一對(duì)中括號(hào) )來(lái)指明和訪問(wèn)的,具 體格式為:<數(shù)組名 ><表達(dá)式 >中括號(hào)運(yùn)算符內(nèi)的表達(dá)式稱為 下標(biāo)表達(dá)式 ,下標(biāo)表達(dá)式的值稱為該元素下 標(biāo)。表面上看,這與數(shù)組的定義格式類似,但它們出現(xiàn)的位置是不同的,當(dāng)出現(xiàn) 在變量定義語(yǔ)句時(shí)則為數(shù)組定義,而當(dāng)出現(xiàn)在一般表達(dá)式中時(shí)則為一個(gè)元素。變量)的合法格式:(1) a5/(2) ai /(3) aj+/(4) a2*x+1/假定 an 為一個(gè)已定義的數(shù)組,則下面都是訪問(wèn)該數(shù)組的每個(gè)元素(下標(biāo)下標(biāo)為一個(gè)
8、常數(shù) 5下標(biāo)為一個(gè)變量 i下標(biāo)為后增 1 表達(dá)式 j+ ,若 j=3 ,則為元素 a3下標(biāo)為一般表達(dá)式2*x+1,若x=3,則為兀素a7使用一維數(shù)組的程序舉例 程序 1 :#include<stdio.h>void main()int i, a6;printf(" 從鍵盤(pán)輸入 6 個(gè)整數(shù) : "); / 提示信息 for(i=0;i<6;i+) scanf("%d",&ai); /6 個(gè)整數(shù)依次輸入到數(shù)組 for(i=5;i>=0;i-) printf("%d ",ai); /按相反次序輸出元素值pri
9、ntf("n");若程序運(yùn)行時(shí),從鍵盤(pán)上輸入 3、8、12、6、20和 15這6個(gè)常數(shù),則得到的輸入和運(yùn)行結(jié)果為:/a0-a5/a5-a0/符號(hào)常量M為103 8 12 6 20 1515 20 6 12 8 3 程序 2:#include<stdio.h>#define M 10void main()int i, aM+1; /定義數(shù)組 a11a0=1; a1=2;for(i=2; i<=M; +i)ai=ai-1+ai-2; a2=3,a3=5,a4=8,for(i=0; i<M; +i)printf("%d, ",ai);
10、/輸出 a0-a9 的值,用逗號(hào)分開(kāi)printf("%dn",aM); /輸出 a10 的值三、二維數(shù)組二維數(shù)組的定義格式< 類型關(guān)鍵字> <數(shù)組名> <常量表達(dá)式 1> < 常量表達(dá)式 2>=< 初值表 1>,< 初值表 2>,.;常量表達(dá)式 1 指定該數(shù)組的行數(shù),行下標(biāo)的取值范圍是 0-常量表達(dá)式 1 的 值減 1,常量表達(dá)式 2指定該數(shù)組的列數(shù),列下標(biāo)的取值范圍是 0-常量表達(dá)式 2 的值減1。假定常量表達(dá)式1和常量表達(dá)式2的值分別為m和n,則行下標(biāo)的取 值范圍是0 m-1之間的m個(gè)整數(shù),列下標(biāo)的
11、取值范圍是 0 n-1之間的n個(gè)整數(shù)。如假定一個(gè)整型二維數(shù)組 a 的定義為:int a34;則所包含的全部 12個(gè)元素如下:a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23二維數(shù)組中元素的個(gè)數(shù)二維數(shù)組中所包含的元素個(gè)數(shù)又稱為該二維數(shù)組的大小, 它等于該二維數(shù)組 的行數(shù)和列數(shù)的乘積。如:int a105;/個(gè)數(shù):10*5=50個(gè)數(shù): 5*8=40個(gè)數(shù): 5*(M+1)double a58; / char a5M+1; /存儲(chǔ)空間分配系統(tǒng)給一個(gè)二維數(shù)組中的所有元素分配存儲(chǔ)空間時(shí), 是首先按行下標(biāo)從小到 大的次序, 行下標(biāo)相同時(shí)再按列下標(biāo)從小到大的次序進(jìn)行的
12、。 例如,若定義了一 個(gè) double 型的二維數(shù)組 cMN ,則 c00 元素占有整個(gè)數(shù)組存儲(chǔ)空間的第 1 個(gè)數(shù)據(jù)單元,c01元素占有整個(gè)數(shù)組存儲(chǔ)空間的第2個(gè)數(shù)據(jù)單元,cij元素占有整個(gè)數(shù)組存儲(chǔ)空間的第 i*N+j 個(gè)數(shù)據(jù)單元。每個(gè)數(shù)據(jù)單元所包含的字節(jié) 數(shù)有數(shù)據(jù)類型決定。格式舉例 :int a33;/3行x 3列共9個(gè)整數(shù)類型的元素 double bMN; / 假定M和N為已定義的整型常量,共 MX N個(gè)元素(3) int c24=1,3,5,7,2,4,6,8; /(4) int d3=0,1,2,3,4,5,6,7,8; / 素(5) int e34=0,1,2;/(6) char g1
13、0,h105;/定義并初始化 省略行下標(biāo)的上限, 9 元位被初始化的元素自動(dòng)為 0定義一維和二維字符數(shù)組g和h二維數(shù)組元素的表示和訪問(wèn)<數(shù)組名 >< 行下標(biāo)表達(dá)式 >< 列下標(biāo)表達(dá)式 >數(shù)組元素又稱下標(biāo)變量, 二維數(shù)組元素帶有兩個(gè)下標(biāo), 又稱雙下標(biāo)變量, 每 個(gè)下標(biāo)分別用中括號(hào)括起來(lái)。 每個(gè)下標(biāo)可以是常量, 也可以是變量、 函數(shù)或表達(dá) 式。(1) int a45;/定義二維數(shù)組 a(2) a12=6;/向a12元素賦值6,每個(gè)下標(biāo)為常量(3) a22=3*a12+1;/取出 a12 的值 6參與運(yùn)算,/把賦值號(hào)右邊表達(dá)式的值 19賦給 a22 元素中(4)
14、aij-1=aij;/下標(biāo)變量賦值,下標(biāo)為變量或表達(dá)式(5) printf("%dn",a12*a22-3); /輸出表達(dá)式的值 111 到窗口遍歷二維數(shù)組就是先按行從小到大,再按列從小到大的次序依次訪問(wèn)每個(gè)元素例如:int i,j,aMN;for(i=0; i<M; i+)/for(j=0; j<N; j+) / s+=aij;/行下標(biāo)依次遞增列下標(biāo)依次遞增 所有元素值被累加到 s 中使用二維數(shù)組的程序舉例程序 1 :#include<stdio.h>void main()int i,j,min=b00; / for(i=0; i<2; i+
15、)/for(j=0; j<5; j+) /給 min 賦初值為數(shù)組的第 1 個(gè)元素值 7外循環(huán)變量 i 依次取 0,1,2內(nèi)循環(huán)變量 j 依次取 0,1,2,3,4int b25=7,15,5,8,20,12,25,37,16,28;/ 定義和初始化if(bij<min) min=bij; /比較每個(gè)元素,小者賦 minprintf("%dn",min); / 輸出 min 的值為 5程序功能: 從數(shù)組 b25 中求出所有元素的最小值并輸出。程序 2:#include<stdio.h>#define M 4/定義符號(hào)常量 M為4void main()
16、int cM=0;/定義一維整型數(shù)組 c4 并初始化為 0int dM3=1,5,7,3,2,10,6,7,9,4,3,7;/定義二維整型數(shù)組 d43 并初始化int i,j,sum=O; /求和變量sum被初始為0for(i=0; i<M; i+) for(j=0; j<3; j+) ci+=dij; /d中每行元素值被累加到 cisum+=ci; c中所有元素值被累加到sum中for(i=0; i<M; i+) printf("%d ",ci); /依次輸出 13 15 22 14printf("%dn",sum);/輸出 64四、
17、使用 typedef 語(yǔ)句定義數(shù)組類型1. 一維數(shù)組類型的定義語(yǔ)句 一維數(shù)組類型的定義語(yǔ)句的格式: typedef < 元素類型關(guān)鍵字 ><數(shù)組類型名 >< 常量表達(dá)式 > 格式舉例:(1) typedef int Vector10; / 的一維數(shù)組類型 :int10(2) typedef char Strings80; / 的一維數(shù)組類型 :char80(3) typedef short int ArrayN; / 的一維數(shù)組類型,若用 Array定義 Vector 為包含 10 個(gè) int 元素 ,若用 Vector a; 則等價(jià)于 int a10;定義
18、 Strings 為包含 80 個(gè)字符元素,若用 Strings nc; 則等價(jià)于 char nc80; 定義Array為包含N個(gè)短整型元素 d=2,4; 則等價(jià)于 short int dN=2,4;2. 二維數(shù)組類型的定義語(yǔ)句 二維數(shù)組類型的定義語(yǔ)句的格式:typedef <元素類型 ><數(shù)組類型名 >< 常量表達(dá)式 1>< 常量表達(dá)式 2>格式舉例: typedef int Matrix55; /定義 Matrix 為包含 5X 5 的二維/ 整型數(shù)組類型 :int55 ,若用 Matrix a; 則等價(jià)于 int a55;(2) typed
19、ef double DataTypeM+1N+1; /定義 DataType 為包含(M+1)X (N+1)個(gè)雙精度元素的二維數(shù)組類型,若用/DataType sd=0;則等價(jià)于 double sdM+1N+1=0;3. 對(duì)已有類型定義別名利用 typedef 語(yǔ)句不僅能夠定義數(shù)組類型, 而且能夠?qū)σ延蓄愋投x出另一 個(gè)類型名,以此作為原類型的一個(gè)別名。如:(1) typedef int inData; /定義 inData 為 int 的別名,/若用 inData a=5; 則等價(jià)于 int a=5;(2) typedef char ElemType; /定義 ElemType 為 char
20、 的別名,/ 若用 ElemType b8='a','b' 則等價(jià)于 char b8='a','b'(3) typedef char* chPointer; /定義 chPointer 為字符指針類型,/若用 chPointer px=&x; 則等價(jià)于 char* px=&x;小節(jié):一維數(shù)組、二維數(shù)組、定義數(shù)組類型這一講就到這里,同學(xué)們?cè)僖?jiàn)!五、數(shù)組的應(yīng)用1. 數(shù)值計(jì)算利用一維或二維數(shù)組存儲(chǔ)具有一維 (向量)結(jié)構(gòu)的數(shù)據(jù)或二維 (矩陣、表格) 結(jié)構(gòu)的數(shù)組,然后按照一定的規(guī)則進(jìn)行相應(yīng)的計(jì)算。舉例:已知有兩個(gè)數(shù)值矩陣A和
21、B,編一程序計(jì)算出它們的和。7 -5 33 6 -9A= 2 8 -6 B= 2 -8 31 -4 -25 -2 -7分析:由數(shù)學(xué)知識(shí)可知,行數(shù)和列數(shù)分別對(duì)應(yīng)相同的兩個(gè)矩陣可以做加法, 它們的和仍為一個(gè)矩陣, 并且與兩個(gè)加數(shù)矩陣具有相同的行數(shù)和列數(shù)。 在此題中 的兩個(gè)矩陣均為3行X 3列,所以它們的和矩陣同樣為 3行X3列。兩矩陣加法運(yùn)算的規(guī)則是: 求和矩陣中每個(gè)元素的值等于兩個(gè)加數(shù)矩陣中對(duì) 應(yīng)位置上的元素值之和,即Cj =A +Bj ,其中A和B表示兩個(gè)加數(shù)矩陣,C表示它 們的和矩陣。在編寫(xiě)的程序中,首先應(yīng)定義三個(gè)二維數(shù)組,假定分別用標(biāo)識(shí)符a、b 和 c表示,它們分別對(duì)應(yīng)A、B和C這三個(gè)矩陣
22、,并需要根據(jù) A和B的數(shù)據(jù)對(duì)a和b 進(jìn)行初始化;接著根據(jù)a和b計(jì)算出c;最后按照矩陣的行列結(jié)構(gòu)輸出二維數(shù)組 c,它就是對(duì)應(yīng)的矩陣Co根據(jù)分析編寫(xiě)出程序如下:#include<stdio.h>#define N 3/定義矩陣的大小void main()用 a 保存矩陣 A 用 b 保存矩陣 Bint aNN=7,-5,3,2,8,-6,1,-4,-2; /int bNN=3,6,-9,2,-8,3,5,-2,-7; /int cNN; / int i,j; / for(i=0; i<N; i+) /用c保存求和結(jié)果,即矩陣C用 i 和 j 分別作為行、列循環(huán)變量 計(jì)算矩陣 C輸
23、出矩陣 C每個(gè)數(shù)值占 5 個(gè)字符位置每行數(shù)據(jù)后輸出一個(gè)換行for(j=0; j<N; j+) cij=aij+bij; for(i=0; i<N; i+) /for(j=0; j<N; j+) printf("%5d",cij); / printf("n"); / 該程序運(yùn)行時(shí)得到的輸出結(jié)果如下:10 1 -64 0 -36 -6 -92. 統(tǒng)計(jì)利用一維數(shù)組中的每個(gè)元素作為統(tǒng)計(jì) (計(jì)數(shù)) 變量,統(tǒng)計(jì)出相應(yīng)區(qū)間內(nèi)數(shù)據(jù) 的個(gè)數(shù),然后在輸出統(tǒng)計(jì)結(jié)果。舉例:假定需要對(duì)某個(gè)地區(qū)職工的工資狀況進(jìn)行調(diào)查,把工資劃分為 11 個(gè) 區(qū)段,每隔 1000為
24、一個(gè)區(qū)段, 即 0999.99(不含 0)為第 1 區(qū)段, 10001999.99 為第 2 區(qū)段,依次類推, 90009999.99 為第 10 區(qū)段, 10000 及以上為第 11區(qū)段。 編一程序, 首先把調(diào)查得到的一批職工的工資數(shù)據(jù)輸入到一個(gè)數(shù)組中, 然后分別 統(tǒng)計(jì)出每個(gè)區(qū)段內(nèi)的職工人數(shù)及占總職工數(shù)的百分比。分析:由題意可知, 職工工資的統(tǒng)計(jì)區(qū)段共 11 個(gè),為此定義一個(gè)統(tǒng)計(jì)數(shù)組, 假定用 c11 表示,用它的第 1個(gè)元素 c0 統(tǒng)計(jì)工資在 0 999.99 區(qū)段內(nèi)(不含 0)的職工數(shù),用它的第 2 個(gè)元素 c1 統(tǒng)計(jì)工資在 1000.00 1999.99 區(qū)間內(nèi)的職 工數(shù),依次類推,用
25、它的第 11個(gè)元素 c10 統(tǒng)計(jì)工資在 10000及以上區(qū)段內(nèi)的 職工數(shù)。另外,還需要設(shè)置一個(gè)保存所有職工工資的數(shù)組,假定為aNum,用來(lái)最多保存Num個(gè)職工的工資,Num為一個(gè)符號(hào)常量。在程序中,首先定義數(shù)組aNum并為它最多輸入Num個(gè)工資數(shù)據(jù),若工資 小于 0 則結(jié)束輸入;接著定義數(shù)組 c11 并初始化每個(gè)元素值為 0;然后依次讀 取 a 數(shù)組中的每個(gè)元素值,通過(guò)對(duì) 1000整除確定出相應(yīng)的統(tǒng)計(jì)區(qū)段,使得統(tǒng)計(jì) 數(shù)組 c 中相應(yīng)的元素值增 1;最后計(jì)算出每個(gè)區(qū)段的統(tǒng)計(jì)結(jié)果的百分比并輸出。根據(jù)分析編寫(xiě)出程序如下:#include<stdio.h>#include<stdli
26、b.h>#define Num 20void main()doubleaNum=0.0; /定義保存工資的數(shù)組數(shù)組a并初始化為0.0int c11=0; / 定義保存統(tǒng)計(jì)結(jié)果的數(shù)組 c 并初始化為 0 int i=0,j; double x; / 定義相應(yīng)的簡(jiǎn)單變量 printf(" 輸入一批職工的工資數(shù)據(jù) ( 小于等于 0 則結(jié)束 ):n"); while(i<Num) /scanf("%lf",&x);if(x<=0.0) printf(" ai+=x;for(j=0; j<i; j+) /cint k=(i
27、nt)aj/1000; /通過(guò)循環(huán)為數(shù)組 a 輸入數(shù)據(jù)數(shù)據(jù)輸入完畢 !n"); break;中的相應(yīng)下標(biāo)變量的值加 1,完成統(tǒng)計(jì)求出 aj 工資所在的區(qū)間序if(aj<10000) ck+; else c10+;for(j=0; j<10; j+) /輸出前 10 個(gè)區(qū)間內(nèi)的統(tǒng)計(jì)結(jié)果和百分比printf("%8.2Lf-%8.2Lf: ",j*1000.0,j*1000.0+999.99);printf("%d, %5.2Lf%n",cj,cj*1.0/i*100); / 輸出最后一個(gè)區(qū)間內(nèi)的統(tǒng)計(jì)結(jié)果和百分比 printf(&quo
28、t;10000.00及以上: ");printf("%d, %5.2Lf%n",c10,c10*1.0/i*100);3. 排序排序就是對(duì)一組雜亂無(wú)章的數(shù)據(jù)進(jìn)行有序排列的過(guò)程。 首先把初始數(shù)據(jù)保存 到一維數(shù)組中,然后按照一定的排序方法使數(shù)組中的數(shù)據(jù)值按下標(biāo)次序排列有 序,最后按下標(biāo)次序輸出結(jié)果。舉例:已知有 10 個(gè)常數(shù)為 42,65,80,74,36,44,28,70,94,72 ,編一程序, 采用選擇排序的方法,按照從小到大的順序排列并輸出。分析:首先需要把已知的 10 個(gè)常數(shù)存入到一維數(shù)組中,假定該數(shù)組被定義 為 a10 ;接著采用選擇排序的方法對(duì)數(shù)組 a1
29、0 中的 10 個(gè)元素按照其值從小到 大的順序排序,使得元素值的排列次序與下標(biāo)次序相同,即得到a0 < a1 <a2 < . < a9;最后按照下標(biāo)次序顯示出每個(gè)元素的值,它們是按值的從小 到大的次序排列的。具體排序過(guò)程: 對(duì)數(shù)組 a 中的 10 個(gè)元素進(jìn)行選擇排序共需要進(jìn)行 9 次選擇 和交換的過(guò)程, 第 1 次從待排序區(qū)間 a0 a9 中通過(guò)順序比較選擇出一個(gè)最小 值元素,把它與該區(qū)間的第 1 個(gè)元素 a0 交換后, a0 就成為所有 10個(gè)元素中 的最小值。0 1 2 3 4 5 6 7 8 942 65 80 74 36 44 28 70 94 72 /順序比較
30、查找出 a6T最小值28 65 80 74 36 44 42 70 94 72 /a6與 a0 交換第 2 次從新的待排序區(qū)間 a1a9 中通過(guò)順序比較選擇出一個(gè)最小值元素,把它與當(dāng)前區(qū)間的第 1 個(gè)元素 a1 交換后, a1 就成為僅次于 a0 的最小 值元素。0 1 2 3 4 5 6 7 8 928 65 80 74 36 44 42 70 94 72 /T最小值28 36 80 74 65 44 42 70 94 72 /a4順序比較查找出 a4與 a1 交換區(qū)間的第 1個(gè)元素 a2 交換后,a2 就成為僅次于a0 和 a1 的最小值元素同理,在從 a2 a9 中通過(guò)順序比較選擇出一個(gè)
31、最小值元素,把它與當(dāng)前順序比較查找出 a6與 a2 交換,第 3 次第 4 次結(jié)果第 5 次結(jié)果k=i; /給 k 賦初值,for(j=i+1;j<n;j+) / if(aj<ak) k=j; /int x=ai; ai=ak; ak=x; /void main()int i;SelectSort(); / for(i=0; i<n; i+)printf("%d ",ai); / printf("n"); 該程序的運(yùn)行結(jié)果為: 28 36 42 44 65 65 72 74 80 94k 保存當(dāng)前比較得到的最小值元素的下標(biāo) 選擇出當(dāng)前區(qū)
32、間內(nèi)的最小值 ak 條件成立時(shí) k 值被修改 交換 ai 與 ak 的值調(diào)用函數(shù)對(duì)數(shù)組 an 進(jìn)行選擇排序依次輸出數(shù)組 an 中的每個(gè)元素值0 1 2 3 4 5 6 7 8 928 36 80 74 65 44 42 70 94 72 /T最小值28 36 42 74 65 44 80 70 94 72 /a6T最小值28 36 42 44 65 74 80 70 94 72 /T最小值28 36 42 44 65 70 80 74 94 72 /根據(jù)以上分析,編寫(xiě)出此題的完整程序如下: #include<stdio.h> #define n 10int an=42,65,80,
33、74,36,44,28,65,94,72;void SelectSort() / 選擇排序算法 int i,j,k;for(i=0;i<n-1;i+) / 進(jìn)行 n-1 次選擇和交換4. 查找 查找就是從一批數(shù)據(jù)中按照一定的查找方法查找出滿足一定條件的數(shù)據(jù)。 通 常需要把原始數(shù)據(jù)保存到一維數(shù)組中,然后再進(jìn)行查找并得到查找結(jié)果。舉例:假定在一維數(shù)組 a10 中保存著 10個(gè)整數(shù) 42, 55, 73, 28, 48, 66,30, 65, 94, 72,編一程序從中順序查找出具有給定值x的元素,若查找成功則返回該元素的下標(biāo)位置,否則表明查找失敗返回-1。分析:此程序比較簡(jiǎn)單,假定把從一維數(shù)
34、組中順序查找的過(guò)程單獨(dú)用一個(gè)函 數(shù)定義模塊來(lái)實(shí)現(xiàn),把數(shù)組定義和初始化以及調(diào)用該函數(shù)通過(guò)主函數(shù)來(lái)實(shí)現(xiàn),則整個(gè)程序如下:#i nclude<stdio.h>#define Num 10 /假定把數(shù)組中保存的整數(shù)個(gè)數(shù)用符號(hào)常量Num表示int Seque ntialSearch(i nt a, int n, int x) / 從數(shù)組an中順序查找值為x的算法int i;for(i=0; i<n; i+)if(x=ai) return i; /查找成功返回元素ai的下標(biāo)值return -1;/查找失敗返回-1void mai n()int aNum=42,55,73,28,48,66
35、,30,65,94,72;int x,y;while(1) /每循環(huán)一次,從數(shù)組a中查找一個(gè)數(shù)據(jù)printf("從鍵盤(pán)上輸入一個(gè)待查找的整數(shù)(小于等于0則結(jié)束):");scanf("%d",&x); /輸入一個(gè)整數(shù)到x中if(x<=0) printf("程序運(yùn)行結(jié)束!n"); return;y=SequentialSearch(a,Num,x); /返回元素下標(biāo)或-1 賦給 yif(y=-1) pri ntf("查找 %d 失敗!n",x);else printf("查找 %d 成功!下標(biāo)為
36、 dn",x,y);六、字符串1. 字符串的概念定義:用雙引號(hào)括起來(lái)的一串字符。女 如 "abc"," 姓名", "a+b=c","2456.0"存儲(chǔ):用一維字符數(shù)組存儲(chǔ),最后自動(dòng)存儲(chǔ)一個(gè)空字符,即ASCII碼為0的字符,此字符數(shù)組的長(zhǎng)度必須要大于等于所存字符串的長(zhǎng)度加1。例如,char a10;字符數(shù)組a只能存儲(chǔ)長(zhǎng)度小于等于9的字符串,必須在 最后留有一個(gè)位置存儲(chǔ)空字符0'。如存儲(chǔ)"abcc"字符串時(shí),實(shí)際上存儲(chǔ)的是 "abcd0'。利用字符串初始化字符數(shù)組
37、如:char a10= " array"等價(jià)定義:char a10=' a' , ' r', rO' ' a' , ' y','array000001 2 3 4 5 6 7 89存儲(chǔ)表示:0a字符串的輸入和輸出 輸入: gets(a); / / 輸出: puts(a); /等價(jià)于: scanf("%s",a); 鍵盤(pán)輸入不使用雙引號(hào) 以按下回車(chē)鍵結(jié)束,而 scanf 則還以空格結(jié)束 等價(jià)于: printf("%sn",a);利用二維字符數(shù)組存儲(chǔ)若干個(gè)字符
38、串 如: char b310="well", "good", "pass" / for(i=0; i<3; i+) gets(bi); / for(i=0; i<3; i+) puts(bi); /每行存儲(chǔ)一個(gè)字符串 向二維字符數(shù)組 b 輸入 3 個(gè)串 向屏幕輸出 b 中的 3 個(gè)串2. 字符串函數(shù) 對(duì)字符串進(jìn)行比較大小、復(fù)制、連接、求長(zhǎng)度等操作是通過(guò)C語(yǔ)言函數(shù)庫(kù)中 提供的字符串函數(shù)實(shí)現(xiàn)的,使用這些函數(shù)時(shí)必須包含頭文件 string.h 。假定待處理的字符串: char a10= " abcd", b1
39、0=" efg", c10="" 求字符串長(zhǎng)度的函數(shù) strlen(x) 求出字符串 x 的長(zhǎng)度,即所含的字符個(gè)數(shù)。strlen(a); strlen(b); strlen(c); strlen("學(xué)習(xí) ");/4 3 0 4字符串復(fù)制(拷貝)函數(shù) strcpy(x,y) 把字符串 y 復(fù)制到字符串 x 中。strcpy(c,a) /c10的內(nèi)容為 " abcd" ,直接賦值 c=a 不允許strcpy(c,b) /c10 的內(nèi)容變?yōu)?"efg"strcpy(c, "2345.67&q
40、uot;) /c10 的內(nèi)容變?yōu)?"2345.67" 字符串連接函數(shù) strcat(x,y)把字符串 y 復(fù)制到字符串 x 的末尾。strcat(c, "58"); / c10 的內(nèi)容變?yōu)?"2345.6758" strcpy(c, a); strcat(c, b); / c10 的內(nèi)容變?yōu)?"abcdefg" 注意:要確保第 1 個(gè)參數(shù)的字符數(shù)組有足夠的空余空間。 即連接后的字符串 長(zhǎng)度要小于字符數(shù)組長(zhǎng)度。使用 c=c+b 不允許字符串比較函數(shù) strcmp(x,y) 比較字符串 x 和字符串 y 的大小,若 x
41、>y 則返回 1,若 x=y 則返回 0,若 x<y 則返回-1。對(duì)字符串不允許直接使用比較運(yùn)算符,比較過(guò)程逐個(gè)字符進(jìn)行。strcmp(a,b) /比較"abed,和"efg",返回-1 'a':97 'e':101strcmp(a, "abak") /比較"abed'和"abak",返回 1 'c':99 'a':97strcmp(b, "efg") /比較"efg"和"efg",返回0對(duì)應(yīng)字符和長(zhǎng)度相3. 使用字符串函
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年土地合作開(kāi)發(fā)合同-綠色能源項(xiàng)目土地合作開(kāi)發(fā)協(xié)議3篇
- 2024年城市綜合體停車(chē)場(chǎng)租賃及商業(yè)品牌合作合同3篇
- 家庭置換房產(chǎn)合同模板
- 托班角色扮演課程設(shè)計(jì)
- 通信基站維護(hù)招投標(biāo)合同
- 水中螺旋槳課程設(shè)計(jì)
- 換熱器原理的課程設(shè)計(jì)
- 2024年度立體停車(chē)場(chǎng)運(yùn)營(yíng)管理承包合同3篇
- 2024年生態(tài)環(huán)保項(xiàng)目外購(gòu)?fù)练焦こ坛邪鼌f(xié)議3篇
- 模型老房子課程設(shè)計(jì)案
- 新蘇教版四年級(jí)上冊(cè)科學(xué)第三單元《常見(jiàn)的力》全部課件(含4課時(shí))
- 建筑垃圾再生利用方案PPT模板
- 醫(yī)用氧氣使用檢查記錄表
- 張小斐卜鈺許君聰小品《相親之女博士》臺(tái)詞劇本完整版
- 腹腔鏡下腎盂輸尿管成形術(shù)課件
- 熱鍍鋅教學(xué)講解課件
- 中華遲氏通譜字輩排行
- 和解劑-逍遙散(方劑學(xué)課件)
- 調(diào)試單位調(diào)試大綱
- 2023年江蘇高中美術(shù)學(xué)業(yè)水平考試知識(shí)點(diǎn)復(fù)習(xí)提綱(美術(shù)鑒賞)
- 《故鄉(xiāng)》的對(duì)比手法課件
評(píng)論
0/150
提交評(píng)論