




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章1第1頁掌握一維、二維數(shù)組定義和引用方法、存放結構和初始化方法。數(shù)組作為函數(shù)參數(shù)排序和查找算法
本章關鍵點第2頁數(shù)組概念—概念引入用基本數(shù)據(jù)類型能夠處理全部問題嗎?比如:對某班學生成績按由高到底次序進行排序。
3名?
30名?floatx,y,z;floata,b,c,d,e,f…;第3頁數(shù)組是一組有序同類型數(shù)據(jù)。數(shù)據(jù)稱為數(shù)組元素。數(shù)組第4頁保留大量同類型相關數(shù)據(jù)如矩陣運算,表格數(shù)據(jù)等
數(shù)組用處快速地隨機訪問一旦定義,不能改變大小數(shù)組特點第5頁數(shù)組(Array)定義定義
存放類型
數(shù)據(jù)類型數(shù)組名[整數(shù)1][整數(shù)2]……[整數(shù)n];a[9]a[8]a[7]a[1]a[0]…數(shù)組首地址inta[10];定義一個有10個int型元素數(shù)組系統(tǒng)會在內存分配連續(xù)10個int空間給此數(shù)組直接對a訪問,就是訪問此數(shù)組首地址第6頁數(shù)組(Array)定義定義
存放類型
數(shù)據(jù)類型數(shù)組名[整數(shù)1][整數(shù)2]……[整數(shù)n];a[9]a[8]a[7]a[1]a[0]…inta[10];數(shù)組大小必須是常量表示式(常量或符號常量),其值必須為正,不能為變量。數(shù)組一旦定義,不能改變大小數(shù)組大小最好用宏來定義,以適應未來可能改變#define
SIZE10inta[SIZE];第7頁一維數(shù)組和多維數(shù)組一維數(shù)組用一個下標確定各元素在數(shù)組中次序可用排列成一行元素組來表示如inta[5];二維數(shù)組用兩個下標確定各元素在數(shù)組中次序可用排列成i行,j列元素組來表示如intb[2][3];n維數(shù)組用n個下標來確定各元素在數(shù)組中次序如intc[3][2][4];n≥3時,n維數(shù)組無法在平面上表示其各元素位置a[0]a[1]a[2]a[3]a[4]b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]第8頁#include<stdio.h>voidmain(){
inti,j;
floatx[20],y,z;
inta[97.8];……
x[i+j*2]=i+j;z=x[y*2];printf("%f",x[0]);printf("%f",x[20]);scanf("%f",&x);scanf("%f",&x[3]);printf("%f",x);
floaty[20];y=x;y[10]=x[10];}下標表示式值必須是一個整數(shù)下標表示式值應大于等于0小于數(shù)組大小定義數(shù)組大小必須是一個正整數(shù)常量數(shù)組不能作為一個整體直接輸入輸出,用元素數(shù)組不能作為一個整體相賦值,用元素第9頁普通方法
比如:inta[10]={0,1,2,3,4,5,6,7,8,9};
等價于a[0]=0a[1]=1a[2]=2…a[9]=9初始化部分元素
比如:inta[10]={0,1,2,3};當全部賦初值時,能夠省略數(shù)組下標變量大小
比如:inta[]={1,2,3,4,5}即a[5]所賦初值元素從數(shù)組第0個元素開始,無賦初值元素均為0{0,1,2,3,0,0,0,0,0,0}一維數(shù)組初始化{}不能省略第10頁分行給二維數(shù)組賦初值比如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};全部數(shù)據(jù)寫在一個{}內,按存放次序依次賦值比如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};能夠對部分元素賦初值
比如:inta[3][4]={{1},{0,6},{0,0,11}};依據(jù)給定初值,系統(tǒng)自動定行數(shù)
比如:inta[][3]={{1},{2},{3,4,5}};即a[3][3]
staticinta[][3]={1,2,3,4,5,6};注意:此時只能省略第1維值。C依據(jù)初始化數(shù)據(jù)數(shù)量,自動確定第1維大小10000600
00110注意外面{}不能省略
100200345二維數(shù)組初始化
12345612345678
9101112第11頁【例一】以下程序運行結果是什么?main(){inta[][3]={{1,2,3},{4,5},{6},{0}};printf("%d,%d,%d\n",a[1][1],a[2][1],a[3][1]);}123450600000結果:5,0,0【例二】若inta[][3]={1,2,3,4,5,6,7},則a數(shù)組第一維大小是多少?
123456700二維數(shù)組初始化示例第12頁數(shù)組存放結構依據(jù)數(shù)組數(shù)據(jù)類型,為每一元素安排相同長度存放單元依據(jù)數(shù)組存放類型,將其安排在內存動態(tài)、靜態(tài)存放區(qū)或存放器區(qū)用sizeof(a)來取得數(shù)組a所占字節(jié)數(shù)short第13頁二維數(shù)組存放結構shortinta[2][3];a[0]a[1]a[1][0]a[1][1]a[1][2]a[0][0]a[0][1]a[0][2]存放次序:按行存放先次序存放第0行元素再存放第1行元素a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]需要知道數(shù)組每一行有多少列,這么從起始地址開始,才能正確讀出數(shù)組元素第14頁數(shù)組引用數(shù)組名[下標1][下標2]……[下標n]下標都是從0開始,養(yǎng)成從0開始查數(shù)職業(yè)病使用a[0]、a[1]、a[2]、……、a[9]這么形式訪問每個元素數(shù)組下標(index)既能夠是常量,也能夠是整型表示式,允許快速地隨機訪問,如a[i]能夠像使用普通變量一樣使用它們第15頁數(shù)組定義使用注意事項:數(shù)組名命名規(guī)則與變量名相同數(shù)組名后只能用方括號括起常量表示式,不能使用圓括號常量表示式表示元素個數(shù),即數(shù)組長度常量表示式中不能包含變量數(shù)組說明必須在可執(zhí)行語句之前只能逐一引用數(shù)組元素,不能一次引用整個數(shù)組下標都是從0開始下標越界是大忌!編譯程序不檢驗是否越界,下標越界,將訪問數(shù)組以外空間可能帶來嚴重后果比如:floatmark(100);×定義:類型說明符數(shù)組名[常量表示式]
使用:數(shù)組名[下標]第16頁怎樣使兩個數(shù)組值相等main(){inta[4]={1,2,3,4},b[4];
b=a;
}處理方法法1:逐一元素賦值
b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];法2:經過循環(huán)賦值
inti;for(i=0;i<4;i++){
b[i]=a[i];}原因:數(shù)組名表示數(shù)組首地址,其值不可改變!第17頁怎樣使兩個數(shù)組值相等怎樣使兩個二維數(shù)組值相等?經過雙重循環(huán)賦值
inta[4][2]={1,2,3,4,5,6,7,8};intb[4][2];inti,j;for(i=0;i<4;i++){for(j=0;j<2;j++){
b[i][j]=a[i][j];}}第18頁輸入方法:inta[10],i;輸入第i個數(shù)組元素:scanf("%d",&a[i]);輸入整個數(shù)組元素:for(i=0;i<10;i++)scanf("%d",&a[i]);輸出方法:輸出第i個數(shù)組元素:printf("%d",a[i]);輸出整個數(shù)組元素:for(i=0;i<10;i++)printf("%d",a[i]);數(shù)組輸入和輸出一維數(shù)組只能逐一對數(shù)組元素進行操作(字符數(shù)組例外)第19頁二維數(shù)組使用雙重循環(huán)
inta[4][2];inti,j;for(i=0;i<4;i++){for(j=0;j<2;j++){
scanf("%d",&a[i][j]);}}數(shù)組輸入和輸出第20頁max(i=0)max(i=2)max(i=3)計算最大值算法01234第21頁例—打印最高分從鍵盤輸入學生人數(shù)n;從鍵盤輸入全部學生學號和成績分別存入數(shù)組num和score假設其中第一個學生成績?yōu)樽罡?/p>
maxScore=score[0]; 對全部學生成績進行比較,即
for(i=1;i<n;i++){
若score[i]>maxScore
則修改maxScore值為score[i]
}打印最高分maxScore第22頁......main(){ ......
for(i=0;i<n;i++) { scanf("%ld%f",&num[i],&score[i]); }
maxScore=score[0];
for(i=1;i<n;i++) {
if(score[i]>maxScore) {
maxScore=score[i];
} } printf("maxScore=%.0f\n",maxScore);}例—打印最高分第23頁......main(){ ......
for(i=0;i<n;i++) { scanf("%ld%f",&num[i],&score[i]); }
maxScore=score[0];
maxNum=num[0];
for(i=1;i<n;i++) {
if(score[i]>maxScore) {
maxScore=score[i];
maxNum=num[i];
} } printf("maxScore=%.0f,maxNum=
%ld\n",maxScore,
maxNum);}例—打印最高分
及其學生序號用函數(shù)實現(xiàn)?第24頁......main(){ ......
for(i=0;i<n;i++) { scanf("%ld%f",&num[i],&score[i]); } maxScore=score[0];
maxNum=num[0];
for(i=1;i<n;i++) {
if(score[i]>maxScore) { maxScore=score[i];
maxNum=num[i];
} } printf("maxScore=%.0f,maxNum=
%ld\n",maxScore,
maxNum);}例—打印最高分
及其學生序號確定函數(shù)
入口和出口?第25頁......main(){ ......
for(i=0;i<n;i++) { scanf("%ld%f",&num[i],&score[i]); } maxScore=score[0];
maxNum=num[0];
for(i=1;i<n;i++) {
if(score[i]>maxScore) { maxScore=score[i];
maxNum=num[i];
} } printf("maxScore=%.0f,maxNum=
%ld\n",maxScore,
maxNum);}例—打印最高分
及其學生序號確定函數(shù)
入口和出口?第26頁
floatFindMax(floatscore[],intn) { floatmaxScore;inti;
maxScore=score[0];
for(i=1;i<n;i++) {
if(score[i]>maxScore) { maxScore=score[i];
} } returnmaxScore;}例—打印最高分
確定函數(shù)
入口和出口?第27頁1、傳值方式:系統(tǒng)將實參中數(shù)值復制一份給形參,實參加形參分別有各自存放單元,被調過程中操作是在形參自己存放單元中進行,過程調用結束后,形參存放單元被系統(tǒng)回收?;仡櫍汉瘮?shù)參數(shù)傳遞兩種方式4.3數(shù)組作為函數(shù)參數(shù)第28頁1、傳值10
實參a20實參b
只是x,y值交換10形參x20形參yx形參y2010形參x子函數(shù)內部main(){…….inta=10,b=20;swap(a,b);……..}swap(intx,inty){intt;t=x;x=y;y=t;}第29頁2、傳址方式:
實參將自己地址傳遞給形參,可了解為實參加形參共用一個地址單元。所以,對形參操作就是對實參操作4.3數(shù)組作為函數(shù)參數(shù)第30頁2、傳址
1020
p[0]p[1]
a[0]a[1]
起始地址ffd4main(){…….inta[2]={10,20};swap(a);……..}ffd4實參數(shù)組名a形參數(shù)組名pffd4swap(intp[]){intz;z=p[0];p[0]=p[1];p[1]=z;}2010p[0]p[1]20p[0]10p[1]函數(shù)體內第31頁4.3數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)參數(shù)一維數(shù)組名作函數(shù)參數(shù)二維數(shù)組名作函數(shù)參數(shù)第32頁【例4-7】voidmain(void){inta[8]={26,1007,956,705,574,371,416,517};intb[8]={994,631,772,201,262,763,1000,781};intc[8],i;
for(i=0;i<8;i++)c[i]=gcd(a[i],b[i]);/*求數(shù)組a,b對應元素最大條約數(shù)*/for(i=0;i<8;i++)
printf("%d\t",c[i]);printf("\n");}214327811第33頁/********************************************算法:求兩個整數(shù)a和b最大條約數(shù)返回值:返回a和b最大條約數(shù)*********************************************/intgcd(inta,intb){ intr,t;
if(a<b)
/*確保第一個參數(shù)大于第二個參數(shù)*/
{ t=a;a=b;b=t; }
r=a%b;
while(r!=0){ a=b;b=r;r=a%b;}
returnb;}求最大條約數(shù)算法
第34頁
數(shù)組名作函數(shù)參數(shù)將數(shù)組首地址作為參數(shù)傳過去用數(shù)組名作函數(shù)參數(shù)只拷貝一個地址自然比拷貝全部數(shù)據(jù)效率高因為首地址相同,故實參數(shù)組與形參數(shù)組占用同一段內存在該函數(shù)內,不但能夠讀這個數(shù)組元素,還能夠修改它們第35頁
數(shù)組名做函數(shù)實參和形參在主調函數(shù)和被調函數(shù)中分別定義數(shù)組。實參數(shù)組和形參數(shù)組類型應一致。實參數(shù)組和形參數(shù)組大小不一定一致,形參數(shù)組能夠不指定大小,但形參數(shù)組名后面方括號不能省略。
因為數(shù)組名代表數(shù)組起始地址,故數(shù)組名做函數(shù)實參和形參時不是“值傳遞”,而是“地址傳遞”。所以,形參數(shù)組各元素值假如發(fā)生改變,會使實參數(shù)組各元素值發(fā)生一樣改變。第36頁例:求學生平均成績
#include<stdio.h>
floataverage(intstu[10],intn);main(){intscore[10],i;floatav;printf("Input10scores:\n");for(i=0;i<10;i++)scanf("%d",&score[i]);av=average(score
,
10);printf("Averageis:%.2f",av);}floataverage(int
stu[],intn){inti;floatav,total=0;for(i=0;i<n;i++)total+=stu[i];av=total/n;returnav;}實參用數(shù)組名形參用數(shù)組定義..2109score569372….….88stu雙向傳遞實參和形參數(shù)組類型應一致10n第37頁向函數(shù)傳遞二維數(shù)組a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]實際傳送是數(shù)組第一個元素地址shorta[2][3];第38頁【例4-13】(矩陣轉置)求矩陣a轉置矩陣,所謂矩陣轉置就是將矩陣行變成列,列變成行,要求輸出轉置前后矩陣。第39頁矩陣輸出函數(shù)voidprintm(inta[][3],intm,intn){ inti,j;for(i=0;i<m;i++){for(j=0;j<n;j++)printf("%3d",a[i][j]);printf("\n");}}第40頁矩陣轉置函數(shù)
voidtranspose(inta[][3],intm,intn){inti,j,t;for(i=0;i<3;i++)for(j=0;j<i;j++){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}}第41頁主函數(shù)voidmain(){inta[][3]={{1,2,3},{4,5,6},{7,8,9}};printf("beforetranspose\n");
printm(a,3,3);printf("aftertranspose\n");
transpose(a,3,3);
printm(a,3,3);}運行結果:beforetranspose123456789aftertranspose147258369第42頁作業(yè)P161填空題(做在書上)P164編程問題1.用篩法求出100~1000之間全部素數(shù)。12.有一個3×5矩陣,設計一個C語言程序,求其最大元素和次大元素。第43頁【例】求出3~100之間全部素數(shù)(質數(shù)),并要求每行輸出5個素數(shù)
35791113151719212325272931333537394143450000000000思緒:--定義一個數(shù)組prime[49],存放下奇數(shù):
3、5、7、9、11、13……95、97、99--從第0個元素開始,其后各個元素若是第0個元素倍數(shù),則將其值置為0,表示該元素不是素數(shù)--再從第一個元素開始……--一直到從第47個元素開始,其后元素如是第47個
元素倍數(shù),則將其值置位0--這時數(shù)組prime中不為0元素是素數(shù)第44頁voidmain(){intprime[49],j=3,i;for(i=0;i<49;i++){prime[i]=j;j+=2;}for(i=0;i<48;i++)if(prime[i])for(j=i+1;j<49;j++) if(prime[j]&&prime[j]%prime[i]==0)
prime[j]=0;j=0;for(i=0;i<49;i++)if(prime[i]){ printf("%d",prime[i]); j++; if(j%5==0)printf("\n");}}數(shù)組prime[49]存放奇數(shù)
3、5、7、9…97、99假如prime[i]不為0,表示是素數(shù),每行輸出5個元素假如數(shù)組元素prime[j]不整除它之前全部元素prime[i],則它就是素數(shù)第45頁⑴變量設置及初始化:我們用數(shù)組prime表示1~N之間全部素數(shù),數(shù)組prime按以下規(guī)律初始化:intprime[]={2,3,5,7,9,……},設置一個指示變量k作數(shù)組prime下標,用prime[k]作篩子,k初值為1,為了后面解釋方便,稱k為篩下標變量?!纠?-12】埃拉托斯特尼(Eratosthene)篩法求不超出正整數(shù)N素數(shù)
3579111315171921232527293133353739414345第46頁⑵算法框架依據(jù)篩法思想,能夠寫出下面框架①初始化數(shù)組prime,初始化篩下標變量k=1;②假如prime[k]>=sqrt(N)轉第⑥步,不然執(zhí)行第③步;③取出prime[k],從數(shù)組中刪除prime[k]倍數(shù);④確定k下一個值k',prime[k+1]~prime[N]中最小素數(shù)必定是下一個可用篩子,這個最小素數(shù)下標即為k';⑤k=k',轉第②步;⑥輸出數(shù)組prime中非0元素,即為1~N之間全部素數(shù)。【例4-12】埃拉托斯特尼(Eratosthene)篩法求不超出正整數(shù)N素數(shù)
35791113151719212325272931333537394143450000000000第47頁算法名:篩法求素數(shù)begin
初始化數(shù)組prime;初始化k=1;
while(prime[k]<sqrt(n)){k=sieve(prime,k);//用prime[k]作篩子,對數(shù)組prime作篩選
}output(prime);end【例4-12】埃拉托斯特尼(Eratosthene
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超齡人員安全協(xié)議書
- 防火涂料合作協(xié)議書
- 超市股份經營協(xié)議書
- 通訊專利轉讓協(xié)議書
- 修理店轉讓合同協(xié)議書
- 道路建設出資協(xié)議書
- 項目運營招商協(xié)議書
- 金店股權合作協(xié)議書
- 高校應屆就業(yè)協(xié)議書
- 出租車并車合同協(xié)議書
- 電廠化驗規(guī)程
- 2023-2024學年廣東省深圳市福田區(qū)八年級(下)期末數(shù)學試卷(含答案)
- 職業(yè)技術學校《基礎護理學》課程標準
- DL∕T 860.10-2018 電力自動化通信網絡和系統(tǒng) 第10部分:一致性測試
- 2024年甘肅省蘭州市中考地理試卷(含答案解析)
- 大數(shù)據(jù)可視化智慧樹知到期末考試答案章節(jié)答案2024年浙江大學
- 山東省濟南市歷城區(qū)2023-2024學年八年級下學期期末數(shù)學試題(無答案)
- 綠色建筑運行標識自評報告參考樣式
- 穴位貼敷法技術操作評分標準
- 污水處理設施環(huán)保管理培訓資料
- 2024年山西省中考英語試題(附答案)
評論
0/150
提交評論