版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第7章 數(shù)組 第7章本章要點(diǎn)v了解數(shù)組了解數(shù)組v理解怎樣定義數(shù)組以及怎樣操縱數(shù)組中的數(shù)據(jù)理解怎樣定義數(shù)組以及怎樣操縱數(shù)組中的數(shù)據(jù)v理解理解“數(shù)組下標(biāo)越界數(shù)組下標(biāo)越界”的含義的含義v了解數(shù)組處理中的一些限制了解數(shù)組處理中的一些限制v了解怎樣將數(shù)組作為參數(shù)傳遞給函數(shù)了解怎樣將數(shù)組作為參數(shù)傳遞給函數(shù)v理解怎樣使用字符串函數(shù)處理理解怎樣使用字符串函數(shù)處理C-stringv了解怎樣向了解怎樣向C-string輸入數(shù)據(jù)以及怎樣從輸入數(shù)據(jù)以及怎樣從C-string輸出數(shù)據(jù)輸出數(shù)據(jù)v理解怎樣操縱二維數(shù)組中的數(shù)據(jù)理解怎樣操縱二維數(shù)組中的數(shù)據(jù)v了解多維數(shù)組了解多維數(shù)組第7章問(wèn)題的提出v統(tǒng)計(jì)某一地區(qū)每歲年齡的人數(shù),
2、以及總?cè)藬?shù),假統(tǒng)計(jì)某一地區(qū)每歲年齡的人數(shù),以及總?cè)藬?shù),假定不超過(guò)定不超過(guò)120歲。歲。v用用120個(gè)變量:個(gè)變量: int age1, age2, age3, . age119, age120第7章程序age1=0;age2=0; cout age1endl; cout age2x; cout age1200)&(xx;程序結(jié)構(gòu)龐大,機(jī)械重復(fù),程序結(jié)構(gòu)龐大,機(jī)械重復(fù),于是引入數(shù)組于是引入數(shù)組第7章數(shù)組(構(gòu)造數(shù)據(jù)類型)v一維數(shù)組一維數(shù)組v二維數(shù)組二維數(shù)組v字符數(shù)組字符數(shù)組第7章一維數(shù)組的定義 數(shù)組(整體)數(shù)組(整體)int a10;數(shù)組名數(shù)組名數(shù)組元素個(gè)數(shù)數(shù)組元素個(gè)數(shù)數(shù)組類型數(shù)組類型第7
3、章引用時(shí)不能超出下標(biāo)引用時(shí)不能超出下標(biāo) 最大值最大值引用下標(biāo)下標(biāo) int i=3, j=2, a10; 引用引用 ai, ai+2, ai+j, a0, a1, a2, . a9數(shù)組是一個(gè)數(shù)組是一個(gè)整體整體概念,數(shù)組元素是概念,數(shù)組元素是個(gè)體個(gè)體概念,概念,此例:此例: 每一個(gè)元素都是一個(gè)整數(shù)每一個(gè)元素都是一個(gè)整數(shù)注意:注意:下標(biāo)從下標(biāo)從0 09 9第7章統(tǒng)計(jì)各年齡段的人數(shù)v問(wèn)題:?jiǎn)栴}:統(tǒng)計(jì)某一地區(qū)每歲年齡的人數(shù),以及總?cè)私y(tǒng)計(jì)某一地區(qū)每歲年齡的人數(shù),以及總?cè)藬?shù),假定不超過(guò)數(shù),假定不超過(guò)120歲。歲。 a0, a1, a2, . a1191 歲人數(shù)歲人數(shù)2 歲人數(shù)歲人數(shù)3 歲人數(shù)歲人數(shù)120 歲
4、歲人人數(shù)數(shù)第7章定義其他類型數(shù)組float b5;char c20;b0, b1, . b4c0, c1, . c19定義定義引用引用第7章數(shù)組初始化v在定義數(shù)組時(shí)賦初值在定義數(shù)組時(shí)賦初值int a3=1,3,5;float b2=3.14,5.18;char c5=a, b, c, d, e;亦可亦可 int a =1,2,3,4,5; 編譯系統(tǒng)自動(dòng)確定元素個(gè)數(shù)編譯系統(tǒng)自動(dòng)確定元素個(gè)數(shù) int b10=1,2; 前兩個(gè)元素的值為前兩個(gè)元素的值為1、2,其他元素為,其他元素為0第7章數(shù)組在內(nèi)存中的存放在內(nèi)存中占據(jù):在內(nèi)存中占據(jù):一片連續(xù)的存儲(chǔ)區(qū)一片連續(xù)的存儲(chǔ)區(qū)例:例: int a20;VC+中
5、,一個(gè)整型變量中,一個(gè)整型變量占用占用 4 個(gè)字節(jié)內(nèi)存。個(gè)字節(jié)內(nèi)存。.內(nèi)存內(nèi)存a0.a1a2a18a19第7章注意vC+不允許在數(shù)組上進(jìn)行整體操作不允許在數(shù)組上進(jìn)行整體操作F不能整體賦值不能整體賦值F不能比較不能比較F不能整體輸入輸出不能整體輸入輸出v賦值:賦值:for(i=0;i10;i+) yi=xi;v輸入:輸入:for(i=0;i yi;v輸出:輸出:for(i=0;i10;i+) cout=yi)第7章一維數(shù)組應(yīng)用v逆序逆序v數(shù)的分解數(shù)的分解v求求Fibonacci數(shù)列問(wèn)題數(shù)列問(wèn)題v排序排序v插入插入v查找(順序、折半)查找(順序、折半)v合并合并第7章逆序輸出 例7.1 v問(wèn)題:?jiǎn)?/p>
6、題:程序使程序使a0到到a9的值為的值為09,然后按,然后按逆序逆序輸出。輸出。v程序:程序:#include /li0701.cpp 逆序輸出逆序輸出#include void main( )int i,a10;for (i=0;i=0;i-)coutsetw(4)ai;coutendl;運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下: 9 8 7 6 5 4 3 2 1 0將一個(gè)數(shù)組中的數(shù)逆序后再放回原數(shù)組,如何做?第7章數(shù)組元素的逆序存放 例7.6#include / li0706.cpp 逆序存放逆序存放#define N 7void inverse(int bN)int i;for(i=0; iN/2;
7、 i+)int t=bi;bi=bN-1-i;bN-1-i=t;void main( )int aN= 7, 2, 5, 4, 3, 6, 1;cout原始數(shù)組元素為原始數(shù)組元素為:endl;for(int i=0; iN; i+)coutait;coutn;inverse(a);cout逆序后的數(shù)組元素為逆序后的數(shù)組元素為:endl;for(i=0; iN; i+)coutait;coutn;第7章求Fibonacci數(shù)列問(wèn)題 例7.3 v問(wèn)題:?jiǎn)栴}:用數(shù)組求用數(shù)組求Fibonacci數(shù)列的前數(shù)列的前20項(xiàng)和前項(xiàng)和前20項(xiàng)之和。項(xiàng)之和。v程序:程序:#include /li0703.cpp
8、Fibonacci數(shù)列問(wèn)題數(shù)列問(wèn)題void main( ) int i, f20=1, 1, sum=f0+f1; for (i=2; i20; i+)fi=fi-2+fi-1; sum+=fi;for (i=0; i20; i+)if (i%5=0) coutn;coutfit;coutn前前20項(xiàng)和為:項(xiàng)和為:sum2第7章數(shù)的分解 例7.4 v問(wèn)題:?jiǎn)栴}:將一個(gè)數(shù)分解到數(shù)組中,然后正向,將一個(gè)數(shù)分解到數(shù)組中,然后正向,反向輸出。反向輸出。 v分解得到的各位數(shù)字放在數(shù)組分解得到的各位數(shù)字放在數(shù)組a中中F個(gè)位放在個(gè)位放在a0中中F十位放在十位放在a1中中F百位放在百位放在a2中中F第7章數(shù)的
9、分解#include /li0704.cpp 數(shù)的分解數(shù)的分解void main( ) int i, j=0, k, a20;couti;k=i;while(k0) aj+=k%10;k=k/10;cout正向輸出序列正向輸出序列:=0; k-) coutakt;coutendl;cout反向輸出序列反向輸出序列:endl;for(k=0; kj; k+) coutakt;coutm,則則 a 數(shù)組比數(shù)組比 b 數(shù)組大數(shù)組大如果如果 jbi 的次數(shù)的次數(shù) k是是 ai=bi 的次數(shù)的次數(shù)m 是是 aiy) flag=1; else if (xy) flag= -1; else flag=0;
10、return(flag);第7章比較數(shù)組大小(續(xù))#include /li0705.cpp 比較數(shù)組大小比較數(shù)組大小void main( ) int large(int,int);int a10,b10,i,j=0,k=0,m=0,n;coutn;cout輸入數(shù)組輸入數(shù)組a:n;for (i=0;iai;coutn;cout輸入數(shù)組輸入數(shù)組b:n;for (i=0;ibi;coutn;第7章比較數(shù)組大小(續(xù))for (i=0; i10; i+) if (large(ai,bi)=1) j=j+1;else if ( large(ai,bi)=0 ) k=k+1;else m=m+1;cout
11、ai大于大于bi的次數(shù)的次數(shù) jendl;cout ai等于等于bi的次數(shù)的次數(shù) kendl;cout ai小于小于bi的次數(shù)的次數(shù) mm) cout數(shù)組數(shù)組 a 大于數(shù)組大于數(shù)組 bn;else if (jm)cout數(shù)組數(shù)組 a 小于數(shù)組小于數(shù)組 bn;else coutbi 的次數(shù)的次數(shù) k是是 ai=bi 的次數(shù)的次數(shù)m 是是 aibi 的次數(shù)的次數(shù)第7章數(shù)組名作函數(shù)參數(shù) 例7.6 問(wèn)題:?jiǎn)栴}:將數(shù)組元素逆向存放。將數(shù)組元素逆向存放。原:原:7 2 5 4 3 6 17 2 5 4 3 6 1現(xiàn):現(xiàn):1 6 3 4 5 2 71 6 3 4 5 2 7void reverse(int
12、b , int n) /li0706_1.cpp int i, j, t; i=0; j=n-1; while(ij) t=bi; bi=bj; bj=t; i+; j- -; #include void main(void) int a10=1,2,3,4,5,6,7,8,9,10, i; reverse(a, 10); for(i=0; i10; i+) cout ai t ; cout endl ;第7章將數(shù)組元素逆向存放(續(xù))實(shí)參實(shí)參 a形參形參 b實(shí)參數(shù)組與形參數(shù)組元素共享存儲(chǔ)單元實(shí)參數(shù)組與形參數(shù)組元素共享存儲(chǔ)單元 a0 a1 a2 . a8 a9 . b0 b1 b2 . b8 b
13、9i=0i ji+,j- -j=9第7章冒泡法(起泡法)排序 例7.7 用冒泡法對(duì)用冒泡法對(duì)6個(gè)數(shù)排序(由小到大)個(gè)數(shù)排序(由小到大)8,4,9,6,5,22,4,5,6, 8,9目標(biāo)目標(biāo)冒泡法的思想是:冒泡法的思想是: 順序掃描數(shù)組元素,順序掃描數(shù)組元素, 將相鄰兩個(gè)數(shù)進(jìn)行比較,將小數(shù)調(diào)到前面將相鄰兩個(gè)數(shù)進(jìn)行比較,將小數(shù)調(diào)到前面如果有如果有 n 個(gè)數(shù),則要進(jìn)行個(gè)數(shù),則要進(jìn)行 n-1次掃描。次掃描。在第在第 j 次掃描中,要進(jìn)行次掃描中,要進(jìn)行 n-j 次兩兩比較,次兩兩比較,兩兩比較時(shí),第一個(gè)元素的下標(biāo)從兩兩比較時(shí),第一個(gè)元素的下標(biāo)從 1 變化到變化到 n-j 第7章冒泡法排序程序用冒泡法對(duì)
14、用冒泡法對(duì)6個(gè)數(shù)排序(由小到大)個(gè)數(shù)排序(由小到大)#include /li0707.cpp 冒泡法排序冒泡法排序#define N 6void main( )int aN,i;cout請(qǐng)輸入請(qǐng)輸入 N 個(gè)數(shù)個(gè)數(shù):endl;for(i=0;iai; bubble_sort(a,N); cout “排好序的數(shù)為:排好序的數(shù)為:”endl; for(i=0;iN;i+) coutai t coutendl;第7章冒泡法排序程序 / 排序程序的核心排序程序的核心 void bubble_sort(int a,int n)int i, j, t;for(i=0; in-1; i+) / i 控制掃描次
15、數(shù)控制掃描次數(shù) for(j=0; jaj+1)t=aj; aj=aj+1; aj+1=t; 冒泡法排序算法缺點(diǎn):冒泡法排序算法缺點(diǎn):經(jīng)常交換經(jīng)常交換,執(zhí)行效率低執(zhí)行效率低?能否降低交換次數(shù)能否降低交換次數(shù)用選擇法排序用選擇法排序第7章選擇法排序選擇法的思想是選擇法的思想是:例例7.8 (假定假定6個(gè)元素存放在個(gè)元素存放在a0a5中)中)第一趟掃描,將第一趟掃描,將a0到到a5中最小數(shù)的下標(biāo)找到,設(shè)中最小數(shù)的下標(biāo)找到,設(shè)為為p, 若若 p!=0,則則a0與與ap交換位置。交換位置。第二趟掃描,將第二趟掃描,將a1到到a5中最小數(shù)的下標(biāo)找到,設(shè)中最小數(shù)的下標(biāo)找到,設(shè)為為p, 若若 p!=1,則則a
16、1與與ap交換位置。交換位置。 依此類推,共需依此類推,共需5次掃描,第次掃描,第i次掃描時(shí)(次掃描時(shí)(i=04) 第一個(gè)元素的下標(biāo)為第一個(gè)元素的下標(biāo)為 i, 最后一個(gè)元素的下標(biāo)為最后一個(gè)元素的下標(biāo)為5第7章數(shù)組名作函數(shù)參數(shù)問(wèn)題:?jiǎn)栴}:編寫一個(gè)函數(shù)實(shí)現(xiàn)選擇法排序。編寫一個(gè)函數(shù)實(shí)現(xiàn)選擇法排序。例例7.8 #include void sort(int a10) int i,j,k,t;for(i=0;i9;i+) /選擇法排序選擇法排序k=i;for(j=i+1;j10;j+)if(ajak)k=j;if(k!=i)t=ak; ak=ai;ai=t; 有無(wú)缺點(diǎn)沒(méi)有通用性第7章數(shù)組名作函數(shù)參數(shù)voi
17、d main( )int array10,i;cout請(qǐng)輸入數(shù)組的元素請(qǐng)輸入數(shù)組的元素:endl;for(i=0;iarrayi;sort(array);cout排好序的數(shù)組元素為排好序的數(shù)組元素為:endl;for(i=0;i10;i+)coutarrayit;coutendl;第7章內(nèi)存工作區(qū)示意圖 5 8 2 9 1 3 6 4 10 7arraya地址地址傳遞傳遞第7章對(duì)前例的修改#include void sort(int a ,int n) int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(ajak)k=j;if(k!=i)t=a
18、k;ak=ai;ai=t;第7章對(duì)前例的修改void main( ) int array100,i,n;cout請(qǐng)輸入數(shù)組元素個(gè)數(shù)請(qǐng)輸入數(shù)組元素個(gè)數(shù):n;cout請(qǐng)輸入數(shù)組的元素請(qǐng)輸入數(shù)組的元素:endl;for(i=0;iarrayi;sort(array,n);cout排好序的數(shù)組元素為排好序的數(shù)組元素為:endl;for(i=0;in;i+)coutarrayit;coutendl;第7章選擇法的另一種實(shí)現(xiàn)方法#include /li0708_1.cpp 選擇法排序的變種選擇法排序的變種#define N 6 void select_sort(int a, int n) int i ,j
19、,t;for(i=0; in-1; i+) /按升序排序按升序排序for(j=i; jaj)t=ai; ai=aj; aj=t; void main( ) int aN;int i;cout請(qǐng)輸入請(qǐng)輸入6個(gè)數(shù)個(gè)數(shù):endl;for(i=0; iai;select_sort(a, N);cout排好序的數(shù)為排好序的數(shù)為:endl;for(i=0; iN; i+) coutait;coutendl;第7章插入例 例7.9 v問(wèn)題:?jiǎn)栴}:已有一個(gè)排好序的數(shù)組,今輸入一個(gè)數(shù)要已有一個(gè)排好序的數(shù)組,今輸入一個(gè)數(shù)要求按原來(lái)排序規(guī)律將它插入數(shù)組中。求按原來(lái)排序規(guī)律將它插入數(shù)組中。v算法思想算法思想0 5 8
20、 10 18 20如插入如插入21,直接插入到,直接插入到20右邊右邊如插入如插入6,則把,則把8及其后面的數(shù)據(jù)全部向右移動(dòng)一及其后面的數(shù)據(jù)全部向右移動(dòng)一個(gè)位置,把個(gè)位置,把6插在插在8的位置(找到該位置有兩種方法:的位置(找到該位置有兩種方法:自左向右自左向右前插前插;自右向左;自右向左后插后插)第7章后插排序void ba_ins_sort(int a , int n) /li0709.cpp 直接插入排序后插算法直接插入排序后插算法 int i, j, p; for(i=1; i=0&paj; j-) /將比將比p大的元素依次右移一個(gè)位置大的元素依次右移一個(gè)位置aj+1=aj;a
21、j+1=p;第7章篩選法求素?cái)?shù) 例7.10 v問(wèn)題:?jiǎn)栴}:用用篩選法篩選法求求1100之間所有素?cái)?shù),每行輸出之間所有素?cái)?shù),每行輸出5個(gè)素?cái)?shù)。個(gè)素?cái)?shù)。v所謂所謂“篩選法篩選法”指的是指的是“埃拉托色尼埃拉托色尼(Eratosthenes)篩法篩法”。他是古希臘的著名數(shù)學(xué)家。他采取的方法是,在一張紙上寫他是古希臘的著名數(shù)學(xué)家。他采取的方法是,在一張紙上寫上上1到到100全部整數(shù),然后逐個(gè)判斷它們是否是素?cái)?shù),找出一全部整數(shù),然后逐個(gè)判斷它們是否是素?cái)?shù),找出一個(gè)非素?cái)?shù),就把它挖掉,最后剩下的就是素?cái)?shù)。具體做法如個(gè)非素?cái)?shù),就把它挖掉,最后剩下的就是素?cái)?shù)。具體做法如下:下: 先將先將1挖掉挖掉(因?yàn)橐驗(yàn)?
22、不是素?cái)?shù)不是素?cái)?shù))。 用用2去除它后面的各個(gè)數(shù),把能被去除它后面的各個(gè)數(shù),把能被2整除的數(shù)挖掉,即把整除的數(shù)挖掉,即把2的倍數(shù)挖掉。的倍數(shù)挖掉。 用用3去除它后面的各數(shù),把去除它后面的各數(shù),把3的倍數(shù)挖掉。的倍數(shù)挖掉。 分別用分別用4、5各數(shù)作為除數(shù)去除這些數(shù)以后的各數(shù)。這各數(shù)作為除數(shù)去除這些數(shù)以后的各數(shù)。這個(gè)過(guò)程一直進(jìn)行到在除數(shù)后面的數(shù)已全被挖掉為止。例如,個(gè)過(guò)程一直進(jìn)行到在除數(shù)后面的數(shù)已全被挖掉為止。例如,找找150的素?cái)?shù),要一直進(jìn)行到除數(shù)為的素?cái)?shù),要一直進(jìn)行到除數(shù)為47為止。為止。第7章篩選法求素?cái)?shù)#include /li0710.cpp 篩選法求素?cái)?shù)篩選法求素?cái)?shù)#define N 10
23、0void prime(int a,int n) int i, j;for(i=1; in-1; i+) /a0不是素?cái)?shù),因此從不是素?cái)?shù),因此從a1開(kāi)始判斷開(kāi)始判斷 for(j=i+1; jn; j+)if(ai!=0&aj!=0)if(aj%ai=0) aj=0;下標(biāo)下標(biāo)i從從198下標(biāo)下標(biāo)j從從i+199第7章篩選法求素?cái)?shù)void main( ) int aN, i, n;for(i=0; iN; i+) ai=i+1; /賦初值賦初值prime(a, N);cout1100內(nèi)的素?cái)?shù)為內(nèi)的素?cái)?shù)為:endl;for(i=1, n=0; iN; i+) if(ai!=0)coutait
24、;n+;if(n%5=0) coutn;第7章順序查找 例7.11問(wèn)題:?jiǎn)栴}:在一維數(shù)組在一維數(shù)組a 中中查找查找 x 是否存在,若存在,是否存在,若存在,返回其下標(biāo),否則返回返回其下標(biāo),否則返回-1。 6 3 18 24 9 32 6 46 1 12如查找如查找9 9第7章順序查找#include #define M 10int search(int a , int x, int n)int i; for(i=0; in; i+)if(x=ai) return i;return -1;第7章順序查找void main( ) int array =6, 3, 18, 24, 9, 32, 6,
25、 46, 1, 12, i, p, x;coutx;p=search(array, x, M);cout原始數(shù)組元素為原始數(shù)組元素為:endl;for(i=0; iM; i+)coutarrayi=0) cout查找成功!數(shù)組元素的下標(biāo)查找成功!數(shù)組元素的下標(biāo)為為pendl;else cout未查找到!未查找到!up,則檢索失敗,算法結(jié)束,否則,則檢索失敗,算法結(jié)束,否則,轉(zhuǎn)第三步;轉(zhuǎn)第三步;F mid=(low+up)/2;F若若x=amid,則檢索成功,算法結(jié)束,否則則檢索成功,算法結(jié)束,否則轉(zhuǎn)第五步;轉(zhuǎn)第五步;Fxamid,則置則置up=mid-1,轉(zhuǎn)第二步;轉(zhuǎn)第二步;否則置否則置low
26、=mid+1,轉(zhuǎn)第二步;轉(zhuǎn)第二步;第7章折半查找程序#include #define M 10int bi_search(int a , int x, int n) int low=0, mid, up=n-1; while (low=up)mid=(low+up)/2;if(x=amid) return mid; else if(xamid)up=mid-1;else low=mid+1;return -1;第7章折半查找程序void main( ) int array =1, 3, 6, 24, 30, 32, 36, 46, 100, 120, i, p, x;coutx;p=bi_se
27、arch(array, x, M);cout原始數(shù)組元素為原始數(shù)組元素為:endl;for(i=0; iM; i+)coutarrayi=0) cout查找成功!數(shù)組元素的下標(biāo)查找成功!數(shù)組元素的下標(biāo)為為pendl;else cout未查找到!未查找到!endl;第7章問(wèn)題 課程課程1 1 課程課程2 2 課程課程3 3 學(xué)生學(xué)生1 89 78 561 89 78 56學(xué)生學(xué)生2 88 99 100 2 88 99 100 學(xué)生學(xué)生3 72 80 613 72 80 61學(xué)生學(xué)生4 60 70 754 60 70 75二維表格二維表格求每門課程的平均成績(jī),一列的平均值求每門課程的平均成績(jī),一列
28、的平均值求一個(gè)學(xué)生的平均成績(jī),一行的平均值求一個(gè)學(xué)生的平均成績(jī),一行的平均值 第7章二維數(shù)組的定義 數(shù)組(整體)數(shù)組(整體)int a43;數(shù)組名數(shù)組名行數(shù)行數(shù)列數(shù)列數(shù)數(shù)組類型數(shù)組類型第7章元素的引用int a43 代表代表12個(gè)個(gè)簡(jiǎn)單變量:簡(jiǎn)單變量:a00 a01 a02a10 a11 a12a20 a21 a22a30 a31 a32行號(hào)從行號(hào)從 0 開(kāi)始,開(kāi)始,列號(hào)也從列號(hào)也從 0 開(kāi)始,開(kāi)始,第7章元素的引用問(wèn)題:?jiǎn)栴}: 課程課程1 課程課程2 課程課程3 學(xué)生學(xué)生1 89 78 56 學(xué)生學(xué)生2 88 99 100 學(xué)生學(xué)生3 72 80 61 學(xué)生學(xué)生4 60 70 75二維表格二
29、維表格元素元素( (個(gè)體個(gè)體) )int a43 代表代表12個(gè)個(gè)簡(jiǎn)單變量簡(jiǎn)單變量 如如 a00 、a12、a32 aij行下標(biāo)行下標(biāo)列下標(biāo)列下標(biāo)第7章二維數(shù)組在內(nèi)存中的存儲(chǔ)v占據(jù)一片連續(xù)存儲(chǔ)區(qū)占據(jù)一片連續(xù)存儲(chǔ)區(qū)a00 a01 a02a10 a11 a12a20 a21 a22a30 a31 a32按行存放按行存放第第0 行行a00a01a02a10a11a12第第 1 行行a30a31a32第第 3 行行.內(nèi)存內(nèi)存第7章二維數(shù)組的初始化 int a43= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; 四行三列四行三列 int a43= 1, 2, 3, 4,
30、 5, 6, 7, 8, 9, 10, 11, 12 ; 存儲(chǔ)順序存儲(chǔ)順序 int a43= 1, 4, 7, 10 ; 給每一行的第給每一行的第1個(gè)元素賦值,其余為零個(gè)元素賦值,其余為零第7章二維數(shù)組的初始化int a 4=1,2,3,4,5,6,7,8,9,10,11,12;第一維的長(zhǎng)度可不指定第一維的長(zhǎng)度可不指定第二維的長(zhǎng)度不能省第二維的長(zhǎng)度不能省第7章二維數(shù)組的應(yīng)用問(wèn)題:?jiǎn)栴}: 課程課程1 課程課程2 課程課程3 aver數(shù)組數(shù)組 學(xué)生學(xué)生1 89 78 56 aver0 學(xué)生學(xué)生2 88 99 100 aver1 學(xué)生學(xué)生3 72 80 61 aver2 學(xué)生學(xué)生4 60 70 75
31、 aver3?求每個(gè)學(xué)生的平均成績(jī),即求各行的平均值求每個(gè)學(xué)生的平均成績(jī),即求各行的平均值第7章程序主要部分int a43=., aver4; int i, j;for(i=0; i4; i+) /* i 控制行數(shù)控制行數(shù) */ averi = 0; for(j=0; j3; j+) averi + = aij; /* j 控制列數(shù)控制列數(shù) */ averi / = 3; for(i=0; i4; i+) cout averi endl ; 第7章上例解法二解解2: 課程課程1 課程課程2 課程課程3 空空列列 學(xué)生學(xué)生1 89 78 56 a03 學(xué)生學(xué)生2 88 99 100 a13 學(xué)生
32、學(xué)生3 72 80 61 a23 學(xué)生學(xué)生4 60 70 75 a33數(shù)組中多定義一列,讓其初值為零,用來(lái)存放數(shù)組中多定義一列,讓其初值為零,用來(lái)存放平均值。平均值。第7章解法二程序片段 /* 多定義一列多定義一列 ,存放平均值,存放平均值 */int a44 89, 78, 56, 0 . ; int i, j; for(i=0; i4; i+) /* i 控制行數(shù)控制行數(shù) */ for(j=0; j3; j+) a i3 + = aij; /* j 控制列數(shù)控制列數(shù) */ a i3 / = 3; for(i=0; i4; i+) cout a i3 endl ; 第7章二維數(shù)組用作函數(shù)參數(shù)
33、v數(shù)組元素作函數(shù)參數(shù)數(shù)組元素作函數(shù)參數(shù)F與用變量做實(shí)參一樣與用變量做實(shí)參一樣單向值傳遞單向值傳遞v數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)F實(shí)參與形參均用數(shù)組名實(shí)參與形參均用數(shù)組名F實(shí)參和形參可用指針(實(shí)參和形參可用指針(ch9介紹)介紹)第7章二維數(shù)組元素作函數(shù)參數(shù)v問(wèn)題:?jiǎn)栴}:有兩個(gè)二維數(shù)組有兩個(gè)二維數(shù)組a34和和b34,統(tǒng)統(tǒng)計(jì)兩個(gè)數(shù)組中對(duì)應(yīng)元素相等的個(gè)數(shù)。計(jì)兩個(gè)數(shù)組中對(duì)應(yīng)元素相等的個(gè)數(shù)。v算法:算法:F判斷對(duì)應(yīng)元素是否相等,等,則記數(shù)器加判斷對(duì)應(yīng)元素是否相等,等,則記數(shù)器加1 第7章統(tǒng)計(jì)兩個(gè)數(shù)組中對(duì)應(yīng)元素相等的個(gè)數(shù) #include /li0714.cpp 二維數(shù)組元素作函數(shù)參數(shù)二維數(shù)組元素作函
34、數(shù)參數(shù)void main( ) int equal(int, int);int a34=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, b34=12, 2, 3, 4, 10, 6, 7, 11, 9, 5, 8, 1, i, j, k=0;for (i=0; i3; i+)for(j=0; j4; j+)if (equal(aij,bij)= =1) k+;cout兩個(gè)數(shù)組中對(duì)應(yīng)元素相等的個(gè)數(shù)為兩個(gè)數(shù)組中對(duì)應(yīng)元素相等的個(gè)數(shù)為:kendl;int equal(int x, int y) int flag;if (x=y) flag=1;else flag=0;re
35、turn(flag);第7章求矩陣中的最小值 例7.15v問(wèn)題:?jiǎn)栴}:有一個(gè)有一個(gè)34 的矩陣,要求編程求出其中值最的矩陣,要求編程求出其中值最小的元素,以及其所在的行號(hào)和列號(hào)。小的元素,以及其所在的行號(hào)和列號(hào)。v算法:算法:F假定數(shù)組中第假定數(shù)組中第0行第行第0列的元素最小列的元素最小F其他的元素與它比較,只要比它小,則將該值記下并記下其他的元素與它比較,只要比它小,則將該值記下并記下它所在的行和列的下標(biāo)它所在的行和列的下標(biāo)第7章求矩陣中的最小值#include /li0715.cppint min_element(int a 4, int &row, int &colum)
36、 int i, j, min;min=a00;for (i=0; i=2; i+)for (j=0; j=3; j+)if (aijmin)min=aij;row=i;colum=j; return min;第7章求矩陣中的最小值void main( ) int i, j, row=0, colum=0, min;int a34;cout請(qǐng)輸入請(qǐng)輸入3行行4列的二維數(shù)組列的二維數(shù)組:;for (i=0; i=2; i+)for (j=0; jaij;min=min_element(a, row, colum);cout最小值最小值=minendl;cout所在行號(hào)所在行號(hào)=row 所在列號(hào)所在
37、列號(hào)=columendl;第7章矩陣轉(zhuǎn)置 例7.16v問(wèn)題:?jiǎn)栴}:將一個(gè)二維數(shù)組行和列元素互換存到另一個(gè)將一個(gè)二維數(shù)組行和列元素互換存到另一個(gè)二維數(shù)組中。二維數(shù)組中。(矩陣轉(zhuǎn)置)(矩陣轉(zhuǎn)置)v程序:程序: 第7章矩陣轉(zhuǎn)置#include /li0716 矩陣轉(zhuǎn)置矩陣轉(zhuǎn)置void transpose(int a3, int b3) for (int i=0; i3; i+)for (int j=0; j3; j+) bji=aij;void main( ) int a33=1, 2, 3, 4, 5, 6, 7, 8, 9;int b33, i, j;cout數(shù)組數(shù)組a:endl;for (i=
38、0; i3; i+)for (j=0; j3; j+) coutaijt;coutn;transpose(a, b);987654321第7章矩陣轉(zhuǎn)置cout數(shù)組數(shù)組 b:n;for (i=0; i3; i+)for(j=0; j3; j+) coutbijt;coutn;問(wèn)題:在一個(gè)矩陣中如何轉(zhuǎn)置(對(duì)方陣而言)?第7章對(duì)方陣的轉(zhuǎn)置#include void main( ) int a33= . ; int t, i, j ; 輸出數(shù)組輸出數(shù)組 a ; for(i=0; i3; i+) for(j=i+1; j3; j+) /對(duì)右上三角形循環(huán)對(duì)右上三角形循環(huán)t=aij; aij=aji; aj
39、i=t; 輸出轉(zhuǎn)置后的數(shù)組輸出轉(zhuǎn)置后的數(shù)組 a ;987654321a對(duì)左下三角形元素循環(huán),如何實(shí)現(xiàn)第7章字符數(shù)組定義和引用v定義:定義:char c10;v引用:引用: c0,c1,c2, c9 每個(gè)元素都是一個(gè)簡(jiǎn)單的字符變量每個(gè)元素都是一個(gè)簡(jiǎn)單的字符變量 ci=a; for(i=0; i ci ; for(i=4; i=0; i- -) cout 數(shù)組長(zhǎng)度:出錯(cuò)初值個(gè)數(shù)數(shù)組長(zhǎng)度:其余元素自動(dòng)定為空字符即 0 初值個(gè)數(shù)=數(shù)組長(zhǎng)度:定義時(shí)可省略數(shù)組長(zhǎng)度第7章字符串例:字符串常數(shù)例:字符串常數(shù)China, OK! 占占6個(gè)字節(jié)個(gè)字節(jié) 占占4個(gè)字節(jié)個(gè)字節(jié)一般存放到一維字符數(shù)組中,一般存放到一維字符
40、數(shù)組中,即用一維字符數(shù)組實(shí)現(xiàn)字符串。即用一維字符數(shù)組實(shí)現(xiàn)字符串。China00OK!. 0 為字符串結(jié)尾標(biāo)志為字符串結(jié)尾標(biāo)志第7章字符串的輸入輸出-逐個(gè)字符輸入輸出 將字符串存放到一維字符數(shù)組中將字符串存放到一維字符數(shù)組中 例:例:char s110= C , h , i , n , a , 0 ; 簡(jiǎn)寫為:簡(jiǎn)寫為:char s110=China; 再簡(jiǎn)寫為:再簡(jiǎn)寫為:char s110=China; 只用字符數(shù)組的前六個(gè)字節(jié)空間只用字符數(shù)組的前六個(gè)字節(jié)空間第7章輸出一個(gè)三角形圖形v演示例演示例7.20#include /li0720.cppvoid main( )char star5= ,
41、,*, ,*, ,*,*, ,*, ,*;for(int i=0;i3;i+)for(int j=0;ji+3;j+) /當(dāng)輸出空字符時(shí),什么也不輸出當(dāng)輸出空字符時(shí),什么也不輸出cout starij;coutendl;第7章字符串的輸入輸出(作為整體輸入輸出)v例例7.21#include /li0721.cpp 輸入輸出輸入輸出字符串字符串void main( )char str120,str220;cout輸入兩個(gè)字符串:輸入兩個(gè)字符串:str1;cinstr2;cout字符串字符串1str1endl;cout字符串字符串2str2endl;輸入輸入China good第7章演示結(jié)論v不
42、能不能輸入帶空格的字符串輸入帶空格的字符串v使用使用 cin.getline ( )函數(shù)實(shí)現(xiàn)函數(shù)實(shí)現(xiàn)字符串輸入字符串輸入v例例7.22#include void main( )char str180;char str24=G,o,o,d;cout請(qǐng)輸入一行字符串:請(qǐng)輸入一行字符串:endl;cin.getline(str1,80); /表示最多輸入表示最多輸入79個(gè)字符,系統(tǒng)個(gè)字符,系統(tǒng)自動(dòng)在最后加一個(gè)自動(dòng)在最后加一個(gè)0coutstr1=str1endl;coutstr2=str2endl;輸入輸入aaa bbb ccc第7章字符串運(yùn)算函數(shù)1. strlen(字符數(shù)組字符數(shù)組) 求字符串長(zhǎng)度求
43、字符串長(zhǎng)度(STRing LENgth ) 例:例:char s110=ABCD ; char s210=12 n ; char s310=An0121; int x, y, z, i; x = strlen(s1); y = strlen(s2); z = strlen(s3); i = strlen(XYZ0ABC);x = 4y = 4z = 7 i = 3sizeof(s1)sizeof(s2) sizeof(s3)結(jié)果均為結(jié)果均為10第7章字符串運(yùn)算函數(shù)2. strcat(字符數(shù)組字符數(shù)組1, 字符數(shù)組字符數(shù)組2) 連接兩個(gè)字符串連接兩個(gè)字符串(STRing conCATenate
44、), 將將 字符數(shù)組字符數(shù)組2 的內(nèi)容連接到的內(nèi)容連接到 字符數(shù)組字符數(shù)組1 之后。之后。 例:例:char s110=AB, s210=CD; strcat(s1,s2); couts1; couts2; strcat(s1, EF); couts1;輸出輸出 ABCD輸出輸出 CD輸出輸出 ABCDEF注意此時(shí)注意此時(shí)s1的空間的空間應(yīng)定義得足夠大。應(yīng)定義得足夠大。第7章字符串運(yùn)算函數(shù)3. strcpy(字符數(shù)組字符數(shù)組1, 字符數(shù)組字符數(shù)組2) 字符串復(fù)制字符串復(fù)制(STRing CoPY ) 將字符串將字符串2 的值復(fù)制到字符數(shù)組的值復(fù)制到字符數(shù)組1中中例:例:char s110, s
45、210; strcpy(s1, ABCD); strcpy(s2, XYZ); strcpy(s1,s2); couts1; cout1字符串字符串2,2,函數(shù)值為一正數(shù)函數(shù)值為一正數(shù)字符串字符串11字符串字符串2,2,函數(shù)值為一負(fù)數(shù)函數(shù)值為一負(fù)數(shù)對(duì)兩個(gè)字符串比較對(duì)兩個(gè)字符串比較不能用不能用str1= =str2第7章其他一些字符串運(yùn)算函數(shù)8. strncpy(字符數(shù)組字符數(shù)組1, 字符數(shù)組字符數(shù)組2, len) 功能:功能:將字符串將字符串2 的前的前 len 個(gè)字符,個(gè)字符, 拷入字符數(shù)組拷入字符數(shù)組15. strlwr(字符數(shù)組字符數(shù)組) /(STRing LoWeRcase ) 功能:功能:將字符串中字符全部將字符串中字符全部轉(zhuǎn)換成小寫轉(zhuǎn)換成小寫。6. strupr(字符數(shù)組字符數(shù)組) /(STRing UPpeRcase ) 功能:功能:將字符串中字符全部將字符串中字符全部轉(zhuǎn)換成大寫轉(zhuǎn)換成大寫。7. strncmp(字符數(shù)組字符數(shù)組1, 字符數(shù)組字符數(shù)組2, len) 功能:功能:比較前比較前 len 個(gè)字符個(gè)字符注意:注意:其他字符串運(yùn)算函數(shù),其他字符串運(yùn)算函數(shù),請(qǐng)查閱庫(kù)函數(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版墻紙購(gòu)銷合同范本
- 2025年度數(shù)字經(jīng)濟(jì)基礎(chǔ)設(shè)施建設(shè)承包借款合同4篇
- 2024預(yù)埋件研發(fā)與生產(chǎn)項(xiàng)目合同范本3篇
- 2024食品物流信息化管理系統(tǒng)合同
- 2025年度文化創(chuàng)意產(chǎn)品采購(gòu)合同知識(shí)產(chǎn)權(quán)保護(hù)與市場(chǎng)推廣3篇
- 2025年度專業(yè)市場(chǎng)租賃協(xié)議范本4篇
- 2025年度智慧社區(qū)物業(yè)服務(wù)承包合同4篇
- 2025年度電力企業(yè)財(cái)務(wù)預(yù)算出納人員擔(dān)保合同3篇
- 2025年度商場(chǎng)櫥窗窗簾廣告設(shè)計(jì)與安裝合同4篇
- 2025年度新能源汽車制造項(xiàng)目承包商擔(dān)保合同規(guī)范4篇
- 春節(jié)英語(yǔ)介紹SpringFestival(課件)新思維小學(xué)英語(yǔ)5A
- 進(jìn)度控制流程圖
- 2023年江蘇省南京市中考化學(xué)真題
- 【閱讀提升】部編版語(yǔ)文五年級(jí)下冊(cè)第四單元閱讀要素解析 類文閱讀課外閱讀過(guò)關(guān)(含答案)
- 供電副所長(zhǎng)述職報(bào)告
- 現(xiàn)在完成時(shí)練習(xí)(短暫性動(dòng)詞與延續(xù)性動(dòng)詞的轉(zhuǎn)換)
- 產(chǎn)品質(zhì)量監(jiān)控方案
- 物業(yè)總經(jīng)理述職報(bào)告
- 新起點(diǎn),新發(fā)展心得體會(huì)
- 深圳大學(xué)學(xué)校簡(jiǎn)介課件
- 校園欺凌問(wèn)題成因及對(duì)策分析研究論文
評(píng)論
0/150
提交評(píng)論