




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第七章 數(shù) 組,本章要點: 1.建立數(shù)組的概念; 2.掌握一維數(shù)組和多維數(shù)組的定義; 3.掌握數(shù)組的初始化和引用; 4.掌握字符串與字符數(shù)組. 5. 掌握用數(shù)組進行編程的技術(shù)。,數(shù)組的概念,1. 問題的提出 假設(shè)我們將26個數(shù)分別存放在26個變量中,要計算26個變量的和,如何做? 將26個變量逐個加起來? 能否使用循環(huán)語句? for(sum=0,i=0;i26;i+) sum=sum+ai; 正確嗎?,2. 使用數(shù)組解決問題 定義一個變量,包含26個數(shù)據(jù),稱為數(shù)組變量。 main( ) int i, sum = 0, a26; for( i =0; i 26; i+) scanf(“%d”,
2、,數(shù)組的基本概念:,1、數(shù)組:一組具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序的集合。 2、數(shù)組元素:數(shù)組中的元素。數(shù)組中的每一個數(shù)組元素具有相同的名稱,不同的下標(biāo),可以作為單個變量使用。在定義一個數(shù)組后,在內(nèi)存中使用一片連續(xù)的空間依次存放數(shù)組的各個元素。,3、數(shù)組的下標(biāo):是數(shù)組元素的位置的一個索引或指示。 4、數(shù)組的維數(shù):數(shù)組元素下標(biāo)的個數(shù)。根據(jù)數(shù)組的維數(shù)可以將數(shù)組分為一維、二維、三維、多維數(shù)組。 數(shù)組是同類型變量的集合,共用一個名字,用下標(biāo)區(qū)分; 每個變量稱作數(shù)組元素; 按下標(biāo)遞增順序在內(nèi)存中存放; 使用幾個下標(biāo)區(qū)分變量,就稱是幾維數(shù)組。 一維數(shù)組與數(shù)學(xué)中的數(shù)列對應(yīng),二維數(shù)組與矩陣對應(yīng)。很少使用三維及三維
3、以上的數(shù)組。,7.1 一位數(shù)組的定義和引用 7.1.1一維數(shù)組的定義 定義方式: 類型說明符 數(shù)組名 常量表達式 例:int a10 它表示數(shù)組名為a,此數(shù)組有10個元素。說明: 說明: (1)數(shù)組名定義規(guī)則和變量名相同; (2)數(shù)組名的常量表達式用方括弧而不是圓括弧括起來 (3)常量表達式表示元素的個數(shù),即數(shù)組長度。例如: a10表示a數(shù)組共有10個元素,下標(biāo)從0開始分別 為:a0,a1,a2,a3,a4,a5,a6,a7,a8,a9 注意:沒有a10,(4)常量表達式中可以包括常量和符號常量,不能包含 變量,即數(shù)組的大小不能依賴于程序過程中變量的值。 例如:int n; scanf(“%d
4、”, 是不合法的。 7.1.2 一維數(shù)組元素的引用 C語言規(guī)定,只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組。 數(shù)組元素的表示形式為: 數(shù)組名下標(biāo) 其中下標(biāo)可以是整型常量或整型表達式。例如: a0=a5+a7-a2*3,例7.1 數(shù)組元素的引用 main ( ) int i, a10; for ( i = 0; i = 0; i-) printf(“%d”, ai); 本例使a0到a9的值為09,然后按逆序輸出。,7.1.3 一維數(shù)組的初始化,1、在定義數(shù)組時對數(shù)組元素賦以初值 方法:將初值依次寫在花括號 內(nèi)。 例如: int a4=2,4,6,8,其中:a0=2, a1=4, a2=6, a3
5、=8,(1)可以只給一部分元素賦值。 例如:int a10=0,1,2,3,4; 其中:a0=0, a1=1, a2=2, a3=3, a4=4, a5=0, a6=0, a7=0, a8=0, a9=0 (2)如果想使一個數(shù)組中全部元素值為0,可以寫成: int a10=0, 0, 0, 0, 0, 0, 0, 0, 0, 0 不能寫成: int a10=0*10,注意:定義成static數(shù)組,不賦初值,系統(tǒng)會自動將全部元素賦以0值。(此處后面有介紹),(3)在對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度。 例如: int a5=0,1,2,3,4 可以寫成: int a =0,1,2,3,4
6、 但是如果被定義的數(shù)組長度與提供初值的個數(shù)不相同時,則數(shù)組長度不能省略。 例如: int a10=0,1,2,3,4; 只初始化了前5個元素,后5個元素為0。,7.1.4 一維數(shù)組程序舉例,例7.2 用數(shù)組來處理求Fibonacci數(shù)列問題。 main( ) int i; int f20 = 1, 1; for( i = 2; i 20; i+) fi = fi-2 + fi-1; for ( i = 0; i 20; i+) if ( i % 5 = 0) printf(“n”); printf(“%12d”, fi); ,例7.3 用冒泡法對10個數(shù)排序(由小到大)。 冒泡法:對將進行排序
7、的數(shù),相鄰兩個數(shù)進行比較,如果滿足次序要求,保持兩者位置不變,否則交換位置;,第一次 比較,第二次 比較,第三次 比較,第四次 比較,第五次 比較,第一次冒泡排序的結(jié)果,n個數(shù)經(jīng)過一次冒泡排序后,最大數(shù)(最小數(shù)) 將被交換到最后位置,但前面n-1數(shù)仍然無 序。下一次排序最后一位不必參加排序。,第一次冒泡排序,算法結(jié)論: 如果有n個數(shù)參加冒泡排序,則要進行n-1趟比較。 在第j趟比較中有n-j+1個數(shù)參加排序,要進行n-j次兩兩比 較。本例中第2趟有5個數(shù)參加排序,進行了4次比較。,第一次比較,第二次比較,第三次比較,第四次比較,第二次冒泡排序的結(jié)果,第二次冒泡排序,main( ) int a1
8、0; int i, j, t; printf(“input 10 numbers:n”); for ( i = 0; i ai+1 ) t = ai; ai = ai+1; ai+1 = t; printf(“the sorted numbers:n”); for( i = 0; i 10; i+) printf(“%d”,ai); ,7.2 二維數(shù)組的定義和引用,7.2.1 二維數(shù)組的定義 二維數(shù)組定義的一般形式: 類型說明符 數(shù)組名 常量表達式 常量表達式 例: float a34, b510; 此句定義了一個名為a的3行4列的實數(shù)數(shù)組和一個名為b的5行10列的實數(shù)的數(shù)組。 注意:不能寫成
9、:float a3,4, b5,10; 在C語言中,可以把二維數(shù)組看成特殊的一維數(shù)組,即把把一行看成一個元素,這些特殊的元素組成以一個特殊的一維數(shù)組。比如:我們可以把二維數(shù)組a34看成一個由 a0, a1, a2元素組成的數(shù)組,每個元素又由四個元素組成,例如a0由a00,a01, a02, a03組成。,二維數(shù)組的存放順序: 在C語言中,二維數(shù)組中的元素是按行存放的。 例如: a23的存放形式為,二維數(shù)組是多維數(shù)組的基礎(chǔ)。其它多維數(shù)組的定義和元素存放形式類似二維數(shù)組。,低,高,7.2.2 二維數(shù)組的引用,二維數(shù)組的元素的表示形式為: 數(shù)組名 下標(biāo) 下標(biāo) 例如:a23表示的是a二維數(shù)組的第3行第
10、4列的元素。 此處我們要特別注意下標(biāo)不要超界。 注意: 1)下標(biāo)可以是整型表達式,如a2-12*2-1; 2)不能寫成a2,3的形式;,7.2.3 二維數(shù)組的初始化,(1)按行給二維數(shù)組賦初值。例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; (2)可以將所有數(shù)據(jù)寫在一個花擴弧內(nèi),系統(tǒng)將按數(shù)組排 列順序?qū)Ω髟刭x初值。例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; (3)可以對部分元素賦初值。例如: int a34=1,5,9; 它的作用是只對每行第一列賦初值,其他元素自動為0, 結(jié)果為:,也可以對各行中的某一元素賦初值,其他元素自
11、動為0 : int a34=1,0,6,0,0,11; 結(jié)果為:,(4)如果對全部元素都賦初值,則定義數(shù)組時對第一維的長度可以不指定,但第二維的長度不能省。例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; 可以寫成: int a 4=1,2,3,4,5,6,7,8,9,10,11,12;,例7.4 將二維數(shù)組 行和列元素互換,存到另一個二 維數(shù)組中。,7.2.4 二維數(shù)組程序舉例,main( ) int a23=1,2,3,4,5,6; int b32, i, j; printf(“array a:n”); for ( i = 0; i = 1; i+) for(
12、j =0; j = 2; j+) printf(“%5d”,aij); bji=aij; printf(“n”); ,printf(“array b:n”); for ( i = 0; i = 2; i+) for( j = 0; j = 1; j+) printf(“%5d”, bij); printf(“n”); ,例7.5 有一個3X4的矩陣,要求編程求出其中最大的那個元素的值,以及其所在的行號和列號;,main ( ) int i, j, row = 0, colum = 0, max; int a34 = 1, 2, 3, 4, 9, 8, 7, 6, -10, 10, -5, 2
13、; max = a00; for( i = 0; i max ) max = aij; row = i; colum = j; printf(“max=%d,row=%d,colum=%dn”,max,row,colum); ,7.3 字符數(shù)組,7.3.1 字符數(shù)組的定義 字符數(shù)組的定義類似前面的數(shù)組定義。例如: char c4; c0=S; c1=U; c2=S; c3=E; 上句的作用為:定義C為字符數(shù)組,包含4個元素。賦值后的狀態(tài)為: 在C語言中,字符型和整型是互相通用的,因此上述定義句可以寫為: int c4,也可以定義和初始化一個二維字符數(shù)組,方法類似前述。 例如: char dia
14、mond55= , , *, , *, , *, *, , , , * , , *, , *, , , *; 7.3.3 字符數(shù)組的引用 可以引用字符數(shù)組中的一個元素,得到一個字符。 例7.6;輸出一個字符串 main ( ) char c10I, , a, m, ,a, , b,o,y; int i; for( i = 0; i 10; i+) printf(“%c”, ci); printf(“n”); ,例7.7;輸出一個 main ( ) char diamond55= , , *, , *, , *, *, , , , * , , *, , *, , , *; int i, j; f
15、or( i = 0; i 5; i+) for ( j =0; j 5; j+) printf(“%c”, diamondij); printf(“n”); 運行結(jié)果為: * * * * * * * *,7.3.4 字符串和字符結(jié)束標(biāo)志 在C語言中,將字符串作為字符數(shù)組來處理。 為了測定字符串的實際長度C語言規(guī)定了一個“字符結(jié)束標(biāo)志”,以字符0代表,由它前面的字符組成字符串。 系統(tǒng)字符串常量也自動加一個0作為結(jié)束符。 例如“C Program”共有9個字符,但在內(nèi)存中占10個字節(jié),最后一個字節(jié)0是由系統(tǒng)自動加上的。 結(jié)束標(biāo)志不會產(chǎn)生附加的操作或增加有效字符,只起一個供辨別的標(biāo)志,另一種方法用字
16、符串常量來使字符數(shù)組初始化。 例如 char c =“I am happy”; 也可以省略花括弧,直接寫成 char c =“I am happy”; (注意字符串的兩端是用雙引號而不是單引號括起來的)。 注意:上述字符串占用的空間長度是11而不是10。因為字符串常量的最后由系統(tǒng)加上一個0。 上述的初始化與下面的初始化等價。 char c =I, , a, m , , h , a , p , p , y , 0; 而不與下面的等價: char c =I, , a, m , , h , a , p , p , y ; 前者的長度為11,后者的長度為10。,需要說明的是:字符數(shù)組并不要求它的最后一
17、個字符為0,甚至可以不包含0 . 像以下這樣寫完全是合法的. char c5= C, h, i , n , a ; 是否需要加上0,完全根據(jù)需要決定。 系統(tǒng)對字符串常量自動加上一個0,因此,為了使處理方法一致,便于測定字符串的實際長度,以及在程序中作相應(yīng)的處理,在字符數(shù)組也常常人為加上一個0,如: char c6= C, h, i , n , a, 0 ;,7.3.5 字符數(shù)組的輸入輸出,字符數(shù)組的輸入輸出可以有兩種方法: (1)逐個字符輸入輸出。用格式符“%c”輸入或輸出一個字符。如: main ( ) char c10I, , a, m, ,a, , b,o,y; int i; for (
18、 i = 0; i 10; i+) printf(“%c”, ci); printf(“n”); (2)將整個字符串一次輸入或輸出。用“%s”格式符。如: char c = “china”; printf(“%s”,c);,注意: 1.輸出字符不包括結(jié)束符0 ; 2.用“%s”格式符輸出字符串時,printf函數(shù)中的輸出項是字符數(shù)組名,而不是字符元素名。比如不能寫成: printf(“%s”,c0); 正確寫法為: printf(“%s”,c); 3.如果數(shù)組長度大于字符串實際長度,也只輸出到遇0 結(jié)束。 4.如果一個字符數(shù)組中含一個以上的0 ,則遇到第一個0 輸出就結(jié)束。,7.3.6 字符串
19、處理函數(shù),在C的函數(shù)庫中提供了一些用來處理字符串的函數(shù),使用方便。幾乎所有版本的C都提供這些函數(shù)。下面是幾種常用的函數(shù)。 1.puts(字符數(shù)組) 作用:將一個字符串(以0結(jié)束的字符序列)輸出到終端。 puts函數(shù)用的不多。puts函數(shù)輸出字符串中可以包含轉(zhuǎn)義字符。 2.gets(字符數(shù)組), 作用:從終端輸入一個字符串到字符數(shù)組,并且得到一個函數(shù)值。該函數(shù)值是字符數(shù)組的起始地址。 如執(zhí)行下面的函數(shù): gets(str) 從鍵盤輸入:Computer 將輸入的字符串” Computer”送給字符數(shù)組str(請注意送給數(shù)組的共有9個字符,而不是8個字符),函數(shù)值為字符數(shù)組str的起始地址。注意:
20、用puts和gets函數(shù)只能輸入或輸出一個字符串,,3.strcat(字符數(shù)組1,字符數(shù)組2) 作用是:連接兩個字符數(shù)組中的字符串,把字符串2接到字符串1的后面,結(jié)果放在字符數(shù)組1中,函數(shù)調(diào)用后得到一個函數(shù)值字符數(shù)組1的地址。 例如: char str130=“Peoples Repubnic of ”; char str2 =“China”; printf(%s,strcat(str1,str2); 輸出: Peoples Republic of China 連接前后的狀況見下圖所示。,說明: (1)字符數(shù)組1必須足夠大,以便容納連接后的新字符串。 (2)連接前兩個字符串的后面都有一個0 ,
21、連接時將字符串1后面的0取消,只在新串最后保留一個0 。,4.strcpy(字符數(shù)組1,字符串2) 作用:將字符串2復(fù)制到字符數(shù)組1中去, 例如:char str110,str2 =“China”); strcpy(strl,str2); 執(zhí)行后,str1的狀態(tài)如圖所示。 說明: (1)字符數(shù)組1必須定義得足夠大長度不應(yīng)小于字符串2的長度; (2)“字符數(shù)組1”必須寫成數(shù)組名形式(如str1),“字符串2”可以是字符數(shù)組名,也可以是一個字符串常量。如: strcpy(str1, “China”); (3)復(fù)制時連同字符串后面的0一起復(fù)制到字符數(shù)組1中。 (4)不能用賦值語句將一個字符串常量或字
22、符數(shù)組直接給一個字符數(shù)組。下面兩行都是不合法的: str1=“China”; str1=str2; 而只能用strcpy函數(shù)處理。用賦值語句只能將一個字符賦給一個字符型變量或字符 數(shù)組元素。,5. strcmp(字符串1,字符串2) 作用:比較字符串1和字符串2。 例如: strcmp(str1,str2); strcmp(”China”,”Korea”); strcmp(str1, “Beijing”); 字符串比較規(guī)則: 對兩個字符串自左至右逐個字符相比。按ASCII碼值大小比較,直到出現(xiàn)不同的字符或遇到“0“為止。如全部字符相同,則認為相等;若出現(xiàn)不相同的字符,則以第一個不相同的字符的比
23、較結(jié)果為準。例如: “A”字符串2,函數(shù)值為一正整數(shù)。 (3)如果字符串1字符串2,函數(shù)值為一負整數(shù)。,注意:對兩個字符串比較,不能用以下形式 if(str1=str2) printf(“yes”); 而只能用 if(strcmp(str1,str2)=0) printf(“yes”); 6.strlen(字符數(shù)組) 作用:測試字符串長度的函數(shù)函數(shù)的值為字符串中的實際長度,不包括0在內(nèi)。如: char str10=“china”; printf(“%d”,strlen(str); 輸出結(jié)果不是10也不是6,而是5。也可以直接測字符串常過的長度,如 strlen(“china”); 7.strl
24、wr(字符串) 作用是將字符串中的大寫字母換成小寫字母。 8. strupr(字符串) 作用是將字符串中的小寫字母換成大寫字母。,強調(diào):庫函數(shù)并非C語言本身的組成部分,而是人們?yōu)槭褂梅奖愣帉憽⑻峁┐蠹沂褂玫墓埠瘮?shù)時系統(tǒng)捉供的函數(shù) 數(shù)量和函數(shù)名、函數(shù)功能都不盡相同,使用時要小心,心要時查一下庫函數(shù)手冊。當(dāng)然,有一些基本的函數(shù)。(包括函數(shù)名和函數(shù)功能)不同的系統(tǒng)所提供的是相同的,這就為程序的通用性提供了基礎(chǔ)。,7.3.7字符數(shù)組應(yīng)用舉例,例7.8輸入一行字符,統(tǒng)計其中有多少個單詞,單詞之間用空格分隔開 解題的思路: 單詞間的數(shù)目義由空格出現(xiàn)的次數(shù)決定(連續(xù)的空格做為出現(xiàn)一次空格;開頭的空格不統(tǒng)計在內(nèi)) 如果測出某一個字符為
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC TS 20540:2025 EN Information security,cybersecurity and privacy protection - Testing cryptographic modules in their field
- 2025至2030中國用藥依從性管理行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國生物硬腦膜修復(fù)行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國特藥配送行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國特殊和擠壓石墨行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 多元化創(chuàng)業(yè)培訓(xùn)與技能提升計劃
- 間冷塔培訓(xùn)課件
- 心理評估在課程設(shè)計中的重要性
- 教育投資在提升國民素質(zhì)中的作用評估
- 教育技術(shù)在教學(xué)管理中的價值與作用
- 安保工作月度總結(jié)
- 開業(yè)美容項目活動方案
- 2025年技術(shù)玻璃制品行業(yè)市場調(diào)研報告
- 2025至2030高純氯化鉀行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025年中國自由鍛件行業(yè)發(fā)展運行現(xiàn)狀及投資潛力預(yù)測報告
- 醫(yī)學(xué)美容技術(shù)專業(yè)教學(xué)標(biāo)準(高等職業(yè)教育專科)2025修訂
- QGDW11970.7-2023輸變電工程水土保持技術(shù)規(guī)程第7部分水土保持設(shè)施質(zhì)量檢驗及評定
- 變電站創(chuàng)優(yōu)工程匯報
- DB62T 4134-2020 高速公路服務(wù)區(qū)設(shè)計規(guī)范
- T/CACE 0129-2024竹編安全帽
- 2025全國農(nóng)業(yè)(水產(chǎn))行業(yè)職業(yè)技能大賽(水生物病害防治員)選拔賽試題庫(含答案)
評論
0/150
提交評論