版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第七章數(shù)組目錄/Contents數(shù)組類型、定義、初始化數(shù)組作函數(shù)參數(shù)排序、查找等常用算法問題的提出【例7.1】
從鍵盤輸入10個學(xué)生的某門課成績,然后輸出他們的平均分。按照已學(xué)知識,需定義10個不同名整型變量,需要使用10個scanf()
intscore1,score2,score3,score4,score5,score6,score7,score8,score9,score10;
scanf("%d",&score1);scanf("%d",&score2);......如果有100個學(xué)生呢?數(shù)百個學(xué)生呢?一維數(shù)組的定義和初始化一維數(shù)組的定義:存儲類型數(shù)據(jù)類型
數(shù)組名[常量表達(dá)式];inta[10];■定義1個有10個int型元素的數(shù)組。系統(tǒng)在內(nèi)存分配連續(xù)的10int空間給此數(shù)組?;愋拖聵?biāo)從0開始■直接對a的訪問,就是訪問數(shù)組的首地址?!鰯?shù)組的大小必須是正的常量,不能是變量。■數(shù)組大小最好用宏來定義,以方便未來的變化。#defineM10inta[M];一維數(shù)組的定義和初始化一旦定義,不能改變大小■數(shù)組定義后其元素的值依然是隨機(jī)數(shù)。■數(shù)組定義后一般要立即進(jìn)行初始化。inta[10]={56,23,78,98,89,86,67,100,72,63};inta[10]={0};inta[]={56,23,78,98,89,86,67,100,72,63};■常用for循環(huán)對數(shù)組進(jìn)行初始化。for(i=0;i<10;i++) scanf("%d",&a[i]);或for(i=0;i<10;i++) a[i]=i;一維數(shù)組的定義和初始化一維數(shù)組的定義和初始化數(shù)組的引用數(shù)組名
[下標(biāo)]數(shù)組下標(biāo)都是從0開始使用a[0]、a[1]、a[2]、a[3]等這樣的形式訪問每個元素下標(biāo)既可是常量,也可是整型表達(dá)式,允許快速隨機(jī)訪問,如a[i]可以像使用普通變量一樣使用它們一維數(shù)組的賦值main(){inta[5]={1,2,3,4,5},b[5];
b=a;
}解決方法方法1:逐個元素賦值
b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];方法2:通過循環(huán)賦值
inti;for(i=0;i<5;i++){
b[i]=a[i];}原因:數(shù)組名表示數(shù)組的首地址,其值不可改變!【例7.2】
編寫程序,從鍵盤輸入10個學(xué)生的某門課成績,然后輸出他們的平均分。一維數(shù)組的定義和初始化#include<stdio.h>intmain(){ inta[10]; inti,sum=0; printf("inputthescoresof10students:\n"); for(i=0;i<10;i++) { scanf("%d",&a[i]); sum=sum+a[i]; } printf("average=%.2f\n",sum/10.0); return0;}數(shù)組定義數(shù)組初始化數(shù)組運算一維數(shù)組的定義和初始化數(shù)組下標(biāo)越界是大忌!編譯程序不檢查是否越界下標(biāo)越界,將訪問數(shù)組以外的空間那里的數(shù)據(jù)是未知的,不受我們掌控,可能帶來嚴(yán)重后果一維數(shù)組的定義和初始化【例7.3】
分析下面程序的輸出結(jié)果是否正確。#include<stdio.h>intmain(){ inta=1,c=2,b[5]={0},i; printf("%p,%p,%p\n",b,&c,&a); for(i=0;i<=8;i++) { b[i]=i; printf("%d",b[i]); } printf("\nc=%d,a=%d,i=%d\n",c,a,i); return0;}一維數(shù)組的定義和初始化運行程序或單步執(zhí)行觀察變量變化情況可以看到,變量c和a的值因數(shù)組越界而被悄悄破壞了一維數(shù)組應(yīng)用【例7.4】
編寫程序,輸入數(shù)量不確定的[0,9]范圍內(nèi)的整數(shù),統(tǒng)計每一種數(shù)字出現(xiàn)的次數(shù),輸入-1表示結(jié)束。#include<stdio.h>intmain(){ intx; intcount[10]; inti; scanf("%d",&x); for(i=0;i<10;i++) { count[i]=0; }
while(x!=-1){ if(x>=0&&x<=9) { count[x]++; } scanf("%d",&x);}for(i=0;i<10;i++){printf("%d:%d\n",i,count[i]);}}數(shù)組定義數(shù)組初始化數(shù)組運算數(shù)組遍歷二維數(shù)組的定義和初始化一維數(shù)組用一個下標(biāo)確定各元素在數(shù)組中的順序可用排列成一行的元素組來表示如inta[5];二維數(shù)組用兩個下標(biāo)確定各元素在數(shù)組中的順序可用排列成i行、j列的元素組來表示如intb[2][3];n維數(shù)組用n個下標(biāo)來確定各元素在數(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]二維數(shù)組的定義和初始化■二維數(shù)組可以按元素初始化,例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};■按行初始化,例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};■當(dāng)數(shù)組初始化列表提供全部元素的初值時,第一維長度的聲明可以忽略inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};■在按行初始化時,即使初始化列表提供的初值個數(shù)小于數(shù)組元素的個數(shù),第一維長度的聲明也可以忽略,此時系統(tǒng)自動給后面的元素賦初值0。inta[][4]={{1,2,3},{5},{9,10}};相當(dāng)于inta[3][4]={{1,2,3,0},{5,0,0,0},{9,10,0,0}};■也可以通過for循環(huán)初始化for(i=0;i<3;i++){ for(j=0;j<4;j++) scanf("%d",&a[i][j]);}數(shù)組的數(shù)據(jù)類型和存儲類型根據(jù)數(shù)組的數(shù)據(jù)類型,為每一元素安排相同長度的存儲單元根據(jù)數(shù)組的存儲類型,將其安排在內(nèi)存的動態(tài)存儲區(qū)、靜態(tài)存儲區(qū)或寄存器區(qū)用sizeof(a)來獲得數(shù)組a所占字節(jié)數(shù)short二維數(shù)組的存儲結(jié)構(gòu)二維數(shù)組a的邏輯存儲結(jié)構(gòu)a[0][0]a[0][1]a[0][2]A[0][3]a[1][0]a[1][1]●●●需知道數(shù)組每行列數(shù)才能從起始地址開始正確讀出數(shù)組元素二維數(shù)組的定義和初始化【例7.4】
編寫程序,從鍵盤輸入整數(shù)到一個4行5列的二維數(shù)組中,顯示所有數(shù)組元素,并計算所有數(shù)組元素之和。#include<stdio.h>#defineM4/*用宏常量定義數(shù)組行/列的長度*/#defineN5intmain(){ inta[M][N],i,j,sum=0; for(i=0;i<M;i++) { for(j=0;j<N;j++) { scanf("%d",&a[i][j]);/*從鍵盤初始化二維數(shù)組*/ } }數(shù)組定義數(shù)組初始化二維數(shù)組的定義和初始化for(i=0;i<M;i++){for(j=0;j<N;j++){printf("a[%d][%j]=%d",i,j,a[i][j]); /*顯示二維數(shù)組中的元素*/}printf(“\n”);}for(i=0;i<M;i++){for(j=0;j<N;j++){ sum=sum+a[i][j]; /*二維數(shù)組元素求和*/}}printf(“sum=%d”,sum);return0;}數(shù)組運算數(shù)組遍歷向函數(shù)傳遞一維數(shù)組傳遞整個數(shù)組給另一個函數(shù),可將數(shù)組的首地址作為參數(shù)傳過去用數(shù)組名作函數(shù)參數(shù)只復(fù)制一個地址自然比復(fù)制全部數(shù)據(jù)效率高由于首地址相同,故實參數(shù)組與形參數(shù)組占用同一段內(nèi)存在該函數(shù)內(nèi),不僅可以讀這個數(shù)組的元素,還可以修改它們向函數(shù)傳遞一維數(shù)組向函數(shù)傳遞一維數(shù)組【例7.5】
編寫程序,從鍵盤輸入某班全部學(xué)生某門課的成績,并計算其平均分、最高分、最低分。max=GetMax(score,n);min=GetMin(score,n);printf("Average=%.2f\n",aver);printf("max=%2d\n",max);printf("min=%2d\n",min);return0;}#include<stdio.h>#defineN40floatGetAverage(inta[],intn);intReadScore(inta[]);intGetMax(inta[],intn);intGetMin(inta[],intn);intmain(){intscore[N],n,max,min;floataver;n=ReadScore(score);printf("Totalstudentsare:%d\n",n);aver=GetAverage(score,n);向函數(shù)傳遞一維數(shù)組returnn>0?sum/n:-1;更安全
向函數(shù)傳遞一維數(shù)組/*函數(shù)功能:輸入n個學(xué)生某門課的成績*/intReadScore(inta[]){ inti=-1; /*i初始化為-1,在循環(huán)體內(nèi)增1后可保證數(shù)組下標(biāo)從0開始*/ printf("Inputscores:\n"); do { i++; scanf("%d",&a[i]); }while(a[i]>=0); returni;}標(biāo)記控制的循環(huán)——負(fù)值作為輸入結(jié)束標(biāo)記/*函數(shù)功能:計算n個學(xué)生某門課成績的最低分*/intGetMin(inta[],intn){ intmin,i; min=a[0]; for(i=1;i<n;i++) { if(a[i]<min) min=a[i]; } returnmin;}/*函數(shù)功能:計算n個學(xué)生某門課成績的最高分*/intGetMax(inta[],intn){ intmax,i; max=a[0]; for(i=1;i<n;i++) { if(a[i]>max) max=a[i]; } returnmax;}向函數(shù)傳遞一維數(shù)組冒泡排序985420895420859420854920854290854209a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<5;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}大數(shù)沉淀,小數(shù)起泡如何實現(xiàn)兩數(shù)交換?冒泡排序854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<4;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}冒泡排序542089452089425089420589a[0]a[1]a[2]a[3]a[4]a[5]冒泡排序420589240589204589a[0]a[1]a[2]a[3]a[4]a[5]冒泡排序204589024589a[0]a[1]a[2]a[3]a[4]a[5]冒泡排序inta[10];inti,j,t;printf("input10numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("thesortednumbers:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf(“\n”);選擇排序選擇排序voidSortScore(inta[],intn){ inti,j,k,temp; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) { if(a[j]>a[k]) k=j; } if(k!=i) { temp=a[k]; a[k]=a[i]; a[i]=temp; } }}線性查找/*函數(shù)功能:用線性查找法查找值為x的數(shù)組元素*/intLinearSearch(longnum[],longx,intn){ inti; for(i=0;i<n;i++) { if(num[i]==x) { returni;/*若找到,則返回x在數(shù)組中的下標(biāo)*/ } } return-1;/*若循環(huán)結(jié)束仍未找到,則返回-1*/}事先不必排序折半查找選擇排序intBinarySearch(longnum[],longx,intn){ intlow=0,high=n-1,mid; while(low<high) { mid=(low+high)/2; if(num[mid]<x) { low=mid+1; } elseif(num[mid]>x) { high=mid-1; } else { returnmid; } } return-1;}若未按學(xué)號排序,則如何修改程序?找到時返回下標(biāo)位置找不到時返回-1事先必須先排序向函數(shù)傳遞二維數(shù)組a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]inta[2][3];實際傳送的是數(shù)組第一個元素的地址偏移1*3+2元素a[i][j]在數(shù)組a中的位置是:i*N+j元素地址:首地址+偏移量向函數(shù)傳遞二維數(shù)組#include<stdio.h>#defineM50#defineN5voidReadScore(inta[][N],longnum[],intn);/*讀取學(xué)生的成績和學(xué)號*/voidAverforStud(inta[][N],intsum[],floataver[],intn);/*計算每個學(xué)生的總分和平均分*/voidAverforCourse(inta[][N],intsum[],floataver[],intn);/*計算每門課的總分和平均分*/voidPrint(inta[][N],longnum[],intsum1[],floataver1[],intsum2[],floataver2[],intn);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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44876-2024外科植入物骨科植入物的清潔度通用要求
- 亞運會應(yīng)急預(yù)案
- 肺性腦病的業(yè)務(wù)學(xué)習(xí)
- 移動設(shè)備管理與安全
- 銀行述職報告2024年
- 皮膚科護(hù)士述職報告
- 高中生物人類遺傳病試題
- 機(jī)器人安全培訓(xùn)
- 糖尿病飲食資料
- 社交渠道規(guī)劃
- 2024年江蘇地區(qū)“三新”供電服務(wù)公司招聘320人(第二批)高頻難、易錯點500題模擬試題附帶答案詳解
- 2024秋期國家開放大學(xué)《可編程控制器應(yīng)用實訓(xùn)》一平臺在線形考(形成任務(wù)4)試題及答案
- 維修電工題庫(300道)
- 期中考試卷(試題)-2024-2025學(xué)年蘇教版二年級數(shù)學(xué)上冊
- 2023年江蘇省普通高中信息技術(shù)學(xué)業(yè)水平考試題庫試題7
- 粵教板2019高中信息技術(shù)必修一全冊練習(xí)附答案
- 研究生學(xué)術(shù)表達(dá)能力培養(yǎng)智慧樹知到答案2024年西安建筑科技大學(xué)、清華大學(xué)、同濟(jì)大學(xué)、山東大學(xué)、河北工程大學(xué)、《環(huán)境工程》英文版和《環(huán)境工程》編輯部
- 中國骨關(guān)節(jié)炎診療指南(2024版)解讀
- 職業(yè)院校技能大賽《植物病蟲害防治》賽項賽題及答案
- 第六單元測試卷(單元卷)-2024-2025學(xué)年六年級上冊統(tǒng)編版語文
- 2024 中國主要城市群生態(tài)環(huán)境保護(hù)營商競爭力指數(shù)研究報告
評論
0/150
提交評論