


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C語言程序設(shè)計 A課程輔導(dǎo)(4)- 第 4 章 數(shù)組和字符串 主要內(nèi)容:一、數(shù)組的概念二、一維數(shù)組三、二維數(shù)組四、使用 typedef 語句定義數(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ù), 每個數(shù)據(jù)在數(shù)組中用單個下標(biāo)來區(qū)分位置。 如12 , 34, 56, 34, 58, 44, 56就是順序排列的一組數(shù)據(jù),在 C語言中用 一個一維數(shù)組來表示(存儲) ,它包含有 7 個整數(shù),每個整數(shù)對應(yīng)的下標(biāo)依 次為 06
2、,也就是說,它們在數(shù)組中的下標(biāo)位置依次為 06。數(shù)組中的每個 數(shù)據(jù)又稱為元素,則 12為數(shù)組中下標(biāo)為 0的元素, 34是數(shù)組中下標(biāo)為 1 的 元素,依次類推。二維數(shù)組: 具有行列結(jié)構(gòu)的一組表格數(shù)據(jù)。每個數(shù)據(jù)既對應(yīng)有行下標(biāo),又對 應(yīng)有列下標(biāo)。如 3 , 5, 7, 4, 5, 9, 2, -3, 6就是一個二維結(jié)構(gòu)的 數(shù)據(jù),它分為 3行3列,第 1 行的三個元素為 3、5和7,第2行的三個元素 為4、5和9,第3行的三個元素為 2、-3 和6;每行中的 3個元素又對應(yīng)不 同的列號,如第 1 行的三個元素 3、5和 7的列號分別為 1、2和 3。二維表 格數(shù)據(jù)在C語言中用一個二維數(shù)組來表示,其中行
3、、列下標(biāo)都從 0開始。剛 才所說的二維表格數(shù)據(jù)在二維數(shù)組中對應(yīng)的行下標(biāo)為 0-2,列下標(biāo)也為 0-2。 數(shù)組元素: 數(shù)組中的一個數(shù)據(jù),用數(shù)組名和下標(biāo)來表示。如 a5 、 b2ij 等,其中a和b2分別是一維數(shù)組名和二維數(shù)組名,5為該元素的下標(biāo),它是 數(shù)組a中的第6個元素,i和j分別是行下標(biāo)和列下標(biāo),該元素是二維數(shù)組 b2 中第 i+1 行和第 j+1 列位置上的元素。數(shù)組長度:數(shù)組中所含元素的個數(shù)。如一個數(shù)組 a中有10個元素,則a數(shù) 組的長度等于 10。一個二維數(shù)組的長度是它的行數(shù)與列數(shù)的乘積。 假定一個 二維數(shù)組有 5行和 6列數(shù)據(jù),則數(shù)組長度為 30,即包含有 30個數(shù)據(jù)。 下標(biāo)范圍:對
4、于一維數(shù)組來說,只有一個下標(biāo),若數(shù)組中包含有 N個元素, 則下標(biāo)范圍是0N-1。對于二維數(shù)組來說,若數(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ù)組名 是用戶定義的一個標(biāo)識符, 用 它來表示一個數(shù)組。 常量表達(dá)式 只能是通過 #define 命令定義的符號常量,不能 是通過 const 語句定義, 常量表達(dá)式 的值是一個整數(shù), 由它標(biāo)明該一維數(shù)組的長 度,即數(shù)組中所含元素的個
5、數(shù)。 每個元素具有 類型關(guān)鍵字 所指定的類型。 初值表 是用逗號分開的一組表達(dá)式,每個表達(dá)式的值將被依次賦給數(shù)組中的相應(yīng)元素。一維數(shù)組的存儲空間分配 一個數(shù)組被定義后,系統(tǒng)將在內(nèi)存中為它分配一塊能夠存儲 n 個數(shù)據(jù)元素的 存儲空間,其中n為數(shù)組長度。所以數(shù)組所占用的存儲空間的字節(jié)數(shù)應(yīng)等于元素 的個數(shù) n 乘于元素類型的長度。如對于一個含有 10 個 int 型元素的數(shù)組,它將 對應(yīng) 10*4=40 個字節(jié)的存儲空間。一維數(shù)組定義舉例 int a20;/定義整型數(shù)組a,含20個int元素,a0-a19(2) double bMS; /假定MS為已定義的符號常量,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個單精度數(shù)組(8) short int x=1, y=2, z, w4=25+x, -10, x+2*y, 44;/ 既定義有簡單變量,又定義有數(shù)組, w0=26,w1=-10,w2
7、=5維數(shù)組元素的訪問定義了一個數(shù)組, 就相當(dāng)于同時定義了它所含的每個元素。 數(shù)組中的每個元 素又稱為 下標(biāo)變量 ,是通過下標(biāo)運算符(即一對中括號 )來指明和訪問的,具 體格式為:<數(shù)組名 ><表達(dá)式 >中括號運算符內(nèi)的表達(dá)式稱為 下標(biāo)表達(dá)式 ,下標(biāo)表達(dá)式的值稱為該元素下 標(biāo)。表面上看,這與數(shù)組的定義格式類似,但它們出現(xiàn)的位置是不同的,當(dāng)出現(xiàn) 在變量定義語句時則為數(shù)組定義,而當(dāng)出現(xiàn)在一般表達(dá)式中時則為一個元素。變量)的合法格式:(1) a5/(2) ai /(3) aj+/(4) a2*x+1/假定 an 為一個已定義的數(shù)組,則下面都是訪問該數(shù)組的每個元素(下標(biāo)下標(biāo)為一個
8、常數(shù) 5下標(biāo)為一個變量 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(" 從鍵盤輸入 6 個整數(shù) : "); / 提示信息 for(i=0;i<6;i+) scanf("%d",&ai); /6 個整數(shù)依次輸入到數(shù)組 for(i=5;i>=0;i-) printf("%d ",ai); /按相反次序輸出元素值pri
9、ntf("n");若程序運行時,從鍵盤上輸入 3、8、12、6、20和 15這6個常數(shù),則得到的輸入和運行結(jié)果為:/a0-a5/a5-a0/符號常量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 的值,用逗號分開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個整數(shù),列下標(biāo)的
11、取值范圍是 0 n-1之間的n個整數(shù)。如假定一個整型二維數(shù)組 a 的定義為:int a34;則所包含的全部 12個元素如下:a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23二維數(shù)組中元素的個數(shù)二維數(shù)組中所包含的元素個數(shù)又稱為該二維數(shù)組的大小, 它等于該二維數(shù)組 的行數(shù)和列數(shù)的乘積。如:int a105;/個數(shù):10*5=50個數(shù): 5*8=40個數(shù): 5*(M+1)double a58; / char a5M+1; /存儲空間分配系統(tǒng)給一個二維數(shù)組中的所有元素分配存儲空間時, 是首先按行下標(biāo)從小到 大的次序, 行下標(biāo)相同時再按列下標(biāo)從小到大的次序進(jìn)行的
12、。 例如,若定義了一 個 double 型的二維數(shù)組 cMN ,則 c00 元素占有整個數(shù)組存儲空間的第 1 個數(shù)據(jù)單元,c01元素占有整個數(shù)組存儲空間的第2個數(shù)據(jù)單元,cij元素占有整個數(shù)組存儲空間的第 i*N+j 個數(shù)據(jù)單元。每個數(shù)據(jù)單元所包含的字節(jié) 數(shù)有數(shù)據(jù)類型決定。格式舉例 :int a33;/3行x 3列共9個整數(shù)類型的元素 double bMN; / 假定M和N為已定義的整型常量,共 MX N個元素(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 元位被初始化的元素自動為 0定義一維和二維字符數(shù)組g和h二維數(shù)組元素的表示和訪問<數(shù)組名 >< 行下標(biāo)表達(dá)式 >< 列下標(biāo)表達(dá)式 >數(shù)組元素又稱下標(biāo)變量, 二維數(shù)組元素帶有兩個下標(biāo), 又稱雙下標(biāo)變量, 每 個下標(biāo)分別用中括號括起來。 每個下標(biāo)可以是常量, 也可以是變量、 函數(shù)或表達(dá) 式。(1) int a45;/定義二維數(shù)組 a(2) a12=6;/向a12元素賦值6,每個下標(biāo)為常量(3) a22=3*a12+1;/取出 a12 的值 6參與運算,/把賦值號右邊表達(dá)式的值 19賦給 a22 元素中(4)
14、aij-1=aij;/下標(biāo)變量賦值,下標(biāo)為變量或表達(dá)式(5) printf("%dn",a12*a22-3); /輸出表達(dá)式的值 111 到窗口遍歷二維數(shù)組就是先按行從小到大,再按列從小到大的次序依次訪問每個元素例如: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 個元素值 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; /比較每個元素,小者賦 minprintf("%dn",min); / 輸出 min 的值為 5程序功能: 從數(shù)組 b25 中求出所有元素的最小值并輸出。程序 2:#include<stdio.h>#define M 4/定義符號常量 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 語句定義數(shù)組類型1. 一維數(shù)組類型的定義語句 一維數(shù)組類型的定義語句的格式: 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 個 int 元素 ,若用 Vector a; 則等價于 int a10;定義
18、 Strings 為包含 80 個字符元素,若用 Strings nc; 則等價于 char nc80; 定義Array為包含N個短整型元素 d=2,4; 則等價于 short int dN=2,4;2. 二維數(shù)組類型的定義語句 二維數(shù)組類型的定義語句的格式:typedef <元素類型 ><數(shù)組類型名 >< 常量表達(dá)式 1>< 常量表達(dá)式 2>格式舉例: typedef int Matrix55; /定義 Matrix 為包含 5X 5 的二維/ 整型數(shù)組類型 :int55 ,若用 Matrix a; 則等價于 int a55;(2) typed
19、ef double DataTypeM+1N+1; /定義 DataType 為包含(M+1)X (N+1)個雙精度元素的二維數(shù)組類型,若用/DataType sd=0;則等價于 double sdM+1N+1=0;3. 對已有類型定義別名利用 typedef 語句不僅能夠定義數(shù)組類型, 而且能夠?qū)σ延蓄愋投x出另一 個類型名,以此作為原類型的一個別名。如:(1) typedef int inData; /定義 inData 為 int 的別名,/若用 inData a=5; 則等價于 int a=5;(2) typedef char ElemType; /定義 ElemType 為 char
20、 的別名,/ 若用 ElemType b8='a','b' 則等價于 char b8='a','b'(3) typedef char* chPointer; /定義 chPointer 為字符指針類型,/若用 chPointer px=&x; 則等價于 char* px=&x;小節(jié):一維數(shù)組、二維數(shù)組、定義數(shù)組類型這一講就到這里,同學(xué)們再見!五、數(shù)組的應(yīng)用1. 數(shù)值計算利用一維或二維數(shù)組存儲具有一維 (向量)結(jié)構(gòu)的數(shù)據(jù)或二維 (矩陣、表格) 結(jié)構(gòu)的數(shù)組,然后按照一定的規(guī)則進(jìn)行相應(yīng)的計算。舉例:已知有兩個數(shù)值矩陣A和
21、B,編一程序計算出它們的和。7 -5 33 6 -9A= 2 8 -6 B= 2 -8 31 -4 -25 -2 -7分析:由數(shù)學(xué)知識可知,行數(shù)和列數(shù)分別對應(yīng)相同的兩個矩陣可以做加法, 它們的和仍為一個矩陣, 并且與兩個加數(shù)矩陣具有相同的行數(shù)和列數(shù)。 在此題中 的兩個矩陣均為3行X 3列,所以它們的和矩陣同樣為 3行X3列。兩矩陣加法運算的規(guī)則是: 求和矩陣中每個元素的值等于兩個加數(shù)矩陣中對 應(yīng)位置上的元素值之和,即Cj =A +Bj ,其中A和B表示兩個加數(shù)矩陣,C表示它 們的和矩陣。在編寫的程序中,首先應(yīng)定義三個二維數(shù)組,假定分別用標(biāo)識符a、b 和 c表示,它們分別對應(yīng)A、B和C這三個矩陣
22、,并需要根據(jù) A和B的數(shù)據(jù)對a和b 進(jìn)行初始化;接著根據(jù)a和b計算出c;最后按照矩陣的行列結(jié)構(gòu)輸出二維數(shù)組 c,它就是對應(yīng)的矩陣Co根據(jù)分析編寫出程序如下:#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)變量 計算矩陣 C輸
23、出矩陣 C每個數(shù)值占 5 個字符位置每行數(shù)據(jù)后輸出一個換行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"); / 該程序運行時得到的輸出結(jié)果如下:10 1 -64 0 -36 -6 -92. 統(tǒng)計利用一維數(shù)組中的每個元素作為統(tǒng)計 (計數(shù)) 變量,統(tǒng)計出相應(yīng)區(qū)間內(nèi)數(shù)據(jù) 的個數(shù),然后在輸出統(tǒng)計結(jié)果。舉例:假定需要對某個地區(qū)職工的工資狀況進(jìn)行調(diào)查,把工資劃分為 11 個 區(qū)段,每隔 1000為
24、一個區(qū)段, 即 0999.99(不含 0)為第 1 區(qū)段, 10001999.99 為第 2 區(qū)段,依次類推, 90009999.99 為第 10 區(qū)段, 10000 及以上為第 11區(qū)段。 編一程序, 首先把調(diào)查得到的一批職工的工資數(shù)據(jù)輸入到一個數(shù)組中, 然后分別 統(tǒng)計出每個區(qū)段內(nèi)的職工人數(shù)及占總職工數(shù)的百分比。分析:由題意可知, 職工工資的統(tǒng)計區(qū)段共 11 個,為此定義一個統(tǒng)計數(shù)組, 假定用 c11 表示,用它的第 1個元素 c0 統(tǒng)計工資在 0 999.99 區(qū)段內(nèi)(不含 0)的職工數(shù),用它的第 2 個元素 c1 統(tǒng)計工資在 1000.00 1999.99 區(qū)間內(nèi)的職 工數(shù),依次類推,用
25、它的第 11個元素 c10 統(tǒng)計工資在 10000及以上區(qū)段內(nèi)的 職工數(shù)。另外,還需要設(shè)置一個保存所有職工工資的數(shù)組,假定為aNum,用來最多保存Num個職工的工資,Num為一個符號常量。在程序中,首先定義數(shù)組aNum并為它最多輸入Num個工資數(shù)據(jù),若工資 小于 0 則結(jié)束輸入;接著定義數(shù)組 c11 并初始化每個元素值為 0;然后依次讀 取 a 數(shù)組中的每個元素值,通過對 1000整除確定出相應(yīng)的統(tǒng)計區(qū)段,使得統(tǒng)計 數(shù)組 c 中相應(yīng)的元素值增 1;最后計算出每個區(qū)段的統(tǒng)計結(jié)果的百分比并輸出。根據(jù)分析編寫出程序如下:#include<stdio.h>#include<stdli
26、b.h>#define Num 20void main()doubleaNum=0.0; /定義保存工資的數(shù)組數(shù)組a并初始化為0.0int c11=0; / 定義保存統(tǒng)計結(jié)果的數(shù)組 c 并初始化為 0 int i=0,j; double x; / 定義相應(yīng)的簡單變量 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; /通過循環(huán)為數(shù)組 a 輸入數(shù)據(jù)數(shù)據(jù)輸入完畢 !n"); break;中的相應(yīng)下標(biāo)變量的值加 1,完成統(tǒng)計求出 aj 工資所在的區(qū)間序if(aj<10000) ck+; else c10+;for(j=0; j<10; j+) /輸出前 10 個區(qū)間內(nèi)的統(tǒng)計結(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); / 輸出最后一個區(qū)間內(nèi)的統(tǒng)計結(jié)果和百分比 printf(&quo
28、t;10000.00及以上: ");printf("%d, %5.2Lf%n",c10,c10*1.0/i*100);3. 排序排序就是對一組雜亂無章的數(shù)據(jù)進(jìn)行有序排列的過程。 首先把初始數(shù)據(jù)保存 到一維數(shù)組中,然后按照一定的排序方法使數(shù)組中的數(shù)據(jù)值按下標(biāo)次序排列有 序,最后按下標(biāo)次序輸出結(jié)果。舉例:已知有 10 個常數(shù)為 42,65,80,74,36,44,28,70,94,72 ,編一程序, 采用選擇排序的方法,按照從小到大的順序排列并輸出。分析:首先需要把已知的 10 個常數(shù)存入到一維數(shù)組中,假定該數(shù)組被定義 為 a10 ;接著采用選擇排序的方法對數(shù)組 a1
29、0 中的 10 個元素按照其值從小到 大的順序排序,使得元素值的排列次序與下標(biāo)次序相同,即得到a0 < a1 <a2 < . < a9;最后按照下標(biāo)次序顯示出每個元素的值,它們是按值的從小 到大的次序排列的。具體排序過程: 對數(shù)組 a 中的 10 個元素進(jìn)行選擇排序共需要進(jìn)行 9 次選擇 和交換的過程, 第 1 次從待排序區(qū)間 a0 a9 中通過順序比較選擇出一個最小 值元素,把它與該區(qū)間的第 1 個元素 a0 交換后, a0 就成為所有 10個元素中 的最小值。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 中通過順序比較選擇出一個最小值元素,把它與當(dāng)前區(qū)間的第 1 個元素 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個元素 a2 交換后,a2 就成為僅次于a0 和 a1 的最小值元素同理,在從 a2 a9 中通過順序比較選擇出一個
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"); 該程序的運行結(jié)果為: 28 36 42 44 65 65 72 74 80 94k 保存當(dāng)前比較得到的最小值元素的下標(biāo) 選擇出當(dāng)前區(qū)
32、間內(nèi)的最小值 ak 條件成立時 k 值被修改 交換 ai 與 ak 的值調(diào)用函數(shù)對數(shù)組 an 進(jìn)行選擇排序依次輸出數(shù)組 an 中的每個元素值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ù)以上分析,編寫出此題的完整程序如下: #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個整數(shù) 42, 55, 73, 28, 48, 66,30, 65, 94, 72,編一程序從中順序查找出具有給定值x的元素,若查找成功則返回該元素的下標(biāo)位置,否則表明查找失敗返回-1。分析:此程序比較簡單,假定把從一維數(shù)
34、組中順序查找的過程單獨用一個函 數(shù)定義模塊來實現(xiàn),把數(shù)組定義和初始化以及調(diào)用該函數(shù)通過主函數(shù)來實現(xiàn),則整個程序如下:#i nclude<stdio.h>#define Num 10 /假定把數(shù)組中保存的整數(shù)個數(shù)用符號常量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中查找一個數(shù)據(jù)printf("從鍵盤上輸入一個待查找的整數(shù)(小于等于0則結(jié)束):");scanf("%d",&x); /輸入一個整數(shù)到x中if(x<=0) printf("程序運行結(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. 字符串的概念定義:用雙引號括起來的一串字符。女 如 "abc"," 姓名", "a+b=c","2456.0"存儲:用一維字符數(shù)組存儲,最后自動存儲一個空字符,即ASCII碼為0的字符,此字符數(shù)組的長度必須要大于等于所存字符串的長度加1。例如,char a10;字符數(shù)組a只能存儲長度小于等于9的字符串,必須在 最后留有一個位置存儲空字符0'。如存儲"abcc"字符串時,實際上存儲的是 "abcd0'。利用字符串初始化字符數(shù)組
37、如:char a10= " array"等價定義:char a10=' a' , ' r', rO' ' a' , ' y','array000001 2 3 4 5 6 7 89存儲表示:0a字符串的輸入和輸出 輸入: gets(a); / / 輸出: puts(a); /等價于: scanf("%s",a); 鍵盤輸入不使用雙引號 以按下回車鍵結(jié)束,而 scanf 則還以空格結(jié)束 等價于: printf("%sn",a);利用二維字符數(shù)組存儲若干個字符
38、串 如: char b310="well", "good", "pass" / for(i=0; i<3; i+) gets(bi); / for(i=0; i<3; i+) puts(bi); /每行存儲一個字符串 向二維字符數(shù)組 b 輸入 3 個串 向屏幕輸出 b 中的 3 個串2. 字符串函數(shù) 對字符串進(jìn)行比較大小、復(fù)制、連接、求長度等操作是通過C語言函數(shù)庫中 提供的字符串函數(shù)實現(xiàn)的,使用這些函數(shù)時必須包含頭文件 string.h 。假定待處理的字符串: char a10= " abcd", b1
39、0=" efg", c10="" 求字符串長度的函數(shù) strlen(x) 求出字符串 x 的長度,即所含的字符個數(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 個參數(shù)的字符數(shù)組有足夠的空余空間。 即連接后的字符串 長度要小于字符數(shù)組長度。使用 c=c+b 不允許字符串比較函數(shù) strcmp(x,y) 比較字符串 x 和字符串 y 的大小,若 x
41、>y 則返回 1,若 x=y 則返回 0,若 x<y 則返回-1。對字符串不允許直接使用比較運算符,比較過程逐個字符進(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對應(yīng)字符和長度相3. 使用字符串函
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年12月2025全國工商聯(lián)直屬單位公開招聘9人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解-1
- 南充職業(yè)技術(shù)學(xué)院《教師職業(yè)技能訓(xùn)練Ⅲ》2023-2024學(xué)年第二學(xué)期期末試卷
- 鎮(zhèn)江市高等專科學(xué)校《電子競技用戶分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 上饒職業(yè)技術(shù)學(xué)院《日語視聽說》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川衛(wèi)生康復(fù)職業(yè)學(xué)院《生物化學(xué)(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南錫業(yè)職業(yè)技術(shù)學(xué)院《工程學(xué)導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院《數(shù)值計算與語言實訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 梁板粘碳纖維加固施工方案
- 遼東學(xué)院《西方馬克思主義專題》2023-2024學(xué)年第二學(xué)期期末試卷
- 統(tǒng)編版語文一年級下冊第六單元10古詩二首-池上 課件
- 建設(shè)工程前期工作咨詢費收費計算表
- 行為矯正技術(shù)-課件
- 八年級物理下冊《實驗題》專項練習(xí)題及答案(人教版)
- 腦血管造影術(shù)后病人的護(hù)理查房
- 5.0Mt-a煉焦煤選煤廠初步設(shè)計-畢業(yè)論文
- 美術(shù)高考色彩備考教學(xué)策略
- 2023智聯(lián)招聘行測題庫
- 中國工筆花鳥畫
- T型廣告牌預(yù)算表
- 教學(xué)設(shè)計心肺復(fù)蘇
- 國內(nèi)外裝配式建筑發(fā)展現(xiàn)狀研究共3篇
評論
0/150
提交評論